aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sql_algebra.rb2
-rw-r--r--lib/sql_algebra/relations/attribute.rb2
-rw-r--r--lib/sql_algebra/relations/join_relation.rb41
3 files changed, 15 insertions, 30 deletions
diff --git a/lib/sql_algebra.rb b/lib/sql_algebra.rb
index e8955ae18b..8389250755 100644
--- a/lib/sql_algebra.rb
+++ b/lib/sql_algebra.rb
@@ -29,9 +29,9 @@ require 'sql_algebra/predicates/match_predicate'
require 'sql_algebra/extensions/range'
+require 'sql_algebra/sql_builder/sql_builder_adapter'
require 'sql_algebra/sql_builder/sql_builder'
require 'sql_algebra/sql_builder/select_builder'
-require 'sql_algebra/sql_builder/where_builder'
require 'sql_algebra/sql_builder/joins_builder'
require 'sql_algebra/sql_builder/join_builder'
require 'sql_algebra/sql_builder/inner_join_builder'
diff --git a/lib/sql_algebra/relations/attribute.rb b/lib/sql_algebra/relations/attribute.rb
index 7a4a0d72c5..af448286f1 100644
--- a/lib/sql_algebra/relations/attribute.rb
+++ b/lib/sql_algebra/relations/attribute.rb
@@ -33,7 +33,7 @@ class Attribute
MatchPredicate.new(self, regexp)
end
- def to_sql(ignore_builder_because_i_can_only_exist_atomically)
+ def to_sql(ignore_builder_because_i_can_only_exist_atomically = nil)
ColumnBuilder.new(relation.table, attribute_name)
end
end \ No newline at end of file
diff --git a/lib/sql_algebra/relations/join_relation.rb b/lib/sql_algebra/relations/join_relation.rb
index 4052798d51..b96cd175de 100644
--- a/lib/sql_algebra/relations/join_relation.rb
+++ b/lib/sql_algebra/relations/join_relation.rb
@@ -12,38 +12,23 @@ class JoinRelation < Relation
end
def to_sql(builder = SelectBuilder.new)
- enclosed_join_name, enclosed_predicates = join_name, predicates
- relation2.to_sql(Adapter.new(relation1.to_sql(builder)) do
+ relation2.to_sql(translate_from_to_inner_join_on_predicates(relation1.to_sql(builder)))
+ end
+
+ private
+ # translate 'from' to 'inner join on <predicates>'
+ def translate_from_to_inner_join_on_predicates(builder)
+ schmoin_name, schmredicates = join_name, predicates
+ SqlBuilderAdapter.new(builder) do |builder|
define_method :from do |table|
- send(enclosed_join_name, table) do
- enclosed_predicates.each do |predicate|
- predicate.to_sql(self)
+ builder.call do
+ send(schmoin_name, table) do
+ schmredicates.each do |predicate|
+ predicate.to_sql(self)
+ end
end
end
end
- end)
- end
-
- class Adapter
- instance_methods.each { |m| undef_method m unless m =~ /^__|^instance_eval/ }
-
- def initialize(adaptee, &block)
- @adaptee = adaptee
- (class << self; self end).class_eval do
- (adaptee.methods - instance_methods).each { |m| delegate m, :to => :@adaptee }
- end
- (class << self; self end).class_eval(&block)
- end
-
- def call(&block)
- @caller = eval("self", block.binding)
- returning self do |adapter|
- instance_eval(&block)
- end
- end
-
- def method_missing(method, *args, &block)
- @caller.send(method, *args, &block)
end
end
end \ No newline at end of file