arel_extensions 0.9.4 → 0.9.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/SQL_Challenges.md +0 -1
- data/lib/arel_extensions/boolean_functions.rb +5 -0
- data/lib/arel_extensions/nodes/then.rb +12 -0
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/mssql.rb +2 -8
- data/lib/arel_extensions/visitors/oracle.rb +5 -16
- data/lib/arel_extensions/visitors/to_sql.rb +13 -0
- data/test/with_ar/all_agnostic_test.rb +12 -16
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcccab4309b1eb71b208b052216c353ce6e1257c
|
4
|
+
data.tar.gz: 9d338f67a997f0d580df1802d271be8c35969305
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1ae31c4de5716f431b0619b2067d9d94b3f7daa2c73ef41b9d534a7da8448e148d9f3f28ab56fd5f580feb1722aa1b5e4b11545c71ea9ee22ed557f62b984b1
|
7
|
+
data.tar.gz: 73358836832cb8fac27fab5220530da5c3379430098bf7325900748d926f3c6de6fe9248f6c69a105c1fdbd20d08e682b76c77a86e9169192df00a465d5ba1e6
|
data/SQL_Challenges.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'arel_extensions/nodes/then'
|
2
|
+
|
1
3
|
module ArelExtensions
|
2
4
|
module BooleanFunctions
|
3
5
|
|
@@ -9,6 +11,9 @@ module ArelExtensions
|
|
9
11
|
self.or(other)
|
10
12
|
end
|
11
13
|
|
14
|
+
def then(t, f = nil)
|
15
|
+
ArelExtensions::Nodes::Then.new [self, t, f]
|
16
|
+
end
|
12
17
|
end
|
13
18
|
end
|
14
19
|
|
@@ -189,17 +189,11 @@ module ArelExtensions
|
|
189
189
|
end
|
190
190
|
|
191
191
|
def visit_ArelExtensions_Nodes_Blank o, collector
|
192
|
-
|
193
|
-
collector = visit o.left, collector
|
194
|
-
collector << ", '')))) = 0 THEN 1 ELSE 0 END"
|
195
|
-
collector
|
192
|
+
visit o.left.trim.length.eq(0), collector
|
196
193
|
end
|
197
194
|
|
198
195
|
def visit_ArelExtensions_Nodes_NotBlank o, collector
|
199
|
-
|
200
|
-
collector = visit o.left, collector
|
201
|
-
collector << ", '')))) = 0 THEN 0 ELSE 1 END"
|
202
|
-
collector
|
196
|
+
visit o.left.trim.length.gt(0), collector
|
203
197
|
end
|
204
198
|
|
205
199
|
def visit_ArelExtensions_Nodes_Format o, collector
|
@@ -174,12 +174,12 @@ module ArelExtensions
|
|
174
174
|
collector << ' FROM '
|
175
175
|
collector << '(' if o.left.is_a? ArelExtensions::Nodes::Trim
|
176
176
|
if o.type_of_attribute(o.left) == :text
|
177
|
-
collector << 'dbms_lob.
|
177
|
+
collector << 'dbms_lob.SUBSTR('
|
178
178
|
collector = visit o.left, collector
|
179
179
|
collector << Arel::Visitors::Oracle::COMMA
|
180
|
-
collector << 'dbms_lob.
|
180
|
+
collector << 'COALESCE(dbms_lob.GETLENGTH('
|
181
181
|
collector = visit o.left, collector
|
182
|
-
collector <<
|
182
|
+
collector << "), 0)"
|
183
183
|
collector << Arel::Visitors::Oracle::COMMA
|
184
184
|
collector << '1)'
|
185
185
|
else
|
@@ -216,23 +216,12 @@ module ArelExtensions
|
|
216
216
|
collector
|
217
217
|
end
|
218
218
|
|
219
|
-
# blank ? <param> : NULL
|
220
219
|
def visit_ArelExtensions_Nodes_Blank o, collector
|
221
|
-
|
222
|
-
collector = visit o.left.trim, collector
|
223
|
-
collector << " IS NULL) THEN 'blank'"
|
224
|
-
collector << " ELSE NULL END)"
|
225
|
-
collector
|
220
|
+
visit o.left.trim.length.coalesce(0).eq(0), collector
|
226
221
|
end
|
227
222
|
|
228
|
-
# not blank ? <param> : NULL
|
229
223
|
def visit_ArelExtensions_Nodes_NotBlank o, collector
|
230
|
-
|
231
|
-
collector = visit o.left.trim, collector
|
232
|
-
collector << " IS NOT NULL) THEN "
|
233
|
-
collector = visit o.left.trim, collector
|
234
|
-
collector << " ELSE NULL END)"
|
235
|
-
collector
|
224
|
+
visit o.left.trim.length.coalesce(0).gt(0), collector
|
236
225
|
end
|
237
226
|
|
238
227
|
def visit_ArelExtensions_Nodes_DateAdd o, collector
|
@@ -282,6 +282,19 @@ module ArelExtensions
|
|
282
282
|
collector
|
283
283
|
end
|
284
284
|
|
285
|
+
def visit_ArelExtensions_Nodes_Then o, collector
|
286
|
+
collector << "CASE WHEN ("
|
287
|
+
collector = visit o.left, collector
|
288
|
+
collector << ") THEN "
|
289
|
+
collector = visit o.right, collector
|
290
|
+
if o.expressions[2]
|
291
|
+
collector << " ELSE "
|
292
|
+
collector = visit o.expressions[2], collector
|
293
|
+
end
|
294
|
+
collector << " END"
|
295
|
+
collector
|
296
|
+
end
|
297
|
+
|
285
298
|
# Date operations
|
286
299
|
def visit_ArelExtensions_Nodes_DateAdd o, collector
|
287
300
|
collector << "DATE_ADD("
|
@@ -247,23 +247,19 @@ module ArelExtensions
|
|
247
247
|
assert_includes [true, 't'], t(@myung, @name.not_blank) # depends of adapter
|
248
248
|
assert_includes [true, 't'], t(@myung, @comments.blank)
|
249
249
|
assert_includes [false, 'f'], t(@myung, @comments.not_blank)
|
250
|
-
elsif @env_db == 'oracle'
|
251
|
-
assert_equal '42', t(@myung, @name.blank.coalesce('42'))
|
252
|
-
assert_equal 'Myung', t(@myung, @name.not_blank.coalesce('42'))
|
253
|
-
assert_equal 'blank', t(@myung, @comments.blank.coalesce('42'))
|
254
|
-
assert_equal '42', t(@myung, @comments.not_blank.coalesce('42'))
|
255
|
-
else
|
256
|
-
assert_equal 0, t(@myung, @name.blank)
|
257
|
-
assert_equal 1, t(@myung, @name.not_blank)
|
258
|
-
assert_equal 1, t(@myung, @comments.blank)
|
259
|
-
assert_equal 0, t(@myung, @comments.not_blank)
|
260
|
-
end
|
261
|
-
skip "Oracle requires cast for CLOB" if @env_db == 'oracle' # comments is CLOB, CHAR expected
|
262
|
-
if @env_db == 'postgresql'
|
263
|
-
assert_includes [true, 't'], t(@myung, @comments.blank) # depends of adapter
|
264
|
-
else
|
265
|
-
assert_equal 1, t(@myung, @comments.blank)
|
266
250
|
end
|
251
|
+
assert_equal 0, @myung.where(@name.blank).count
|
252
|
+
assert_equal 1, @myung.where(@name.not_blank).count
|
253
|
+
assert_equal 1, @myung.where(@comments.blank).count
|
254
|
+
assert_equal 0, @neg.where(@comments.blank).count
|
255
|
+
assert_equal 1, @neg.where(@comments.not_blank).count
|
256
|
+
assert_equal 0, @myung.where(@comments.not_blank).count
|
257
|
+
assert_equal 'false', t(@myung, @name.blank.then('true', 'false'))
|
258
|
+
assert_equal 'true', t(@myung, @name.not_blank.then('true', 'false'))
|
259
|
+
assert_equal 'true', t(@myung, @comments.blank.then('true', 'false'))
|
260
|
+
assert_equal 'false', t(@myung, @comments.not_blank.then('true', 'false'))
|
261
|
+
assert_equal 'false', t(@neg, @comments.blank.then('true', 'false'))
|
262
|
+
assert_equal 'true', t(@neg, @comments.not_blank.then('true', 'false'))
|
267
263
|
end
|
268
264
|
|
269
265
|
def test_format
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yann Azoury
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: arel
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/arel_extensions/nodes/replace.rb
|
133
133
|
- lib/arel_extensions/nodes/round.rb
|
134
134
|
- lib/arel_extensions/nodes/soundex.rb
|
135
|
+
- lib/arel_extensions/nodes/then.rb
|
135
136
|
- lib/arel_extensions/nodes/trim.rb
|
136
137
|
- lib/arel_extensions/nodes/wday.rb
|
137
138
|
- lib/arel_extensions/null_functions.rb
|