arel_extensions 0.9.4 → 0.9.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/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
|