arel 4.0.2 → 5.0.1.20140414130214
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +5 -1
- data/Gemfile +1 -1
- data/History.txt +69 -1
- data/Manifest.txt +0 -1
- data/README.markdown +4 -13
- data/arel.gemspec +13 -13
- data/lib/arel/crud.rb +2 -34
- data/lib/arel/select_manager.rb +4 -40
- data/lib/arel/table.rb +0 -21
- data/lib/arel/tree_manager.rb +3 -0
- data/lib/arel/visitors/mssql.rb +2 -2
- data/lib/arel/visitors/to_sql.rb +5 -11
- data/lib/arel.rb +1 -1
- data/test/nodes/test_ascending.rb +1 -1
- data/test/nodes/test_bin.rb +1 -1
- data/test/nodes/test_descending.rb +1 -1
- data/test/nodes/test_infix_operation.rb +1 -1
- data/test/nodes/test_named_function.rb +1 -1
- data/test/nodes/test_node.rb +1 -1
- data/test/nodes/test_select_core.rb +1 -1
- data/test/test_crud.rb +1 -1
- data/test/test_factory_methods.rb +1 -1
- data/test/test_select_manager.rb +23 -92
- data/test/visitors/test_bind_visitor.rb +1 -1
- data/test/visitors/test_depth_first.rb +1 -1
- data/test/visitors/test_dot.rb +1 -1
- data/test/visitors/test_to_sql.rb +25 -10
- metadata +8 -10
- data/test/test_activerecord_compat.rb +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 86a3156add2973e4e2cd8b3a852e82c26c073601
|
|
4
|
+
data.tar.gz: 06fc106d1ef5fdc41de327a78a8e0b467096202b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ba39500686768a6865b688ce693dd6bc69e2e7ea1a7acb52ab0ad1f0d00fefb85b537f4c5405e865abe67016c166f06503ded328c3b79c2a34156c8ed75e6293
|
|
7
|
+
data.tar.gz: 1d916874f785a6fc85a2df91633edbc4b607612c876160e6fce14d03ebc17694fd87be197b793ec44f89a68a9815dba07161717333fb15575e36419efae16508
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
source "https://rubygems.org/"
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
gem "minitest", "~>
|
|
8
|
+
gem "minitest", "~>5.1", :group => [:development, :test]
|
|
9
9
|
gem "rdoc", "~>4.0", :group => [:development, :test]
|
|
10
10
|
gem "hoe", "~>3.5", :group => [:development, :test]
|
|
11
11
|
|
data/History.txt
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
== 5.0.1 / 2014-04-14
|
|
2
|
+
|
|
3
|
+
* Bug Fixes
|
|
4
|
+
|
|
5
|
+
* Fix `SqlLiteral` YAML serialization
|
|
6
|
+
* PostgreSQL bugfix for invalid SQL in subqueries
|
|
7
|
+
|
|
8
|
+
== 5.0.0 / 2013-12-04
|
|
9
|
+
|
|
10
|
+
* Enhancements
|
|
11
|
+
|
|
12
|
+
* Remove deprecated code
|
|
2
13
|
|
|
3
14
|
* Bug Fixes
|
|
4
15
|
|
|
16
|
+
* Fix serializing a relation when calling `to_yaml`
|
|
17
|
+
|
|
18
|
+
=== 4.0.2 / 2014-02-05
|
|
19
|
+
|
|
20
|
+
* Bug Fixes
|
|
21
|
+
|
|
5
22
|
* Fix `SqlLiteral` YAML serialization
|
|
6
23
|
* PostgreSQL bugfix for invalid SQL in subqueries
|
|
7
24
|
|
|
@@ -17,6 +34,57 @@
|
|
|
17
34
|
* Make visitors threadsafe by removing @last_column
|
|
18
35
|
* Support `columns_for_distinct` with Oracle adapter
|
|
19
36
|
|
|
37
|
+
== 3.0.3 / 2013-11-12
|
|
38
|
+
|
|
39
|
+
* Enhancements
|
|
40
|
+
|
|
41
|
+
* Support ANSI 2003 window functions
|
|
42
|
+
|
|
43
|
+
* Bug Fixes
|
|
44
|
+
|
|
45
|
+
* Fix joins in Informix
|
|
46
|
+
|
|
47
|
+
== 3.0.2 / 2012-02-21
|
|
48
|
+
|
|
49
|
+
* Enhancements
|
|
50
|
+
|
|
51
|
+
* Added a module for visiting and transforming bind values
|
|
52
|
+
* Fix in [] to be false, not in [] to be true
|
|
53
|
+
|
|
54
|
+
* Bug Fixes
|
|
55
|
+
|
|
56
|
+
* Revert fix for LIMIT / OFFSET when query is ordered in Oracle
|
|
57
|
+
|
|
58
|
+
== 3.0.1 / 2012-02-17
|
|
59
|
+
|
|
60
|
+
* Bug Fixes
|
|
61
|
+
|
|
62
|
+
* Fixed LIMIT / OFFSET when query is ordered in Oracle
|
|
63
|
+
|
|
64
|
+
== 3.0.0 / 2012-01-12
|
|
65
|
+
|
|
66
|
+
* Enhancements
|
|
67
|
+
|
|
68
|
+
* Support connection pool and schema cache
|
|
69
|
+
|
|
70
|
+
* Bug Fixes
|
|
71
|
+
|
|
72
|
+
* Conditions with no column can be followed by other conditions in Postgres
|
|
73
|
+
|
|
74
|
+
== 2.2.3 / 2012-02-21
|
|
75
|
+
|
|
76
|
+
* Enhancements
|
|
77
|
+
|
|
78
|
+
* Added a module for visiting and transforming bind values
|
|
79
|
+
|
|
80
|
+
== 2.2.2 / 2012-02-20
|
|
81
|
+
|
|
82
|
+
* Enhancements
|
|
83
|
+
|
|
84
|
+
* Support LOCK
|
|
85
|
+
* Allow using non-table alias as a right-hand relation name
|
|
86
|
+
* Added SelectManager#distinct
|
|
87
|
+
|
|
20
88
|
== 2.2.1 / 2011-09-15
|
|
21
89
|
|
|
22
90
|
* Enhancements
|
data/Manifest.txt
CHANGED
data/README.markdown
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Arel is a SQL AST manager for Ruby. It
|
|
8
8
|
|
|
9
9
|
1. Simplifies the generation of complex SQL queries
|
|
10
|
-
2. Adapts to various
|
|
10
|
+
2. Adapts to various RDBMSes
|
|
11
11
|
|
|
12
12
|
It is intended to be a framework framework; that is, you can build your own ORM
|
|
13
13
|
with it, focusing on innovative object and collection modeling as opposed to
|
|
@@ -87,12 +87,6 @@ All operators are chainable in this way, and they are chainable any number of ti
|
|
|
87
87
|
users.where(users[:name].eq('bob')).where(users[:age].lt(25))
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Of course, many of the operators take multiple arguments, so the last example can be written more tersely:
|
|
91
|
-
|
|
92
|
-
```ruby
|
|
93
|
-
users.where(users[:name].eq('bob'), users[:age].lt(25))
|
|
94
|
-
```
|
|
95
|
-
|
|
96
90
|
The `OR` operator works like this:
|
|
97
91
|
|
|
98
92
|
```ruby
|
|
@@ -111,12 +105,10 @@ Suppose we have a table `products` with prices in different currencies. And we h
|
|
|
111
105
|
|
|
112
106
|
```ruby
|
|
113
107
|
products = Arel::Table.new(:products)
|
|
114
|
-
|
|
115
|
-
# => [products[:id], products[:name], products[:price], products[:currency_id]]
|
|
108
|
+
# Attributes: [:id, :name, :price, :currency_id]
|
|
116
109
|
|
|
117
110
|
currency_rates = Arel::Table.new(:currency_rates)
|
|
118
|
-
|
|
119
|
-
# => [currency_rates[:from_id], currency_rates[:to_id], currency_rates[:date], currency_rates[:rate]]
|
|
111
|
+
# Attributes: [:from_id, :to_id, :date, :rate]
|
|
120
112
|
```
|
|
121
113
|
|
|
122
114
|
Now, to order products by price in user preferred currency simply call:
|
|
@@ -139,8 +131,7 @@ comments = Arel::Table.new(:comments)
|
|
|
139
131
|
And this table has the following attributes:
|
|
140
132
|
|
|
141
133
|
```ruby
|
|
142
|
-
|
|
143
|
-
# => [comments[:id], comments[:body], comments[:parent_id]]
|
|
134
|
+
# [:id, :body, :parent_id]
|
|
144
135
|
```
|
|
145
136
|
|
|
146
137
|
The `parent_id` column is a foreign key from the `comments` table to itself. Now, joining a table to itself requires aliasing in SQL. In fact, you may alias in Arel as well:
|
data/arel.gemspec
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: arel
|
|
2
|
+
# stub: arel 5.0.1.20140414130214 ruby lib
|
|
3
3
|
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = "arel"
|
|
6
|
-
s.version = "
|
|
6
|
+
s.version = "5.0.1.20140414130214"
|
|
7
7
|
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
9
9
|
s.require_paths = ["lib"]
|
|
10
10
|
s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"]
|
|
11
|
-
s.date = "2014-
|
|
12
|
-
s.description = "Arel is a SQL AST manager for Ruby. It\n\n1. Simplifies the generation of complex SQL queries\n2. Adapts to various
|
|
11
|
+
s.date = "2014-04-14"
|
|
12
|
+
s.description = "Arel is a SQL AST manager for Ruby. It\n\n1. Simplifies the generation of complex SQL queries\n2. Adapts to various RDBMSes\n\nIt is intended to be a framework framework; that is, you can build your own ORM\nwith it, focusing on innovative object and collection modeling as opposed to\ndatabase compatibility and query generation."
|
|
13
13
|
s.email = ["aaron@tenderlovemaking.com", "bryan@brynary.com", "miloops@gmail.com", "nick@example.org"]
|
|
14
14
|
s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown"]
|
|
15
|
-
s.files = [".autotest", ".gemtest", ".travis.yml", "Gemfile", "History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown", "Rakefile", "arel.gemspec", "lib/arel.rb", "lib/arel/alias_predication.rb", "lib/arel/attributes.rb", "lib/arel/attributes/attribute.rb", "lib/arel/compatibility/wheres.rb", "lib/arel/crud.rb", "lib/arel/delete_manager.rb", "lib/arel/deprecated.rb", "lib/arel/expression.rb", "lib/arel/expressions.rb", "lib/arel/factory_methods.rb", "lib/arel/insert_manager.rb", "lib/arel/math.rb", "lib/arel/nodes.rb", "lib/arel/nodes/and.rb", "lib/arel/nodes/ascending.rb", "lib/arel/nodes/binary.rb", "lib/arel/nodes/count.rb", "lib/arel/nodes/delete_statement.rb", "lib/arel/nodes/descending.rb", "lib/arel/nodes/equality.rb", "lib/arel/nodes/extract.rb", "lib/arel/nodes/false.rb", "lib/arel/nodes/function.rb", "lib/arel/nodes/grouping.rb", "lib/arel/nodes/in.rb", "lib/arel/nodes/infix_operation.rb", "lib/arel/nodes/inner_join.rb", "lib/arel/nodes/insert_statement.rb", "lib/arel/nodes/join_source.rb", "lib/arel/nodes/named_function.rb", "lib/arel/nodes/node.rb", "lib/arel/nodes/outer_join.rb", "lib/arel/nodes/over.rb", "lib/arel/nodes/select_core.rb", "lib/arel/nodes/select_statement.rb", "lib/arel/nodes/sql_literal.rb", "lib/arel/nodes/string_join.rb", "lib/arel/nodes/table_alias.rb", "lib/arel/nodes/terminal.rb", "lib/arel/nodes/true.rb", "lib/arel/nodes/unary.rb", "lib/arel/nodes/unqualified_column.rb", "lib/arel/nodes/update_statement.rb", "lib/arel/nodes/values.rb", "lib/arel/nodes/window.rb", "lib/arel/nodes/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/select_manager.rb", "lib/arel/sql/engine.rb", "lib/arel/sql_literal.rb", "lib/arel/table.rb", "lib/arel/tree_manager.rb", "lib/arel/update_manager.rb", "lib/arel/visitors.rb", "lib/arel/visitors/bind_visitor.rb", "lib/arel/visitors/depth_first.rb", "lib/arel/visitors/dot.rb", "lib/arel/visitors/ibm_db.rb", "lib/arel/visitors/informix.rb", "lib/arel/visitors/join_sql.rb", "lib/arel/visitors/mssql.rb", "lib/arel/visitors/mysql.rb", "lib/arel/visitors/oracle.rb", "lib/arel/visitors/order_clauses.rb", "lib/arel/visitors/postgresql.rb", "lib/arel/visitors/sqlite.rb", "lib/arel/visitors/to_sql.rb", "lib/arel/visitors/visitor.rb", "lib/arel/visitors/where_sql.rb", "lib/arel/window_predications.rb", "test/attributes/test_attribute.rb", "test/helper.rb", "test/nodes/test_and.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_distinct.rb", "test/nodes/test_equality.rb", "test/nodes/test_extract.rb", "test/nodes/test_false.rb", "test/nodes/test_grouping.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_over.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_table_alias.rb", "test/nodes/test_true.rb", "test/nodes/test_update_statement.rb", "test/nodes/test_window.rb", "test/support/fake_record.rb", "test/
|
|
15
|
+
s.files = [".autotest", ".gemtest", ".travis.yml", "Gemfile", "History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown", "Rakefile", "arel.gemspec", "lib/arel.rb", "lib/arel/alias_predication.rb", "lib/arel/attributes.rb", "lib/arel/attributes/attribute.rb", "lib/arel/compatibility/wheres.rb", "lib/arel/crud.rb", "lib/arel/delete_manager.rb", "lib/arel/deprecated.rb", "lib/arel/expression.rb", "lib/arel/expressions.rb", "lib/arel/factory_methods.rb", "lib/arel/insert_manager.rb", "lib/arel/math.rb", "lib/arel/nodes.rb", "lib/arel/nodes/and.rb", "lib/arel/nodes/ascending.rb", "lib/arel/nodes/binary.rb", "lib/arel/nodes/count.rb", "lib/arel/nodes/delete_statement.rb", "lib/arel/nodes/descending.rb", "lib/arel/nodes/equality.rb", "lib/arel/nodes/extract.rb", "lib/arel/nodes/false.rb", "lib/arel/nodes/function.rb", "lib/arel/nodes/grouping.rb", "lib/arel/nodes/in.rb", "lib/arel/nodes/infix_operation.rb", "lib/arel/nodes/inner_join.rb", "lib/arel/nodes/insert_statement.rb", "lib/arel/nodes/join_source.rb", "lib/arel/nodes/named_function.rb", "lib/arel/nodes/node.rb", "lib/arel/nodes/outer_join.rb", "lib/arel/nodes/over.rb", "lib/arel/nodes/select_core.rb", "lib/arel/nodes/select_statement.rb", "lib/arel/nodes/sql_literal.rb", "lib/arel/nodes/string_join.rb", "lib/arel/nodes/table_alias.rb", "lib/arel/nodes/terminal.rb", "lib/arel/nodes/true.rb", "lib/arel/nodes/unary.rb", "lib/arel/nodes/unqualified_column.rb", "lib/arel/nodes/update_statement.rb", "lib/arel/nodes/values.rb", "lib/arel/nodes/window.rb", "lib/arel/nodes/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/select_manager.rb", "lib/arel/sql/engine.rb", "lib/arel/sql_literal.rb", "lib/arel/table.rb", "lib/arel/tree_manager.rb", "lib/arel/update_manager.rb", "lib/arel/visitors.rb", "lib/arel/visitors/bind_visitor.rb", "lib/arel/visitors/depth_first.rb", "lib/arel/visitors/dot.rb", "lib/arel/visitors/ibm_db.rb", "lib/arel/visitors/informix.rb", "lib/arel/visitors/join_sql.rb", "lib/arel/visitors/mssql.rb", "lib/arel/visitors/mysql.rb", "lib/arel/visitors/oracle.rb", "lib/arel/visitors/order_clauses.rb", "lib/arel/visitors/postgresql.rb", "lib/arel/visitors/sqlite.rb", "lib/arel/visitors/to_sql.rb", "lib/arel/visitors/visitor.rb", "lib/arel/visitors/where_sql.rb", "lib/arel/window_predications.rb", "test/attributes/test_attribute.rb", "test/helper.rb", "test/nodes/test_and.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_distinct.rb", "test/nodes/test_equality.rb", "test/nodes/test_extract.rb", "test/nodes/test_false.rb", "test/nodes/test_grouping.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_over.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_table_alias.rb", "test/nodes/test_true.rb", "test/nodes/test_update_statement.rb", "test/nodes/test_window.rb", "test/support/fake_record.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_bind_visitor.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dispatch_contamination.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_informix.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"]
|
|
16
16
|
s.homepage = "http://github.com/rails/arel"
|
|
17
17
|
s.licenses = ["MIT"]
|
|
18
18
|
s.rdoc_options = ["--main", "README.markdown"]
|
|
19
19
|
s.rubyforge_project = "arel"
|
|
20
|
-
s.rubygems_version = "2.2.
|
|
20
|
+
s.rubygems_version = "2.2.2"
|
|
21
21
|
s.summary = "Arel is a SQL AST manager for Ruby"
|
|
22
|
-
s.test_files = ["test/attributes/test_attribute.rb", "test/nodes/test_and.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_distinct.rb", "test/nodes/test_equality.rb", "test/nodes/test_extract.rb", "test/nodes/test_false.rb", "test/nodes/test_grouping.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_over.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_table_alias.rb", "test/nodes/test_true.rb", "test/nodes/test_update_statement.rb", "test/nodes/test_window.rb", "test/
|
|
22
|
+
s.test_files = ["test/attributes/test_attribute.rb", "test/nodes/test_and.rb", "test/nodes/test_as.rb", "test/nodes/test_ascending.rb", "test/nodes/test_bin.rb", "test/nodes/test_count.rb", "test/nodes/test_delete_statement.rb", "test/nodes/test_descending.rb", "test/nodes/test_distinct.rb", "test/nodes/test_equality.rb", "test/nodes/test_extract.rb", "test/nodes/test_false.rb", "test/nodes/test_grouping.rb", "test/nodes/test_infix_operation.rb", "test/nodes/test_insert_statement.rb", "test/nodes/test_named_function.rb", "test/nodes/test_node.rb", "test/nodes/test_not.rb", "test/nodes/test_or.rb", "test/nodes/test_over.rb", "test/nodes/test_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_table_alias.rb", "test/nodes/test_true.rb", "test/nodes/test_update_statement.rb", "test/nodes/test_window.rb", "test/test_attributes.rb", "test/test_crud.rb", "test/test_delete_manager.rb", "test/test_factory_methods.rb", "test/test_insert_manager.rb", "test/test_select_manager.rb", "test/test_table.rb", "test/test_update_manager.rb", "test/visitors/test_bind_visitor.rb", "test/visitors/test_depth_first.rb", "test/visitors/test_dispatch_contamination.rb", "test/visitors/test_dot.rb", "test/visitors/test_ibm_db.rb", "test/visitors/test_informix.rb", "test/visitors/test_join_sql.rb", "test/visitors/test_mssql.rb", "test/visitors/test_mysql.rb", "test/visitors/test_oracle.rb", "test/visitors/test_postgres.rb", "test/visitors/test_sqlite.rb", "test/visitors/test_to_sql.rb"]
|
|
23
23
|
|
|
24
24
|
if s.respond_to? :specification_version then
|
|
25
25
|
s.specification_version = 4
|
|
26
26
|
|
|
27
27
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
28
|
-
s.add_development_dependency(%q<minitest>, ["~> 5.
|
|
28
|
+
s.add_development_dependency(%q<minitest>, ["~> 5.3"])
|
|
29
29
|
s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
|
|
30
|
-
s.add_development_dependency(%q<hoe>, ["~> 3.
|
|
30
|
+
s.add_development_dependency(%q<hoe>, ["~> 3.6"])
|
|
31
31
|
else
|
|
32
|
-
s.add_dependency(%q<minitest>, ["~> 5.
|
|
32
|
+
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
|
33
33
|
s.add_dependency(%q<rdoc>, ["~> 4.0"])
|
|
34
|
-
s.add_dependency(%q<hoe>, ["~> 3.
|
|
34
|
+
s.add_dependency(%q<hoe>, ["~> 3.6"])
|
|
35
35
|
end
|
|
36
36
|
else
|
|
37
|
-
s.add_dependency(%q<minitest>, ["~> 5.
|
|
37
|
+
s.add_dependency(%q<minitest>, ["~> 5.3"])
|
|
38
38
|
s.add_dependency(%q<rdoc>, ["~> 4.0"])
|
|
39
|
-
s.add_dependency(%q<hoe>, ["~> 3.
|
|
39
|
+
s.add_dependency(%q<hoe>, ["~> 3.6"])
|
|
40
40
|
end
|
|
41
41
|
end
|
data/lib/arel/crud.rb
CHANGED
|
@@ -2,7 +2,7 @@ module Arel
|
|
|
2
2
|
###
|
|
3
3
|
# FIXME hopefully we can remove this
|
|
4
4
|
module Crud
|
|
5
|
-
def compile_update values
|
|
5
|
+
def compile_update values, pk
|
|
6
6
|
um = UpdateManager.new @engine
|
|
7
7
|
|
|
8
8
|
if Nodes::SqlLiteral === values
|
|
@@ -10,6 +10,7 @@ module Arel
|
|
|
10
10
|
else
|
|
11
11
|
relation = values.first.first.relation
|
|
12
12
|
end
|
|
13
|
+
um.key = pk
|
|
13
14
|
um.table relation
|
|
14
15
|
um.set values
|
|
15
16
|
um.take @ast.limit.expr if @ast.limit
|
|
@@ -18,19 +19,6 @@ module Arel
|
|
|
18
19
|
um
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
# FIXME: this method should go away
|
|
22
|
-
def update values
|
|
23
|
-
if $VERBOSE
|
|
24
|
-
warn <<-eowarn
|
|
25
|
-
update (#{caller.first}) is deprecated and will be removed in Arel 4.0.0. Please
|
|
26
|
-
switch to `compile_update`
|
|
27
|
-
eowarn
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
um = compile_update values
|
|
31
|
-
@engine.connection.update um.to_sql, 'AREL'
|
|
32
|
-
end
|
|
33
|
-
|
|
34
22
|
def compile_insert values
|
|
35
23
|
im = create_insert
|
|
36
24
|
im.insert values
|
|
@@ -41,17 +29,6 @@ switch to `compile_update`
|
|
|
41
29
|
InsertManager.new @engine
|
|
42
30
|
end
|
|
43
31
|
|
|
44
|
-
# FIXME: this method should go away
|
|
45
|
-
def insert values
|
|
46
|
-
if $VERBOSE
|
|
47
|
-
warn <<-eowarn
|
|
48
|
-
insert (#{caller.first}) is deprecated and will be removed in Arel 4.0.0. Please
|
|
49
|
-
switch to `compile_insert`
|
|
50
|
-
eowarn
|
|
51
|
-
end
|
|
52
|
-
@engine.connection.insert compile_insert(values).to_sql
|
|
53
|
-
end
|
|
54
|
-
|
|
55
32
|
def compile_delete
|
|
56
33
|
dm = DeleteManager.new @engine
|
|
57
34
|
dm.wheres = @ctx.wheres
|
|
@@ -59,14 +36,5 @@ switch to `compile_insert`
|
|
|
59
36
|
dm
|
|
60
37
|
end
|
|
61
38
|
|
|
62
|
-
def delete
|
|
63
|
-
if $VERBOSE
|
|
64
|
-
warn <<-eowarn
|
|
65
|
-
delete (#{caller.first}) is deprecated and will be removed in Arel 4.0.0. Please
|
|
66
|
-
switch to `compile_delete`
|
|
67
|
-
eowarn
|
|
68
|
-
end
|
|
69
|
-
@engine.connection.delete compile_delete.to_sql, 'AREL'
|
|
70
|
-
end
|
|
71
39
|
end
|
|
72
40
|
end
|
data/lib/arel/select_manager.rb
CHANGED
|
@@ -2,6 +2,8 @@ module Arel
|
|
|
2
2
|
class SelectManager < Arel::TreeManager
|
|
3
3
|
include Arel::Crud
|
|
4
4
|
|
|
5
|
+
STRING_OR_SYMBOL_CLASS = [Symbol, String]
|
|
6
|
+
|
|
5
7
|
def initialize engine, table = nil
|
|
6
8
|
super(engine)
|
|
7
9
|
@ast = Nodes::SelectStatement.new
|
|
@@ -47,14 +49,6 @@ module Arel
|
|
|
47
49
|
create_table_alias grouping(@ast), Nodes::SqlLiteral.new(other)
|
|
48
50
|
end
|
|
49
51
|
|
|
50
|
-
def where_clauses
|
|
51
|
-
if $VERBOSE
|
|
52
|
-
warn "(#{caller.first}) where_clauses is deprecated and will be removed in arel 4.0.0 with no replacement"
|
|
53
|
-
end
|
|
54
|
-
to_sql = Visitors::ToSql.new @engine.connection
|
|
55
|
-
@ctx.wheres.map { |c| to_sql.accept c }
|
|
56
|
-
end
|
|
57
|
-
|
|
58
52
|
def lock locking = Arel.sql('FOR UPDATE')
|
|
59
53
|
case locking
|
|
60
54
|
when true
|
|
@@ -136,7 +130,7 @@ module Arel
|
|
|
136
130
|
# FIXME: converting these to SQLLiterals is probably not good, but
|
|
137
131
|
# rails tests require it.
|
|
138
132
|
@ctx.projections.concat projections.map { |x|
|
|
139
|
-
|
|
133
|
+
STRING_OR_SYMBOL_CLASS.include?(x.class) ? SqlLiteral.new(x.to_s) : x
|
|
140
134
|
}
|
|
141
135
|
self
|
|
142
136
|
end
|
|
@@ -160,7 +154,7 @@ module Arel
|
|
|
160
154
|
def order *expr
|
|
161
155
|
# FIXME: We SHOULD NOT be converting these to SqlLiteral automatically
|
|
162
156
|
@ast.orders.concat expr.map { |x|
|
|
163
|
-
|
|
157
|
+
STRING_OR_SYMBOL_CLASS.include?(x.class) ? Nodes::SqlLiteral.new(x.to_s) : x
|
|
164
158
|
}
|
|
165
159
|
self
|
|
166
160
|
end
|
|
@@ -169,11 +163,6 @@ module Arel
|
|
|
169
163
|
@ast.orders
|
|
170
164
|
end
|
|
171
165
|
|
|
172
|
-
def wheres
|
|
173
|
-
warn "#{caller[0]}: SelectManager#wheres is deprecated and will be removed in Arel 4.0.0 with no replacement"
|
|
174
|
-
Compatibility::Wheres.new @engine.connection, @ctx.wheres
|
|
175
|
-
end
|
|
176
|
-
|
|
177
166
|
def where_sql
|
|
178
167
|
return if @ctx.wheres.empty?
|
|
179
168
|
|
|
@@ -272,31 +261,6 @@ module Arel
|
|
|
272
261
|
@engine.connection.send(:select, to_sql, 'AREL').map { |x| Row.new(x) }
|
|
273
262
|
end
|
|
274
263
|
|
|
275
|
-
# FIXME: this method should go away
|
|
276
|
-
def insert values
|
|
277
|
-
if $VERBOSE
|
|
278
|
-
warn <<-eowarn
|
|
279
|
-
insert (#{caller.first}) is deprecated and will be removed in Arel 4.0.0. Please
|
|
280
|
-
switch to `compile_insert`
|
|
281
|
-
eowarn
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
im = compile_insert(values)
|
|
285
|
-
table = @ctx.froms
|
|
286
|
-
|
|
287
|
-
primary_key = table.primary_key
|
|
288
|
-
primary_key_name = primary_key.name if primary_key
|
|
289
|
-
|
|
290
|
-
# FIXME: in AR tests values sometimes were Array and not Hash therefore is_a?(Hash) check is added
|
|
291
|
-
primary_key_value = primary_key && values.is_a?(Hash) && values[primary_key]
|
|
292
|
-
im.into table
|
|
293
|
-
# Oracle adapter needs primary key name to generate RETURNING ... INTO ... clause
|
|
294
|
-
# for tables which assign primary key value using trigger.
|
|
295
|
-
# RETURNING ... INTO ... clause will be added only if primary_key_value is nil
|
|
296
|
-
# therefore it is necessary to pass primary key value as well
|
|
297
|
-
@engine.connection.insert im.to_sql, 'AREL', primary_key_name, primary_key_value
|
|
298
|
-
end
|
|
299
|
-
|
|
300
264
|
private
|
|
301
265
|
def collapse exprs, existing = nil
|
|
302
266
|
exprs = exprs.unshift(existing.expr) if existing
|
data/lib/arel/table.rb
CHANGED
|
@@ -100,17 +100,6 @@ primary_key (#{caller.first}) is deprecated and will be removed in Arel 4.0.0
|
|
|
100
100
|
from(self).having expr
|
|
101
101
|
end
|
|
102
102
|
|
|
103
|
-
def columns
|
|
104
|
-
if $VERBOSE
|
|
105
|
-
warn <<-eowarn
|
|
106
|
-
(#{caller.first}) Arel::Table#columns is deprecated and will be removed in
|
|
107
|
-
Arel 4.0.0 with no replacement. PEW PEW PEW!!!
|
|
108
|
-
eowarn
|
|
109
|
-
end
|
|
110
|
-
@columns ||=
|
|
111
|
-
attributes_for @engine.connection.columns(@name, "#{@name} Columns")
|
|
112
|
-
end
|
|
113
|
-
|
|
114
103
|
def [] name
|
|
115
104
|
::Arel::Attribute.new self, name
|
|
116
105
|
end
|
|
@@ -149,15 +138,5 @@ Arel 4.0.0 with no replacement. PEW PEW PEW!!!
|
|
|
149
138
|
end
|
|
150
139
|
end
|
|
151
140
|
|
|
152
|
-
@@table_cache = nil
|
|
153
|
-
def self.table_cache engine # :nodoc:
|
|
154
|
-
if $VERBOSE
|
|
155
|
-
warn <<-eowarn
|
|
156
|
-
(#{caller.first}) Arel::Table.table_cache is deprecated and will be removed in
|
|
157
|
-
Arel 4.0.0 with no replacement. PEW PEW PEW!!!
|
|
158
|
-
eowarn
|
|
159
|
-
end
|
|
160
|
-
@@table_cache ||= Hash[engine.connection.tables.map { |x| [x,true] }]
|
|
161
|
-
end
|
|
162
141
|
end
|
|
163
142
|
end
|
data/lib/arel/tree_manager.rb
CHANGED
data/lib/arel/visitors/mssql.rb
CHANGED
|
@@ -62,8 +62,8 @@ module Arel
|
|
|
62
62
|
x.projections.length == 1 && Arel::Nodes::Count === x.projections.first
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
#
|
|
66
|
-
#
|
|
65
|
+
# FIXME raise exception of there is no pk?
|
|
66
|
+
# FIXME!! Table.primary_key will be deprecated. What is the replacement??
|
|
67
67
|
def find_left_table_pk o, a
|
|
68
68
|
return visit o.primary_key, a if o.instance_of? Arel::Table
|
|
69
69
|
find_left_table_pk o.left, a if o.kind_of? Arel::Nodes::Join
|
data/lib/arel/visitors/to_sql.rb
CHANGED
|
@@ -42,6 +42,10 @@ module Arel
|
|
|
42
42
|
# `getconstant` should be a hash lookup, and no object is duped when the
|
|
43
43
|
# value of the constant is pushed on the stack. Hence the crazy
|
|
44
44
|
# constants below.
|
|
45
|
+
#
|
|
46
|
+
# `matches` and `doesNotMatch` operate case-insensitively via Visitor subclasses
|
|
47
|
+
# specialized for specific databases when necessary.
|
|
48
|
+
#
|
|
45
49
|
|
|
46
50
|
WHERE = ' WHERE ' # :nodoc:
|
|
47
51
|
SPACE = ' ' # :nodoc:
|
|
@@ -85,17 +89,7 @@ module Arel
|
|
|
85
89
|
if o.orders.empty? && o.limit.nil?
|
|
86
90
|
wheres = o.wheres
|
|
87
91
|
else
|
|
88
|
-
|
|
89
|
-
unless key
|
|
90
|
-
warn(<<-eowarn) if $VERBOSE
|
|
91
|
-
(#{caller.first}) Using UpdateManager without setting UpdateManager#key is
|
|
92
|
-
deprecated and support will be removed in Arel 4.0.0. Please set the primary
|
|
93
|
-
key on UpdateManager using UpdateManager#key= '#{key.inspect}'
|
|
94
|
-
eowarn
|
|
95
|
-
key = o.relation.primary_key
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
wheres = [Nodes::In.new(key, [build_subselect(key, o)])]
|
|
92
|
+
wheres = [Nodes::In.new(o.key, [build_subselect(o.key, o)])]
|
|
99
93
|
end
|
|
100
94
|
|
|
101
95
|
[
|
data/lib/arel.rb
CHANGED
data/test/nodes/test_bin.rb
CHANGED
data/test/nodes/test_node.rb
CHANGED
data/test/test_crud.rb
CHANGED
|
@@ -45,7 +45,7 @@ module Arel
|
|
|
45
45
|
table = Table.new :users
|
|
46
46
|
fc = FakeCrudder.new
|
|
47
47
|
fc.from table
|
|
48
|
-
stmt = fc.compile_update [[table[:id], 'foo']]
|
|
48
|
+
stmt = fc.compile_update [[table[:id], 'foo']], Arel::Attributes::Attribute.new(table, 'id')
|
|
49
49
|
assert_instance_of Arel::UpdateManager, stmt
|
|
50
50
|
end
|
|
51
51
|
end
|
data/test/test_select_manager.rb
CHANGED
|
@@ -1,58 +1,6 @@
|
|
|
1
1
|
require 'helper'
|
|
2
2
|
|
|
3
3
|
module Arel
|
|
4
|
-
class EngineProxy
|
|
5
|
-
attr_reader :executed
|
|
6
|
-
attr_reader :connection_pool
|
|
7
|
-
attr_reader :spec
|
|
8
|
-
attr_reader :config
|
|
9
|
-
|
|
10
|
-
def initialize engine
|
|
11
|
-
@engine = engine
|
|
12
|
-
@executed = []
|
|
13
|
-
@connection_pool = self
|
|
14
|
-
@spec = self
|
|
15
|
-
@config = { :adapter => 'sqlite3' }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def with_connection
|
|
19
|
-
yield self
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def connection
|
|
23
|
-
self
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def quote_table_name thing; @engine.connection.quote_table_name thing end
|
|
27
|
-
def quote_column_name thing; @engine.connection.quote_column_name thing end
|
|
28
|
-
def quote thing, column; @engine.connection.quote thing, column end
|
|
29
|
-
def columns table, message = nil
|
|
30
|
-
@engine.connection.columns table, message
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def columns_hash
|
|
34
|
-
@engine.connection.columns_hash
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def table_exists? name
|
|
38
|
-
@engine.connection.table_exists? name
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def tables
|
|
42
|
-
@engine.connection.tables
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def visitor
|
|
46
|
-
@engine.connection.visitor
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def execute sql, name = nil, *args
|
|
50
|
-
@executed << sql
|
|
51
|
-
end
|
|
52
|
-
alias :update :execute
|
|
53
|
-
alias :delete :execute
|
|
54
|
-
alias :insert :execute
|
|
55
|
-
end
|
|
56
4
|
|
|
57
5
|
describe 'select manager' do
|
|
58
6
|
def test_join_sources
|
|
@@ -61,6 +9,13 @@ module Arel
|
|
|
61
9
|
assert_equal "SELECT FROM 'foo'", manager.to_sql
|
|
62
10
|
end
|
|
63
11
|
|
|
12
|
+
def test_manager_stores_bind_values
|
|
13
|
+
manager = Arel::SelectManager.new Table.engine
|
|
14
|
+
assert_equal [], manager.bind_values
|
|
15
|
+
manager.bind_values = [1]
|
|
16
|
+
assert_equal [1], manager.bind_values
|
|
17
|
+
end
|
|
18
|
+
|
|
64
19
|
describe 'backwards compatibility' do
|
|
65
20
|
describe 'project' do
|
|
66
21
|
it 'accepts symbols as sql literals' do
|
|
@@ -435,20 +390,6 @@ module Arel
|
|
|
435
390
|
end
|
|
436
391
|
end
|
|
437
392
|
|
|
438
|
-
describe 'insert' do
|
|
439
|
-
it 'uses the select FROM' do
|
|
440
|
-
engine = EngineProxy.new Table.engine
|
|
441
|
-
table = Table.new :users
|
|
442
|
-
manager = Arel::SelectManager.new engine
|
|
443
|
-
manager.from table
|
|
444
|
-
manager.insert 'VALUES(NULL)'
|
|
445
|
-
|
|
446
|
-
engine.executed.last.must_be_like %{
|
|
447
|
-
INSERT INTO "users" VALUES(NULL)
|
|
448
|
-
}
|
|
449
|
-
end
|
|
450
|
-
end
|
|
451
|
-
|
|
452
393
|
describe 'lock' do
|
|
453
394
|
# This should fail on other databases
|
|
454
395
|
it 'adds a lock node' do
|
|
@@ -888,9 +829,8 @@ module Arel
|
|
|
888
829
|
|
|
889
830
|
describe 'delete' do
|
|
890
831
|
it "copies from" do
|
|
891
|
-
engine = EngineProxy.new Table.engine
|
|
892
832
|
table = Table.new :users
|
|
893
|
-
manager = Arel::SelectManager.new engine
|
|
833
|
+
manager = Arel::SelectManager.new Table.engine
|
|
894
834
|
manager.from table
|
|
895
835
|
stmt = manager.compile_delete
|
|
896
836
|
|
|
@@ -898,9 +838,8 @@ module Arel
|
|
|
898
838
|
end
|
|
899
839
|
|
|
900
840
|
it "copies where" do
|
|
901
|
-
engine = EngineProxy.new Table.engine
|
|
902
841
|
table = Table.new :users
|
|
903
|
-
manager = Arel::SelectManager.new engine
|
|
842
|
+
manager = Arel::SelectManager.new Table.engine
|
|
904
843
|
manager.from table
|
|
905
844
|
manager.where table[:id].eq 10
|
|
906
845
|
stmt = manager.compile_delete
|
|
@@ -930,12 +869,11 @@ module Arel
|
|
|
930
869
|
|
|
931
870
|
describe 'update' do
|
|
932
871
|
it 'copies limits' do
|
|
933
|
-
engine = EngineProxy.new Table.engine
|
|
934
872
|
table = Table.new :users
|
|
935
|
-
manager = Arel::SelectManager.new engine
|
|
873
|
+
manager = Arel::SelectManager.new Table.engine
|
|
936
874
|
manager.from table
|
|
937
875
|
manager.take 1
|
|
938
|
-
stmt = manager.compile_update(SqlLiteral.new('foo = bar'))
|
|
876
|
+
stmt = manager.compile_update(SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
|
|
939
877
|
stmt.key = table['id']
|
|
940
878
|
|
|
941
879
|
stmt.to_sql.must_be_like %{
|
|
@@ -945,12 +883,11 @@ module Arel
|
|
|
945
883
|
end
|
|
946
884
|
|
|
947
885
|
it 'copies order' do
|
|
948
|
-
engine = EngineProxy.new Table.engine
|
|
949
886
|
table = Table.new :users
|
|
950
|
-
manager = Arel::SelectManager.new engine
|
|
887
|
+
manager = Arel::SelectManager.new Table.engine
|
|
951
888
|
manager.from table
|
|
952
889
|
manager.order :foo
|
|
953
|
-
stmt = manager.compile_update(SqlLiteral.new('foo = bar'))
|
|
890
|
+
stmt = manager.compile_update(SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
|
|
954
891
|
stmt.key = table['id']
|
|
955
892
|
|
|
956
893
|
stmt.to_sql.must_be_like %{
|
|
@@ -960,22 +897,20 @@ module Arel
|
|
|
960
897
|
end
|
|
961
898
|
|
|
962
899
|
it 'takes a string' do
|
|
963
|
-
engine = EngineProxy.new Table.engine
|
|
964
900
|
table = Table.new :users
|
|
965
|
-
manager = Arel::SelectManager.new engine
|
|
901
|
+
manager = Arel::SelectManager.new Table.engine
|
|
966
902
|
manager.from table
|
|
967
|
-
stmt = manager.compile_update(SqlLiteral.new('foo = bar'))
|
|
903
|
+
stmt = manager.compile_update(SqlLiteral.new('foo = bar'), Arel::Attributes::Attribute.new(table, 'id'))
|
|
968
904
|
|
|
969
905
|
stmt.to_sql.must_be_like %{ UPDATE "users" SET foo = bar }
|
|
970
906
|
end
|
|
971
907
|
|
|
972
908
|
it 'copies where clauses' do
|
|
973
|
-
engine = EngineProxy.new Table.engine
|
|
974
909
|
table = Table.new :users
|
|
975
|
-
manager = Arel::SelectManager.new engine
|
|
910
|
+
manager = Arel::SelectManager.new Table.engine
|
|
976
911
|
manager.where table[:id].eq 10
|
|
977
912
|
manager.from table
|
|
978
|
-
stmt = manager.compile_update(table[:id] => 1)
|
|
913
|
+
stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
|
|
979
914
|
|
|
980
915
|
stmt.to_sql.must_be_like %{
|
|
981
916
|
UPDATE "users" SET "id" = 1 WHERE "users"."id" = 10
|
|
@@ -983,13 +918,12 @@ module Arel
|
|
|
983
918
|
end
|
|
984
919
|
|
|
985
920
|
it 'copies where clauses when nesting is triggered' do
|
|
986
|
-
engine = EngineProxy.new Table.engine
|
|
987
921
|
table = Table.new :users
|
|
988
|
-
manager = Arel::SelectManager.new engine
|
|
922
|
+
manager = Arel::SelectManager.new Table.engine
|
|
989
923
|
manager.where table[:foo].eq 10
|
|
990
924
|
manager.take 42
|
|
991
925
|
manager.from table
|
|
992
|
-
stmt = manager.compile_update(table[:id] => 1)
|
|
926
|
+
stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
|
|
993
927
|
|
|
994
928
|
stmt.to_sql.must_be_like %{
|
|
995
929
|
UPDATE "users" SET "id" = 1 WHERE "users"."id" IN (SELECT "users"."id" FROM "users" WHERE "users"."foo" = 10 LIMIT 42)
|
|
@@ -997,11 +931,10 @@ module Arel
|
|
|
997
931
|
end
|
|
998
932
|
|
|
999
933
|
it 'executes an update statement' do
|
|
1000
|
-
engine = EngineProxy.new Table.engine
|
|
1001
934
|
table = Table.new :users
|
|
1002
|
-
manager = Arel::SelectManager.new engine
|
|
935
|
+
manager = Arel::SelectManager.new Table.engine
|
|
1003
936
|
manager.from table
|
|
1004
|
-
stmt = manager.compile_update(table[:id] => 1)
|
|
937
|
+
stmt = manager.compile_update({table[:id] => 1}, Arel::Attributes::Attribute.new(table, 'id'))
|
|
1005
938
|
|
|
1006
939
|
stmt.to_sql.must_be_like %{
|
|
1007
940
|
UPDATE "users" SET "id" = 1
|
|
@@ -1019,16 +952,14 @@ module Arel
|
|
|
1019
952
|
|
|
1020
953
|
it 'takes strings' do
|
|
1021
954
|
manager = Arel::SelectManager.new Table.engine
|
|
1022
|
-
manager.project
|
|
955
|
+
manager.project '*'
|
|
1023
956
|
manager.to_sql.must_be_like %{ SELECT * }
|
|
1024
957
|
end
|
|
1025
958
|
|
|
1026
959
|
it "takes sql literals" do
|
|
1027
960
|
manager = Arel::SelectManager.new Table.engine
|
|
1028
961
|
manager.project Nodes::SqlLiteral.new '*'
|
|
1029
|
-
manager.to_sql.must_be_like %{
|
|
1030
|
-
SELECT *
|
|
1031
|
-
}
|
|
962
|
+
manager.to_sql.must_be_like %{ SELECT * }
|
|
1032
963
|
end
|
|
1033
964
|
end
|
|
1034
965
|
|
data/test/visitors/test_dot.rb
CHANGED
|
@@ -92,7 +92,14 @@ module Arel
|
|
|
92
92
|
assert_equal 'omg(*, *)', @visitor.accept(function)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
-
describe '
|
|
95
|
+
describe 'Nodes::Equality' do
|
|
96
|
+
it "should escape strings" do
|
|
97
|
+
test = Table.new(:users)[:name].eq 'Aaron Patterson'
|
|
98
|
+
@visitor.accept(test).must_be_like %{
|
|
99
|
+
"users"."name" = 'Aaron Patterson'
|
|
100
|
+
}
|
|
101
|
+
end
|
|
102
|
+
|
|
96
103
|
it 'should handle false' do
|
|
97
104
|
sql = @visitor.accept Nodes::Equality.new(false, false)
|
|
98
105
|
sql.must_be_like %{ 'f' = 'f' }
|
|
@@ -103,6 +110,23 @@ module Arel
|
|
|
103
110
|
sql = @visitor.accept Nodes::Equality.new(table[:id], '1-fooo')
|
|
104
111
|
sql.must_be_like %{ "users"."id" = 1 }
|
|
105
112
|
end
|
|
113
|
+
|
|
114
|
+
it 'should handle nil' do
|
|
115
|
+
sql = @visitor.accept Nodes::Equality.new(@table[:name], nil)
|
|
116
|
+
sql.must_be_like %{ "users"."name" IS NULL }
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
describe 'Nodes::NotEqual' do
|
|
121
|
+
it 'should handle false' do
|
|
122
|
+
sql = @visitor.accept Nodes::NotEqual.new(@table[:active], false)
|
|
123
|
+
sql.must_be_like %{ "users"."active" != 'f' }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should handle nil' do
|
|
127
|
+
sql = @visitor.accept Nodes::NotEqual.new(@table[:name], nil)
|
|
128
|
+
sql.must_be_like %{ "users"."name" IS NOT NULL }
|
|
129
|
+
end
|
|
106
130
|
end
|
|
107
131
|
|
|
108
132
|
it "should visit string subclass" do
|
|
@@ -412,15 +436,6 @@ module Arel
|
|
|
412
436
|
end
|
|
413
437
|
end
|
|
414
438
|
|
|
415
|
-
describe 'Equality' do
|
|
416
|
-
it "should escape strings" do
|
|
417
|
-
test = Table.new(:users)[:name].eq 'Aaron Patterson'
|
|
418
|
-
@visitor.accept(test).must_be_like %{
|
|
419
|
-
"users"."name" = 'Aaron Patterson'
|
|
420
|
-
}
|
|
421
|
-
end
|
|
422
|
-
end
|
|
423
|
-
|
|
424
439
|
describe 'Constants' do
|
|
425
440
|
it "should handle true" do
|
|
426
441
|
test = Table.new(:users).create_true
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: arel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.1.20140414130214
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aaron Patterson
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2014-
|
|
14
|
+
date: 2014-04-14 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: minitest
|
|
@@ -19,14 +19,14 @@ dependencies:
|
|
|
19
19
|
requirements:
|
|
20
20
|
- - "~>"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '5.
|
|
22
|
+
version: '5.3'
|
|
23
23
|
type: :development
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
27
|
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '5.
|
|
29
|
+
version: '5.3'
|
|
30
30
|
- !ruby/object:Gem::Dependency
|
|
31
31
|
name: rdoc
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -47,19 +47,19 @@ dependencies:
|
|
|
47
47
|
requirements:
|
|
48
48
|
- - "~>"
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
|
-
version: '3.
|
|
50
|
+
version: '3.6'
|
|
51
51
|
type: :development
|
|
52
52
|
prerelease: false
|
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
54
54
|
requirements:
|
|
55
55
|
- - "~>"
|
|
56
56
|
- !ruby/object:Gem::Version
|
|
57
|
-
version: '3.
|
|
57
|
+
version: '3.6'
|
|
58
58
|
description: |-
|
|
59
59
|
Arel is a SQL AST manager for Ruby. It
|
|
60
60
|
|
|
61
61
|
1. Simplifies the generation of complex SQL queries
|
|
62
|
-
2. Adapts to various
|
|
62
|
+
2. Adapts to various RDBMSes
|
|
63
63
|
|
|
64
64
|
It is intended to be a framework framework; that is, you can build your own ORM
|
|
65
65
|
with it, focusing on innovative object and collection modeling as opposed to
|
|
@@ -189,7 +189,6 @@ files:
|
|
|
189
189
|
- test/nodes/test_update_statement.rb
|
|
190
190
|
- test/nodes/test_window.rb
|
|
191
191
|
- test/support/fake_record.rb
|
|
192
|
-
- test/test_activerecord_compat.rb
|
|
193
192
|
- test/test_attributes.rb
|
|
194
193
|
- test/test_crud.rb
|
|
195
194
|
- test/test_delete_manager.rb
|
|
@@ -233,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
233
232
|
version: '0'
|
|
234
233
|
requirements: []
|
|
235
234
|
rubyforge_project: arel
|
|
236
|
-
rubygems_version: 2.2.
|
|
235
|
+
rubygems_version: 2.2.2
|
|
237
236
|
signing_key:
|
|
238
237
|
specification_version: 4
|
|
239
238
|
summary: Arel is a SQL AST manager for Ruby
|
|
@@ -266,7 +265,6 @@ test_files:
|
|
|
266
265
|
- test/nodes/test_true.rb
|
|
267
266
|
- test/nodes/test_update_statement.rb
|
|
268
267
|
- test/nodes/test_window.rb
|
|
269
|
-
- test/test_activerecord_compat.rb
|
|
270
268
|
- test/test_attributes.rb
|
|
271
269
|
- test/test_crud.rb
|
|
272
270
|
- test/test_delete_manager.rb
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'helper'
|
|
2
|
-
|
|
3
|
-
module Arel
|
|
4
|
-
describe 'activerecord compatibility' do
|
|
5
|
-
describe 'select manager' do
|
|
6
|
-
it 'provides wheres' do
|
|
7
|
-
table = Table.new :users
|
|
8
|
-
manager = Arel::SelectManager.new Table.engine
|
|
9
|
-
manager.where table[:id].eq 1
|
|
10
|
-
manager.where table[:name].eq 'Aaron'
|
|
11
|
-
|
|
12
|
-
manager.wheres.map { |x|
|
|
13
|
-
x.value
|
|
14
|
-
}.join(', ').must_equal "\"users\".\"id\" = 1, \"users\".\"name\" = 'Aaron'"
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|