Class: Selekt::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/selekt/query.rb

Defined Under Namespace

Classes: Relation

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sql) ⇒ Query

Returns a new instance of Query.



15
16
17
# File 'lib/selekt/query.rb', line 15

def initialize(sql)
  @ast = Selekt.parser.parse(sql) or raise Selekt::ParseError.new("Could not parse SQL query: #{sql}")
end

Instance Attribute Details

#astObject (readonly)

Returns the value of attribute ast.



13
14
15
# File 'lib/selekt/query.rb', line 13

def ast
  @ast
end

Instance Method Details

#relationsObject



19
20
21
# File 'lib/selekt/query.rb', line 19

def relations
  find_nodes(ast, Selekt::SQL::TableReference).map { |tr| Relation.new(tr.schema_name, tr.table_name) }.uniq
end

#source_namesObject



27
28
29
# File 'lib/selekt/query.rb', line 27

def source_names
  sources.map(&:variable_name).uniq
end

#sourcesObject



23
24
25
# File 'lib/selekt/query.rb', line 23

def sources
  find_nodes(ast, Selekt::SQL::Source)
end

#sqlObject



36
37
38
# File 'lib/selekt/query.rb', line 36

def sql
  ast.input
end

#stub(source_name, source_stub) ⇒ Object



31
32
33
34
# File 'lib/selekt/query.rb', line 31

def stub(source_name, source_stub)
  stub_sql = source_stub.respond_to?(:sql) ? source_stub.sql : source_stub.to_s
  self.class.new(render_stubbed_sql(ast, source_name.to_s, stub_sql))
end