arel_extensions 0.8.1 → 0.8.2
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 +27 -15
- data/Gemfile +8 -2
- data/arel_extensions.gemspec +5 -8
- data/gemfiles/{rasil3.gemfile → rails3.gemfile} +5 -1
- data/gemfiles/rails4.gemfile +20 -0
- data/gemfiles/rails5.gemfile +5 -0
- data/lib/arel_extensions/nodes/function.rb +9 -0
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/mysql.rb +7 -20
- data/lib/arel_extensions/visitors/oracle.rb +2 -18
- data/lib/arel_extensions/visitors/to_sql.rb +3 -3
- data/test/database.yml +22 -0
- data/test/test_comparators.rb +21 -25
- data/test/visitors/test_bulk_insert_oracle.rb +1 -1
- data/test/visitors/test_bulk_insert_sqlite.rb +1 -1
- data/test/visitors/test_bulk_insert_to_sql.rb +3 -2
- data/test/visitors/test_oracle.rb +1 -0
- data/test/with_ar/test_bulk_sqlite.rb +6 -3
- data/test/with_ar/test_math_sqlite.rb +6 -4
- data/test/with_ar/test_string_mysql.rb +78 -0
- data/test/with_ar/test_string_sqlite.rb +7 -4
- metadata +17 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58bd1c5b91bc632c7697a918369ea19c99ed026b
|
4
|
+
data.tar.gz: d52eae92a11823a94d51eda6de44187199d0e738
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29438df3218c96066e2d1a76f1ccd00b315c0d0957c6cd321cb9db09fe19d12c966d3d825f536337d87a3bafc547e77e221b871fcf407b01831080d99d872eaf
|
7
|
+
data.tar.gz: b56534f4ff7e7cde0a7dc64756075cf8a5ed892c1fc35e1913adabba3bc3f1afc430fb3c07e9bfb461523077feb65b78df25ae75e98373cdaac4fe29d0ea06cc
|
data/.travis.yml
CHANGED
@@ -7,8 +7,8 @@ before_install:
|
|
7
7
|
#addons:
|
8
8
|
# mariadb: '10.0'
|
9
9
|
gemfile:
|
10
|
-
- Gemfile
|
11
10
|
- gemfiles/rails3.gemfile
|
11
|
+
- gemfiles/rails4.gemfile
|
12
12
|
- gemfiles/rails5.gemfile
|
13
13
|
services:
|
14
14
|
- mysql
|
@@ -41,26 +41,38 @@ jdk:
|
|
41
41
|
matrix:
|
42
42
|
fast_finish: true
|
43
43
|
exclude:
|
44
|
-
-
|
45
|
-
|
46
|
-
-
|
47
|
-
|
48
|
-
-
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
-
|
53
|
-
|
54
|
-
-
|
55
|
-
|
44
|
+
- rvm: rbx-2
|
45
|
+
jdk: openjdk7
|
46
|
+
- rvm: rbx-2
|
47
|
+
jdk: oraclejdk7
|
48
|
+
- rvm: 2.0.0
|
49
|
+
jdk: openjdk7
|
50
|
+
- rvm: 2.0.0
|
51
|
+
jdk: oraclejdk7
|
52
|
+
- rvm: 2.1
|
53
|
+
jdk: openjdk7
|
54
|
+
- rvm: 2.1
|
55
|
+
jdk: oraclejdk7
|
56
|
+
- rvm: 2.2.5
|
57
|
+
jdk: openjdk7
|
58
|
+
- rvm: 2.2.5
|
59
|
+
jdk: oraclejdk7
|
60
|
+
- rvm: 2.3.1
|
61
|
+
jdk: openjdk7
|
62
|
+
- rvm: 2.3.1
|
63
|
+
jdk: oraclejdk7
|
64
|
+
- rvm: ruby-head
|
65
|
+
jdk: openjdk7
|
66
|
+
- rvm: ruby-head
|
67
|
+
jdk: oraclejdk7
|
56
68
|
allow_failures:
|
57
69
|
# - rvm: jruby-9.0.5.0
|
58
70
|
# - rvm: jruby-head
|
59
71
|
- rvm: ruby-head
|
60
|
-
gemfile:
|
72
|
+
gemfile: gemfiles/rails4.gemfile
|
61
73
|
- rvm: ruby-head
|
62
74
|
gemfile: gemfiles/rails3.gemfile
|
63
75
|
# - rvm: jruby-head
|
64
|
-
bundler_args: --jobs
|
76
|
+
bundler_args: --jobs 2 --retry 2
|
65
77
|
notifications:
|
66
78
|
email: false
|
data/Gemfile
CHANGED
@@ -4,7 +4,13 @@ gemspec
|
|
4
4
|
|
5
5
|
group :test do
|
6
6
|
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
7
|
-
|
7
|
+
gem "mysql2", :platform => [:ruby, :mswin, :mingw]
|
8
8
|
gem "jdbc-sqlite3", :platform => :jruby
|
9
|
-
gem
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
10
|
+
gem "activerecord-jdbcmysql-adapter", :platform => :jruby
|
11
|
+
gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
|
12
|
+
|
13
|
+
gem 'activesupport', '~> 4.0'
|
14
|
+
gem 'activemodel', '~> 4.0'
|
15
|
+
gem 'activerecord', '~> 4.0'
|
10
16
|
end
|
data/arel_extensions.gemspec
CHANGED
@@ -4,9 +4,9 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "arel_extensions"
|
7
|
-
s.version = '0.8.
|
7
|
+
s.version = '0.8.2'
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Yann Azoury", "Mathilde
|
9
|
+
s.authors = ["Yann Azoury", "Mathilde Pechdimaldjian", "Félix Bellanger"]
|
10
10
|
s.email = ["yann.azoury@faveod.com", "mathilde.pechdimaldjian@gmail.com", "felix.bellanger@faveod.com"]
|
11
11
|
s.homepage = "https://github.com/Faveod/arel-extensions"
|
12
12
|
s.description = "Adds new features to Arel"
|
@@ -21,12 +21,9 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
|
-
s.add_dependency('arel'
|
24
|
+
s.add_dependency('arel')
|
25
25
|
|
26
|
-
s.add_development_dependency('minitest')
|
26
|
+
s.add_development_dependency('minitest', '~> 5.9')
|
27
27
|
s.add_development_dependency('rdoc', '~> 4.0')
|
28
|
-
s.add_development_dependency('rake')
|
29
|
-
s.add_development_dependency('activesupport', '~> 4.0')
|
30
|
-
s.add_development_dependency('activemodel', '~> 4.0')
|
31
|
-
s.add_development_dependency('activerecord', '~> 4.0')
|
28
|
+
s.add_development_dependency('rake', '~> 11')
|
32
29
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem 'arel', '~>
|
3
|
+
gem 'arel', '~> 3.0'
|
4
4
|
|
5
5
|
group :development, :test do
|
6
6
|
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
7
|
+
gem "mysql2", :platform => [:ruby, :mswin, :mingw]
|
7
8
|
# for JRuby
|
8
9
|
gem "jdbc-sqlite3", :platform => :jruby
|
10
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
11
|
+
gem "activerecord-jdbcmysql-adapter", :platform => :jruby
|
12
|
+
gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
|
9
13
|
gem 'activesupport', '~> 3.2'
|
10
14
|
gem 'activemodel', '~> 3.2'
|
11
15
|
gem 'activerecord', '~> 3.2'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem 'arel', '~> 6.0'
|
4
|
+
|
5
|
+
group :development, :test do
|
6
|
+
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
7
|
+
gem "mysql2", :platform => [:ruby, :mswin, :mingw]
|
8
|
+
# for JRuby
|
9
|
+
gem "jdbc-sqlite3", :platform => :jruby
|
10
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
11
|
+
gem "activerecord-jdbcmysql-adapter", :platform => :jruby
|
12
|
+
gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
|
13
|
+
gem 'activesupport', '~> 4.0'
|
14
|
+
gem 'activemodel', '~> 4.0'
|
15
|
+
gem 'activerecord', '~> 4.0'
|
16
|
+
gem 'rdoc'
|
17
|
+
gem 'rake', '~> 11'
|
18
|
+
end
|
19
|
+
|
20
|
+
gemspec :path => "../"
|
data/gemfiles/rails5.gemfile
CHANGED
@@ -4,8 +4,13 @@ gem 'arel', '~> 7.0'
|
|
4
4
|
|
5
5
|
group :development, :test do
|
6
6
|
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
7
|
+
gem "mysql2", :platform => [:ruby, :mswin, :mingw]
|
7
8
|
# for JRuby
|
8
9
|
gem "jdbc-sqlite3", :platform => :jruby
|
10
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
11
|
+
gem "activerecord-jdbcmysql-adapter", :platform => :jruby
|
12
|
+
gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
|
13
|
+
|
9
14
|
gem 'activesupport', '~> 5'
|
10
15
|
gem 'activemodel', '~> 5'
|
11
16
|
gem 'activerecord', '~> 5'
|
@@ -36,26 +36,13 @@ module ArelExtensions
|
|
36
36
|
|
37
37
|
#****************************************************************#
|
38
38
|
def visit_ArelExtensions_Nodes_Concat o, collector
|
39
|
-
|
40
|
-
|
41
|
-
collector <<
|
42
|
-
collector = visit
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
collector
|
47
|
-
elsif (arg == :date || arg == :datetime)
|
48
|
-
collector << "DATE_ADD("
|
49
|
-
collector = visit o.left, collector
|
50
|
-
collector << ",INTERVAL #{o.right} DAY)"
|
51
|
-
collector
|
52
|
-
else
|
53
|
-
collector << "CONCAT("
|
54
|
-
collector = visit o.left, collector
|
55
|
-
collector << ",'"
|
56
|
-
collector << "#{o.right}')"
|
57
|
-
collector
|
58
|
-
end
|
39
|
+
collector << "CONCAT("
|
40
|
+
o.expressions.each_with_index { |arg, i|
|
41
|
+
collector << Arel::Visitors::MySQL::COMMA unless i == 0
|
42
|
+
collector = visit arg, collector
|
43
|
+
}
|
44
|
+
collector << ")"
|
45
|
+
collector
|
59
46
|
end
|
60
47
|
|
61
48
|
|
@@ -26,7 +26,8 @@ module ArelExtensions
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
#deprecated
|
30
|
+
def visit_ArelExtensions_Nodes_ConcatDep o, collector
|
30
31
|
arg = o.left.relation.engine.columns.find{|c| c.name == o.left.name.to_s}.type
|
31
32
|
if(o.right.is_a?(Arel::Attributes::Attribute))
|
32
33
|
collector << "CONCAT("
|
@@ -99,10 +100,6 @@ module ArelExtensions
|
|
99
100
|
end
|
100
101
|
|
101
102
|
|
102
|
-
def visit_ArelExtensions_Nodes_Findis o,collector
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
103
|
def visit_ArelExtensions_Nodes_Length o, collector
|
107
104
|
collector << "LENGTH("
|
108
105
|
collector = visit o.expr, collector
|
@@ -111,19 +108,6 @@ module ArelExtensions
|
|
111
108
|
end
|
112
109
|
|
113
110
|
|
114
|
-
def visit_ArelExtensions_Nodes_Locate o, collector
|
115
|
-
collector << "LOCATE("
|
116
|
-
if(o.val.is_a?(Arel::Attributes::Attribute))
|
117
|
-
collector = visit o.val, collector
|
118
|
-
else
|
119
|
-
collector << "'#{o.val}'"
|
120
|
-
end
|
121
|
-
collector << ","
|
122
|
-
collector = visit o.expr, collector
|
123
|
-
collector << ")"
|
124
|
-
collector
|
125
|
-
end
|
126
|
-
|
127
111
|
def visit_ArelExtensions_Nodes_Isnull o, collector
|
128
112
|
collector << "NVL("
|
129
113
|
collector = visit o.left, collector
|
@@ -111,7 +111,7 @@ module ArelExtensions
|
|
111
111
|
end
|
112
112
|
|
113
113
|
# override
|
114
|
-
remove_method :visit_Arel_Nodes_As
|
114
|
+
remove_method(:visit_Arel_Nodes_As) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_As)
|
115
115
|
def visit_Arel_Nodes_As o, collector
|
116
116
|
if o.left.is_a?(Arel::Nodes::Binary)
|
117
117
|
collector << '('
|
@@ -125,7 +125,7 @@ module ArelExtensions
|
|
125
125
|
collector
|
126
126
|
end
|
127
127
|
|
128
|
-
remove_method :visit_Arel_Nodes_Regexp
|
128
|
+
remove_method(:visit_Arel_Nodes_Regexp) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_Regexp)
|
129
129
|
def visit_Arel_Nodes_Regexp o, collector
|
130
130
|
collector = visit o.left, collector
|
131
131
|
collector << " REGEXP "
|
@@ -133,7 +133,7 @@ module ArelExtensions
|
|
133
133
|
collector
|
134
134
|
end
|
135
135
|
|
136
|
-
remove_method :visit_Arel_Nodes_NotRegexp
|
136
|
+
remove_method(:visit_Arel_Nodes_NotRegexp) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_NotRegexp)
|
137
137
|
def visit_Arel_Nodes_NotRegexp o, collector
|
138
138
|
collector = visit o.left, collector
|
139
139
|
collector << " NOT REGEXP "
|
data/test/database.yml
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
sqlite:
|
2
|
+
adapter: sqlite3
|
3
|
+
database: ":memory:"
|
4
|
+
timeout: 500
|
5
|
+
jdbc-sqlite:
|
6
|
+
adapter: jdbcsqlite3
|
7
|
+
database: ":memory:"
|
8
|
+
timeout: 500
|
9
|
+
mysql:
|
10
|
+
adapter: mysql2
|
11
|
+
database: arext_test
|
12
|
+
username:
|
13
|
+
encoding: utf8
|
14
|
+
jdbc-mysql:
|
15
|
+
adapter: jdbcmysql
|
16
|
+
database: arext_test
|
17
|
+
username:
|
18
|
+
encoding: utf8
|
19
|
+
postgres:
|
20
|
+
adapter: postgresql
|
21
|
+
database: arext_test
|
22
|
+
username: postgres
|
data/test/test_comparators.rb
CHANGED
@@ -1,46 +1,42 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
module
|
3
|
+
module ArelExtensions
|
4
4
|
module Nodes
|
5
5
|
|
6
6
|
describe ArelExtensions::Comparators do
|
7
|
+
|
8
|
+
before do
|
9
|
+
@conn = FakeRecord::Base.new
|
10
|
+
Arel::Table.engine = @conn
|
11
|
+
@visitor = Arel::Visitors::ToSql.new @conn.connection
|
12
|
+
@table = Arel::Table.new(:users)
|
13
|
+
@attr = @table[:id]
|
14
|
+
@date = Date.new(2016, 3, 31)
|
15
|
+
@price = Arel::Table.new(:products)[:price]
|
16
|
+
end
|
17
|
+
|
18
|
+
def compile node
|
19
|
+
@visitor.accept(node, Arel::Collectors::SQLString.new).value
|
20
|
+
end
|
21
|
+
|
7
22
|
it "< is equal lt" do
|
8
|
-
|
9
|
-
mgr = relation.project relation[:id]
|
10
|
-
mgr.where relation[:id]<(10)
|
11
|
-
res = mgr.to_sql
|
12
|
-
res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" < 10')
|
23
|
+
compile(@table[:id] < 10).must_be_like('"users"."id" < 10')
|
13
24
|
end
|
14
25
|
|
15
26
|
it "<= is equal lteq" do
|
16
|
-
|
17
|
-
mgr = relation.project relation[:id]
|
18
|
-
mgr.where relation[:id]<=(10)
|
19
|
-
res = mgr.to_sql
|
20
|
-
res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" <= 10')
|
27
|
+
compile(@table[:id] <= 10).must_be_like('"users"."id" <= 10')
|
21
28
|
end
|
22
29
|
|
23
30
|
it "> is equal gt" do
|
24
|
-
|
25
|
-
mgr = relation.project relation[:id]
|
26
|
-
mgr.where relation[:id]>(10)
|
27
|
-
res = mgr.to_sql
|
28
|
-
res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" > 10')
|
31
|
+
compile(@table[:id] > 10).must_be_like('"users"."id" > 10')
|
29
32
|
end
|
30
33
|
|
31
34
|
it "< is equal gteq" do
|
32
|
-
|
33
|
-
mgr = relation.project relation[:id]
|
34
|
-
mgr.where relation[:id]>=(10)
|
35
|
-
res = mgr.to_sql
|
36
|
-
res.must_be_like('SELECT "users"."id" FROM "users" WHERE "users"."id" >= 10')
|
35
|
+
compile(@table[:id] >= 10).must_be_like('"users"."id" >= 10')
|
37
36
|
end
|
38
37
|
|
39
38
|
it "should compare with dates" do
|
40
|
-
|
41
|
-
mgr = relation.project relation[:created_at]
|
42
|
-
mgr.where(relation[:created_at] >= Date.new(2016, 3, 31))
|
43
|
-
mgr.to_sql.must_match %{"users"."created_at" >= '2016-03-31'}
|
39
|
+
compile(@table[:created_at] >= Date.new(2016, 3, 31)).must_be_like %{"users"."created_at" >= '2016-03-31'}
|
44
40
|
end
|
45
41
|
|
46
42
|
end
|
@@ -19,7 +19,7 @@ module ArelExtensions
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should import large set of data in Oracle" do
|
22
|
-
|
22
|
+
insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
|
23
23
|
insert_manager.bulk_insert(@cols, @data)
|
24
24
|
sql = compile(insert_manager.ast)
|
25
25
|
sql.must_be_like %Q[INSERT ALL INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01') INTO "users" ("id", "name", "comments", "created_at") VALUES (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01') SELECT 1 FROM dual]
|
@@ -20,7 +20,7 @@ module ArelExtensions
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should import large set of data" do
|
23
|
-
insert_manager = Arel::InsertManager.new(@conn).into(@table)
|
23
|
+
insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
|
24
24
|
insert_manager.bulk_insert(@cols, @data)
|
25
25
|
sql = compile(insert_manager.ast)
|
26
26
|
sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
|
@@ -5,6 +5,7 @@ module ArelExtensions
|
|
5
5
|
describe 'the to_sql visitor can bulk insert' do
|
6
6
|
before do
|
7
7
|
@conn = FakeRecord::Base.new
|
8
|
+
Arel::Table.engine = @conn
|
8
9
|
@visitor = Arel::Visitors::ToSql.new @conn.connection
|
9
10
|
@table = Arel::Table.new(:users)
|
10
11
|
@cols = ['id', 'name', 'comments', 'created_at']
|
@@ -20,10 +21,10 @@ module ArelExtensions
|
|
20
21
|
|
21
22
|
|
22
23
|
it "should import large set of data using ToSql" do
|
23
|
-
|
24
|
+
insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(@conn).into(@table)
|
24
25
|
insert_manager.bulk_insert(@cols, @data)
|
25
26
|
sql = compile(insert_manager.ast)
|
26
|
-
|
27
|
+
sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
|
27
28
|
end
|
28
29
|
|
29
30
|
|
@@ -6,8 +6,11 @@ module ArelExtensions
|
|
6
6
|
describe 'the sqlite visitor' do
|
7
7
|
|
8
8
|
before do
|
9
|
-
ActiveRecord::Base.
|
9
|
+
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
10
|
+
ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
|
11
|
+
ActiveRecord::Base.default_timezone = :utc
|
10
12
|
@cnx = ActiveRecord::Base.connection
|
13
|
+
Arel::Table.engine = ActiveRecord::Base
|
11
14
|
@cnx.drop_table(:users) rescue nil
|
12
15
|
@cnx.create_table :users do |t|
|
13
16
|
t.column :age, :integer
|
@@ -15,7 +18,7 @@ module ArelExtensions
|
|
15
18
|
t.column :comments, :text
|
16
19
|
t.column :created_at, :date
|
17
20
|
t.column :updated_at, :date
|
18
|
-
t.column :score, :
|
21
|
+
t.column :score, :decimal
|
19
22
|
end
|
20
23
|
@cnx.create_table :products do |t|
|
21
24
|
t.column :price, :decimal
|
@@ -32,7 +35,7 @@ module ArelExtensions
|
|
32
35
|
end
|
33
36
|
|
34
37
|
it "should import large set of data" do
|
35
|
-
insert_manager = Arel::InsertManager.new(ActiveRecord::Base).into(@table)
|
38
|
+
insert_manager = Arel::VERSION.to_i > 6 ? Arel::InsertManager.new().into(@table) : Arel::InsertManager.new(ActiveRecord::Base).into(@table)
|
36
39
|
insert_manager.bulk_insert(@cols, @data)
|
37
40
|
sql = insert_manager.to_sql
|
38
41
|
sql.must_be_like %Q[INSERT INTO "users" ("id", "name", "comments", "created_at") VALUES (23, 'nom1', 'sdfdsfdsfsdf', '2016-01-01'), (25, 'nom2', 'sdfdsfdsfsdf', '2016-01-01')]
|
@@ -6,7 +6,9 @@ module ArelExtensions
|
|
6
6
|
describe 'the sqlite visitor can do maths' do
|
7
7
|
|
8
8
|
before do
|
9
|
-
ActiveRecord::Base.
|
9
|
+
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
10
|
+
ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
|
11
|
+
ActiveRecord::Base.default_timezone = :utc
|
10
12
|
Arel::Table.engine = ActiveRecord::Base
|
11
13
|
@cnx = ActiveRecord::Base.connection
|
12
14
|
@cnx.drop_table(:users) rescue nil
|
@@ -17,7 +19,7 @@ module ArelExtensions
|
|
17
19
|
t.column :comments, :text
|
18
20
|
t.column :created_at, :date
|
19
21
|
t.column :updated_at, :date
|
20
|
-
t.column :score, :
|
22
|
+
t.column :score, :decimal
|
21
23
|
end
|
22
24
|
@cnx.create_table :products do |t|
|
23
25
|
t.column :price, :decimal
|
@@ -49,8 +51,8 @@ module ArelExtensions
|
|
49
51
|
#CEIL # require extensions
|
50
52
|
|
51
53
|
# RAND
|
52
|
-
assert_equal 5, User.where(
|
53
|
-
assert_equal 8, User.
|
54
|
+
assert_equal 5, User.where(@table[:score].eq(20.16)).order(Arel.rand).limit(50).count
|
55
|
+
assert_equal 8, User.order(Arel.rand).limit(50).count
|
54
56
|
end
|
55
57
|
|
56
58
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module ArelExtensions
|
5
|
+
module WthAr
|
6
|
+
|
7
|
+
describe 'the mysql visitor can do string operations' do
|
8
|
+
|
9
|
+
before do
|
10
|
+
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
11
|
+
ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-mysql" : :mysql))
|
12
|
+
ActiveRecord::Base.default_timezone = :utc
|
13
|
+
begin
|
14
|
+
@cnx = ActiveRecord::Base.connection
|
15
|
+
Arel::Table.engine = ActiveRecord::Base
|
16
|
+
rescue => e
|
17
|
+
puts e.inspect
|
18
|
+
ActiveRecord::Base.establish_connection(ENV['DB'] || :sqlite)
|
19
|
+
@cnx = ActiveRecord::Base.connection
|
20
|
+
end
|
21
|
+
@cnx.drop_table(:users) rescue nil
|
22
|
+
@cnx.create_table :users do |t|
|
23
|
+
t.column :age, :integer
|
24
|
+
t.column :name, :string
|
25
|
+
t.column :comments, :text
|
26
|
+
t.column :created_at, :date
|
27
|
+
t.column :updated_at, :date
|
28
|
+
t.column :score, :decimal
|
29
|
+
end
|
30
|
+
@cnx.create_table :products do |t|
|
31
|
+
t.column :price, :decimal
|
32
|
+
end
|
33
|
+
class User < ActiveRecord::Base
|
34
|
+
end
|
35
|
+
d = Date.new(2016, 5,23)
|
36
|
+
@lucas = User.create! :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
|
37
|
+
sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
|
38
|
+
@sophie = User.where(:id => sophie.id)
|
39
|
+
User.create! :age => 20, :name => "Camille", :created_at => d, :score => 20.16
|
40
|
+
User.create! :age => 21, :name => "Arthur", :created_at => d, :score => 65.62
|
41
|
+
User.create! :age => 23, :name => "Myung", :created_at => d, :score => 20.16
|
42
|
+
@laure = User.create :age => 25, :name => "Laure", :created_at => d, :score =>20.16
|
43
|
+
User.create! :age => nil, :name => "Test", :created_at => d, :score => 1.62
|
44
|
+
@neg = User.create :age => -20, :name => "Negatif", :created_at => d, :score => 0.17
|
45
|
+
@table = Arel::Table.new(:users)
|
46
|
+
@name = @table[:name]
|
47
|
+
end
|
48
|
+
after do
|
49
|
+
@cnx.drop_table(:users)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should do string operations" do
|
53
|
+
# concat
|
54
|
+
d = Date.new(1997, 6, 15)
|
55
|
+
assert_equal "SophiePhan", @sophie.select((@name + "Phan").as("res")).first.res
|
56
|
+
assert_equal "Sophie2", @sophie.select((@name + 2).as("res")).first.res
|
57
|
+
assert_equal "Sophie1997-06-15", @sophie.select((@name + d).as("res")).first.res
|
58
|
+
assert_equal "Sophie15", @sophie.select((User.arel_table[:name] + User.arel_table[:age]).as("res")).first.res
|
59
|
+
assert_equal "SophieSophie", @sophie.select((User.arel_table[:name] + User.arel_table[:name]).as("res")).first.res
|
60
|
+
assert_equal "Sophie2016-05-23", @sophie.select((User.arel_table[:name] + User.arel_table[:created_at]).as("res")).first.res
|
61
|
+
#concat Integer
|
62
|
+
assert_equal 1, User.where((User.arel_table[:age] + 10).eq(33)).count
|
63
|
+
assert_equal 1, User.where((User.arel_table[:age] + "1").eq(6)).count
|
64
|
+
assert_equal 1, User.where((User.arel_table[:age] + User.arel_table[:age]).eq(10)).count
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
# Replace
|
69
|
+
assert_equal "LucaX", User.where(:id => @lucas).select(@name.replace("s","X").as("res")).first.res
|
70
|
+
assert_equal "replace", User.where(:id => @lucas).select(@name.replace(@name,"replace").as("res")).first.res
|
71
|
+
|
72
|
+
#
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
@@ -7,10 +7,11 @@ module ArelExtensions
|
|
7
7
|
describe 'the sqlite visitor can do string operations' do
|
8
8
|
|
9
9
|
before do
|
10
|
-
ActiveRecord::Base.
|
11
|
-
|
12
|
-
|
10
|
+
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
11
|
+
ActiveRecord::Base.establish_connection(ENV['DB'] || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
|
12
|
+
ActiveRecord::Base.default_timezone = :utc
|
13
13
|
@cnx = ActiveRecord::Base.connection
|
14
|
+
Arel::Table.engine = ActiveRecord::Base
|
14
15
|
@cnx.drop_table(:users) rescue nil
|
15
16
|
@cnx.create_table :users do |t|
|
16
17
|
t.column :age, :integer
|
@@ -18,11 +19,13 @@ module ArelExtensions
|
|
18
19
|
t.column :comments, :text
|
19
20
|
t.column :created_at, :date
|
20
21
|
t.column :updated_at, :date
|
21
|
-
t.column :score, :
|
22
|
+
t.column :score, :decimal
|
22
23
|
end
|
23
24
|
@cnx.create_table :products do |t|
|
24
25
|
t.column :price, :decimal
|
25
26
|
end
|
27
|
+
class User < ActiveRecord::Base
|
28
|
+
end
|
26
29
|
d = Date.new(2016, 5,23)
|
27
30
|
@lucas = User.create! :age => 5, :name => "Lucas", :created_at => d, :score => 20.16
|
28
31
|
sophie = User.create :age => 15, :name => "Sophie", :created_at => d, :score => 20.16
|
metadata
CHANGED
@@ -1,67 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yann Azoury
|
8
|
-
- Mathilde
|
8
|
+
- Mathilde Pechdimaldjian
|
9
9
|
- Félix Bellanger
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-08-
|
13
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: arel
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - "~>"
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '6.0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - "~>"
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '6.0'
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: minitest
|
31
17
|
requirement: !ruby/object:Gem::Requirement
|
32
18
|
requirements:
|
33
19
|
- - ">="
|
34
20
|
- !ruby/object:Gem::Version
|
35
21
|
version: '0'
|
36
|
-
type: :
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '0'
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: rdoc
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '4.0'
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - "~>"
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '4.0'
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: rake
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0'
|
64
|
-
type: :development
|
22
|
+
type: :runtime
|
65
23
|
prerelease: false
|
66
24
|
version_requirements: !ruby/object:Gem::Requirement
|
67
25
|
requirements:
|
@@ -69,21 +27,21 @@ dependencies:
|
|
69
27
|
- !ruby/object:Gem::Version
|
70
28
|
version: '0'
|
71
29
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
30
|
+
name: minitest
|
73
31
|
requirement: !ruby/object:Gem::Requirement
|
74
32
|
requirements:
|
75
33
|
- - "~>"
|
76
34
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
35
|
+
version: '5.9'
|
78
36
|
type: :development
|
79
37
|
prerelease: false
|
80
38
|
version_requirements: !ruby/object:Gem::Requirement
|
81
39
|
requirements:
|
82
40
|
- - "~>"
|
83
41
|
- !ruby/object:Gem::Version
|
84
|
-
version: '
|
42
|
+
version: '5.9'
|
85
43
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
44
|
+
name: rdoc
|
87
45
|
requirement: !ruby/object:Gem::Requirement
|
88
46
|
requirements:
|
89
47
|
- - "~>"
|
@@ -97,19 +55,19 @@ dependencies:
|
|
97
55
|
- !ruby/object:Gem::Version
|
98
56
|
version: '4.0'
|
99
57
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
58
|
+
name: rake
|
101
59
|
requirement: !ruby/object:Gem::Requirement
|
102
60
|
requirements:
|
103
61
|
- - "~>"
|
104
62
|
- !ruby/object:Gem::Version
|
105
|
-
version: '
|
63
|
+
version: '11'
|
106
64
|
type: :development
|
107
65
|
prerelease: false
|
108
66
|
version_requirements: !ruby/object:Gem::Requirement
|
109
67
|
requirements:
|
110
68
|
- - "~>"
|
111
69
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
70
|
+
version: '11'
|
113
71
|
description: Adds new features to Arel
|
114
72
|
email:
|
115
73
|
- yann.azoury@faveod.com
|
@@ -129,8 +87,9 @@ files:
|
|
129
87
|
- Rakefile
|
130
88
|
- arel_extensions.gemspec
|
131
89
|
- functions.html
|
90
|
+
- gemfiles/rails3.gemfile
|
91
|
+
- gemfiles/rails4.gemfile
|
132
92
|
- gemfiles/rails5.gemfile
|
133
|
-
- gemfiles/rasil3.gemfile
|
134
93
|
- init/mssql.sql
|
135
94
|
- init/mysql.sql
|
136
95
|
- init/oracle.sql
|
@@ -177,6 +136,7 @@ files:
|
|
177
136
|
- lib/arel_extensions/visitors/postgresql.rb
|
178
137
|
- lib/arel_extensions/visitors/sqlite.rb
|
179
138
|
- lib/arel_extensions/visitors/to_sql.rb
|
139
|
+
- test/database.yml
|
180
140
|
- test/helper.rb
|
181
141
|
- test/real_db_test.rb
|
182
142
|
- test/support/fake_record.rb
|
@@ -188,6 +148,7 @@ files:
|
|
188
148
|
- test/visitors/test_to_sql.rb
|
189
149
|
- test/with_ar/test_bulk_sqlite.rb
|
190
150
|
- test/with_ar/test_math_sqlite.rb
|
151
|
+
- test/with_ar/test_string_mysql.rb
|
191
152
|
- test/with_ar/test_string_sqlite.rb
|
192
153
|
homepage: https://github.com/Faveod/arel-extensions
|
193
154
|
licenses:
|
@@ -216,6 +177,7 @@ signing_key:
|
|
216
177
|
specification_version: 4
|
217
178
|
summary: Extending Arel
|
218
179
|
test_files:
|
180
|
+
- test/database.yml
|
219
181
|
- test/helper.rb
|
220
182
|
- test/real_db_test.rb
|
221
183
|
- test/support/fake_record.rb
|
@@ -227,4 +189,5 @@ test_files:
|
|
227
189
|
- test/visitors/test_to_sql.rb
|
228
190
|
- test/with_ar/test_bulk_sqlite.rb
|
229
191
|
- test/with_ar/test_math_sqlite.rb
|
192
|
+
- test/with_ar/test_string_mysql.rb
|
230
193
|
- test/with_ar/test_string_sqlite.rb
|