Class: Rgviz::ColumnVisitor

Inherits:
Visitor
  • Object
show all
Defined in:
lib/rgviz_rails/executor.rb

Direct Known Subclasses

OrderVisitor, WhereVisitor

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(executor) ⇒ ColumnVisitor

Returns a new instance of ColumnVisitor.



425
426
427
428
# File 'lib/rgviz_rails/executor.rb', line 425

def initialize(executor)
  @string = ''
  @executor = executor
end

Instance Attribute Details

#stringObject (readonly)

Returns the value of attribute string.



423
424
425
# File 'lib/rgviz_rails/executor.rb', line 423

def string
  @string
end

Instance Method Details

#<<(string) ⇒ Object



430
431
432
# File 'lib/rgviz_rails/executor.rb', line 430

def <<(string)
  @string += string
end

#escaped_string(str) ⇒ Object



519
520
521
522
# File 'lib/rgviz_rails/executor.rb', line 519

def escaped_string(str)
  str = str.gsub("'", "''")
  "'#{str}'"
end

#visit_aggregate_column(node) ⇒ Object



483
484
485
486
487
488
489
# File 'lib/rgviz_rails/executor.rb', line 483

def visit_aggregate_column(node)
  @string += node.function.to_s
  @string += '('
  node.argument.accept self
  @string += ')'
  false
end

#visit_boolean_column(node) ⇒ Object



452
453
454
# File 'lib/rgviz_rails/executor.rb', line 452

def visit_boolean_column(node)
  @string += node.value ? '1' : '0'
end

#visit_date_column(node) ⇒ Object



456
457
458
# File 'lib/rgviz_rails/executor.rb', line 456

def visit_date_column(node)
  @string += "date #{escaped_string(node.value.to_s)}"
end

#visit_date_time_column(node) ⇒ Object



460
461
462
# File 'lib/rgviz_rails/executor.rb', line 460

def visit_date_time_column(node)
  @string += "timestamp #{escaped_string(node.value.strftime("%Y-%m-%d %H:%M:%S"))}"
end

#visit_format(node) ⇒ Object



511
512
513
# File 'lib/rgviz_rails/executor.rb', line 511

def visit_format(node)
  false
end

#visit_group_by(node) ⇒ Object



491
492
493
494
495
496
497
# File 'lib/rgviz_rails/executor.rb', line 491

def visit_group_by(node)
  node.columns.each_with_index do |c, i|
    @string += ',' if i > 0
    c.accept self
  end
  false
end

#visit_id_column(node) ⇒ Object



434
435
436
437
438
439
440
441
442
# File 'lib/rgviz_rails/executor.rb', line 434

def visit_id_column(node)
  klass, rails_col, joins = Rgviz::find_rails_col @executor.model_class, node.name
  raise "Unknown column '#{node.name}'" unless rails_col
  @string += ActiveRecord::Base.connection.quote_column_name(klass.table_name)
  @string += '.'
  @string += ActiveRecord::Base.connection.quote_column_name(rails_col.name)

  @executor.add_joins joins
end

#visit_label(node) ⇒ Object



507
508
509
# File 'lib/rgviz_rails/executor.rb', line 507

def visit_label(node)
  false
end

#visit_number_column(node) ⇒ Object



444
445
446
# File 'lib/rgviz_rails/executor.rb', line 444

def visit_number_column(node)
  @string += node.value.to_s
end

#visit_option(node) ⇒ Object



515
516
517
# File 'lib/rgviz_rails/executor.rb', line 515

def visit_option(node)
  false
end

#visit_pivot(node) ⇒ Object



499
500
501
502
503
504
505
# File 'lib/rgviz_rails/executor.rb', line 499

def visit_pivot(node)
  node.columns.each_with_index do |c, i|
    @string += ',' if i > 0
    c.accept self
  end
  false
end

#visit_scalar_function_column(node) ⇒ Object



468
469
470
471
472
473
474
475
476
477
478
479
480
481
# File 'lib/rgviz_rails/executor.rb', line 468

def visit_scalar_function_column(node)
  case node.function
  when ScalarFunctionColumn::Sum, ScalarFunctionColumn::Difference,
       ScalarFunctionColumn::Product, ScalarFunctionColumn::Quotient
    @string += "("
    node.arguments[0].accept self
    @string += node.function.to_s
    node.arguments[1].accept self
    @string += ")"
  else
    @executor.adapter.accept_scalar_function_column(node, self)
  end
  false
end

#visit_string_column(node) ⇒ Object



448
449
450
# File 'lib/rgviz_rails/executor.rb', line 448

def visit_string_column(node)
  @string += escaped_string(node.value)
end

#visit_time_of_day_column(node) ⇒ Object



464
465
466
# File 'lib/rgviz_rails/executor.rb', line 464

def visit_time_of_day_column(node)
  @string += "time #{escaped_string(node.value.strftime("%H:%M:%S"))}"
end