aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/active_relation.rb56
-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.rb3
-rw-r--r--lib/active_relation/relations/deletion_relation.rb22
-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.rb29
-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.rb16
-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.rb32
-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.rb41
-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.rb9
-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.rb16
-rw-r--r--lib/sql_algebra.rb49
-rw-r--r--lib/sql_algebra/relations/compound_relation.rb3
-rw-r--r--lib/sql_algebra/sql_builder/selects_builder.rb20
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