arel 2.2.3 → 3.0.0.rc1
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.
- data/Manifest.txt +0 -2
- data/arel.gemspec +11 -14
- data/lib/arel.rb +1 -1
- data/lib/arel/nodes/node.rb +1 -1
- data/lib/arel/nodes/sql_literal.rb +0 -3
- data/lib/arel/select_manager.rb +4 -4
- data/lib/arel/visitors/depth_first.rb +0 -1
- data/lib/arel/visitors/dot.rb +0 -1
- data/lib/arel/visitors/to_sql.rb +13 -20
- data/test/nodes/test_node.rb +0 -1
- data/test/support/fake_record.rb +13 -3
- data/test/visitors/test_ibm_db.rb +1 -1
- data/test/visitors/test_informix.rb +1 -1
- data/test/visitors/test_join_sql.rb +1 -1
- data/test/visitors/test_mssql.rb +1 -1
- data/test/visitors/test_mysql.rb +1 -1
- data/test/visitors/test_postgres.rb +1 -1
- data/test/visitors/test_to_sql.rb +3 -27
- metadata +16 -19
- data/lib/arel/visitors/bind_visitor.rb +0 -24
- data/test/visitors/test_bind_visitor.rb +0 -39
data/Manifest.txt
CHANGED
|
@@ -62,7 +62,6 @@ lib/arel/table.rb
|
|
|
62
62
|
lib/arel/tree_manager.rb
|
|
63
63
|
lib/arel/update_manager.rb
|
|
64
64
|
lib/arel/visitors.rb
|
|
65
|
-
lib/arel/visitors/bind_visitor.rb
|
|
66
65
|
lib/arel/visitors/depth_first.rb
|
|
67
66
|
lib/arel/visitors/dot.rb
|
|
68
67
|
lib/arel/visitors/ibm_db.rb
|
|
@@ -107,7 +106,6 @@ test/test_insert_manager.rb
|
|
|
107
106
|
test/test_select_manager.rb
|
|
108
107
|
test/test_table.rb
|
|
109
108
|
test/test_update_manager.rb
|
|
110
|
-
test/visitors/test_bind_visitor.rb
|
|
111
109
|
test/visitors/test_depth_first.rb
|
|
112
110
|
test/visitors/test_dot.rb
|
|
113
111
|
test/visitors/test_ibm_db.rb
|
data/arel.gemspec
CHANGED
|
@@ -2,38 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "arel"
|
|
5
|
-
s.version = "
|
|
5
|
+
s.version = "3.0.0.pre.20111119204131"
|
|
6
6
|
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["Aaron Patterson", "Bryan Halmkamp", "Emilio Tagua", "Nick Kallen"]
|
|
9
|
-
s.date = "
|
|
9
|
+
s.date = "2011-11-20"
|
|
10
10
|
s.description = "Arel is a SQL AST manager for Ruby. It\n\n1. Simplifies the generation of complex SQL queries\n2. Adapts to various RDBMS systems\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."
|
|
11
11
|
s.email = ["aaron@tenderlovemaking.com", "bryan@brynary.com", "miloops@gmail.com", "nick@example.org"]
|
|
12
12
|
s.extra_rdoc_files = ["History.txt", "MIT-LICENSE.txt", "Manifest.txt", "README.markdown"]
|
|
13
|
-
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/false.rb", "lib/arel/nodes/function.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/ordering.rb", "lib/arel/nodes/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/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/relation.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/
|
|
13
|
+
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/false.rb", "lib/arel/nodes/function.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/ordering.rb", "lib/arel/nodes/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/with.rb", "lib/arel/order_predications.rb", "lib/arel/predications.rb", "lib/arel/relation.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/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", "test/attributes/test_attribute.rb", "test/helper.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_equality.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_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/support/fake_record.rb", "test/test_activerecord_compat.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_depth_first.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"]
|
|
14
14
|
s.homepage = "http://github.com/rails/arel"
|
|
15
15
|
s.rdoc_options = ["--main", "README.markdown"]
|
|
16
16
|
s.require_paths = ["lib"]
|
|
17
17
|
s.rubyforge_project = "arel"
|
|
18
18
|
s.rubygems_version = "1.8.11"
|
|
19
19
|
s.summary = "Arel is a SQL AST manager for Ruby"
|
|
20
|
-
s.test_files = ["test/attributes/test_attribute.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_equality.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_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/test_activerecord_compat.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/
|
|
20
|
+
s.test_files = ["test/attributes/test_attribute.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_equality.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_select_core.rb", "test/nodes/test_select_statement.rb", "test/nodes/test_sql_literal.rb", "test/nodes/test_sum.rb", "test/nodes/test_update_statement.rb", "test/test_activerecord_compat.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_depth_first.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"]
|
|
21
21
|
|
|
22
22
|
if s.respond_to? :specification_version then
|
|
23
23
|
s.specification_version = 3
|
|
24
24
|
|
|
25
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
26
|
-
s.add_development_dependency(%q<minitest>, ["~> 2.
|
|
27
|
-
s.add_development_dependency(%q<
|
|
28
|
-
s.add_development_dependency(%q<hoe>, ["~> 2.13"])
|
|
26
|
+
s.add_development_dependency(%q<minitest>, ["~> 2.8"])
|
|
27
|
+
s.add_development_dependency(%q<hoe>, ["~> 2.12"])
|
|
29
28
|
else
|
|
30
|
-
s.add_dependency(%q<minitest>, ["~> 2.
|
|
31
|
-
s.add_dependency(%q<
|
|
32
|
-
s.add_dependency(%q<hoe>, ["~> 2.13"])
|
|
29
|
+
s.add_dependency(%q<minitest>, ["~> 2.8"])
|
|
30
|
+
s.add_dependency(%q<hoe>, ["~> 2.12"])
|
|
33
31
|
end
|
|
34
32
|
else
|
|
35
|
-
s.add_dependency(%q<minitest>, ["~> 2.
|
|
36
|
-
s.add_dependency(%q<
|
|
37
|
-
s.add_dependency(%q<hoe>, ["~> 2.13"])
|
|
33
|
+
s.add_dependency(%q<minitest>, ["~> 2.8"])
|
|
34
|
+
s.add_dependency(%q<hoe>, ["~> 2.12"])
|
|
38
35
|
end
|
|
39
36
|
end
|
data/lib/arel.rb
CHANGED
data/lib/arel/nodes/node.rb
CHANGED
data/lib/arel/select_manager.rb
CHANGED
|
@@ -51,7 +51,7 @@ module Arel
|
|
|
51
51
|
if $VERBOSE
|
|
52
52
|
warn "(#{caller.first}) where_clauses is deprecated and will be removed in arel 3.0.0 with no replacement"
|
|
53
53
|
end
|
|
54
|
-
to_sql = Visitors::ToSql.new @engine.
|
|
54
|
+
to_sql = Visitors::ToSql.new @engine.connection
|
|
55
55
|
@ctx.wheres.map { |c| to_sql.accept c }
|
|
56
56
|
end
|
|
57
57
|
|
|
@@ -161,13 +161,13 @@ module Arel
|
|
|
161
161
|
|
|
162
162
|
def wheres
|
|
163
163
|
warn "#{caller[0]}: SelectManager#wheres is deprecated and will be removed in ARel 3.0.0 with no replacement"
|
|
164
|
-
Compatibility::Wheres.new @engine.
|
|
164
|
+
Compatibility::Wheres.new @engine.connection, @ctx.wheres
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
def where_sql
|
|
168
168
|
return if @ctx.wheres.empty?
|
|
169
169
|
|
|
170
|
-
viz = Visitors::WhereSql.new @engine.
|
|
170
|
+
viz = Visitors::WhereSql.new @engine.connection
|
|
171
171
|
Nodes::SqlLiteral.new viz.accept @ctx
|
|
172
172
|
end
|
|
173
173
|
|
|
@@ -222,7 +222,7 @@ module Arel
|
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
def order_clauses
|
|
225
|
-
visitor = Visitors::OrderClauses.new(@engine.
|
|
225
|
+
visitor = Visitors::OrderClauses.new(@engine.connection)
|
|
226
226
|
visitor.accept(@ast).map { |x|
|
|
227
227
|
Nodes::SqlLiteral.new x
|
|
228
228
|
}
|
|
@@ -109,7 +109,6 @@ module Arel
|
|
|
109
109
|
alias :visit_Arel_Nodes_Lock :terminal
|
|
110
110
|
alias :visit_Arel_Nodes_Node :terminal
|
|
111
111
|
alias :visit_Arel_Nodes_SqlLiteral :terminal
|
|
112
|
-
alias :visit_Arel_Nodes_BindParam :terminal
|
|
113
112
|
alias :visit_Arel_SqlLiteral :terminal
|
|
114
113
|
alias :visit_BigDecimal :terminal
|
|
115
114
|
alias :visit_Bignum :terminal
|
data/lib/arel/visitors/dot.rb
CHANGED
data/lib/arel/visitors/to_sql.rb
CHANGED
|
@@ -4,30 +4,22 @@ require 'date'
|
|
|
4
4
|
module Arel
|
|
5
5
|
module Visitors
|
|
6
6
|
class ToSql < Arel::Visitors::Visitor
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
attr_accessor :last_column
|
|
8
|
+
|
|
9
|
+
def initialize connection
|
|
10
|
+
@connection = connection
|
|
11
|
+
@schema_cache = connection.schema_cache
|
|
10
12
|
@quoted_tables = {}
|
|
11
13
|
@quoted_columns = {}
|
|
14
|
+
@last_column = nil
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def accept object
|
|
15
18
|
self.last_column = nil
|
|
16
|
-
|
|
17
|
-
@connection = conn
|
|
18
|
-
super
|
|
19
|
-
end
|
|
19
|
+
super
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
private
|
|
23
|
-
def last_column= col
|
|
24
|
-
Thread.current[:arel_visitors_to_sql_last_column] = col
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def last_column
|
|
28
|
-
Thread.current[:arel_visitors_to_sql_last_column]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
23
|
def visit_Arel_Nodes_DeleteStatement o
|
|
32
24
|
[
|
|
33
25
|
"DELETE FROM #{visit o.relation}",
|
|
@@ -97,7 +89,7 @@ key on UpdateManager using UpdateManager#key=
|
|
|
97
89
|
end
|
|
98
90
|
|
|
99
91
|
def table_exists? name
|
|
100
|
-
@
|
|
92
|
+
@schema_cache.table_exists? name
|
|
101
93
|
end
|
|
102
94
|
|
|
103
95
|
def column_for attr
|
|
@@ -110,13 +102,13 @@ key on UpdateManager using UpdateManager#key=
|
|
|
110
102
|
end
|
|
111
103
|
|
|
112
104
|
def column_cache
|
|
113
|
-
@
|
|
105
|
+
@schema_cache.columns_hash
|
|
114
106
|
end
|
|
115
107
|
|
|
116
108
|
def visit_Arel_Nodes_Values o
|
|
117
109
|
"VALUES (#{o.expressions.zip(o.columns).map { |value, attr|
|
|
118
110
|
if Nodes::SqlLiteral === value
|
|
119
|
-
|
|
111
|
+
visit_Arel_Nodes_SqlLiteral value
|
|
120
112
|
else
|
|
121
113
|
quote(value, attr && column_for(attr))
|
|
122
114
|
end
|
|
@@ -382,13 +374,14 @@ key on UpdateManager using UpdateManager#key=
|
|
|
382
374
|
|
|
383
375
|
def literal o; o end
|
|
384
376
|
|
|
385
|
-
alias :visit_Arel_Nodes_BindParam :literal
|
|
386
377
|
alias :visit_Arel_Nodes_SqlLiteral :literal
|
|
387
378
|
alias :visit_Arel_SqlLiteral :literal # This is deprecated
|
|
388
379
|
alias :visit_Bignum :literal
|
|
389
380
|
alias :visit_Fixnum :literal
|
|
390
381
|
|
|
391
|
-
def quoted o
|
|
382
|
+
def quoted o
|
|
383
|
+
quote(o, last_column)
|
|
384
|
+
end
|
|
392
385
|
|
|
393
386
|
alias :visit_ActiveSupport_Multibyte_Chars :quoted
|
|
394
387
|
alias :visit_ActiveSupport_StringInquirer :quoted
|
data/test/nodes/test_node.rb
CHANGED
data/test/support/fake_record.rb
CHANGED
|
@@ -3,9 +3,10 @@ module FakeRecord
|
|
|
3
3
|
end
|
|
4
4
|
|
|
5
5
|
class Connection
|
|
6
|
-
attr_reader :tables, :columns_hash
|
|
6
|
+
attr_reader :tables, :columns_hash
|
|
7
|
+
attr_accessor :visitor
|
|
7
8
|
|
|
8
|
-
def initialize(visitor)
|
|
9
|
+
def initialize(visitor = nil)
|
|
9
10
|
@tables = %w{ users photos developers products}
|
|
10
11
|
@columns = {
|
|
11
12
|
'users' => [
|
|
@@ -50,6 +51,10 @@ module FakeRecord
|
|
|
50
51
|
"\"#{name.to_s}\""
|
|
51
52
|
end
|
|
52
53
|
|
|
54
|
+
def schema_cache
|
|
55
|
+
self
|
|
56
|
+
end
|
|
57
|
+
|
|
53
58
|
def quote thing, column = nil
|
|
54
59
|
if column && column.type == :integer
|
|
55
60
|
return 'NULL' if thing.nil?
|
|
@@ -79,7 +84,8 @@ module FakeRecord
|
|
|
79
84
|
|
|
80
85
|
def initialize
|
|
81
86
|
@spec = Spec.new(:adapter => 'america')
|
|
82
|
-
@connection = Connection.new
|
|
87
|
+
@connection = Connection.new
|
|
88
|
+
@connection.visitor = Arel::Visitors::ToSql.new(connection)
|
|
83
89
|
end
|
|
84
90
|
|
|
85
91
|
def with_connection
|
|
@@ -93,6 +99,10 @@ module FakeRecord
|
|
|
93
99
|
def columns_hash
|
|
94
100
|
connection.columns_hash
|
|
95
101
|
end
|
|
102
|
+
|
|
103
|
+
def schema_cache
|
|
104
|
+
connection
|
|
105
|
+
end
|
|
96
106
|
end
|
|
97
107
|
|
|
98
108
|
class Base
|
data/test/visitors/test_mssql.rb
CHANGED
data/test/visitors/test_mysql.rb
CHANGED
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
require 'helper'
|
|
2
2
|
|
|
3
|
-
class Arel::Visitors::ToSql
|
|
4
|
-
def last_column; Thread.current[:arel_visitors_to_sql_last_column]; end
|
|
5
|
-
end
|
|
6
|
-
|
|
7
3
|
module Arel
|
|
8
4
|
module Visitors
|
|
9
5
|
describe 'the to_sql visitor' do
|
|
10
6
|
before do
|
|
11
|
-
@visitor = ToSql.new Table.engine.
|
|
7
|
+
@visitor = ToSql.new Table.engine.connection
|
|
12
8
|
@table = Table.new(:users)
|
|
13
9
|
@attr = @table[:id]
|
|
14
10
|
end
|
|
15
11
|
|
|
16
|
-
it 'works with BindParams' do
|
|
17
|
-
node = Nodes::BindParam.new 'omg'
|
|
18
|
-
sql = @visitor.accept node
|
|
19
|
-
sql.must_be_like 'omg'
|
|
20
|
-
end
|
|
21
|
-
|
|
22
12
|
it 'can define a dispatch method' do
|
|
23
13
|
visited = false
|
|
24
14
|
viz = Class.new(Arel::Visitors::Visitor) {
|
|
@@ -35,20 +25,6 @@ module Arel
|
|
|
35
25
|
assert visited, 'hello method was called'
|
|
36
26
|
end
|
|
37
27
|
|
|
38
|
-
it "should be thread safe around usage of last_column" do
|
|
39
|
-
visit_integer_column = Thread.new do
|
|
40
|
-
Thread.stop
|
|
41
|
-
@visitor.send(:visit_Arel_Attributes_Attribute, @attr)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
sleep 0.2
|
|
45
|
-
@visitor.accept(@table[:name])
|
|
46
|
-
assert_equal(:string, @visitor.last_column.type)
|
|
47
|
-
visit_integer_column.run
|
|
48
|
-
visit_integer_column.join
|
|
49
|
-
assert_equal(:string, @visitor.last_column.type)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
28
|
it 'should not quote sql literals' do
|
|
53
29
|
node = @table[Arel.star]
|
|
54
30
|
sql = @visitor.accept node
|
|
@@ -226,7 +202,7 @@ module Arel
|
|
|
226
202
|
end
|
|
227
203
|
end
|
|
228
204
|
in_node = Nodes::In.new @attr, %w{ a b c }
|
|
229
|
-
visitor = visitor.new(Table.engine.
|
|
205
|
+
visitor = visitor.new(Table.engine.connection)
|
|
230
206
|
visitor.expected = Table.engine.connection.columns(:users).find { |x|
|
|
231
207
|
x.name == 'name'
|
|
232
208
|
}
|
|
@@ -314,7 +290,7 @@ module Arel
|
|
|
314
290
|
end
|
|
315
291
|
end
|
|
316
292
|
in_node = Nodes::NotIn.new @attr, %w{ a b c }
|
|
317
|
-
visitor = visitor.new(Table.engine.
|
|
293
|
+
visitor = visitor.new(Table.engine.connection)
|
|
318
294
|
visitor.expected = Table.engine.connection.columns(:users).find { |x|
|
|
319
295
|
x.name == 'name'
|
|
320
296
|
}
|
metadata
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: arel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 3.0.0.rc1
|
|
5
|
+
prerelease: 6
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Aaron Patterson
|
|
@@ -12,41 +12,41 @@ authors:
|
|
|
12
12
|
autorequire:
|
|
13
13
|
bindir: bin
|
|
14
14
|
cert_chain: []
|
|
15
|
-
date:
|
|
15
|
+
date: 2011-12-14 00:00:00.000000000 Z
|
|
16
16
|
dependencies:
|
|
17
17
|
- !ruby/object:Gem::Dependency
|
|
18
18
|
name: minitest
|
|
19
|
-
requirement: &
|
|
19
|
+
requirement: &70238561431700 !ruby/object:Gem::Requirement
|
|
20
20
|
none: false
|
|
21
21
|
requirements:
|
|
22
22
|
- - ~>
|
|
23
23
|
- !ruby/object:Gem::Version
|
|
24
|
-
version: '2.
|
|
24
|
+
version: '2.9'
|
|
25
25
|
type: :development
|
|
26
26
|
prerelease: false
|
|
27
|
-
version_requirements: *
|
|
27
|
+
version_requirements: *70238561431700
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
30
|
-
requirement: &
|
|
29
|
+
name: hoe
|
|
30
|
+
requirement: &70238561493640 !ruby/object:Gem::Requirement
|
|
31
31
|
none: false
|
|
32
32
|
requirements:
|
|
33
33
|
- - ~>
|
|
34
34
|
- !ruby/object:Gem::Version
|
|
35
|
-
version: '
|
|
35
|
+
version: '2.12'
|
|
36
36
|
type: :development
|
|
37
37
|
prerelease: false
|
|
38
|
-
version_requirements: *
|
|
38
|
+
version_requirements: *70238561493640
|
|
39
39
|
- !ruby/object:Gem::Dependency
|
|
40
|
-
name:
|
|
41
|
-
requirement: &
|
|
40
|
+
name: rdoc
|
|
41
|
+
requirement: &70238562708680 !ruby/object:Gem::Requirement
|
|
42
42
|
none: false
|
|
43
43
|
requirements:
|
|
44
44
|
- - ~>
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '
|
|
46
|
+
version: '3.10'
|
|
47
47
|
type: :development
|
|
48
48
|
prerelease: false
|
|
49
|
-
version_requirements: *
|
|
49
|
+
version_requirements: *70238562708680
|
|
50
50
|
description: ! 'Arel is a SQL AST manager for Ruby. It
|
|
51
51
|
|
|
52
52
|
|
|
@@ -137,7 +137,6 @@ files:
|
|
|
137
137
|
- lib/arel/tree_manager.rb
|
|
138
138
|
- lib/arel/update_manager.rb
|
|
139
139
|
- lib/arel/visitors.rb
|
|
140
|
-
- lib/arel/visitors/bind_visitor.rb
|
|
141
140
|
- lib/arel/visitors/depth_first.rb
|
|
142
141
|
- lib/arel/visitors/dot.rb
|
|
143
142
|
- lib/arel/visitors/ibm_db.rb
|
|
@@ -182,7 +181,6 @@ files:
|
|
|
182
181
|
- test/test_select_manager.rb
|
|
183
182
|
- test/test_table.rb
|
|
184
183
|
- test/test_update_manager.rb
|
|
185
|
-
- test/visitors/test_bind_visitor.rb
|
|
186
184
|
- test/visitors/test_depth_first.rb
|
|
187
185
|
- test/visitors/test_dot.rb
|
|
188
186
|
- test/visitors/test_ibm_db.rb
|
|
@@ -211,9 +209,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
211
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
210
|
none: false
|
|
213
211
|
requirements:
|
|
214
|
-
- - ! '
|
|
212
|
+
- - ! '>'
|
|
215
213
|
- !ruby/object:Gem::Version
|
|
216
|
-
version:
|
|
214
|
+
version: 1.3.1
|
|
217
215
|
requirements: []
|
|
218
216
|
rubyforge_project: arel
|
|
219
217
|
rubygems_version: 1.8.11
|
|
@@ -249,7 +247,6 @@ test_files:
|
|
|
249
247
|
- test/test_select_manager.rb
|
|
250
248
|
- test/test_table.rb
|
|
251
249
|
- test/test_update_manager.rb
|
|
252
|
-
- test/visitors/test_bind_visitor.rb
|
|
253
250
|
- test/visitors/test_depth_first.rb
|
|
254
251
|
- test/visitors/test_dot.rb
|
|
255
252
|
- test/visitors/test_ibm_db.rb
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Arel
|
|
2
|
-
module Visitors
|
|
3
|
-
module BindVisitor
|
|
4
|
-
def initialize target
|
|
5
|
-
@block = nil
|
|
6
|
-
super
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def accept node, &block
|
|
10
|
-
@block = block if block_given?
|
|
11
|
-
super
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
private
|
|
15
|
-
def visit_Arel_Nodes_BindParam o
|
|
16
|
-
if @block
|
|
17
|
-
@block.call
|
|
18
|
-
else
|
|
19
|
-
super
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
require 'helper'
|
|
2
|
-
require 'arel/visitors/bind_visitor'
|
|
3
|
-
|
|
4
|
-
module Arel
|
|
5
|
-
module Visitors
|
|
6
|
-
class TestBindVisitor < MiniTest::Unit::TestCase
|
|
7
|
-
def test_visitor_yields_on_binds
|
|
8
|
-
visitor = Class.new(Arel::Visitors::Visitor) {
|
|
9
|
-
def initialize omg
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
include Arel::Visitors::BindVisitor
|
|
13
|
-
}.new nil
|
|
14
|
-
|
|
15
|
-
bp = Nodes::BindParam.new 'omg'
|
|
16
|
-
called = false
|
|
17
|
-
visitor.accept(bp) { called = true }
|
|
18
|
-
assert called
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def test_visitor_only_yields_on_binds
|
|
22
|
-
visitor = Class.new(Arel::Visitors::Visitor) {
|
|
23
|
-
def initialize omg
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
include Arel::Visitors::BindVisitor
|
|
27
|
-
}.new(nil)
|
|
28
|
-
|
|
29
|
-
bp = Arel.sql 'omg'
|
|
30
|
-
called = false
|
|
31
|
-
|
|
32
|
-
assert_raises(TypeError) {
|
|
33
|
-
visitor.accept(bp) { called = true }
|
|
34
|
-
}
|
|
35
|
-
refute called
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|