arel_extensions 0.8.4 → 0.8.5
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 +15 -4
- data/.travis/oracle/download_ojdbc.js +116 -0
- data/.travis/setup_accounts.sh +9 -0
- data/README.md +15 -3
- data/arel_extensions.gemspec +1 -1
- data/gemfiles/rails4.gemfile +1 -2
- data/gemfiles/rails5.gemfile +3 -2
- data/init/postgresql.sql +10 -8
- data/lib/arel_extensions/date_duration.rb +9 -5
- data/lib/arel_extensions/math.rb +1 -1
- data/lib/arel_extensions/nodes.rb +1 -0
- data/lib/arel_extensions/nodes/abs.rb +2 -0
- data/lib/arel_extensions/nodes/date_diff.rb +17 -0
- data/lib/arel_extensions/nodes/find_in_set.rb +1 -9
- data/lib/arel_extensions/nodes/format.rb +12 -0
- data/lib/arel_extensions/nodes/function.rb +33 -2
- data/lib/arel_extensions/nodes/length.rb +2 -0
- data/lib/arel_extensions/nodes/rand.rb +2 -8
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/ibm_db.rb +1 -121
- data/lib/arel_extensions/visitors/mssql.rb +5 -85
- data/lib/arel_extensions/visitors/mysql.rb +9 -25
- data/lib/arel_extensions/visitors/oracle.rb +137 -122
- data/lib/arel_extensions/visitors/postgresql.rb +3 -12
- data/lib/arel_extensions/visitors/sqlite.rb +2 -11
- data/lib/arel_extensions/visitors/to_sql.rb +22 -0
- data/test/database.yml +4 -2
- data/test/support/alter_system_user_password.sql +2 -0
- data/test/support/create_oracle_enhanced_users.sql +29 -0
- data/test/visitors/test_to_sql.rb +2 -2
- data/test/with_ar/all_agnostic_test.rb +76 -63
- data/test/with_ar/insert_agnostic_test.rb +13 -7
- metadata +9 -2
@@ -1,6 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
Arel::Visitors::PostgreSQL.class_eval do
|
4
|
+
Arel::Visitors::PostgreSQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'DOW'}
|
4
5
|
|
5
6
|
def visit_ArelExtensions_Nodes_Rand o, collector
|
6
7
|
collector << "RANDOM("
|
@@ -91,17 +92,7 @@ module ArelExtensions
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def visit_ArelExtensions_Nodes_Duration o, collector
|
94
|
-
#
|
95
|
-
if o.left == "d"
|
96
|
-
collector << "EXTRACT(DAY FROM"
|
97
|
-
elsif o.left == "m"
|
98
|
-
collector << "EXTRACT(MONTH FROM "
|
99
|
-
elsif (o.left == "w")
|
100
|
-
collector << "EXTRACT(WEEK FROM"
|
101
|
-
elsif (o.left == "y")
|
102
|
-
collector << "EXTRACT(YEAR FROM"
|
103
|
-
end
|
104
|
-
#visit right
|
95
|
+
collector << "EXTRACT(#{Arel::Visitors::PostgreSQL::DATE_MAPPING[o.left]} FROM "
|
105
96
|
collector = visit o.right, collector
|
106
97
|
collector << ")"
|
107
98
|
collector
|
@@ -130,7 +121,7 @@ module ArelExtensions
|
|
130
121
|
end
|
131
122
|
|
132
123
|
def visit_ArelExtensions_Nodes_Wday o, collector
|
133
|
-
collector << "
|
124
|
+
collector << "EXRTACT(DOW, "
|
134
125
|
collector = visit o.date, collector
|
135
126
|
collector << ")"
|
136
127
|
collector
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
Arel::Visitors::SQLite.class_eval do
|
4
|
+
Arel::Visitors::SQLite::DATE_MAPPING = {'d' => '%d', 'm' => '%m', 'w' => '%W', 'y' => '%Y', 'wd' => '%w', 'M' => '%M'}
|
4
5
|
|
5
6
|
#String functions
|
6
7
|
def visit_ArelExtensions_Nodes_IMatches o, collector # insensitive on ASCII
|
@@ -47,17 +48,7 @@ module ArelExtensions
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def visit_ArelExtensions_Nodes_Duration o, collector
|
50
|
-
#
|
51
|
-
if(o.left == "d")
|
52
|
-
collector << "strftime('%d',"
|
53
|
-
elsif(o.left == "m")
|
54
|
-
collector << "strftime('%m',"
|
55
|
-
elsif (o.left == "w")
|
56
|
-
collector << "strftime('%W',"
|
57
|
-
elsif (o.left == "y")
|
58
|
-
collector << "strftime('%Y',"
|
59
|
-
end
|
60
|
-
#visit right
|
51
|
+
collector << "strftime('#{Arel::Visitors::SQLite::DATE_MAPPING[o.left]}'#{Arel::Visitors::SQLite::COMMA}"
|
61
52
|
collector = visit o.right, collector
|
62
53
|
collector << ")"
|
63
54
|
collector
|
@@ -55,10 +55,12 @@ module ArelExtensions
|
|
55
55
|
|
56
56
|
# String functions
|
57
57
|
def visit_ArelExtensions_Nodes_Concat o, collector
|
58
|
+
collector << '('
|
58
59
|
o.expressions.each_with_index { |arg, i|
|
59
60
|
collector = visit arg, collector
|
60
61
|
collector << ' || ' unless i == o.expressions.length - 1
|
61
62
|
}
|
63
|
+
collector << ")"
|
62
64
|
collector
|
63
65
|
end
|
64
66
|
|
@@ -150,6 +152,26 @@ module ArelExtensions
|
|
150
152
|
collector
|
151
153
|
end
|
152
154
|
|
155
|
+
def visit_ArelExtensions_Nodes_Format o, collector
|
156
|
+
case o.col_type
|
157
|
+
when :date, :datetime
|
158
|
+
collector << "STRFTIME("
|
159
|
+
collector = visit o.right, collector
|
160
|
+
collector << Arel::Visitors::ToSql::COMMA
|
161
|
+
collector = visit o.left, collector
|
162
|
+
collector << ")"
|
163
|
+
when :integer, :float, :decimal
|
164
|
+
collector << "FORMAT("
|
165
|
+
collector = visit o.left, collector
|
166
|
+
collector << Arel::Visitors::ToSql::COMMA
|
167
|
+
collector = visit o.right, collector
|
168
|
+
collector << ")"
|
169
|
+
else
|
170
|
+
collector = visit o.left, collector
|
171
|
+
end
|
172
|
+
collector
|
173
|
+
end
|
174
|
+
|
153
175
|
#comparators
|
154
176
|
|
155
177
|
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
data/test/database.yml
CHANGED
@@ -27,11 +27,13 @@ jdbc-postgresql:
|
|
27
27
|
oracle:
|
28
28
|
adapter: oracle_enhanced
|
29
29
|
database: xe
|
30
|
-
username:
|
30
|
+
username: ruby
|
31
|
+
password: oci8
|
31
32
|
jdbc-oracle:
|
32
33
|
adapter: oracle_enhanced
|
33
34
|
database: xe
|
34
|
-
username:
|
35
|
+
username: ruby
|
36
|
+
password: oci8
|
35
37
|
ibm_db:
|
36
38
|
adapter: ibm_db
|
37
39
|
username: travis
|
@@ -0,0 +1,29 @@
|
|
1
|
+
CREATE USER oracle_enhanced IDENTIFIED BY oracle_enhanced;
|
2
|
+
|
3
|
+
GRANT unlimited tablespace, create session, create table, create sequence,
|
4
|
+
create procedure, create trigger, create view, create materialized view,
|
5
|
+
create database link, create synonym, create type, ctxapp TO oracle_enhanced;
|
6
|
+
|
7
|
+
CREATE USER oracle_enhanced_schema IDENTIFIED BY oracle_enhanced_schema;
|
8
|
+
|
9
|
+
GRANT unlimited tablespace, create session, create table, create sequence,
|
10
|
+
create procedure, create trigger, create view, create materialized view,
|
11
|
+
create database link, create synonym, create type, ctxapp TO oracle_enhanced_schema;
|
12
|
+
|
13
|
+
CREATE USER arunit IDENTIFIED BY arunit;
|
14
|
+
|
15
|
+
GRANT unlimited tablespace, create session, create table, create sequence,
|
16
|
+
create procedure, create trigger, create view, create materialized view,
|
17
|
+
create database link, create synonym, create type, ctxapp TO arunit;
|
18
|
+
|
19
|
+
CREATE USER arunit2 IDENTIFIED BY arunit2;
|
20
|
+
|
21
|
+
GRANT unlimited tablespace, create session, create table, create sequence,
|
22
|
+
create procedure, create trigger, create view, create materialized view,
|
23
|
+
create database link, create synonym, create type, ctxapp TO arunit2;
|
24
|
+
|
25
|
+
CREATE USER ruby IDENTIFIED BY oci8;
|
26
|
+
GRANT connect, resource, create view,create synonym TO ruby;
|
27
|
+
GRANT EXECUTE ON dbms_lock TO ruby;
|
28
|
+
GRANT CREATE VIEW TO ruby;
|
29
|
+
GRANT unlimited tablespace to ruby;
|
@@ -46,8 +46,8 @@ module ArelExtensions
|
|
46
46
|
# String Functions
|
47
47
|
it "should accept functions on strings" do
|
48
48
|
c = @table[:name]
|
49
|
-
compile(c + 'test').must_be_like %{"users"."name" || 'test'}
|
50
|
-
compile(c + 'test' + ' chain').must_be_like %{"users"."name" || 'test' || ' chain'}
|
49
|
+
compile(c + 'test').must_be_like %{("users"."name" || 'test')}
|
50
|
+
compile(c + 'test' + ' chain').must_be_like %{("users"."name" || 'test' || ' chain')}
|
51
51
|
compile(c.length).must_be_like %{LENGTH("users"."name")}
|
52
52
|
compile(c.length.round + 42).must_be_like %{(ROUND(LENGTH("users"."name")) + 42)}
|
53
53
|
compile(c.locate('test')).must_be_like %{LOCATE('test', "users"."name")}
|
@@ -7,7 +7,13 @@ module ArelExtensions
|
|
7
7
|
class ListTest < Minitest::Test
|
8
8
|
def setup_db
|
9
9
|
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
10
|
-
|
10
|
+
if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
|
11
|
+
@env_db = (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
|
12
|
+
skip "Platform not supported"
|
13
|
+
else
|
14
|
+
@env_db = ENV['DB']
|
15
|
+
end
|
16
|
+
ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
|
11
17
|
ActiveRecord::Base.default_timezone = :utc
|
12
18
|
@cnx = ActiveRecord::Base.connection
|
13
19
|
$sqlite ||= false
|
@@ -31,12 +37,12 @@ module ArelExtensions
|
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
34
|
-
if File.exist?("init/#{
|
35
|
-
sql = File.read("init/#{
|
40
|
+
if File.exist?("init/#{@env_db}.sql")
|
41
|
+
sql = File.read("init/#{@env_db}.sql")
|
36
42
|
@cnx.execute(sql) unless sql.blank?
|
37
43
|
end
|
38
|
-
@cnx.drop_table(:
|
39
|
-
@cnx.create_table :
|
44
|
+
@cnx.drop_table(:user_tests) rescue nil
|
45
|
+
@cnx.create_table :user_tests do |t|
|
40
46
|
t.column :age, :integer
|
41
47
|
t.column :name, :string
|
42
48
|
t.column :comments, :text
|
@@ -44,23 +50,19 @@ module ArelExtensions
|
|
44
50
|
t.column :updated_at, :datetime
|
45
51
|
t.column :score, :decimal, :precision => 20, :scale => 10
|
46
52
|
end
|
47
|
-
@cnx.drop_table(:
|
48
|
-
@cnx.create_table :
|
53
|
+
@cnx.drop_table(:product_tests) rescue nil
|
54
|
+
@cnx.create_table :product_tests do |t|
|
49
55
|
t.column :price, :decimal, :precision => 20, :scale => 10
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
|
-
def teardown_db
|
54
|
-
@cnx.drop_table(:users)
|
55
|
-
@cnx.drop_table(:products)
|
56
|
-
end
|
57
|
-
|
58
59
|
class User < ActiveRecord::Base
|
60
|
+
self.table_name = 'user_tests'
|
59
61
|
end
|
60
62
|
class Product < ActiveRecord::Base
|
63
|
+
self.table_name = 'product_tests'
|
61
64
|
end
|
62
65
|
|
63
|
-
|
64
66
|
def setup
|
65
67
|
d = Date.new(2016,05,23)
|
66
68
|
setup_db
|
@@ -90,7 +92,8 @@ module ArelExtensions
|
|
90
92
|
end
|
91
93
|
|
92
94
|
def teardown
|
93
|
-
|
95
|
+
@cnx.drop_table(:user_tests)
|
96
|
+
@cnx.drop_table(:product_tests)
|
94
97
|
end
|
95
98
|
|
96
99
|
def t(scope, node)
|
@@ -109,17 +112,15 @@ module ArelExtensions
|
|
109
112
|
end
|
110
113
|
|
111
114
|
def test_ceil
|
112
|
-
if
|
113
|
-
|
114
|
-
|
115
|
-
end
|
115
|
+
skip "Sqlite version can't load extension for ceil" if $sqlite && $load_extension_disabled
|
116
|
+
assert_equal 1, t(@neg, @score.ceil)
|
117
|
+
assert_equal 63, t(@arthur, @age.ceil + 42)
|
116
118
|
end
|
117
119
|
|
118
120
|
def test_floor
|
119
|
-
if
|
120
|
-
|
121
|
-
|
122
|
-
end
|
121
|
+
skip "Sqlite version can't load extension for floor" if $sqlite && $load_extension_disabled
|
122
|
+
assert_equal 0, t(@neg, @score.floor)
|
123
|
+
assert_equal 42, t(@arthur, @score.floor - 23)
|
123
124
|
end
|
124
125
|
|
125
126
|
def test_rand
|
@@ -146,8 +147,8 @@ module ArelExtensions
|
|
146
147
|
def test_concat
|
147
148
|
assert_equal 'Camille Camille', t(@camille, @name + ' ' + @name)
|
148
149
|
assert_equal 'Laure 2', t(@laure, @name + ' ' + 2)
|
149
|
-
if
|
150
|
-
assert_equal "Lucas Sophie", t(User.reorder(nil).from(User.select(:name).where(:name => ['Lucas', 'Sophie']).reorder(:name).as('
|
150
|
+
if @env_db == 'postgresql'
|
151
|
+
assert_equal "Lucas Sophie", t(User.reorder(nil).from(User.select(:name).where(:name => ['Lucas', 'Sophie']).reorder(:name).as('user_tests')), @name.group_concat(' '))
|
151
152
|
else
|
152
153
|
assert_equal "Lucas Sophie", t(User.where(:name => ['Lucas', 'Sophie']).reorder(:name), @name.group_concat(' '))
|
153
154
|
end
|
@@ -160,32 +161,35 @@ module ArelExtensions
|
|
160
161
|
end
|
161
162
|
|
162
163
|
def test_locate
|
163
|
-
if
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
end
|
164
|
+
skip "Sqlite version can't load extension for locate" if $sqlite && $load_extension_disabled
|
165
|
+
assert_equal 1, t(@camille, @name.locate("C"))
|
166
|
+
assert_equal 0, t(@lucas, @name.locate("z"))
|
167
|
+
assert_equal 5, t(@lucas, @name.locate("s"))
|
168
168
|
end
|
169
169
|
|
170
170
|
def test_find_in_set
|
171
|
-
if
|
172
|
-
|
173
|
-
|
174
|
-
end
|
171
|
+
skip "Sqlite version can't load extension for find_in_set" if $sqlite && $load_extension_disabled
|
172
|
+
assert_equal 5, t(@neg, @comments & 2)
|
173
|
+
assert_equal 0, t(@neg, @comments & 6) # not found
|
175
174
|
end
|
176
175
|
|
177
176
|
def test_string_comparators
|
178
|
-
|
179
|
-
|
177
|
+
skip "Oracle can't use math operators to compare strings, any function to do that?" if @env_db == 'oracle'
|
178
|
+
if @env_db == 'postgresql' # may return real boolean
|
179
|
+
assert t(@neg, @name >= 'Mest') == true || t(@neg, @name >= 'Mest') == 't' # depends of ar version
|
180
|
+
assert t(@neg, @name <= (@name + 'Z')) == true || t(@neg, @name <= (@name + 'Z')) == 't'
|
181
|
+
else
|
182
|
+
assert_equal 1, t(@neg, @name >= 'Mest')
|
183
|
+
assert_equal 1, t(@neg, @name <= (@name + 'Z'))
|
184
|
+
end
|
180
185
|
end
|
181
186
|
|
182
|
-
def
|
183
|
-
if
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
end
|
187
|
+
def test_regexp_not_regexp
|
188
|
+
skip "Sqlite version can't load extension for regexp" if $sqlite && $load_extension_disabled
|
189
|
+
assert_equal 1, User.where(@name =~ '^M').count
|
190
|
+
assert_equal 6, User.where(@name !~ '^L').count
|
191
|
+
assert_equal 1, User.where(@name =~ /^M/).count
|
192
|
+
assert_equal 6, User.where(@name !~ /^L/).count
|
189
193
|
end
|
190
194
|
|
191
195
|
def test_imatches
|
@@ -195,26 +199,27 @@ module ArelExtensions
|
|
195
199
|
end
|
196
200
|
|
197
201
|
def test_replace
|
198
|
-
assert_equal "LucaX", t(@lucas, @name.replace("s","X"))
|
199
|
-
assert_equal "replace", t(@lucas, @name.replace(@name,"replace"))
|
202
|
+
assert_equal "LucaX", t(@lucas, @name.replace("s", "X"))
|
203
|
+
assert_equal "replace", t(@lucas, @name.replace(@name, "replace"))
|
200
204
|
end
|
201
205
|
|
202
206
|
def test_soundex
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
+
skip "Sqlite version can't load extension for soundex" if $sqlite && $load_extension_disabled
|
208
|
+
skip "PostgreSql version can't load extension for soundex" if @env_db == 'postgresql'
|
209
|
+
assert_equal "C540", t(@camille, @name.soundex)
|
210
|
+
assert_equal 8, User.where(@name.soundex.eq(@name.soundex)).count
|
207
211
|
end
|
208
212
|
|
209
213
|
def test_trim
|
210
214
|
assert_equal "Myun", t(@myung, @name.rtrim("g"))
|
211
215
|
assert_equal "yung", t(@myung, @name.ltrim("M"))
|
212
216
|
assert_equal "yung", t(@myung, (@name + "M").trim("M"))
|
217
|
+
skip "Oracle does not accept multi char trim" if @env_db == 'oracle'
|
213
218
|
assert_equal "", t(@myung, @name.rtrim(@name))
|
214
219
|
end
|
215
220
|
|
216
221
|
def test_coalesce
|
217
|
-
if
|
222
|
+
if @env_db == 'postgresql'
|
218
223
|
assert_equal 100, t(@test, @age.coalesce(100))
|
219
224
|
assert_equal "Camille", t(@camille, @name.coalesce(nil, "default"))
|
220
225
|
assert_equal 20, t(@test, @age.coalesce(nil, 20))
|
@@ -224,7 +229,10 @@ module ArelExtensions
|
|
224
229
|
end
|
225
230
|
end
|
226
231
|
|
227
|
-
|
232
|
+
|
233
|
+
|
234
|
+
# Comparators
|
235
|
+
def test_number_comparator
|
228
236
|
assert_equal 2, User.where(@age < 6).count
|
229
237
|
assert_equal 2, User.where(@age <= 10).count
|
230
238
|
assert_equal 3, User.where(@age > 20).count
|
@@ -232,27 +240,31 @@ module ArelExtensions
|
|
232
240
|
assert_equal 1, User.where(@age > 5).where(@age < 20).count
|
233
241
|
end
|
234
242
|
|
243
|
+
def test_date_comparator
|
244
|
+
d = Date.new(2016,05,23)
|
245
|
+
assert_equal 0, User.where(@created_at < d).count
|
246
|
+
assert_equal 8, User.where(@created_at >= d).count
|
247
|
+
end
|
248
|
+
|
235
249
|
def test_date_duration
|
236
250
|
#Year
|
237
|
-
assert_equal 2016, @lucas
|
251
|
+
assert_equal 2016, t(@lucas, @created_at.year).to_i
|
238
252
|
assert_equal 0, User.where(@created_at.year.eq("2012")).count
|
239
253
|
#Month
|
240
|
-
assert_equal 5, @camille
|
241
|
-
assert_equal 8,User.where(
|
254
|
+
assert_equal 5, t(@camille, @created_at.month).to_i
|
255
|
+
assert_equal 8, User.where(@created_at.month.eq("05")).count
|
242
256
|
#Week
|
243
|
-
assert_equal 21,
|
244
|
-
assert_equal 8,User.where(
|
257
|
+
assert_equal 21, t(@arthur, @created_at.week).to_i
|
258
|
+
assert_equal 8, User.where(@created_at.month.eq("05")).count
|
245
259
|
#Day
|
246
|
-
assert_equal 23,
|
247
|
-
assert_equal 0,User.where(
|
260
|
+
assert_equal 23, t(@laure, @created_at.day).to_i
|
261
|
+
assert_equal 0, User.where(@created_at.day.eq("05")).count
|
248
262
|
end
|
249
263
|
|
250
|
-
|
251
264
|
def test_is_null
|
252
265
|
assert_equal "Test", User.where(@age.is_null).select(@name).first.name
|
253
266
|
end
|
254
267
|
|
255
|
-
|
256
268
|
def test_math_plus
|
257
269
|
d = Date.new(1997, 6, 15)
|
258
270
|
#Concat String
|
@@ -261,7 +273,8 @@ module ArelExtensions
|
|
261
273
|
assert_equal "Sophie1997-06-15", t(@sophie, @name + d)
|
262
274
|
assert_equal "Sophie15", t(@sophie, @name + @age)
|
263
275
|
assert_equal "SophieSophie", t(@sophie, @name + @name)
|
264
|
-
|
276
|
+
#FIXME: should work as expected in Oracle
|
277
|
+
assert_equal "Sophie2016-05-23", t(@sophie, @name + @created_at) unless @env_db == 'oracle'
|
265
278
|
#concat Integer
|
266
279
|
assert_equal 1, User.where((@age + 10).eq(33)).count
|
267
280
|
assert_equal 1, User.where((@age + "1").eq(6)).count
|
@@ -276,8 +289,8 @@ module ArelExtensions
|
|
276
289
|
def test_math_moins
|
277
290
|
d = Date.new(2016,05,20)
|
278
291
|
#Datediff
|
279
|
-
assert_equal 8, User.where((
|
280
|
-
assert_equal 3,
|
292
|
+
assert_equal 8, User.where((@created_at - User.arel_table[:created_at]).eq(0)).count
|
293
|
+
assert_equal 3, @laure.select((User.arel_table[:created_at] - d).as("res")).first.res.abs.to_i
|
281
294
|
#Substraction
|
282
295
|
assert_equal 0, User.where((@age - 10).eq(50)).count
|
283
296
|
assert_equal 0, User.where((@age - "10").eq(50)).count
|
@@ -285,7 +298,7 @@ module ArelExtensions
|
|
285
298
|
|
286
299
|
def test_wday
|
287
300
|
d = Date.new(2016, 6, 26)
|
288
|
-
assert_equal 1, t(@myung, @created_at.wday).to_i
|
301
|
+
assert_equal (@env_db == 'oracle' ? 2 : 1), t(@myung, @created_at.wday).to_i # monday
|
289
302
|
assert_equal 0, User.select(d.wday).as("res").first.to_i
|
290
303
|
end
|
291
304
|
|
@@ -7,16 +7,22 @@ module ArelExtensions
|
|
7
7
|
class InsertManagerTest < Minitest::Test
|
8
8
|
def setup_db
|
9
9
|
ActiveRecord::Base.configurations = YAML.load_file('test/database.yml')
|
10
|
-
|
10
|
+
if ENV['DB'] == 'oracle' && ((defined?(RUBY_ENGINE) && RUBY_ENGINE == "rbx") || (RUBY_PLATFORM == 'java')) # not supported
|
11
|
+
@env_db = (RUBY_PLATFORM == 'java' ? "jdbc-sqlite" : 'sqlite')
|
12
|
+
skip "Platform not supported"
|
13
|
+
else
|
14
|
+
@env_db = ENV['DB']
|
15
|
+
end
|
16
|
+
ActiveRecord::Base.establish_connection(@env_db.try(:to_sym) || (RUBY_PLATFORM == 'java' ? :"jdbc-sqlite" : :sqlite))
|
11
17
|
ActiveRecord::Base.default_timezone = :utc
|
12
18
|
@cnx = ActiveRecord::Base.connection
|
13
19
|
Arel::Table.engine = ActiveRecord::Base
|
14
|
-
if File.exist?("init/#{
|
15
|
-
sql = File.read("init/#{
|
20
|
+
if File.exist?("init/#{@env_db}.sql")
|
21
|
+
sql = File.read("init/#{@env_db}.sql")
|
16
22
|
@cnx.execute(sql) unless sql.blank?
|
17
23
|
end
|
18
|
-
@cnx.drop_table(:
|
19
|
-
@cnx.create_table :
|
24
|
+
@cnx.drop_table(:user_tests) rescue nil
|
25
|
+
@cnx.create_table :user_tests do |t|
|
20
26
|
t.column :age, :integer
|
21
27
|
t.column :name, :string
|
22
28
|
t.column :comments, :text
|
@@ -28,7 +34,7 @@ module ArelExtensions
|
|
28
34
|
|
29
35
|
def setup
|
30
36
|
setup_db
|
31
|
-
@table = Arel::Table.new(:
|
37
|
+
@table = Arel::Table.new(:user_tests)
|
32
38
|
@cols = ['id', 'name', 'comments', 'created_at']
|
33
39
|
@data = [
|
34
40
|
[23, 'nom1', "sdfdsfdsfsdfsd fdsf dsf dsf sdf afdg fsdg sg sd gsdfg e 54435 344", '2016-01-01'],
|
@@ -37,7 +43,7 @@ module ArelExtensions
|
|
37
43
|
end
|
38
44
|
|
39
45
|
def teardown
|
40
|
-
@cnx.drop_table(:
|
46
|
+
@cnx.drop_table(:user_tests)
|
41
47
|
end
|
42
48
|
|
43
49
|
# Math Functions
|