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 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