arel 5.0.1.20140414130214 → 6.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -2
  3. data/History.txt +9 -4
  4. data/Manifest.txt +9 -7
  5. data/README.markdown +85 -8
  6. data/Rakefile +1 -1
  7. data/arel.gemspec +15 -16
  8. data/lib/arel.rb +1 -12
  9. data/lib/arel/collectors/bind.rb +36 -0
  10. data/lib/arel/collectors/plain_string.rb +18 -0
  11. data/lib/arel/collectors/sql_string.rb +18 -0
  12. data/lib/arel/factory_methods.rb +1 -1
  13. data/lib/arel/insert_manager.rb +5 -1
  14. data/lib/arel/nodes.rb +41 -0
  15. data/lib/arel/nodes/and.rb +1 -5
  16. data/lib/arel/nodes/binary.rb +2 -0
  17. data/lib/arel/nodes/extract.rb +0 -2
  18. data/lib/arel/nodes/full_outer_join.rb +6 -0
  19. data/lib/arel/nodes/function.rb +0 -1
  20. data/lib/arel/nodes/insert_statement.rb +5 -2
  21. data/lib/arel/nodes/node.rb +5 -1
  22. data/lib/arel/nodes/right_outer_join.rb +6 -0
  23. data/lib/arel/nodes/window.rb +23 -5
  24. data/lib/arel/predications.rb +41 -33
  25. data/lib/arel/select_manager.rb +13 -37
  26. data/lib/arel/table.rb +13 -9
  27. data/lib/arel/tree_manager.rb +8 -2
  28. data/lib/arel/update_manager.rb +2 -2
  29. data/lib/arel/visitors.rb +0 -2
  30. data/lib/arel/visitors/bind_substitute.rb +9 -0
  31. data/lib/arel/visitors/bind_visitor.rb +10 -5
  32. data/lib/arel/visitors/depth_first.rb +60 -57
  33. data/lib/arel/visitors/dot.rb +84 -80
  34. data/lib/arel/visitors/ibm_db.rb +4 -2
  35. data/lib/arel/visitors/informix.rb +39 -21
  36. data/lib/arel/visitors/mssql.rb +41 -23
  37. data/lib/arel/visitors/mysql.rb +48 -22
  38. data/lib/arel/visitors/oracle.rb +33 -24
  39. data/lib/arel/visitors/postgresql.rb +15 -8
  40. data/lib/arel/visitors/reduce.rb +25 -0
  41. data/lib/arel/visitors/sqlite.rb +3 -2
  42. data/lib/arel/visitors/to_sql.rb +455 -248
  43. data/lib/arel/visitors/visitor.rb +2 -2
  44. data/lib/arel/visitors/where_sql.rb +3 -2
  45. data/test/attributes/test_attribute.rb +12 -3
  46. data/test/collectors/test_bind_collector.rb +70 -0
  47. data/test/collectors/test_sql_string.rb +38 -0
  48. data/test/helper.rb +10 -1
  49. data/test/nodes/test_bin.rb +2 -2
  50. data/test/nodes/test_count.rb +0 -6
  51. data/test/nodes/test_equality.rb +1 -1
  52. data/test/nodes/test_grouping.rb +1 -1
  53. data/test/nodes/test_infix_operation.rb +1 -1
  54. data/test/nodes/test_select_core.rb +7 -7
  55. data/test/nodes/test_sql_literal.rb +10 -6
  56. data/test/nodes/test_window.rb +9 -3
  57. data/test/support/fake_record.rb +16 -4
  58. data/test/test_factory_methods.rb +1 -1
  59. data/test/test_insert_manager.rb +33 -4
  60. data/test/test_select_manager.rb +164 -92
  61. data/test/test_table.rb +49 -4
  62. data/test/visitors/test_bind_visitor.rb +18 -10
  63. data/test/visitors/test_depth_first.rb +12 -0
  64. data/test/visitors/test_dot.rb +4 -4
  65. data/test/visitors/test_ibm_db.rb +11 -5
  66. data/test/visitors/test_informix.rb +14 -8
  67. data/test/visitors/test_mssql.rb +12 -8
  68. data/test/visitors/test_mysql.rb +17 -12
  69. data/test/visitors/test_oracle.rb +25 -21
  70. data/test/visitors/test_postgres.rb +50 -12
  71. data/test/visitors/test_sqlite.rb +2 -2
  72. data/test/visitors/test_to_sql.rb +177 -81
  73. metadata +24 -19
  74. data/lib/arel/deprecated.rb +0 -4
  75. data/lib/arel/expression.rb +0 -5
  76. data/lib/arel/sql/engine.rb +0 -10
  77. data/lib/arel/sql_literal.rb +0 -4
  78. data/lib/arel/visitors/join_sql.rb +0 -19
  79. data/lib/arel/visitors/order_clauses.rb +0 -11
  80. data/test/visitors/test_join_sql.rb +0 -42
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86a3156add2973e4e2cd8b3a852e82c26c073601
4
- data.tar.gz: 06fc106d1ef5fdc41de327a78a8e0b467096202b
3
+ metadata.gz: b103196a0f761d65ab71b2ac1e03d779de9e219d
4
+ data.tar.gz: 9cb4e0384586df861b130b6f64ad01c85235f1ac
5
5
  SHA512:
