lib/conceptql/query.rb in conceptql-0.1.1 vs lib/conceptql/query.rb in conceptql-0.2.0
- old
+ new
@@ -1,48 +1,50 @@
require 'psych'
+require 'forwardable'
+require_relative 'behaviors/preppable'
require_relative 'tree'
module ConceptQL
class Query
+ extend Forwardable
+ def_delegators :prepped_query, :all, :count, :execute, :order
+
attr :statement
def initialize(db, statement, tree = Tree.new)
@db = db
+ @db.extend_datasets(ConceptQL::Behaviors::Preppable)
@statement = statement
@tree = tree
end
- def queries
+ def query
build_query(db)
end
- def query
- queries.last
- end
-
def sql
- tree.opts[:sql_only] = true
- nodes.map { |node| node.sql(db) }.join(";\n") + ';'
+ (tree.scope.sql(db) << operator.sql(db)).join(";\n\n") + ';'
end
- # To avoid a performance penalty, only execute the last
- # SQL statement in an array of ConceptQL statements so that define's
- # "create_table" SQL isn't executed twice
- def execute
- query.all
+ def types
+ tree.root(self).types
end
- def types
- tree.root(self).last.types
+ def operator
+ @operator ||= tree.root(self)
end
private
attr :yaml, :tree, :db
def build_query(db)
- nodes.map { |n| n.evaluate(db) }
+ operator.evaluate(db).tap { |q| q.prep_proc = prep_proc }
end
- def nodes
- @nodes ||= tree.root(self)
+ def prep_proc
+ @prep_proc = Proc.new { puts 'PREPPING'; tree.scope.prep(db) }
+ end
+
+ def prepped_query
+ query
end
end
end