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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c99e78c300658b7506cbdf8969ed28c8556e37c0
4
- data.tar.gz: 116346eed66e6d9cc920f4b21116db9f8d4f95b0
3
+ metadata.gz: dcccab4309b1eb71b208b052216c353ce6e1257c
4
+ data.tar.gz: 9d338f67a997f0d580df1802d271be8c35969305
5
5
  SHA512:
6
- metadata.gz: b16119b4bc898a852af9e7db829ca34bb4afca30779a651b4302847ea515d7d406378d01470535c91f6315c473ee0c59d52f20a5d324f8c9932de84f97a1ec86
7
- data.tar.gz: 5973956e3049621ea31c4f981fd6fc5dce8b9a1ba20ba33e4e9eee88d454ca6956375447a9681359ecdc5a3c49c89a9476b983122c5688e02a094fee7cb57274
6
+ metadata.gz: c1ae31c4de5716f431b0619b2067d9d94b3f7daa2c73ef41b9d534a7da8448e148d9f3f28ab56fd5f580feb1722aa1b5e4b11545c71ea9ee22ed557f62b984b1
7
+ data.tar.gz: 73358836832cb8fac27fab5220530da5c3379430098bf7325900748d926f3c6de6fe9248f6c69a105c1fdbd20d08e682b76c77a86e9169192df00a465d5ba1e6
data/SQL_Challenges.md CHANGED
@@ -24,5 +24,4 @@ A good way could be to create user defined functions to ensure a total transpare
24
24
  - REGEXP
25
25
  - Maths Operators on string ('a' <= 'b')
26
26
  - GROUP_CONCAT
27
- - FIND_IN_SET
28
27
  - any date format (YYYY/MM/DD HH:MM:SS:MMM for example)
@@ -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
 
@@ -0,0 +1,12 @@
1
+ module ArelExtensions
2
+ module Nodes
3
+ class Then < Function
4
+ def initialize expr
5
+ tab = expr.map { |arg|
6
+ convert_to_node(arg)
7
+ }
8
+ return super(tab)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module ArelExtensions
3
- VERSION = "0.9.4".freeze
3
+ VERSION = "0.9.5".freeze
4
4
  end
@@ -189,17 +189,11 @@ module ArelExtensions
189
189
  end
190
190
 
191
191
  def visit_ArelExtensions_Nodes_Blank o, collector
192
- collector << 'CASE WHEN LEN(LTRIM(RTRIM(ISNULL('
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
- collector << 'CASE WHEN LEN(LTRIM(RTRIM(ISNULL('
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.substr('
177
+ collector << 'dbms_lob.SUBSTR('
178
178
  collector = visit o.left, collector
179
179
  collector << Arel::Visitors::Oracle::COMMA
180
- collector << 'dbms_lob.getlength('
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
- collector << '(CASE WHEN ('
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
- collector << '(CASE WHEN ('
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
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-11-24 00:00:00.000000000 Z
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