6
- metadata.gz: ba39500686768a6865b688ce693dd6bc69e2e7ea1a7acb52ab0ad1f0d00fefb85b537f4c5405e865abe67016c166f06503ded328c3b79c2a34156c8ed75e6293
7
- data.tar.gz: 1d916874f785a6fc85a2df91633edbc4b607612c876160e6fce14d03ebc17694fd87be197b793ec44f89a68a9815dba07161717333fb15575e36419efae16508
6
+ metadata.gz: cdb5378f5ea5baf01ec44da940498565dadfb2b044047d9ec98f62b5aebe9bc802f79194dcd0936451d41f90238b265e0b534e3fce2ba94951913f9ebf0b9e5f
7
+ data.tar.gz: 651a4dba661f193f62c98af603e6a313a354ee772ba5e17e8830b653ac2ef794485f9a1f39ca8ca8702bfd74d66bb12d9b0f436873be5ca885de93033ce7b6d9
@@ -1,10 +1,12 @@
1
- script: "rake test"
1
+ script:
2
+ - "rake test"
3
+ - "gem build arel.gemspec"
2
4
  rvm:
3
5
  - rbx
4
6
  - jruby
5
7
  - 1.9.3
6
8
  - 2.0.0
7
- - 2.1.0
9
+ - 2.1.1
8
10
  matrix:
9
11
  allow_failures:
10
12
  - rvm: rbx
@@ -1,9 +1,14 @@
1
- == 5.0.1 / 2014-04-14
1
+ === NEXT / 2014-02-10
2
2
 
3
- * Bug Fixes
3
+ * Enhancements
4
4
 
5
- * Fix `SqlLiteral` YAML serialization
6
- * PostgreSQL bugfix for invalid SQL in subqueries
5
+ * Remove deprecated `Arel::Expression`
6
+ * Remove deprecated `Arel::SqlLiteral`
7
+ * Remove deprecated `SelectManager#joins`
8
+ * Remove deprecated `SelectManager#to_a`
9
+ * Remove deprecated `Arel::Sql::Engine`
10
+ * Remove deprecated `Arel::InnerJoin` constant
11
+ * Remove deprecated `Arel::OuterJoin` constant
7
12
 
8
13
  == 5.0.0 / 2013-12-04
9
14
 
@@ -12,11 +12,12 @@ lib/arel.rb
12
12
  lib/arel/alias_predication.rb
13
13
  lib/arel/attributes.rb
14
14
  lib/arel/attributes/attribute.rb
15
+ lib/arel/collectors/bind.rb
16
+ lib/arel/collectors/plain_string.rb
17
+ lib/arel/collectors/sql_string.rb
15
18
  lib/arel/compatibility/wheres.rb
16
19
  lib/arel/crud.rb
17
20
  lib/arel/delete_manager.rb
18
- lib/arel/deprecated.rb
19
- lib/arel/expression.rb
20
21
  lib/arel/expressions.rb
21
22
  lib/arel/factory_methods.rb
22
23
  lib/arel/insert_manager.rb
@@ -31,6 +32,7 @@ lib/arel/nodes/descending.rb
31
32
  lib/arel/nodes/equality.rb
32
33
  lib/arel/nodes/extract.rb
33
34
  lib/arel/nodes/false.rb
35
+ lib/arel/nodes/full_outer_join.rb
34
36
  lib/arel/nodes/function.rb
