diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/active_relation.rb | 56 | ||||
-rw-r--r-- | lib/active_relation/extensions/array.rb (renamed from lib/sql_algebra/extensions/array.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/extensions/base.rb (renamed from lib/sql_algebra/extensions/base.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/extensions/hash.rb (renamed from lib/sql_algebra/extensions/hash.rb) | 6 | ||||
-rw-r--r-- | lib/active_relation/extensions/object.rb (renamed from lib/sql_algebra/extensions/object.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/extensions/range.rb (renamed from lib/sql_algebra/extensions/range.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/binary_predicate.rb (renamed from lib/sql_algebra/predicates/binary_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/equality_predicate.rb (renamed from lib/sql_algebra/predicates/equality_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/greater_than_or_equal_to_predicate.rb (renamed from lib/sql_algebra/predicates/greater_than_or_equal_to_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/greater_than_predicate.rb (renamed from lib/sql_algebra/predicates/greater_than_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/less_than_or_equal_to_predicate.rb (renamed from lib/sql_algebra/predicates/less_than_or_equal_to_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/less_than_predicate.rb (renamed from lib/sql_algebra/predicates/less_than_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/match_predicate.rb (renamed from lib/sql_algebra/predicates/match_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/predicate.rb (renamed from lib/sql_algebra/predicates/predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/range_inclusion_predicate.rb (renamed from lib/sql_algebra/predicates/range_inclusion_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/predicates/relation_inclusion_predicate.rb (renamed from lib/sql_algebra/predicates/relation_inclusion_predicate.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/attribute.rb (renamed from lib/sql_algebra/relations/attribute.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/compound_relation.rb | 3 | ||||
-rw-r--r-- | lib/active_relation/relations/deletion_relation.rb | 22 | ||||
-rw-r--r-- | lib/active_relation/relations/inner_join_operation.rb (renamed from lib/sql_algebra/relations/inner_join_operation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/inner_join_relation.rb (renamed from lib/sql_algebra/relations/inner_join_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/insertion_relation.rb | 29 | ||||
-rw-r--r-- | lib/active_relation/relations/join.rb (renamed from lib/sql_algebra/relations/join.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/join_operation.rb (renamed from lib/sql_algebra/relations/join_operation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/join_relation.rb (renamed from lib/sql_algebra/relations/join_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/left_outer_join_operation.rb (renamed from lib/sql_algebra/relations/left_outer_join_operation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/left_outer_join_relation.rb (renamed from lib/sql_algebra/relations/left_outer_join_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/order_relation.rb (renamed from lib/sql_algebra/relations/order_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/projection_relation.rb (renamed from lib/sql_algebra/relations/projection_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/range_relation.rb (renamed from lib/sql_algebra/relations/range_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/relation.rb (renamed from lib/sql_algebra/relations/relation.rb) | 10 | ||||
-rw-r--r-- | lib/active_relation/relations/rename_relation.rb (renamed from lib/sql_algebra/relations/rename_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/relations/selection_relation.rb (renamed from lib/sql_algebra/relations/selection_relation.rb) | 2 | ||||
-rw-r--r-- | lib/active_relation/relations/table_relation.rb (renamed from lib/sql_algebra/relations/table_relation.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/columns_builder.rb | 16 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/conditions_builder.rb (renamed from lib/sql_algebra/sql_builder/conditions_builder.rb) | 4 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/delete_builder.rb | 32 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/equals_condition_builder.rb (renamed from lib/sql_algebra/sql_builder/equals_condition_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/inner_join_builder.rb (renamed from lib/sql_algebra/sql_builder/inner_join_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/insert_builder.rb | 41 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/join_builder.rb (renamed from lib/sql_algebra/sql_builder/join_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/joins_builder.rb (renamed from lib/sql_algebra/sql_builder/joins_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/left_outer_join_builder.rb (renamed from lib/sql_algebra/sql_builder/left_outer_join_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/order_builder.rb (renamed from lib/sql_algebra/sql_builder/order_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/select_builder.rb (renamed from lib/sql_algebra/sql_builder/select_builder.rb) | 3 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/selects_builder.rb | 9 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/sql_builder.rb (renamed from lib/sql_algebra/sql_builder/sql_builder.rb) | 0 | ||||
-rw-r--r-- | lib/active_relation/sql_builder/values_builder.rb | 16 | ||||
-rw-r--r-- | lib/sql_algebra.rb | 49 | ||||
-rw-r--r-- | lib/sql_algebra/relations/compound_relation.rb | 3 | ||||
-rw-r--r-- | lib/sql_algebra/sql_builder/selects_builder.rb | 20 |
51 files changed, 245 insertions, 76 deletions
diff --git a/lib/active_relation.rb b/lib/active_relation.rb new file mode 100644 index 0000000000..0d7af7bfb8 --- /dev/null +++ b/lib/active_relation.rb @@ -0,0 +1,56 @@ +$LOAD_PATH.unshift(File.dirname(__FILE__)) + +require 'rubygems' +require 'activesupport' +require 'activerecord' + +require 'active_relation/relations/relation' +require 'active_relation/relations/compound_relation' +require 'active_relation/relations/table_relation' +require 'active_relation/relations/join_operation' +require 'active_relation/relations/inner_join_operation' +require 'active_relation/relations/left_outer_join_operation' +require 'active_relation/relations/join_relation' +require 'active_relation/relations/inner_join_relation' +require 'active_relation/relations/left_outer_join_relation' +require 'active_relation/relations/attribute' +require 'active_relation/relations/projection_relation' +require 'active_relation/relations/selection_relation' +require 'active_relation/relations/order_relation' +require 'active_relation/relations/range_relation' +require 'active_relation/relations/rename_relation' +require 'active_relation/relations/join' +require 'active_relation/relations/deletion_relation' +require 'active_relation/relations/insertion_relation' + +require 'active_relation/predicates/predicate' +require 'active_relation/predicates/binary_predicate' +require 'active_relation/predicates/equality_predicate' +require 'active_relation/predicates/less_than_predicate' +require 'active_relation/predicates/less_than_or_equal_to_predicate' +require 'active_relation/predicates/greater_than_predicate' +require 'active_relation/predicates/greater_than_or_equal_to_predicate' +require 'active_relation/predicates/range_inclusion_predicate' +require 'active_relation/predicates/relation_inclusion_predicate' +require 'active_relation/predicates/match_predicate' + +require 'active_relation/extensions/range' +require 'active_relation/extensions/object' +require 'active_relation/extensions/array' +require 'active_relation/extensions/base' +require 'active_relation/extensions/hash' + +require 'active_relation/sql_builder/sql_builder' +require 'active_relation/sql_builder/select_builder' +require 'active_relation/sql_builder/delete_builder' +require 'active_relation/sql_builder/insert_builder' +require 'active_relation/sql_builder/joins_builder' +require 'active_relation/sql_builder/join_builder' +require 'active_relation/sql_builder/inner_join_builder' +require 'active_relation/sql_builder/left_outer_join_builder' +require 'active_relation/sql_builder/equals_condition_builder' +require 'active_relation/sql_builder/conditions_builder' +require 'active_relation/sql_builder/order_builder' +require 'active_relation/sql_builder/columns_builder' +require 'active_relation/sql_builder/selects_builder' +require 'active_relation/sql_builder/values_builder'
\ No newline at end of file diff --git a/lib/sql_algebra/extensions/array.rb b/lib/active_relation/extensions/array.rb index 5b6d6d6abd..5b6d6d6abd 100644 --- a/lib/sql_algebra/extensions/array.rb +++ b/lib/active_relation/extensions/array.rb diff --git a/lib/sql_algebra/extensions/base.rb b/lib/active_relation/extensions/base.rb index 0dbdef703f..0dbdef703f 100644 --- a/lib/sql_algebra/extensions/base.rb +++ b/lib/active_relation/extensions/base.rb diff --git a/lib/sql_algebra/extensions/hash.rb b/lib/active_relation/extensions/hash.rb index c83ee0d04f..f643ac17ab 100644 --- a/lib/sql_algebra/extensions/hash.rb +++ b/lib/active_relation/extensions/hash.rb @@ -4,4 +4,10 @@ class Hash aliased.merge(yield(key) => value) end end + + def to_sql(builder = ValuesBuilder.new) + builder.call do + row *values + end + end end
\ No newline at end of file diff --git a/lib/sql_algebra/extensions/object.rb b/lib/active_relation/extensions/object.rb index c241581f86..c241581f86 100644 --- a/lib/sql_algebra/extensions/object.rb +++ b/lib/active_relation/extensions/object.rb diff --git a/lib/sql_algebra/extensions/range.rb b/lib/active_relation/extensions/range.rb index e69de29bb2..e69de29bb2 100644 --- a/lib/sql_algebra/extensions/range.rb +++ b/lib/active_relation/extensions/range.rb diff --git a/lib/sql_algebra/predicates/binary_predicate.rb b/lib/active_relation/predicates/binary_predicate.rb index f5c420c833..f5c420c833 100644 --- a/lib/sql_algebra/predicates/binary_predicate.rb +++ b/lib/active_relation/predicates/binary_predicate.rb diff --git a/lib/sql_algebra/predicates/equality_predicate.rb b/lib/active_relation/predicates/equality_predicate.rb index 7040c45f67..7040c45f67 100644 --- a/lib/sql_algebra/predicates/equality_predicate.rb +++ b/lib/active_relation/predicates/equality_predicate.rb diff --git a/lib/sql_algebra/predicates/greater_than_or_equal_to_predicate.rb b/lib/active_relation/predicates/greater_than_or_equal_to_predicate.rb index 49127c312c..49127c312c 100644 --- a/lib/sql_algebra/predicates/greater_than_or_equal_to_predicate.rb +++ b/lib/active_relation/predicates/greater_than_or_equal_to_predicate.rb diff --git a/lib/sql_algebra/predicates/greater_than_predicate.rb b/lib/active_relation/predicates/greater_than_predicate.rb index 03aecaed62..03aecaed62 100644 --- a/lib/sql_algebra/predicates/greater_than_predicate.rb +++ b/lib/active_relation/predicates/greater_than_predicate.rb diff --git a/lib/sql_algebra/predicates/less_than_or_equal_to_predicate.rb b/lib/active_relation/predicates/less_than_or_equal_to_predicate.rb index fee6ea7f35..fee6ea7f35 100644 --- a/lib/sql_algebra/predicates/less_than_or_equal_to_predicate.rb +++ b/lib/active_relation/predicates/less_than_or_equal_to_predicate.rb diff --git a/lib/sql_algebra/predicates/less_than_predicate.rb b/lib/active_relation/predicates/less_than_predicate.rb index 03cbdcf000..03cbdcf000 100644 --- a/lib/sql_algebra/predicates/less_than_predicate.rb +++ b/lib/active_relation/predicates/less_than_predicate.rb diff --git a/lib/sql_algebra/predicates/match_predicate.rb b/lib/active_relation/predicates/match_predicate.rb index 90a13090d4..90a13090d4 100644 --- a/lib/sql_algebra/predicates/match_predicate.rb +++ b/lib/active_relation/predicates/match_predicate.rb diff --git a/lib/sql_algebra/predicates/predicate.rb b/lib/active_relation/predicates/predicate.rb index 4c395a3fdc..4c395a3fdc 100644 --- a/lib/sql_algebra/predicates/predicate.rb +++ b/lib/active_relation/predicates/predicate.rb diff --git a/lib/sql_algebra/predicates/range_inclusion_predicate.rb b/lib/active_relation/predicates/range_inclusion_predicate.rb index e69de29bb2..e69de29bb2 100644 --- a/lib/sql_algebra/predicates/range_inclusion_predicate.rb +++ b/lib/active_relation/predicates/range_inclusion_predicate.rb diff --git a/lib/sql_algebra/predicates/relation_inclusion_predicate.rb b/lib/active_relation/predicates/relation_inclusion_predicate.rb index 5881a85d99..5881a85d99 100644 --- a/lib/sql_algebra/predicates/relation_inclusion_predicate.rb +++ b/lib/active_relation/predicates/relation_inclusion_predicate.rb diff --git a/lib/sql_algebra/relations/attribute.rb b/lib/active_relation/relations/attribute.rb index 7583553b80..7583553b80 100644 --- a/lib/sql_algebra/relations/attribute.rb +++ b/lib/active_relation/relations/attribute.rb diff --git a/lib/active_relation/relations/compound_relation.rb b/lib/active_relation/relations/compound_relation.rb new file mode 100644 index 0000000000..fe92905d92 --- /dev/null +++ b/lib/active_relation/relations/compound_relation.rb @@ -0,0 +1,3 @@ +class CompoundRelation < Relation + delegate :attributes, :attribute, :joins, :selects, :orders, :table, :inserts, :to => :relation +end
\ No newline at end of file diff --git a/lib/active_relation/relations/deletion_relation.rb b/lib/active_relation/relations/deletion_relation.rb new file mode 100644 index 0000000000..e060efd5f9 --- /dev/null +++ b/lib/active_relation/relations/deletion_relation.rb @@ -0,0 +1,22 @@ +class DeletionRelation < CompoundRelation + attr_reader :relation + + def ==(other) + relation == other.relation + end + + def initialize(relation) + @relation = relation + end + + def to_sql(builder = DeleteBuilder.new) + builder.call do + delete + from table + where do + selects.each { |s| s.to_sql(self) } + end + end + end + +end
\ No newline at end of file diff --git a/lib/sql_algebra/relations/inner_join_operation.rb b/lib/active_relation/relations/inner_join_operation.rb index 6b5c5ce8d0..6b5c5ce8d0 100644 --- a/lib/sql_algebra/relations/inner_join_operation.rb +++ b/lib/active_relation/relations/inner_join_operation.rb diff --git a/lib/sql_algebra/relations/inner_join_relation.rb b/lib/active_relation/relations/inner_join_relation.rb index 5e58f241f8..5e58f241f8 100644 --- a/lib/sql_algebra/relations/inner_join_relation.rb +++ b/lib/active_relation/relations/inner_join_relation.rb diff --git a/lib/active_relation/relations/insertion_relation.rb b/lib/active_relation/relations/insertion_relation.rb new file mode 100644 index 0000000000..84752d13f9 --- /dev/null +++ b/lib/active_relation/relations/insertion_relation.rb @@ -0,0 +1,29 @@ +class InsertionRelation < CompoundRelation + attr_reader :relation, :tuple + + def initialize(relation, tuple) + @relation, @tuple = relation, tuple + end + + def to_sql(builder = InsertBuilder.new) + builder.call do + insert + into table + columns do + tuple.keys.each { |attribute| attribute.to_sql(self) } + end + values do + inserts.each { |insert| insert.to_sql(self) } + end + end + end + + def ==(other) + relation == other.relation and tuple == other.tuple + end + + protected + def inserts + relation.inserts + [tuple] + end +end
\ No newline at end of file diff --git a/lib/sql_algebra/relations/join.rb b/lib/active_relation/relations/join.rb index 9a6196deac..9a6196deac 100644 --- a/lib/sql_algebra/relations/join.rb +++ b/lib/active_relation/relations/join.rb diff --git a/lib/sql_algebra/relations/join_operation.rb b/lib/active_relation/relations/join_operation.rb index 2b4548a041..2b4548a041 100644 --- a/lib/sql_algebra/relations/join_operation.rb +++ b/lib/active_relation/relations/join_operation.rb diff --git a/lib/sql_algebra/relations/join_relation.rb b/lib/active_relation/relations/join_relation.rb index 79c8a915b8..79c8a915b8 100644 --- a/lib/sql_algebra/relations/join_relation.rb +++ b/lib/active_relation/relations/join_relation.rb diff --git a/lib/sql_algebra/relations/left_outer_join_operation.rb b/lib/active_relation/relations/left_outer_join_operation.rb index fbb2a4e2ed..fbb2a4e2ed 100644 --- a/lib/sql_algebra/relations/left_outer_join_operation.rb +++ b/lib/active_relation/relations/left_outer_join_operation.rb diff --git a/lib/sql_algebra/relations/left_outer_join_relation.rb b/lib/active_relation/relations/left_outer_join_relation.rb index 6d13d8da07..6d13d8da07 100644 --- a/lib/sql_algebra/relations/left_outer_join_relation.rb +++ b/lib/active_relation/relations/left_outer_join_relation.rb diff --git a/lib/sql_algebra/relations/order_relation.rb b/lib/active_relation/relations/order_relation.rb index b39dc45c3f..b39dc45c3f 100644 --- a/lib/sql_algebra/relations/order_relation.rb +++ b/lib/active_relation/relations/order_relation.rb diff --git a/lib/sql_algebra/relations/projection_relation.rb b/lib/active_relation/relations/projection_relation.rb index 1a0e8dbfe4..1a0e8dbfe4 100644 --- a/lib/sql_algebra/relations/projection_relation.rb +++ b/lib/active_relation/relations/projection_relation.rb diff --git a/lib/sql_algebra/relations/range_relation.rb b/lib/active_relation/relations/range_relation.rb index 9225d5615b..9225d5615b 100644 --- a/lib/sql_algebra/relations/range_relation.rb +++ b/lib/active_relation/relations/range_relation.rb diff --git a/lib/sql_algebra/relations/relation.rb b/lib/active_relation/relations/relation.rb index 8efe0c7d9f..be6ee760a5 100644 --- a/lib/sql_algebra/relations/relation.rb +++ b/lib/active_relation/relations/relation.rb @@ -49,6 +49,14 @@ class Relation def rename(attribute, aliaz) RenameRelation.new(self, attribute => aliaz) end + + def insert(tuple) + InsertionRelation.new(self, tuple) + end + + def delete + DeletionRelation.new(self) + end end include Operations @@ -79,5 +87,5 @@ class Relation def joins; [] end def selects; [] end def orders; [] end - + def inserts; [] end end
\ No newline at end of file diff --git a/lib/sql_algebra/relations/rename_relation.rb b/lib/active_relation/relations/rename_relation.rb index 8acf5091b2..8acf5091b2 100644 --- a/lib/sql_algebra/relations/rename_relation.rb +++ b/lib/active_relation/relations/rename_relation.rb diff --git a/lib/sql_algebra/relations/selection_relation.rb b/lib/active_relation/relations/selection_relation.rb index dcf5f4745f..77864efb28 100644 --- a/lib/sql_algebra/relations/selection_relation.rb +++ b/lib/active_relation/relations/selection_relation.rb @@ -16,6 +16,6 @@ class SelectionRelation < CompoundRelation protected def selects - [predicate] + relation.send(:selects) + [predicate] end end
\ No newline at end of file diff --git a/lib/sql_algebra/relations/table_relation.rb b/lib/active_relation/relations/table_relation.rb index 5a47ae7a34..5a47ae7a34 100644 --- a/lib/sql_algebra/relations/table_relation.rb +++ b/lib/active_relation/relations/table_relation.rb diff --git a/lib/active_relation/sql_builder/columns_builder.rb b/lib/active_relation/sql_builder/columns_builder.rb new file mode 100644 index 0000000000..a8a5d0e4ca --- /dev/null +++ b/lib/active_relation/sql_builder/columns_builder.rb @@ -0,0 +1,16 @@ +class ColumnsBuilder < SqlBuilder + def initialize(&block) + @columns = [] + super(&block) + end + + def to_s + @columns.join(', ') + end + + def column(table, column, aliaz = nil) + @columns << "#{quote_table_name(table)}.#{quote_column_name(column)}" + end + + delegate :blank?, :to => :@columns +end
\ No newline at end of file diff --git a/lib/sql_algebra/sql_builder/conditions_builder.rb b/lib/active_relation/sql_builder/conditions_builder.rb index 5d42a36cec..60430f65d8 100644 --- a/lib/sql_algebra/sql_builder/conditions_builder.rb +++ b/lib/active_relation/sql_builder/conditions_builder.rb @@ -7,6 +7,10 @@ class ConditionsBuilder < SqlBuilder def equals(&block) @conditions << EqualsConditionBuilder.new(&block) end + + def value(value) + @conditions << value + end def to_s @conditions.join(' AND ') diff --git a/lib/active_relation/sql_builder/delete_builder.rb b/lib/active_relation/sql_builder/delete_builder.rb new file mode 100644 index 0000000000..2e8be94dfe --- /dev/null +++ b/lib/active_relation/sql_builder/delete_builder.rb @@ -0,0 +1,32 @@ +class DeleteBuilder < SqlBuilder + def delete + end + + def from(table) + @table = table + end + + def where(&block) + @conditions = ConditionsBuilder.new(&block) + end + + def to_s + [delete_clause, + from_clause, + where_clause + ].compact.join("\n") + end + + private + def delete_clause + "DELETE" + end + + def from_clause + "FROM #{quote_table_name(@table)}" + end + + def where_clause + "WHERE #{@conditions}" unless @conditions.blank? + end +end
\ No newline at end of file diff --git a/lib/sql_algebra/sql_builder/equals_condition_builder.rb b/lib/active_relation/sql_builder/equals_condition_builder.rb index cfa919c34c..cfa919c34c 100644 --- a/lib/sql_algebra/sql_builder/equals_condition_builder.rb +++ b/lib/active_relation/sql_builder/equals_condition_builder.rb diff --git a/lib/sql_algebra/sql_builder/inner_join_builder.rb b/lib/active_relation/sql_builder/inner_join_builder.rb index 6aec703325..6aec703325 100644 --- a/lib/sql_algebra/sql_builder/inner_join_builder.rb +++ b/lib/active_relation/sql_builder/inner_join_builder.rb diff --git a/lib/active_relation/sql_builder/insert_builder.rb b/lib/active_relation/sql_builder/insert_builder.rb new file mode 100644 index 0000000000..09deefad10 --- /dev/null +++ b/lib/active_relation/sql_builder/insert_builder.rb @@ -0,0 +1,41 @@ +class InsertBuilder < SqlBuilder + def insert + end + + def into(table) + @table = table + end + + def columns(&block) + @columns = ColumnsBuilder.new(&block) + end + + def values(&block) + @values = ValuesBuilder.new(&block) + end + + def to_s + [insert_clause, + into_clause, + columns_clause, + values_clause + ].compact.join("\n") + end + + private + def insert_clause + "INSERT" + end + + def into_clause + "INTO #{quote_table_name(@table)}" + end + + def values_clause + "VALUES #{@values}" unless @values.blank? + end + + def columns_clause + "(#{@columns})" unless @columns.blank? + end +end
\ No newline at end of file diff --git a/lib/sql_algebra/sql_builder/join_builder.rb b/lib/active_relation/sql_builder/join_builder.rb index ef63d1fcb1..ef63d1fcb1 100644 --- a/lib/sql_algebra/sql_builder/join_builder.rb +++ b/lib/active_relation/sql_builder/join_builder.rb diff --git a/lib/sql_algebra/sql_builder/joins_builder.rb b/lib/active_relation/sql_builder/joins_builder.rb index 36a92e9922..36a92e9922 100644 --- a/lib/sql_algebra/sql_builder/joins_builder.rb +++ b/lib/active_relation/sql_builder/joins_builder.rb diff --git a/lib/sql_algebra/sql_builder/left_outer_join_builder.rb b/lib/active_relation/sql_builder/left_outer_join_builder.rb index dad3f85810..dad3f85810 100644 --- a/lib/sql_algebra/sql_builder/left_outer_join_builder.rb +++ b/lib/active_relation/sql_builder/left_outer_join_builder.rb diff --git a/lib/sql_algebra/sql_builder/order_builder.rb b/lib/active_relation/sql_builder/order_builder.rb index 66a8cfdba9..66a8cfdba9 100644 --- a/lib/sql_algebra/sql_builder/order_builder.rb +++ b/lib/active_relation/sql_builder/order_builder.rb diff --git a/lib/sql_algebra/sql_builder/select_builder.rb b/lib/active_relation/sql_builder/select_builder.rb index 9a85ad7eec..57116cb64b 100644 --- a/lib/sql_algebra/sql_builder/select_builder.rb +++ b/lib/active_relation/sql_builder/select_builder.rb @@ -9,8 +9,7 @@ class SelectBuilder < SqlBuilder end def where(&block) - @conditions ||= ConditionsBuilder.new - @conditions.call(&block) + @conditions = ConditionsBuilder.new(&block) end def order_by(&block) diff --git a/lib/active_relation/sql_builder/selects_builder.rb b/lib/active_relation/sql_builder/selects_builder.rb new file mode 100644 index 0000000000..6ad06d0ae4 --- /dev/null +++ b/lib/active_relation/sql_builder/selects_builder.rb @@ -0,0 +1,9 @@ +class SelectsBuilder < ColumnsBuilder + def all + @columns << :* + end + + def column(table, column, aliaz = nil) + @columns << "#{quote_table_name(table)}.#{quote_column_name(column)}" + (aliaz ? " AS #{quote(aliaz)}" : '') + end +end
\ No newline at end of file diff --git a/lib/sql_algebra/sql_builder/sql_builder.rb b/lib/active_relation/sql_builder/sql_builder.rb index c984444e41..c984444e41 100644 --- a/lib/sql_algebra/sql_builder/sql_builder.rb +++ b/lib/active_relation/sql_builder/sql_builder.rb diff --git a/lib/active_relation/sql_builder/values_builder.rb b/lib/active_relation/sql_builder/values_builder.rb new file mode 100644 index 0000000000..f22b1e507e --- /dev/null +++ b/lib/active_relation/sql_builder/values_builder.rb @@ -0,0 +1,16 @@ +class ValuesBuilder < SqlBuilder + def initialize(&block) + @values = [] + super(&block) + end + + def row(*values) + @values << "(#{values.collect { |v| quote(v) }.join(', ')})" + end + + def to_s + @values.join(', ') + end + + delegate :blank?, :to => :@values +end
\ No newline at end of file diff --git a/lib/sql_algebra.rb b/lib/sql_algebra.rb deleted file mode 100644 index fbd053541c..0000000000 --- a/lib/sql_algebra.rb +++ /dev/null @@ -1,49 +0,0 @@ -$LOAD_PATH.unshift(File.dirname(__FILE__)) -require 'rubygems' -require 'activesupport' -require 'activerecord' - -require 'sql_algebra/relations/relation' -require 'sql_algebra/relations/compound_relation' -require 'sql_algebra/relations/table_relation' -require 'sql_algebra/relations/join_operation' -require 'sql_algebra/relations/inner_join_operation' -require 'sql_algebra/relations/left_outer_join_operation' -require 'sql_algebra/relations/join_relation' -require 'sql_algebra/relations/inner_join_relation' -require 'sql_algebra/relations/left_outer_join_relation' -require 'sql_algebra/relations/attribute' -require 'sql_algebra/relations/projection_relation' -require 'sql_algebra/relations/selection_relation' -require 'sql_algebra/relations/order_relation' -require 'sql_algebra/relations/range_relation' -require 'sql_algebra/relations/rename_relation' -require 'sql_algebra/relations/join' - -require 'sql_algebra/predicates/predicate' -require 'sql_algebra/predicates/binary_predicate' -require 'sql_algebra/predicates/equality_predicate' -require 'sql_algebra/predicates/less_than_predicate' -require 'sql_algebra/predicates/less_than_or_equal_to_predicate' -require 'sql_algebra/predicates/greater_than_predicate' -require 'sql_algebra/predicates/greater_than_or_equal_to_predicate' -require 'sql_algebra/predicates/range_inclusion_predicate' -require 'sql_algebra/predicates/relation_inclusion_predicate' -require 'sql_algebra/predicates/match_predicate' - -require 'sql_algebra/extensions/range' -require 'sql_algebra/extensions/object' -require 'sql_algebra/extensions/array' -require 'sql_algebra/extensions/base' -require 'sql_algebra/extensions/hash' - -require 'sql_algebra/sql_builder/sql_builder' -require 'sql_algebra/sql_builder/select_builder' -require 'sql_algebra/sql_builder/joins_builder' -require 'sql_algebra/sql_builder/join_builder' -require 'sql_algebra/sql_builder/inner_join_builder' -require 'sql_algebra/sql_builder/left_outer_join_builder' -require 'sql_algebra/sql_builder/equals_condition_builder' -require 'sql_algebra/sql_builder/conditions_builder' -require 'sql_algebra/sql_builder/order_builder' -require 'sql_algebra/sql_builder/selects_builder'
\ No newline at end of file diff --git a/lib/sql_algebra/relations/compound_relation.rb b/lib/sql_algebra/relations/compound_relation.rb deleted file mode 100644 index a8e9a41b5e..0000000000 --- a/lib/sql_algebra/relations/compound_relation.rb +++ /dev/null @@ -1,3 +0,0 @@ -class CompoundRelation < Relation - delegate :attributes, :attribute, :joins, :select, :orders, :table, :to => :relation -end
\ No newline at end of file diff --git a/lib/sql_algebra/sql_builder/selects_builder.rb b/lib/sql_algebra/sql_builder/selects_builder.rb deleted file mode 100644 index ce6ee1eb67..0000000000 --- a/lib/sql_algebra/sql_builder/selects_builder.rb +++ /dev/null @@ -1,20 +0,0 @@ -class SelectsBuilder < SqlBuilder - def initialize(&block) - @selects = [] - super(&block) - end - - def to_s - @selects.join(', ') - end - - def all - @selects << :* - end - - def column(table, column, aliaz = nil) - @selects << "#{quote_table_name(table)}.#{quote_column_name(column)}" + (aliaz ? " AS #{quote(aliaz)}" : '') - end - - delegate :blank?, :to => :@selects -end
\ No newline at end of file |