arel_extensions 2.0.13 → 2.0.14
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/Gemfile +10 -10
- data/Rakefile +4 -4
- data/gemfiles/rails3.gemfile +9 -9
- data/gemfiles/rails4.gemfile +13 -13
- data/gemfiles/rails5_0.gemfile +13 -13
- data/gemfiles/rails5_1_4.gemfile +13 -13
- data/gemfiles/rails5_2.gemfile +13 -13
- data/gemfiles/rails6.gemfile +13 -13
- data/lib/arel_extensions.rb +2 -2
- data/lib/arel_extensions/attributes.rb +0 -0
- data/lib/arel_extensions/boolean_functions.rb +3 -7
- data/lib/arel_extensions/common_sql_functions.rb +0 -2
- data/lib/arel_extensions/comparators.rb +11 -14
- data/lib/arel_extensions/date_duration.rb +4 -5
- data/lib/arel_extensions/insert_manager.rb +16 -17
- data/lib/arel_extensions/math.rb +8 -9
- data/lib/arel_extensions/math_functions.rb +15 -17
- data/lib/arel_extensions/nodes/abs.rb +0 -1
- data/lib/arel_extensions/nodes/aggregate_function.rb +0 -1
- data/lib/arel_extensions/nodes/blank.rb +0 -1
- data/lib/arel_extensions/nodes/case.rb +3 -4
- data/lib/arel_extensions/nodes/cast.rb +0 -1
- data/lib/arel_extensions/nodes/ceil.rb +1 -1
- data/lib/arel_extensions/nodes/change_case.rb +0 -0
- data/lib/arel_extensions/nodes/coalesce.rb +0 -1
- data/lib/arel_extensions/nodes/collate.rb +0 -1
- data/lib/arel_extensions/nodes/concat.rb +1 -3
- data/lib/arel_extensions/nodes/date_diff.rb +4 -5
- data/lib/arel_extensions/nodes/duration.rb +0 -1
- data/lib/arel_extensions/nodes/find_in_set.rb +0 -1
- data/lib/arel_extensions/nodes/floor.rb +1 -1
- data/lib/arel_extensions/nodes/format.rb +1 -0
- data/lib/arel_extensions/nodes/formatted_number.rb +0 -1
- data/lib/arel_extensions/nodes/function.rb +2 -3
- data/lib/arel_extensions/nodes/is_null.rb +0 -0
- data/lib/arel_extensions/nodes/json.rb +0 -6
- data/lib/arel_extensions/nodes/length.rb +0 -1
- data/lib/arel_extensions/nodes/levenshtein_distance.rb +0 -0
- data/lib/arel_extensions/nodes/locate.rb +0 -1
- data/lib/arel_extensions/nodes/log10.rb +1 -2
- data/lib/arel_extensions/nodes/matches.rb +0 -2
- data/lib/arel_extensions/nodes/md5.rb +0 -1
- data/lib/arel_extensions/nodes/power.rb +0 -1
- data/lib/arel_extensions/nodes/rand.rb +0 -1
- data/lib/arel_extensions/nodes/repeat.rb +0 -2
- data/lib/arel_extensions/nodes/replace.rb +0 -2
- data/lib/arel_extensions/nodes/round.rb +0 -1
- data/lib/arel_extensions/nodes/soundex.rb +0 -1
- data/lib/arel_extensions/nodes/std.rb +0 -1
- data/lib/arel_extensions/nodes/substring.rb +0 -1
- data/lib/arel_extensions/nodes/sum.rb +0 -0
- data/lib/arel_extensions/nodes/then.rb +0 -0
- data/lib/arel_extensions/nodes/trim.rb +0 -2
- data/lib/arel_extensions/nodes/union.rb +0 -2
- data/lib/arel_extensions/nodes/union_all.rb +0 -2
- data/lib/arel_extensions/nodes/wday.rb +0 -4
- data/lib/arel_extensions/null_functions.rb +3 -5
- data/lib/arel_extensions/predications.rb +2 -3
- data/lib/arel_extensions/railtie.rb +5 -5
- data/lib/arel_extensions/set_functions.rb +0 -2
- data/lib/arel_extensions/string_functions.rb +21 -22
- data/lib/arel_extensions/tasks.rb +1 -1
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors.rb +9 -7
- data/lib/arel_extensions/visitors/convert_format.rb +37 -0
- data/lib/arel_extensions/visitors/ibm_db.rb +4 -11
- data/lib/arel_extensions/visitors/mssql.rb +48 -44
- data/lib/arel_extensions/visitors/mysql.rb +63 -65
- data/lib/arel_extensions/visitors/oracle.rb +48 -55
- data/lib/arel_extensions/visitors/oracle12.rb +2 -3
- data/lib/arel_extensions/visitors/postgresql.rb +39 -34
- data/lib/arel_extensions/visitors/sqlite.rb +23 -18
- data/lib/arel_extensions/visitors/to_sql.rb +42 -44
- data/test/arelx_test_helper.rb +0 -2
- data/test/real_db_test.rb +26 -41
- data/test/support/fake_record.rb +1 -1
- data/test/test_comparators.rb +0 -4
- data/test/visitors/test_bulk_insert_oracle.rb +0 -1
- data/test/visitors/test_bulk_insert_sqlite.rb +0 -2
- data/test/visitors/test_oracle.rb +1 -2
- data/test/visitors/test_to_sql.rb +16 -25
- data/test/with_ar/all_agnostic_test.rb +134 -139
- data/test/with_ar/insert_agnostic_test.rb +0 -2
- data/test/with_ar/test_bulk_sqlite.rb +0 -4
- data/test/with_ar/test_math_sqlite.rb +4 -8
- data/test/with_ar/test_string_mysql.rb +1 -5
- data/test/with_ar/test_string_sqlite.rb +1 -5
- data/version_v1.rb +1 -1
- data/version_v2.rb +1 -1
- metadata +3 -2
@@ -1,16 +1,23 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
class Arel::Visitors::SQLite
|
4
|
-
|
5
|
-
|
4
|
+
DATE_MAPPING = {
|
5
|
+
'd' => '%d', 'm' => '%m', 'w' => '%W', 'y' => '%Y', 'wd' => '%w', 'M' => '%M',
|
6
|
+
'h' => '%H', 'mn' => '%M', 's' => '%S'
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
DATE_FORMAT_DIRECTIVES = { # ISO C / POSIX
|
6
10
|
'%Y' => '%Y', '%C' => '', '%y' => '%y', '%m' => '%m', '%B' => '%M', '%b' => '%b', '%^b' => '%b', # year, month
|
7
11
|
'%d' => '%d', '%e' => '%e', '%j' => '%j', '%w' => '%w', '%A' => '%W', # day, weekday
|
8
12
|
'%H' => '%H', '%k' => '%k', '%I' => '%I', '%l' => '%l', '%P' => '%p', '%p' => '%p', # hours
|
9
13
|
'%M' => '%M', '%S' => '%S', '%L' => '', '%N' => '%f', '%z' => '' # seconds, subseconds
|
10
|
-
}
|
11
|
-
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
NUMBER_COMMA_MAPPING = {
|
17
|
+
'fr_FR' => {',' => ' ', '.' =>','}
|
18
|
+
}.freeze
|
12
19
|
|
13
|
-
#String functions
|
20
|
+
# String functions
|
14
21
|
def visit_ArelExtensions_Nodes_IMatches o, collector # insensitive on ASCII
|
15
22
|
collector = visit o.left.ci_collate, collector
|
16
23
|
collector << ' LIKE '
|
@@ -73,7 +80,6 @@ module ArelExtensions
|
|
73
80
|
collector
|
74
81
|
end
|
75
82
|
|
76
|
-
|
77
83
|
def visit_ArelExtensions_Nodes_IDoesNotMatch o, collector
|
78
84
|
collector = visit o.left.lower, collector
|
79
85
|
collector << ' NOT LIKE '
|
@@ -90,14 +96,15 @@ module ArelExtensions
|
|
90
96
|
def visit_ArelExtensions_Nodes_DateAdd o, collector
|
91
97
|
collector << "date("
|
92
98
|
collector = visit o.expressions.first, collector
|
93
|
-
collector <<
|
99
|
+
collector << COMMA
|
94
100
|
collector = visit o.sqlite_value, collector
|
95
101
|
collector << ")"
|
96
102
|
collector
|
97
103
|
end
|
98
104
|
|
99
105
|
def visit_ArelExtensions_Nodes_DateDiff o, collector
|
100
|
-
|
106
|
+
case o.left_node_type
|
107
|
+
when :ruby_time, :datetime, :time
|
101
108
|
collector << "strftime('%s', "
|
102
109
|
collector = visit o.left, collector
|
103
110
|
collector << ") - strftime('%s', "
|
@@ -113,17 +120,16 @@ module ArelExtensions
|
|
113
120
|
end
|
114
121
|
|
115
122
|
def visit_ArelExtensions_Nodes_Duration o, collector
|
116
|
-
collector << "strftime('#{
|
123
|
+
collector << "strftime('#{DATE_MAPPING[o.left]}'#{COMMA}"
|
117
124
|
collector = visit o.right, collector
|
118
125
|
collector << ")"
|
119
126
|
collector
|
120
127
|
end
|
121
128
|
|
122
|
-
|
123
129
|
def visit_ArelExtensions_Nodes_Locate o, collector
|
124
130
|
collector << "instr("
|
125
131
|
collector = visit o.expr, collector
|
126
|
-
collector <<
|
132
|
+
collector << COMMA
|
127
133
|
collector = visit o.right, collector
|
128
134
|
collector << ")"
|
129
135
|
collector
|
@@ -142,7 +148,7 @@ module ArelExtensions
|
|
142
148
|
def visit_ArelExtensions_Nodes_Substring o, collector
|
143
149
|
collector << "SUBSTR("
|
144
150
|
o.expressions.each_with_index { |arg, i|
|
145
|
-
collector <<
|
151
|
+
collector << COMMA if i != 0
|
146
152
|
collector = visit arg, collector
|
147
153
|
}
|
148
154
|
collector << ")"
|
@@ -165,7 +171,7 @@ module ArelExtensions
|
|
165
171
|
collector << "RANDOM("
|
166
172
|
if o.left != nil && o.right != nil
|
167
173
|
collector = visit o.left, collector
|
168
|
-
collector <<
|
174
|
+
collector << COMMA
|
169
175
|
collector = visit o.right, collector
|
170
176
|
end
|
171
177
|
collector << ")"
|
@@ -247,7 +253,7 @@ module ArelExtensions
|
|
247
253
|
collector << quote(attr.name)
|
248
254
|
end
|
249
255
|
end
|
250
|
-
collector <<
|
256
|
+
collector << COMMA unless i == len
|
251
257
|
}
|
252
258
|
collector << ' UNION ALL ' unless idx == o.left.length - 1
|
253
259
|
end
|
@@ -275,7 +281,7 @@ module ArelExtensions
|
|
275
281
|
collector << quote(attr.name)
|
276
282
|
end
|
277
283
|
end
|
278
|
-
collector <<
|
284
|
+
collector << COMMA unless i == len
|
279
285
|
}
|
280
286
|
collector << ' UNION ALL ' unless idx == o.left.length - 1
|
281
287
|
end
|
@@ -364,7 +370,7 @@ module ArelExtensions
|
|
364
370
|
collector
|
365
371
|
end
|
366
372
|
|
367
|
-
alias_method
|
373
|
+
alias_method(:old_visit_Arel_Nodes_As, :visit_Arel_Nodes_As) rescue nil
|
368
374
|
def visit_Arel_Nodes_As o, collector
|
369
375
|
if o.left.is_a?(Arel::Nodes::Binary)
|
370
376
|
collector << '('
|
@@ -381,14 +387,13 @@ module ArelExtensions
|
|
381
387
|
|
382
388
|
def visit_ArelExtensions_Nodes_FormattedNumber o, collector
|
383
389
|
format = Arel::Nodes::NamedFunction.new('printf',[Arel::Nodes.build_quoted(o.original_string),o.left])
|
384
|
-
locale_map =
|
390
|
+
locale_map = NUMBER_COMMA_MAPPING[o.locale]
|
385
391
|
if locale_map
|
386
392
|
format = format.replace(',',locale_map[',']).replace('.',locale_map['.'])
|
387
393
|
end
|
388
394
|
visit format, collector
|
389
395
|
collector
|
390
396
|
end
|
391
|
-
|
392
397
|
end
|
393
398
|
end
|
394
399
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
class Arel::Visitors::ToSql
|
4
|
-
|
4
|
+
COMMA = ', ' unless defined?(COMMA)
|
5
5
|
|
6
6
|
# Math Functions
|
7
7
|
def visit_ArelExtensions_Nodes_Abs o, collector
|
8
8
|
collector << "ABS("
|
9
9
|
o.expressions.each_with_index { |arg, i|
|
10
|
-
collector <<
|
10
|
+
collector << COMMA if i != 0
|
11
11
|
collector = visit arg, collector
|
12
12
|
}
|
13
13
|
collector << ")"
|
@@ -17,7 +17,7 @@ module ArelExtensions
|
|
17
17
|
def visit_ArelExtensions_Nodes_Ceil o, collector
|
18
18
|
collector << "CEIL("
|
19
19
|
o.expressions.each_with_index { |arg, i|
|
20
|
-
collector <<
|
20
|
+
collector << COMMA if i != 0
|
21
21
|
collector = visit arg, collector
|
22
22
|
}
|
23
23
|
collector << ")"
|
@@ -27,7 +27,7 @@ module ArelExtensions
|
|
27
27
|
def visit_ArelExtensions_Nodes_Floor o, collector
|
28
28
|
collector << "FLOOR("
|
29
29
|
o.expressions.each_with_index { |arg, i|
|
30
|
-
collector <<
|
30
|
+
collector << COMMA if i != 0
|
31
31
|
collector = visit arg, collector
|
32
32
|
}
|
33
33
|
collector << ")"
|
@@ -37,7 +37,7 @@ module ArelExtensions
|
|
37
37
|
def visit_ArelExtensions_Nodes_Rand o, collector
|
38
38
|
collector << "RAND("
|
39
39
|
o.expressions.each_with_index { |arg, i|
|
40
|
-
collector <<
|
40
|
+
collector << COMMA if i != 0
|
41
41
|
collector = visit arg, collector
|
42
42
|
}
|
43
43
|
collector << ")"
|
@@ -47,7 +47,7 @@ module ArelExtensions
|
|
47
47
|
def visit_ArelExtensions_Nodes_Round o, collector
|
48
48
|
collector << "ROUND("
|
49
49
|
o.expressions.each_with_index { |arg, i|
|
50
|
-
collector <<
|
50
|
+
collector << COMMA if i != 0
|
51
51
|
collector = visit arg, collector
|
52
52
|
}
|
53
53
|
collector << ")"
|
@@ -64,7 +64,7 @@ module ArelExtensions
|
|
64
64
|
def visit_ArelExtensions_Nodes_Power o, collector
|
65
65
|
collector << "POW("
|
66
66
|
o.expressions.each_with_index { |arg, i|
|
67
|
-
collector <<
|
67
|
+
collector << COMMA if i != 0
|
68
68
|
collector = visit arg, collector
|
69
69
|
}
|
70
70
|
collector << ")"
|
@@ -81,9 +81,9 @@ module ArelExtensions
|
|
81
81
|
# String functions
|
82
82
|
def visit_ArelExtensions_Nodes_Concat o, collector
|
83
83
|
collector << "CONCAT("
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
o.expressions.each_with_index { |arg, i|
|
85
|
+
collector << COMMA if i != 0
|
86
|
+
collector = visit arg, collector
|
87
87
|
}
|
88
88
|
collector << ")"
|
89
89
|
collector
|
@@ -93,7 +93,7 @@ module ArelExtensions
|
|
93
93
|
collector << "GROUP_CONCAT("
|
94
94
|
collector = visit o.left, collector
|
95
95
|
if o.separator && o.separator != 'NULL'
|
96
|
-
collector <<
|
96
|
+
collector << COMMA
|
97
97
|
collector = visit o.separator, collector
|
98
98
|
end
|
99
99
|
collector << ")"
|
@@ -117,7 +117,7 @@ module ArelExtensions
|
|
117
117
|
def visit_ArelExtensions_Nodes_Locate o, collector
|
118
118
|
collector << "LOCATE("
|
119
119
|
collector = visit o.right, collector
|
120
|
-
collector <<
|
120
|
+
collector << COMMA
|
121
121
|
collector = visit o.left, collector
|
122
122
|
collector << ")"
|
123
123
|
collector
|
@@ -126,7 +126,7 @@ module ArelExtensions
|
|
126
126
|
def visit_ArelExtensions_Nodes_Substring o, collector
|
127
127
|
collector << "SUBSTRING("
|
128
128
|
o.expressions.each_with_index { |arg, i|
|
129
|
-
collector <<
|
129
|
+
collector << COMMA if i != 0
|
130
130
|
collector = visit arg, collector
|
131
131
|
}
|
132
132
|
collector << ")"
|
@@ -136,9 +136,9 @@ module ArelExtensions
|
|
136
136
|
def visit_ArelExtensions_Nodes_Replace o, collector
|
137
137
|
collector << "REPLACE("
|
138
138
|
visit o.left, collector
|
139
|
-
collector <<
|
139
|
+
collector << COMMA
|
140
140
|
visit o.pattern, collector
|
141
|
-
collector <<
|
141
|
+
collector << COMMA
|
142
142
|
visit o.substitute, collector
|
143
143
|
collector << ")"
|
144
144
|
collector
|
@@ -147,9 +147,9 @@ module ArelExtensions
|
|
147
147
|
def visit_ArelExtensions_Nodes_RegexpReplace o, collector
|
148
148
|
collector << "REGEXP_REPLACE("
|
149
149
|
visit o.left, collector
|
150
|
-
collector <<
|
150
|
+
collector << COMMA
|
151
151
|
visit Arel::Nodes.build_quoted(o.pattern.to_s), collector
|
152
|
-
collector <<
|
152
|
+
collector << COMMA
|
153
153
|
visit o.substitute, collector
|
154
154
|
collector << ")"
|
155
155
|
collector
|
@@ -158,7 +158,7 @@ module ArelExtensions
|
|
158
158
|
def visit_ArelExtensions_Nodes_Repeat o, collector
|
159
159
|
collector << "REPEAT("
|
160
160
|
o.expressions.each_with_index { |arg, i|
|
161
|
-
collector <<
|
161
|
+
collector << COMMA if i != 0
|
162
162
|
collector = visit arg, collector
|
163
163
|
}
|
164
164
|
collector << ")"
|
@@ -168,7 +168,7 @@ module ArelExtensions
|
|
168
168
|
def visit_ArelExtensions_Nodes_FindInSet o, collector
|
169
169
|
collector << "FIND_IN_SET("
|
170
170
|
o.expressions.each_with_index { |arg, i|
|
171
|
-
collector <<
|
171
|
+
collector << COMMA if i != 0
|
172
172
|
collector = visit arg, collector
|
173
173
|
}
|
174
174
|
collector << ")"
|
@@ -178,7 +178,7 @@ module ArelExtensions
|
|
178
178
|
def visit_ArelExtensions_Nodes_Soundex o, collector
|
179
179
|
collector << "SOUNDEX("
|
180
180
|
o.expressions.each_with_index { |arg, i|
|
181
|
-
collector <<
|
181
|
+
collector << COMMA if i != 0
|
182
182
|
collector = visit arg, collector
|
183
183
|
}
|
184
184
|
collector << ")"
|
@@ -188,7 +188,7 @@ module ArelExtensions
|
|
188
188
|
def visit_ArelExtensions_Nodes_Downcase o, collector
|
189
189
|
collector << "LOWER("
|
190
190
|
o.expressions.each_with_index { |arg, i|
|
191
|
-
collector <<
|
191
|
+
collector << COMMA if i != 0
|
192
192
|
collector = visit arg, collector
|
193
193
|
}
|
194
194
|
collector << ")"
|
@@ -198,7 +198,7 @@ module ArelExtensions
|
|
198
198
|
def visit_ArelExtensions_Nodes_Upcase o, collector
|
199
199
|
collector << "UPPER("
|
200
200
|
o.expressions.each_with_index { |arg, i|
|
201
|
-
collector <<
|
201
|
+
collector << COMMA if i != 0
|
202
202
|
collector = visit arg, collector
|
203
203
|
}
|
204
204
|
collector << ")"
|
@@ -208,7 +208,7 @@ module ArelExtensions
|
|
208
208
|
def visit_ArelExtensions_Nodes_Trim o, collector
|
209
209
|
collector << "TRIM("
|
210
210
|
o.expressions.each_with_index { |arg, i|
|
211
|
-
collector <<
|
211
|
+
collector << COMMA if i != 0
|
212
212
|
collector = visit arg, collector
|
213
213
|
}
|
214
214
|
collector << ")"
|
@@ -218,7 +218,7 @@ module ArelExtensions
|
|
218
218
|
def visit_ArelExtensions_Nodes_Ltrim o, collector
|
219
219
|
collector << "LTRIM("
|
220
220
|
o.expressions.each_with_index { |arg, i|
|
221
|
-
collector <<
|
221
|
+
collector << COMMA if i != 0
|
222
222
|
collector = visit arg, collector
|
223
223
|
}
|
224
224
|
collector << ")"
|
@@ -228,7 +228,7 @@ module ArelExtensions
|
|
228
228
|
def visit_ArelExtensions_Nodes_Rtrim o, collector
|
229
229
|
collector << "RTRIM("
|
230
230
|
o.expressions.each_with_index { |arg, i|
|
231
|
-
collector <<
|
231
|
+
collector << COMMA if i != 0
|
232
232
|
collector = visit arg, collector
|
233
233
|
}
|
234
234
|
collector << ")"
|
@@ -236,21 +236,20 @@ module ArelExtensions
|
|
236
236
|
end
|
237
237
|
|
238
238
|
def visit_ArelExtensions_Nodes_Blank o, collector
|
239
|
-
|
239
|
+
# visit o.left.coalesce('').trim.length.eq(0), collector
|
240
240
|
collector << 'LENGTH(TRIM(COALESCE('
|
241
241
|
collector = visit o.expr, collector
|
242
|
-
collector <<
|
242
|
+
collector << COMMA
|
243
243
|
collector = visit Arel::Nodes.build_quoted(''), collector
|
244
244
|
collector << "))) = 0"
|
245
245
|
collector
|
246
246
|
end
|
247
247
|
|
248
|
-
|
249
248
|
def visit_ArelExtensions_Nodes_NotBlank o, collector
|
250
|
-
|
249
|
+
# visit o.left.coalesce('').trim.length.gt(0), collector
|
251
250
|
collector << 'LENGTH(TRIM(COALESCE('
|
252
251
|
collector = visit o.expr, collector
|
253
|
-
collector <<
|
252
|
+
collector << COMMA
|
254
253
|
collector = visit Arel::Nodes.build_quoted(''), collector
|
255
254
|
collector << "))) > 0"
|
256
255
|
collector
|
@@ -261,13 +260,13 @@ module ArelExtensions
|
|
261
260
|
when :date, :datetime, :time
|
262
261
|
collector << "STRFTIME("
|
263
262
|
collector = visit o.right, collector
|
264
|
-
collector <<
|
263
|
+
collector << COMMA
|
265
264
|
collector = visit o.left, collector
|
266
265
|
collector << ")"
|
267
266
|
when :integer, :float, :decimal
|
268
267
|
collector << "FORMAT("
|
269
268
|
collector = visit o.left, collector
|
270
|
-
collector <<
|
269
|
+
collector << COMMA
|
271
270
|
collector = visit o.right, collector
|
272
271
|
collector << ")"
|
273
272
|
else
|
@@ -276,7 +275,7 @@ module ArelExtensions
|
|
276
275
|
collector
|
277
276
|
end
|
278
277
|
|
279
|
-
#comparators
|
278
|
+
# comparators
|
280
279
|
|
281
280
|
def visit_ArelExtensions_Nodes_Cast o, collector
|
282
281
|
collector << "CAST("
|
@@ -308,7 +307,7 @@ module ArelExtensions
|
|
308
307
|
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
309
308
|
collector << "COALESCE("
|
310
309
|
o.expressions.each_with_index { |arg, i|
|
311
|
-
collector <<
|
310
|
+
collector << COMMA if i != 0
|
312
311
|
collector = visit arg, collector
|
313
312
|
}
|
314
313
|
collector << ")"
|
@@ -322,7 +321,7 @@ module ArelExtensions
|
|
322
321
|
'DATEDIFF('
|
323
322
|
end
|
324
323
|
collector = visit o.left, collector
|
325
|
-
collector <<
|
324
|
+
collector << COMMA
|
326
325
|
collector = visit o.right, collector
|
327
326
|
collector << ")"
|
328
327
|
collector
|
@@ -331,13 +330,13 @@ module ArelExtensions
|
|
331
330
|
def visit_ArelExtensions_Nodes_DateSub o, collector
|
332
331
|
collector << "DATE_SUB("
|
333
332
|
collector = visit o.left, collector
|
334
|
-
collector <<
|
333
|
+
collector << COMMA
|
335
334
|
collector = visit o.right, collector
|
336
335
|
collector << ")"
|
337
336
|
collector
|
338
337
|
end
|
339
338
|
|
340
|
-
|
339
|
+
# override
|
341
340
|
remove_method(:visit_Arel_Nodes_As) rescue nil # if Arel::Visitors::ToSql.method_defined?(:visit_Arel_Nodes_As)
|
342
341
|
def visit_Arel_Nodes_As o, collector
|
343
342
|
if o.left.is_a?(Arel::Nodes::Binary)
|
@@ -418,7 +417,7 @@ module ArelExtensions
|
|
418
417
|
def visit_ArelExtensions_Nodes_DateAdd o, collector
|
419
418
|
collector << "DATE_ADD("
|
420
419
|
collector = visit o.left, collector
|
421
|
-
collector <<
|
420
|
+
collector << COMMA
|
422
421
|
collector = visit o.sqlite_value(o.right), collector
|
423
422
|
collector << ')'
|
424
423
|
collector
|
@@ -438,7 +437,7 @@ module ArelExtensions
|
|
438
437
|
else
|
439
438
|
collector << quote(value, attr && column_for(attr)).to_s
|
440
439
|
end
|
441
|
-
collector <<
|
440
|
+
collector << COMMA unless i == len
|
442
441
|
}
|
443
442
|
collector << (idx == row_nb-1 ? ')' : '), ')
|
444
443
|
end
|
@@ -460,7 +459,7 @@ module ArelExtensions
|
|
460
459
|
else
|
461
460
|
collector << (attr && attr.able_to_type_cast? ? quote(attr.type_cast_for_database(value)) : quote(value).to_s)
|
462
461
|
end
|
463
|
-
collector <<
|
462
|
+
collector << COMMA unless i == len
|
464
463
|
}
|
465
464
|
collector << (idx == row_nb-1 ? ')' : '), ')
|
466
465
|
end
|
@@ -539,7 +538,7 @@ module ArelExtensions
|
|
539
538
|
def visit_ArelExtensions_Nodes_LevenshteinDistance o, collector
|
540
539
|
collector << "LEVENSHTEIN_DISTANCE("
|
541
540
|
collector = visit o.left, collector
|
542
|
-
collector <<
|
541
|
+
collector << COMMA
|
543
542
|
collector = visit o.right, collector
|
544
543
|
collector << ')'
|
545
544
|
collector
|
@@ -547,7 +546,7 @@ module ArelExtensions
|
|
547
546
|
|
548
547
|
# Boolean logic.
|
549
548
|
|
550
|
-
alias_method
|
549
|
+
alias_method(:old_visit_Arel_Nodes_And, :visit_Arel_Nodes_And) rescue nil
|
551
550
|
def visit_Arel_Nodes_And o, collector
|
552
551
|
case o.children.length
|
553
552
|
when 0
|
@@ -567,7 +566,7 @@ module ArelExtensions
|
|
567
566
|
collector
|
568
567
|
end
|
569
568
|
|
570
|
-
alias_method
|
569
|
+
alias_method(:old_visit_Arel_Nodes_Or, :visit_Arel_Nodes_Or) rescue nil
|
571
570
|
def visit_Arel_Nodes_Or o, collector
|
572
571
|
case o.children.length
|
573
572
|
when 0
|
@@ -656,7 +655,6 @@ module ArelExtensions
|
|
656
655
|
end
|
657
656
|
collector
|
658
657
|
end
|
659
|
-
|
660
658
|
end
|
661
659
|
end
|
662
660
|
end
|