35
37
  lib/arel/nodes/grouping.rb
36
38
  lib/arel/nodes/in.rb
@@ -42,6 +44,7 @@ lib/arel/nodes/named_function.rb
42
44
  lib/arel/nodes/node.rb
43
45
  lib/arel/nodes/outer_join.rb
44
46
  lib/arel/nodes/over.rb
47
+ lib/arel/nodes/right_outer_join.rb
45
48
  lib/arel/nodes/select_core.rb
46
49
  lib/arel/nodes/select_statement.rb
47
50
  lib/arel/nodes/sql_literal.rb
@@ -58,29 +61,29 @@ lib/arel/nodes/with.rb
58
61
  lib/arel/order_predications.rb
59
62
  lib/arel/predications.rb
60
63
  lib/arel/select_manager.rb
61
- lib/arel/sql/engine.rb
62
- lib/arel/sql_literal.rb
63
64
  lib/arel/table.rb
64
65
  lib/arel/tree_manager.rb
65
66
  lib/arel/update_manager.rb
66
67
  lib/arel/visitors.rb
68
+ lib/arel/visitors/bind_substitute.rb
67
69
  lib/arel/visitors/bind_visitor.rb
68
70
  lib/arel/visitors/depth_first.rb
69
71
  lib/arel/visitors/dot.rb
70
72
  lib/arel/visitors/ibm_db.rb
71
73
  lib/arel/visitors/informix.rb
72
- lib/arel/visitors/join_sql.rb
73
74
  lib/arel/visitors/mssql.rb
74
75
  lib/arel/visitors/mysql.rb
75
76
  lib/arel/visitors/oracle.rb
76
- lib/arel/visitors/order_clauses.rb
77
77
  lib/arel/visitors/postgresql.rb
78
+ lib/arel/visitors/reduce.rb
78
79
  lib/arel/visitors/sqlite.rb
79
80
  lib/arel/visitors/to_sql.rb
80
81
  lib/arel/visitors/visitor.rb
81
82
  lib/arel/visitors/where_sql.rb
82
83
  lib/arel/window_predications.rb
83
84
  test/attributes/test_attribute.rb
85
+ test/collectors/test_bind_collector.rb
86
+ test/collectors/test_sql_string.rb
84
87
  test/helper.rb
85
88
  test/nodes/test_and.rb
86
89
  test/nodes/test_as.rb
@@ -124,7 +127,6 @@ test/visitors/test_dispatch_contamination.rb
124
127
  test/visitors/test_dot.rb
125
128
  test/visitors/test_ibm_db.rb
126
129
  test/visitors/test_informix.rb
127
- test/visitors/test_join_sql.rb
128
130
  test/visitors/test_mssql.rb
129
131
  test/visitors/test_mysql.rb
130
132
  test/visitors/test_oracle.rb
@@ -1,9 +1,11 @@
1
- # Arel [![Build Status](https://secure.travis-ci.org/rails/arel.png)](http://travis-ci.org/rails/arel) [![Dependency Status](https://gemnasium.com/rails/arel.png)](https://gemnasium.com/rails/arel)
1
+ # Arel [![Build Status](https://secure.travis-ci.org/rails/arel.svg?branch=master)](http://travis-ci.org/rails/arel) [![Dependency Status](https://gemnasium.com/rails/arel.svg)](https://gemnasium.com/rails/arel)
2
2
 
3
3
  * http://github.com/rails/arel
4
4
 
5
5
  ## DESCRIPTION
6
6
 
7
+ Arel Really Exasperates Logicians
8
+
7
9
  Arel is a SQL AST manager for Ruby. It
8
10
 
9
11
  1. Simplifies the generation of complex SQL queries
@@ -35,7 +37,7 @@ query.to_sql
35
37
 
36
38
  ### More Sophisticated Queries
37
39
 
38
- Here is a whirlwind tour through the most common relational operators. These will probably cover 80% of all interaction with the database.
40
+ Here is a whirlwind tour through the most common SQL operators. These will probably cover 80% of all interaction with the database.
39
41
 
40
42
  First is the 'restriction' operator, `where`:
41
43
 
@@ -51,6 +53,18 @@ users.project(users[:id])
51
53
  # => SELECT users.id FROM users
