class OracleSqlParser::Ast::Base

Public Class Methods

[](value) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 131
def self.[](value)
  self.new(value)
end
deep_dup(original) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 74
def self.deep_dup(original)
  if original.is_a? OracleSqlParser::Ast::Base
    original.deep_dup
  elsif original.is_a? ::Hash
    ::Hash[ original.map {|k, v| [k, deep_dup(v)]} ]
  elsif original.is_a? ::Array
    original.map {|v| deep_dup(v)}
  elsif original.duplicable?
    original.dup
  else
    original
  end
end
find_different_value(left, right, &block) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 135
def self.find_different_value(left, right, &block)
  if left.class != right.class
    block.call(left, right) if block_given?
    return true
  end

  result = false
  case left
  when Base
    result ||= self.find_different_value(
                  left.instance_variable_get(:@ast),
                  right.instance_variable_get(:@ast),
                  &block)
  when Hash
    (left.keys + right.keys).uniq.each do |key|
      result ||= self.find_different_value(left[key], right[key], &block)
    end
  when OracleSqlParser::Ast::Array
    if left.size == right.size
      left.each_with_index do |value, index|
        result ||= self.find_different_value(value, right[index], &block)
      end
    else
      block.call(left, right) if block_given?
      result = true
    end
  else
    if left != right
      block.call(left, right) if block_given?
      result = true
    end
  end
  result
end
new(arg) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 59
def initialize(arg)
  if arg.instance_of?(Array) || arg.instance_of?(Hash)
    raise "cant assign #{arg.class} Base.new()"
  end
  @ast = arg
end

Public Instance Methods

==(value) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 170
def ==(value)
  self.class.find_different_value(self, value) != true
end
ast() click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 119
def ast
  raise "do not call ast method"
end
deep_dup() click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 88
def deep_dup
  copy = self.class.new
  original_ast = self.instance_variable_get(:@ast)
  copy_ast = self.class.deep_dup(original_ast)
  copy.instance_variable_set(:@ast, copy_ast)
  copy
end
initialize_copy(original) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 66
def initialize_copy(original)
  if @ast.nil?
    self.class.new
  else
    self.class.new(original.instance_variable_get(:@ast).dup)
  end
end
inspect() click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 114
def inspect
  "#<#{self.class.name} #{@ast.inspect}>"
end
Also aliased as: to_s
map_ast(&block) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 96
def map_ast(&block)
  duplicated = self.deep_dup
  duplicated.map_ast!(&block)
  duplicated
end
map_ast!(&block) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 102
def map_ast!(&block)
  if @ast.is_a? OracleSqlParser::Ast::Base
    @ast.map_ast!(&block)
  end
  @ast = block.call(@ast)
end
remove_nil_values!() click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 109
def remove_nil_values!
  @ast.remove_nil_values! if @ast.respond_to? :remove_nil_values!
  self
end
to_s()
Alias for: inspect
to_sql(options ={}) click to toggle source
# File lib/oracle-sql-parser/ast/base.rb, line 123
def to_sql(options ={})
  if @ast.respond_to? :to_sql
    @ast.to_sql(options)
  else
    @ast.to_s
  end
end