arel_extensions 0.8.4 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +15 -4
- data/.travis/oracle/download_ojdbc.js +116 -0
- data/.travis/setup_accounts.sh +9 -0
- data/README.md +15 -3
- data/arel_extensions.gemspec +1 -1
- data/gemfiles/rails4.gemfile +1 -2
- data/gemfiles/rails5.gemfile +3 -2
- data/init/postgresql.sql +10 -8
- data/lib/arel_extensions/date_duration.rb +9 -5
- data/lib/arel_extensions/math.rb +1 -1
- data/lib/arel_extensions/nodes.rb +1 -0
- data/lib/arel_extensions/nodes/abs.rb +2 -0
- data/lib/arel_extensions/nodes/date_diff.rb +17 -0
- data/lib/arel_extensions/nodes/find_in_set.rb +1 -9
- data/lib/arel_extensions/nodes/format.rb +12 -0
- data/lib/arel_extensions/nodes/function.rb +33 -2
- data/lib/arel_extensions/nodes/length.rb +2 -0
- data/lib/arel_extensions/nodes/rand.rb +2 -8
- data/lib/arel_extensions/version.rb +1 -1
- data/lib/arel_extensions/visitors/ibm_db.rb +1 -121
- data/lib/arel_extensions/visitors/mssql.rb +5 -85
- data/lib/arel_extensions/visitors/mysql.rb +9 -25
- data/lib/arel_extensions/visitors/oracle.rb +137 -122
- data/lib/arel_extensions/visitors/postgresql.rb +3 -12
- data/lib/arel_extensions/visitors/sqlite.rb +2 -11
- data/lib/arel_extensions/visitors/to_sql.rb +22 -0
- data/test/database.yml +4 -2
- data/test/support/alter_system_user_password.sql +2 -0
- data/test/support/create_oracle_enhanced_users.sql +29 -0
- data/test/visitors/test_to_sql.rb +2 -2
- data/test/with_ar/all_agnostic_test.rb +76 -63
- data/test/with_ar/insert_agnostic_test.rb +13 -7
- metadata +9 -2
@@ -2,6 +2,8 @@ module ArelExtensions
|
|
2
2
|
module Nodes
|
3
3
|
class Rand < Function
|
4
4
|
|
5
|
+
@@return_type = :number
|
6
|
+
|
5
7
|
def initialize(seed = nil)
|
6
8
|
if seed && seed.length == 1
|
7
9
|
super seed
|
@@ -10,14 +12,6 @@ module ArelExtensions
|
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
def left
|
14
|
-
@expressions.first
|
15
|
-
end
|
16
|
-
|
17
|
-
def right
|
18
|
-
@expressions[1]
|
19
|
-
end
|
20
|
-
|
21
15
|
end
|
22
16
|
end
|
23
17
|
end
|
@@ -4,11 +4,7 @@ module ArelExtensions
|
|
4
4
|
|
5
5
|
def visit_ArelExtensions_Nodes_Ceil o, collector
|
6
6
|
collector << "CEILING("
|
7
|
-
if((o.expr).is_a?(Arel::Attributes::Attribute))
|
8
7
|
collector = visit o.expr, collector
|
9
|
-
else
|
10
|
-
collector <<"#{o.expr}"
|
11
|
-
end
|
12
8
|
collector << ")"
|
13
9
|
collector
|
14
10
|
end
|
@@ -35,28 +31,7 @@ module ArelExtensions
|
|
35
31
|
end
|
36
32
|
|
37
33
|
|
38
|
-
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
39
|
-
collector << "COALESCE("
|
40
|
-
if(o.left.is_a?(Arel::Attributes::Attribute))
|
41
|
-
collector = visit o.left, collector
|
42
|
-
else
|
43
|
-
collector << "#{o.left}"
|
44
|
-
end
|
45
|
-
o.other.each { |a|
|
46
|
-
collector << ","
|
47
|
-
if(a.is_a?(Arel::Attributes::Attribute))
|
48
|
-
collector = visit a, collector
|
49
|
-
else
|
50
|
-
collector << "#{a}"
|
51
|
-
end
|
52
|
-
}
|
53
|
-
collector << ")"
|
54
|
-
collector
|
55
|
-
end
|
56
|
-
|
57
|
-
|
58
34
|
def visit_ArelExtensions_Nodes_DateDiff o, collector
|
59
|
-
|
60
35
|
collector << "DAY("
|
61
36
|
collector = visit o.left, collector
|
62
37
|
collector<< ","
|
@@ -92,11 +67,8 @@ module ArelExtensions
|
|
92
67
|
end
|
93
68
|
|
94
69
|
|
95
|
-
def visit_ArelExtensions_Nodes_Findis o, collector
|
96
70
|
|
97
|
-
|
98
|
-
|
99
|
-
def visit_ArelExtensions_Nodes_Isnull o, collector
|
71
|
+
def visit_ArelExtensions_Nodes_IsNull o, collector
|
100
72
|
collector << "COALESCE("
|
101
73
|
collector = visit o.left, collector
|
102
74
|
collector << ","
|
@@ -109,98 +81,6 @@ module ArelExtensions
|
|
109
81
|
collector
|
110
82
|
end
|
111
83
|
|
112
|
-
|
113
|
-
def visit_ArelExtensions_Nodes_Replace o, collector
|
114
|
-
collector << "REPLACE("
|
115
|
-
collector = visit o.expr,collector
|
116
|
-
collector << ","
|
117
|
-
if(o.left.is_a?(Arel::Attributes::Attribute))
|
118
|
-
collector = visit o.left, collector
|
119
|
-
else
|
120
|
-
collector << "'#{o.left}'"
|
121
|
-
end
|
122
|
-
collector << ","
|
123
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
124
|
-
collector = visit o.right, collector
|
125
|
-
else
|
126
|
-
collector << "'#{o.right}'"
|
127
|
-
end
|
128
|
-
collector <<")"
|
129
|
-
collector
|
130
|
-
end
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
def visit_ArelExtensions_Nodes_Soundex o, collector
|
135
|
-
collector << "SOUNDEX("
|
136
|
-
if((o.expr).is_a?(Arel::Attributes::Attribute))
|
137
|
-
collector = visit o.expr, collector
|
138
|
-
else
|
139
|
-
collector <<"'#{o.expr}'"
|
140
|
-
end
|
141
|
-
collector << ")"
|
142
|
-
collector
|
143
|
-
end
|
144
|
-
|
145
|
-
|
146
|
-
def visit_Arel_Nodes_Regexp o , collector
|
147
|
-
collector = visit o.left, collector
|
148
|
-
collector << " REGEXP "
|
149
|
-
collector << "'#{o.right}'"
|
150
|
-
collector
|
151
|
-
end
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
def visit_Arel_Nodes_NotRegexp o , collector
|
156
|
-
collector = visit o.left, collector
|
157
|
-
collector << " NOT REGEXP "
|
158
|
-
collector << "'#{o.right}'"
|
159
|
-
collector
|
160
|
-
end
|
161
|
-
|
162
|
-
|
163
|
-
def visit_ArelExtensions_Nodes_Trim o , collector
|
164
|
-
collector << "TRIM("
|
165
|
-
collector = visit o.left, collector
|
166
|
-
collector << ","
|
167
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
168
|
-
collector = visit o.right, collector
|
169
|
-
else
|
170
|
-
collector << "'#{o.right}'"
|
171
|
-
end
|
172
|
-
collector << ")"
|
173
|
-
collector
|
174
|
-
end
|
175
|
-
|
176
|
-
def visit_ArelExtensions_Nodes_Ltrim o , collector
|
177
|
-
collector << "LTRIM("
|
178
|
-
collector = visit o.left, collector
|
179
|
-
collector << ","
|
180
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
181
|
-
collector = visit o.right, collector
|
182
|
-
else
|
183
|
-
collector << "'#{o.right}'"
|
184
|
-
end
|
185
|
-
collector << ")"
|
186
|
-
collector
|
187
|
-
end
|
188
|
-
|
189
|
-
|
190
|
-
def visit_ArelExtensions_Nodes_Rtrim o , collector
|
191
|
-
collector << "RTRIM("
|
192
|
-
collector = visit o.left, collector
|
193
|
-
collector << ","
|
194
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
195
|
-
collector = visit o.right, collector
|
196
|
-
else
|
197
|
-
collector << "'#{o.right}'"
|
198
|
-
end
|
199
|
-
collector << ")"
|
200
|
-
collector
|
201
|
-
end
|
202
|
-
|
203
|
-
|
204
84
|
end
|
205
85
|
end
|
206
86
|
end
|
@@ -29,30 +29,10 @@ module ArelExtensions
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
33
|
-
collector << "COALESCE("
|
34
|
-
if(o.left.is_a?(Arel::Attributes::Attribute))
|
35
|
-
collector = visit o.left, collector
|
36
|
-
else
|
37
|
-
collector << "#{o.left}"
|
38
|
-
end
|
39
|
-
o.other.each { |a|
|
40
|
-
collector << ","
|
41
|
-
if(a.is_a?(Arel::Attributes::Attribute))
|
42
|
-
collector = visit a, collector
|
43
|
-
else
|
44
|
-
collector << "#{a}"
|
45
|
-
end
|
46
|
-
}
|
47
|
-
collector << ")"
|
48
|
-
collector
|
49
|
-
end
|
50
|
-
|
51
32
|
def visit_ArelExtensions_Nodes_DateDiff o, collector
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
collector<< ","
|
33
|
+
collector << "DATEDIFF(day,"
|
34
|
+
collector = visit o.left, collector
|
35
|
+
collector<< ","
|
56
36
|
if(o.right.is_a?(Arel::Attributes::Attribute))
|
57
37
|
collector = visit o.right, collector
|
58
38
|
else
|
@@ -85,11 +65,6 @@ module ArelExtensions
|
|
85
65
|
collector
|
86
66
|
end
|
87
67
|
|
88
|
-
|
89
|
-
def visit_ArelExtensions_Nodes_Findis o,collector
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
68
|
def visit_ArelExtensions_Nodes_Length o, collector
|
94
69
|
collector << "LEN("
|
95
70
|
collector = visit o.expr, collector
|
@@ -100,18 +75,14 @@ module ArelExtensions
|
|
100
75
|
|
101
76
|
def visit_ArelExtensions_Nodes_Locate o, collector
|
102
77
|
collector << "CHARINDEX("
|
103
|
-
|
104
|
-
collector = visit o.val, collector
|
105
|
-
else
|
106
|
-
collector << "'#{o.val}'"
|
107
|
-
end
|
78
|
+
collector = visit o.val, collector
|
108
79
|
collector << ","
|
109
80
|
collector = visit o.expr, collector
|
110
81
|
collector << ")"
|
111
82
|
collector
|
112
83
|
end
|
113
84
|
|
114
|
-
def
|
85
|
+
def visit_ArelExtensions_Nodes_IsNull o, collector
|
115
86
|
collector << "ISNULL("
|
116
87
|
collector = visit o.left, collector
|
117
88
|
collector << ","
|
@@ -157,57 +128,6 @@ module ArelExtensions
|
|
157
128
|
collector
|
158
129
|
end
|
159
130
|
|
160
|
-
def visit_ArelExtensions_Nodes_Soundex o, collector
|
161
|
-
collector << "SOUNDEX("
|
162
|
-
if((o.expr).is_a?(Arel::Attributes::Attribute))
|
163
|
-
collector = visit o.expr, collector
|
164
|
-
else
|
165
|
-
collector << "'#{o.expr}'"
|
166
|
-
end
|
167
|
-
collector << ")"
|
168
|
-
collector
|
169
|
-
end
|
170
|
-
|
171
|
-
def visit_ArelExtensions_Nodes_Trim o , collector
|
172
|
-
collector << "TRIM("
|
173
|
-
collector = visit o.left, collector
|
174
|
-
collector << ","
|
175
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
176
|
-
collector = visit o.right, collector
|
177
|
-
else
|
178
|
-
collector << "'#{o.right}'"
|
179
|
-
end
|
180
|
-
collector << ")"
|
181
|
-
collector
|
182
|
-
end
|
183
|
-
|
184
|
-
def visit_ArelExtensions_Nodes_Ltrim o , collector
|
185
|
-
collector << "LTRIM("
|
186
|
-
collector = visit o.left, collector
|
187
|
-
collector << ","
|
188
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
189
|
-
collector = visit o.right, collector
|
190
|
-
else
|
191
|
-
collector << "'#{o.right}'"
|
192
|
-
end
|
193
|
-
collector << ")"
|
194
|
-
collector
|
195
|
-
end
|
196
|
-
|
197
|
-
|
198
|
-
def visit_ArelExtensions_Nodes_Rtrim o , collector
|
199
|
-
collector << "RTRIM("
|
200
|
-
collector = visit o.left, collector
|
201
|
-
collector << ","
|
202
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
203
|
-
collector = visit o.right, collector
|
204
|
-
else
|
205
|
-
collector << "'#{o.right}'"
|
206
|
-
end
|
207
|
-
collector << ")"
|
208
|
-
collector
|
209
|
-
end
|
210
|
-
|
211
131
|
end
|
212
132
|
end
|
213
133
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
Arel::Visitors::MySQL.class_eval do
|
4
|
+
Arel::Visitors::MySQL::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'WEEK', 'y' => 'YEAR', 'wd' => 'WEEKDAY'}
|
4
5
|
|
5
6
|
#String functions
|
6
7
|
def visit_ArelExtensions_Nodes_IMatches o, collector # insensitive on ASCII
|
@@ -94,23 +95,18 @@ module ArelExtensions
|
|
94
95
|
|
95
96
|
|
96
97
|
def visit_ArelExtensions_Nodes_Duration o, collector
|
97
|
-
|
98
|
-
|
99
|
-
collector
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
collector
|
104
|
-
|
105
|
-
collector << "YEAR("
|
98
|
+
if o.left == 'wd'
|
99
|
+
collector << "(WEEKDAY("
|
100
|
+
collector = visit o.right, collector
|
101
|
+
collector << ") + 1) % 7"
|
102
|
+
else
|
103
|
+
collector << "#{Arel::Visitors::MySQL::DATE_MAPPING[o.left]}("
|
104
|
+
collector = visit o.right, collector
|
105
|
+
collector << ")"
|
106
106
|
end
|
107
|
-
#visit right
|
108
|
-
collector = visit o.right, collector
|
109
|
-
collector << ")"
|
110
107
|
collector
|
111
108
|
end
|
112
109
|
|
113
|
-
#****************************************************************#
|
114
110
|
|
115
111
|
def visit_ArelExtensions_Nodes_IsNull o, collector
|
116
112
|
collector << "ISNULL("
|
@@ -123,18 +119,6 @@ module ArelExtensions
|
|
123
119
|
collector
|
124
120
|
end
|
125
121
|
|
126
|
-
|
127
|
-
def visit_ArelExtensions_Nodes_Replace o, collector
|
128
|
-
collector << "REPLACE("
|
129
|
-
o.expressions.each_with_index { |arg, i|
|
130
|
-
collector << Arel::Visitors::MySQL::COMMA unless i == 0
|
131
|
-
collector = visit arg, collector
|
132
|
-
}
|
133
|
-
collector << ")"
|
134
|
-
collector
|
135
|
-
end
|
136
|
-
|
137
|
-
|
138
122
|
def visit_ArelExtensions_Nodes_Wday o, collector
|
139
123
|
collector << "(WEEKDAY("
|
140
124
|
collector = visit o.date, collector
|
@@ -1,6 +1,17 @@
|
|
1
1
|
module ArelExtensions
|
2
2
|
module Visitors
|
3
3
|
Arel::Visitors::Oracle.class_eval do
|
4
|
+
Arel::Visitors::Oracle::DATE_MAPPING = {'d' => 'DAY', 'm' => 'MONTH', 'w' => 'IW', 'y' => 'YEAR', 'wd' => 'D'}
|
5
|
+
|
6
|
+
def visit_ArelExtensions_Nodes_Concat o, collector
|
7
|
+
collector << '('
|
8
|
+
o.expressions.each_with_index { |arg, i|
|
9
|
+
collector = visit o.convert_to_string_node(arg), collector
|
10
|
+
collector << ' || ' unless i == o.expressions.length - 1
|
11
|
+
}
|
12
|
+
collector << ')'
|
13
|
+
collector
|
14
|
+
end
|
4
15
|
|
5
16
|
def visit_ArelExtensions_Nodes_IMatches o, collector
|
6
17
|
collector = visit o.left.lower, collector
|
@@ -27,170 +38,174 @@ module ArelExtensions
|
|
27
38
|
end
|
28
39
|
|
29
40
|
def visit_ArelExtensions_Nodes_GroupConcat o, collector
|
30
|
-
collector << "LISTAGG("
|
41
|
+
collector << "(LISTAGG("
|
31
42
|
collector = visit o.left, collector
|
32
43
|
if o.right
|
33
44
|
collector << Arel::Visitors::Oracle::COMMA
|
34
45
|
collector = visit o.right, collector
|
35
46
|
end
|
36
|
-
collector << ")"
|
47
|
+
collector << ") WITHIN GROUP (ORDER BY "
|
48
|
+
collector = visit o.left, collector
|
49
|
+
collector << "))"
|
37
50
|
collector
|
38
51
|
end
|
39
52
|
|
40
53
|
def visit_ArelExtensions_Nodes_Coalesce o, collector
|
41
54
|
collector << "COALESCE("
|
42
|
-
|
43
|
-
|
44
|
-
collector
|
45
|
-
collector = visit a, collector
|
55
|
+
o.expressions.each_with_index { |arg, i|
|
56
|
+
collector << Arel::Visitors::Oracle::COMMA unless i == 0
|
57
|
+
collector = visit arg, collector
|
46
58
|
}
|
47
59
|
collector << ")"
|
48
60
|
collector
|
49
61
|
end
|
50
62
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
63
|
+
def visit_ArelExtensions_Nodes_DateDiff o, collector
|
64
|
+
collector << '('
|
65
|
+
collector = visit o.left, collector
|
66
|
+
collector << " - "
|
67
|
+
collector = visit o.right, collector
|
68
|
+
collector << ')'
|
69
|
+
collector
|
70
|
+
end
|
60
71
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
collector
|
76
|
-
end
|
72
|
+
def visit_ArelExtensions_Nodes_Duration o, collector
|
73
|
+
case o.left
|
74
|
+
when 'wd', 'w'
|
75
|
+
collector << "TO_CHAR("
|
76
|
+
collector = visit o.right, collector
|
77
|
+
collector << Arel::Visitors::Oracle::COMMA
|
78
|
+
collector = visit Arel::Nodes.build_quoted(Arel::Visitors::Oracle::DATE_MAPPING[o.left]), collector
|
79
|
+
else
|
80
|
+
collector << "EXTRACT(#{Arel::Visitors::Oracle::DATE_MAPPING[o.left]} FROM "
|
81
|
+
collector = visit o.right, collector
|
82
|
+
end
|
83
|
+
collector << ")"
|
84
|
+
collector
|
85
|
+
end
|
77
86
|
|
78
87
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
88
|
+
def visit_ArelExtensions_Nodes_Length o, collector
|
89
|
+
collector << "LENGTH("
|
90
|
+
collector = visit o.expr, collector
|
91
|
+
collector << ")"
|
92
|
+
collector
|
93
|
+
end
|
85
94
|
|
86
95
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
collector << ")"
|
93
|
-
collector
|
94
|
-
end
|
96
|
+
def visit_ArelExtensions_Nodes_IsNull o, collector
|
97
|
+
collector = visit o.left, collector
|
98
|
+
collector << ' IS NULL'
|
99
|
+
collector
|
100
|
+
end
|
95
101
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
102
|
+
def visit_ArelExtensions_Nodes_Rand o, collector
|
103
|
+
collector << "DBMS_RANDOM.VALUE("
|
104
|
+
if(o.left != nil && o.right != nil)
|
105
|
+
collector = visit o.left, collector
|
106
|
+
collector << Arel::Visitors::Oracle::COMMA
|
107
|
+
collector = visit o.right, collector
|
108
|
+
end
|
109
|
+
collector << ")"
|
110
|
+
collector
|
111
|
+
end
|
106
112
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
collector
|
116
|
-
end
|
113
|
+
def visit_Arel_Nodes_Regexp o, collector
|
114
|
+
collector << " REGEXP_LIKE("
|
115
|
+
collector = visit o.left, collector
|
116
|
+
collector << Arel::Visitors::Oracle::COMMA
|
117
|
+
collector = visit o.right, collector
|
118
|
+
collector << ')'
|
119
|
+
collector
|
120
|
+
end
|
117
121
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
122
|
+
def visit_Arel_Nodes_NotRegexp o, collector
|
123
|
+
collector << " NOT REGEXP_LIKE("
|
124
|
+
collector = visit o.left, collector
|
125
|
+
collector << Arel::Visitors::Oracle::COMMA
|
126
|
+
collector = visit o.right, collector
|
127
|
+
collector << ')'
|
128
|
+
collector
|
129
|
+
end
|
126
130
|
|
131
|
+
def visit_ArelExtensions_Nodes_Soundex o, collector
|
132
|
+
collector << "SOUNDEX("
|
133
|
+
collector = visit o.expr, collector
|
134
|
+
collector << ")"
|
135
|
+
collector
|
136
|
+
end
|
127
137
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
138
|
+
def visit_ArelExtensions_Nodes_Locate o, collector
|
139
|
+
collector << "INSTR("
|
140
|
+
o.expressions.each_with_index { |arg, i|
|
141
|
+
collector << Arel::Visitors::Oracle::COMMA unless i == 0
|
142
|
+
collector = visit arg, collector
|
143
|
+
}
|
144
|
+
collector << ")"
|
145
|
+
collector
|
146
|
+
end
|
136
147
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
collector
|
141
|
-
|
142
|
-
collector << "
|
148
|
+
def visit_ArelExtensions_Nodes_Trim o , collector
|
149
|
+
collector << 'TRIM(' # BOTH
|
150
|
+
collector = visit o.right, collector
|
151
|
+
collector << ' FROM '
|
152
|
+
collector = visit o.left, collector
|
153
|
+
collector << ")"
|
154
|
+
collector
|
143
155
|
end
|
144
|
-
collector << ")"
|
145
|
-
collector
|
146
|
-
end
|
147
156
|
|
148
|
-
|
149
|
-
|
150
|
-
collector = visit o.left, collector
|
151
|
-
collector << ","
|
152
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
157
|
+
def visit_ArelExtensions_Nodes_Ltrim o, collector
|
158
|
+
collector << 'TRIM(LEADING '
|
153
159
|
collector = visit o.right, collector
|
154
|
-
|
155
|
-
collector
|
160
|
+
collector << ' FROM '
|
161
|
+
collector = visit o.left, collector
|
162
|
+
collector << ")"
|
163
|
+
collector
|
156
164
|
end
|
157
|
-
collector << ")"
|
158
|
-
collector
|
159
|
-
end
|
160
165
|
|
161
|
-
|
162
|
-
|
163
|
-
collector = visit o.left, collector
|
164
|
-
collector << ","
|
165
|
-
if(o.right.is_a?(Arel::Attributes::Attribute))
|
166
|
+
def visit_ArelExtensions_Nodes_Rtrim o, collector
|
167
|
+
collector << 'TRIM(TRAILING '
|
166
168
|
collector = visit o.right, collector
|
167
|
-
|
168
|
-
collector
|
169
|
+
collector << ' FROM '
|
170
|
+
collector = visit o.left, collector
|
171
|
+
collector << ")"
|
172
|
+
collector
|
169
173
|
end
|
170
|
-
collector << ")"
|
171
|
-
collector
|
172
|
-
end
|
173
174
|
|
175
|
+
def visit_ArelExtensions_Nodes_DateAdd o, collector
|
176
|
+
collector << '('
|
177
|
+
collector = visit o.left, collector
|
178
|
+
collector << (o.right.value >= 0 ? ' + ' : ' - ')
|
179
|
+
collector = visit o.oracle_value(o.right), collector
|
180
|
+
collector << ')'
|
181
|
+
collector
|
182
|
+
end
|
174
183
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
184
|
+
def visit_ArelExtensions_Nodes_Format o, collector
|
185
|
+
case o.col_type
|
186
|
+
when :date, :datetime
|
187
|
+
collector << "TO_CHAR("
|
188
|
+
collector = visit o.left, collector
|
189
|
+
collector << Arel::Visitors::Oracle::COMMA unless i == 0
|
190
|
+
collector = visit o.right, collector
|
191
|
+
collector << ")"
|
192
|
+
when :integer, :float, :decimal
|
193
|
+
collector << "FORMAT("
|
194
|
+
collector = visit o.left, collector
|
195
|
+
collector << Arel::Visitors::Oracle::COMMA unless i == 0
|
196
|
+
collector = visit o.right, collector
|
197
|
+
collector << ")"
|
198
|
+
else
|
199
|
+
collector = visit o.left, collector
|
200
|
+
end
|
201
|
+
collector
|
183
202
|
end
|
184
|
-
collector << ")"
|
185
|
-
collector
|
186
|
-
end
|
187
203
|
|
188
204
|
def visit_ArelExtensions_InsertManager_BulkValues o, collector
|
189
205
|
table = collector.value.sub(/\AINSERT INTO/, '')
|
190
206
|
into = " INTO#{table}"
|
191
207
|
collector = Arel::Collectors::SQLString.new
|
192
208
|
collector << "INSERT ALL\n"
|
193
|
-
# row_nb = o.left.length
|
194
209
|
o.left.each_with_index do |row, idx|
|
195
210
|
collector << "#{into} VALUES ("
|
196
211
|
v = Arel::Nodes::Values.new(row, o.cols)
|