52
54
  ```
53
55
 
56
+ Comparison operators `=`, `!=`, `<`, `>`, `<=`, `>=`, `IN`:
57
+
58
+ ```ruby
59
+ users.where(users[:age].eq(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" = 10
60
+ users.where(users[:age].not_eq(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" != 10
61
+ users.where(users[:age].lt(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" < 10
62
+ users.where(users[:age].gt(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" > 10
63
+ users.where(users[:age].lteq(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" <= 10
64
+ users.where(users[:age].gteq(10)).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" >= 10
65
+ users.where(users[:age].in([20, 16, 17])).project(Arel.sql('*')) # => SELECT * FROM "users" WHERE "users"."age" IN (20, 16, 17)
66
+ ```
67
+
54
68
  Joins resemble SQL strongly:
55
69
 
56
70
  ```ruby
@@ -58,6 +72,13 @@ users.join(photos).on(users[:id].eq(photos[:user_id]))
58
72
  # => SELECT * FROM users INNER JOIN photos ON users.id = photos.user_id
59
73
  ```
60
74
 
75
+ Left Joins
76
+
77
+ ```ruby
78
+ users.join(photos, Arel::Nodes::OuterJoin).on(users[:id].eq(photos[:user_id]))
79
+ # => SELECT FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
80
+ ```
81
+
61
82
  What are called `LIMIT` and `OFFSET` in SQL are called `take` and `skip` in Arel:
62
83
 
63
84
  ```ruby
@@ -72,7 +93,7 @@ users.project(users[:name]).group(users[:name])
72
93
  # => SELECT users.name FROM users GROUP BY users.name
73
94
  ```
74
95
 
75
- The best property of the Relational Algebra is its "composability", or closure under all operations. For example, to restrict AND project, just "chain" the method invocations:
96
+ The best property of arel is its "composability", or closure under all operations. For example, to restrict AND project, just "chain" the method invocations:
76
97
 
77
98
  ```ruby
78
99
  users \
@@ -95,6 +116,23 @@ users.where(users[:name].eq('bob').or(users[:age].lt(25)))
95
116
 
96
117
  The `AND` operator behaves similarly.
97
118
 
119
+ Aggregate functions `AVG`, `SUM`, `COUNT`, `MIN`, `MAX`, `HAVING`:
120
+
121
+ ```ruby
122
+ photos.group(photos[:user_id]).having(photos[:id].count.gt(5)) # => SELECT FROM photos GROUP BY photos.user_id HAVING COUNT(photos.id) > 5
123
+ users.project(users[:age].sum) # => SELECT SUM(users.age) AS sum_id FROM users
124
+ users.project(users[:age].average) # => SELECT AVG(users.age) AS avg_id FROM users
125
+ users.project(users[:age].maximum) # => SELECT MAX(users.age) AS max_id FROM users
126
+ users.project(users[:age].minimum) # => SELECT MIN(users.age) AS min_id FROM users
127
+ users.project(users[:age].count) # => SELECT COUNT(users.age) FROM users
128
+ ```
129
+
130
+ Aliasing Aggregate Functions:
131
+
132
+ ```ruby
133
+ users.project(users[:age].average.as("mean_age")) # => SELECT AVG(users.age) AS mean_age FROM users
134
+ ```
135
+
98
136
  ### The Crazy Features
99
137
 
100
138
  The examples above are fairly simple and other libraries match or come close to matching the expressiveness of Arel (e.g., `Sequel` in Ruby).
@@ -122,7 +160,7 @@ products.
122
160
 
123
161
  #### Complex Joins
124
162
 
125
- Where Arel really shines in its ability to handle complex joins and aggregations. As a first example, let's consider an "adjacency list", a tree represented in a table. Suppose we have a table `comments`, representing a threaded discussion:
163
+ Where Arel really shines is in its ability to handle complex joins and aggregations. As a first example, let's consider an "adjacency list", a tree represented in a table. Suppose we have a table `comments`, representing a threaded discussion:
126
164
 
127
165
  ```ruby
128
166
  comments = Arel::Table.new(:comments)
@@ -134,16 +172,55 @@ And this table has the following attributes:
134
172
  # [:id, :body, :parent_id]
135
173
  ```
136
174
 
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:
175
+ The `parent_id` column is a foreign key from the `comments` table to itself.
176
+ Joining a table to itself requires aliasing in SQL. This aliasing can be handled from Arel as below:
138
177
 
139
178
  ```ruby
140
179
  replies = comments.alias
141
180
  comments_with_replies = \
142
- comments.join(replies).on(replies[:parent_id].eq(comments[:id]))
143
- # => SELECT * FROM comments INNER JOIN comments AS comments_2 WHERE comments_2.parent_id = comments.id
181
+ comments.join(replies).on(replies[:parent_id].eq(comments[:id])).where(comments[:id].eq(1))
182
+ # => SELECT * FROM comments INNER JOIN comments AS comments_2 WHERE comments_2.parent_id = comments.id AND comments.id = 1
183
+ ```
184
+
185
+ This will return the reply for the first comment.
186
+
187
+ [Common Table Expresssions(CTE)](https://en.wikipedia.org/wiki/Common_table_expressions#Common_table_expression) support via:
188
+
189
+ Create a `CTE`
190
+
191
+ ```ruby
192
+ cte_table = Arel::Table.new(:cte_table)
193
+ composed_cte = Arel::Nodes::As.new(cte_table, photos.where(photos[:created_at].gt(Date.current)))
144
194
  ```
145
195
 
146
- This will return the first comment's reply's body.
196
+ Use the created `CTE`:
197
+
198
+ ```ruby
199
+ users.
200
+ join(cte_table).on(users[:id].eq(cte_table[:user_id])).
201
+ project(users[:id], cte_table[:click].sum).
202
+ with(composed_cte)
203
+
204
+ # => WITH cte_table AS (SELECT FROM photos WHERE photos.created_at > '2014-05-02') SELECT users.id, SUM(cte_table.click) AS sum_id FROM users INNER JOIN cte_table ON users.id = cte_table.user_id
205
+ ```
206
+
207
+ When your query is too complex for `Arel`, you can use `Arel::SqlLiteral`:
208
+
209
+ ```ruby
210
+ photo_clicks = Arel::Nodes::SqlLiteral.new(<<-SQL
211
+ CASE WHEN condition1 THEN calculation1
212
+ WHEN condition2 THEN calculation2
213
+ WHEN condition3 THEN calculation3
214
+ ELSE default_calculation END
215
+ SQL
216
+ )
217
+ photos.project(photo_clicks.as("photo_clicks"))
218
+ # => SELECT CASE WHEN condition1 THEN calculation1
219
+ WHEN condition2 THEN calculation2
220
+ WHEN condition3 THEN calculation3
221
+ ELSE default_calculation END
222
+ FROM "photos"
223
+ ```
147
224
 
148
225
  ### License
149
226
 
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ Hoe.plugin :bundler # `gem install hoe-bundler`
10
10
 
11
11
  Hoe.spec 'arel' do
12
12
  developer('Aaron Patterson', 'aaron@tenderlovemaking.com')
13
- developer('Bryan Halmkamp', 'bryan@brynary.com')
13
+ developer('Bryan Helmkamp', 'bryan@brynary.com')
14
14
  developer('Emilio Tagua', 'miloops@gmail.com')
15
15
  developer('Nick Kallen', 'nick@example.org') # FIXME: need Nick's email
16
16
 
@@ -1,41 +1,40 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: arel 5.0.1.20140414130214 ruby lib
2
+ # stub: arel 6.0.0.beta1.20140817224534 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "arel"
6
- s.version = "5.0.1.20140414130214"
6
+ s.version = "6.0.0.beta1.20140817224534"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
- s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"]
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."
10
+ s.authors = ["Aaron Patterson", "Bryan Helmkamp", "Emilio Tagua", "Nick Kallen"]
11
+ s.date = "2014-08-18"
12
+ s.description = "Arel Really Exasperates Logicians\n\nArel 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/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"]
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/collectors/bind.rb", "lib/arel/collectors/plain_string.rb", "lib/arel/collectors/sql_string.rb", "lib/arel/compatibility/wheres.rb", "lib/arel/crud.rb", "lib/arel/delete_manager.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/full_outer_join.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/right_outer_join.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/table.rb", "lib/arel/tree_manager.rb", "lib/arel/update_manager.rb", "lib/arel/visitors.rb", "lib/arel/visitors/bind_substitute.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/mssql.rb", "lib/arel/visitors/mysql.rb", "lib/arel/visitors/oracle.rb", "lib/arel/visitors/postgresql.rb", "lib/arel/visitors/reduce.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/collectors/test_bind_collector.rb", "test/collectors/test_sql_string.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_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
- s.rubyforge_project = "arel"
20
19
  s.rubygems_version = "2.2.2"
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/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"]
20
+ s.summary = "Arel Really Exasperates Logicians Arel is a SQL AST manager for Ruby"
21
+ s.test_files = ["test/attributes/test_attribute.rb", "test/collectors/test_bind_collector.rb", "test/collectors/test_sql_string.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_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
22
 
24
23
  if s.respond_to? :specification_version then
25
24
  s.specification_version = 4
26
25
 
27
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
28
- s.add_development_dependency(%q<minitest>, ["~> 5.3"])
27
+ s.add_development_dependency(%q<minitest>, ["~> 5.4"])
29
28
  s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
30
- s.add_development_dependency(%q<hoe>, ["~> 3.6"])
29
+ s.add_development_dependency(%q<hoe>, ["~> 3.12"])
31
30
  else
32
- s.add_dependency(%q<minitest>, ["~> 5.3"])
31
+ s.add_dependency(%q<minitest>, ["~> 5.4"])
33
32
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
34
- s.add_dependency(%q<hoe>, ["~> 3.6"])
33
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
35
34
  end
36
35
  else
37
- s.add_dependency(%q<minitest>, ["~> 5.3"])
36
+ s.add_dependency(%q<minitest>, ["~> 5.4"])
38
37
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
39
- s.add_dependency(%q<hoe>, ["~> 3.6"])
38
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
40
39
  end
41
40
  end
@@ -11,10 +11,6 @@ require 'arel/table'
11
11
  require 'arel/attributes'
12
12
  require 'arel/compatibility/wheres'
13
13
 
14
- #### these are deprecated
15
- require 'arel/expression'
16
- ####
17
-
18
14
  require 'arel/visitors'
19
15
 
20
16
  require 'arel/tree_manager'
@@ -24,15 +20,8 @@ require 'arel/update_manager'
24
20
  require 'arel/delete_manager'
25
21
  require 'arel/nodes'
26
22
 
27
-
28
- #### these are deprecated
29
- require 'arel/deprecated'
30
- require 'arel/sql/engine'
31
- require 'arel/sql_literal'
32
- ####
33
-
34
23
  module Arel
35
- VERSION = '5.0.1'
24
+ VERSION = '6.0.0.beta1'
36
25
 
37
26
  def self.sql raw_sql
38
27
  Arel::Nodes::SqlLiteral.new raw_sql
@@ -0,0 +1,36 @@
1
+ module Arel
2
+ module Collectors
3
+ class Bind
4
+ def initialize
5
+ @parts = []
6
+ end
7
+
8
+ def << str
9
+ @parts << str
10
+ self
11
+ end
12
+
13
+ def add_bind bind
14
+ @parts << bind
15
+ self
16
+ end
17
+
18
+ def value; @parts; end
19
+
20
+ def substitute_binds bvs
21
+ bvs = bvs.dup
22
+ @parts.map do |val|
23
+ if Arel::Nodes::BindParam === val
24
+ bvs.shift
25
+ else
26
+ val
27
+ end
28
+ end
29
+ end
30
+
31
+ def compile bvs
32
+ substitute_binds(bvs).join
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module Arel
2
+ module Collectors
3
+ class PlainString
4
+ def initialize
5
+ @str = ''
6
+ end
7
+
8
+ def value
9
+ @str
10
+ end
11
+
12
+ def << str
13
+ @str << str
14
+ self
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ require 'arel/collectors/plain_string'
4
+
5
+ module Arel
6
+ module Collectors
7
+ class SQLString < PlainString
8
+ def add_bind bind
9
+ self << bind.to_s
10
+ self
11
+ end
12
+
13
+ def compile bvs
14
+ value
15
+ end
16
+ end
17
+ end
18
+ end
@@ -37,7 +37,7 @@ module Arel
37
37
  ###
38
38
  # Create a LOWER() function
39
39
  def lower column
40
- Nodes::NamedFunction.new 'LOWER', [column]
40
+ Nodes::NamedFunction.new 'LOWER', [Nodes.build_quoted(column)]
41
41
  end
42
42
  end
43
43
  end