anbt-sql-formatter 0.0.1 → 0.0.2
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.
- data/bin/anbt-sql-formatter +0 -3
- data/lib/anbt-sql-formatter/coarse-tokenizer.rb +1 -3
- data/lib/anbt-sql-formatter/exception.rb +0 -2
- data/lib/anbt-sql-formatter/formatter.rb +50 -57
- data/lib/anbt-sql-formatter/helper.rb +42 -56
- data/lib/anbt-sql-formatter/parser.rb +40 -52
- data/lib/anbt-sql-formatter/rule.rb +5 -2
- data/lib/anbt-sql-formatter/token.rb +1 -10
- data/lib/anbt-sql-formatter/version.rb +1 -1
- data/test/helper.rb +7 -1
- data/test/test_coarse-tokenizer.rb +327 -228
- data/test/test_formatter.rb +363 -276
- data/test/test_helper.rb +2 -2
- data/test/test_parser.rb +302 -213
- data/test/test_rule.rb +10 -8
- metadata +21 -31
data/test/test_helper.rb
CHANGED
@@ -14,10 +14,10 @@ class TestAnbtSqlHelper < Test::Unit::TestCase
|
|
14
14
|
def test_array_get
|
15
15
|
arr = %w(a b c) # index = 0, 1, 2
|
16
16
|
assert_raise(IndexOutOfBoundsException, "値が範囲外なのに例外が発生しない"){
|
17
|
-
|
17
|
+
::AnbtSql::ArrayUtil.get(arr, 3)
|
18
18
|
}
|
19
19
|
assert_raise(IndexOutOfBoundsException, "値が範囲外なのに例外が発生しない"){
|
20
|
-
|
20
|
+
::AnbtSql::ArrayUtil.get(arr, -1)
|
21
21
|
}
|
22
22
|
end
|
23
23
|
end
|
data/test/test_parser.rb
CHANGED
@@ -18,6 +18,10 @@ class TestAnbtSqlParser < Test::Unit::TestCase
|
|
18
18
|
@parser = AnbtSql::Parser.new(AnbtSql::Rule.new)
|
19
19
|
end
|
20
20
|
|
21
|
+
def _format(tokens)
|
22
|
+
Helper.format_tokens(tokens)
|
23
|
+
end
|
24
|
+
|
21
25
|
|
22
26
|
def test_space?
|
23
27
|
msg = "space? - "
|
@@ -27,18 +31,19 @@ class TestAnbtSqlParser < Test::Unit::TestCase
|
|
27
31
|
assert_equals( msg, true, @parser.space?("\n") )
|
28
32
|
end
|
29
33
|
|
30
|
-
|
34
|
+
|
31
35
|
def test_letter?
|
32
36
|
msg = "letter? - "
|
33
37
|
assert_equals( msg, false, @parser.letter?("'") )
|
34
38
|
assert_equals( msg, false, @parser.letter?('"') )
|
35
39
|
end
|
36
|
-
|
40
|
+
|
37
41
|
|
38
42
|
def test_symbol?
|
39
43
|
msg = "symbol?"
|
40
44
|
assert_equals( msg, true, @parser.symbol?('"') )
|
41
45
|
assert_equals( msg, true, @parser.symbol?("'") )
|
46
|
+
assert_equals( msg, true, @parser.symbol?("!") )
|
42
47
|
end
|
43
48
|
|
44
49
|
|
@@ -50,7 +55,7 @@ class TestAnbtSqlParser < Test::Unit::TestCase
|
|
50
55
|
assert_equals( msg, false, @parser.digit?("a") )
|
51
56
|
end
|
52
57
|
|
53
|
-
|
58
|
+
|
54
59
|
##
|
55
60
|
# コメントと文字列のテストは coarse tokenize で行う。
|
56
61
|
def test_next_sql_token_pos
|
@@ -78,156 +83,198 @@ class TestAnbtSqlParser < Test::Unit::TestCase
|
|
78
83
|
########
|
79
84
|
@parser.before = " "
|
80
85
|
@parser.pos = 0
|
81
|
-
assert_equals(
|
82
|
-
|
83
|
-
|
84
|
-
EOB
|
85
|
-
|
86
|
-
|
87
|
-
|
86
|
+
assert_equals(
|
87
|
+
msg + "space",
|
88
|
+
strip_indent(
|
89
|
+
<<-EOB
|
90
|
+
space ( )
|
91
|
+
EOB
|
92
|
+
),
|
93
|
+
_format([ @parser.next_sql_token ])
|
94
|
+
)
|
95
|
+
|
96
|
+
########
|
97
|
+
@parser.before = "!="
|
98
|
+
@parser.pos = 0
|
99
|
+
assert_equals(
|
100
|
+
msg + "!=",
|
101
|
+
strip_indent(
|
102
|
+
<<-EOB
|
103
|
+
symbol (!=)
|
104
|
+
EOB
|
105
|
+
),
|
106
|
+
_format([ @parser.next_sql_token ])
|
107
|
+
)
|
108
|
+
|
88
109
|
|
89
110
|
########
|
90
111
|
@parser.before = "a b"
|
91
112
|
@parser.pos = 1
|
92
|
-
assert_equals(
|
93
|
-
|
94
|
-
|
95
|
-
EOB
|
96
|
-
|
97
|
-
|
98
|
-
|
113
|
+
assert_equals(
|
114
|
+
msg + "space",
|
115
|
+
strip_indent(
|
116
|
+
<<-EOB
|
117
|
+
space ( )
|
118
|
+
EOB
|
119
|
+
),
|
120
|
+
_format([ @parser.next_sql_token ])
|
121
|
+
)
|
99
122
|
|
100
123
|
########
|
101
124
|
@parser.before = ","
|
102
125
|
@parser.pos = 0
|
103
|
-
assert_equals(
|
104
|
-
|
105
|
-
|
106
|
-
EOB
|
107
|
-
|
108
|
-
|
109
|
-
|
126
|
+
assert_equals(
|
127
|
+
msg + "symbol",
|
128
|
+
strip_indent(
|
129
|
+
<<-EOB
|
130
|
+
symbol (,)
|
131
|
+
EOB
|
132
|
+
),
|
133
|
+
_format([ @parser.next_sql_token ])
|
134
|
+
)
|
110
135
|
|
111
136
|
########
|
112
137
|
@parser.before = "select"
|
113
138
|
@parser.pos = 0
|
114
|
-
assert_equals(
|
115
|
-
|
116
|
-
|
117
|
-
EOB
|
118
|
-
|
119
|
-
|
120
|
-
|
139
|
+
assert_equals(
|
140
|
+
msg + "keyword: select",
|
141
|
+
strip_indent(
|
142
|
+
<<-EOB
|
143
|
+
keyword (select)
|
144
|
+
EOB
|
145
|
+
),
|
146
|
+
_format([ @parser.next_sql_token ])
|
147
|
+
)
|
121
148
|
|
122
149
|
########
|
123
150
|
@parser.before = "case"
|
124
151
|
@parser.pos = 0
|
125
|
-
assert_equals(
|
126
|
-
|
127
|
-
|
128
|
-
EOB
|
129
|
-
|
130
|
-
|
131
|
-
|
152
|
+
assert_equals(
|
153
|
+
msg + "keyword: case",
|
154
|
+
strip_indent(
|
155
|
+
<<-EOB
|
156
|
+
keyword (case)
|
157
|
+
EOB
|
158
|
+
),
|
159
|
+
_format([ @parser.next_sql_token ])
|
160
|
+
)
|
132
161
|
|
133
162
|
########
|
134
163
|
@parser.before = "xxx123"
|
135
164
|
@parser.pos = 0
|
136
|
-
assert_equals(
|
137
|
-
|
138
|
-
|
139
|
-
EOB
|
140
|
-
|
141
|
-
|
142
|
-
|
165
|
+
assert_equals(
|
166
|
+
msg + "name",
|
167
|
+
strip_indent(
|
168
|
+
<<-EOB
|
169
|
+
name (xxx123)
|
170
|
+
EOB
|
171
|
+
),
|
172
|
+
_format([ @parser.next_sql_token ])
|
173
|
+
)
|
143
174
|
|
144
175
|
########
|
145
176
|
@parser.before = '123'
|
146
177
|
@parser.pos = 0
|
147
|
-
assert_equals(
|
148
|
-
|
149
|
-
|
150
|
-
EOB
|
151
|
-
|
152
|
-
|
153
|
-
|
178
|
+
assert_equals(
|
179
|
+
msg + "value",
|
180
|
+
strip_indent(
|
181
|
+
<<-EOB
|
182
|
+
value (123)
|
183
|
+
EOB
|
184
|
+
),
|
185
|
+
_format([ @parser.next_sql_token ])
|
186
|
+
)
|
154
187
|
|
155
188
|
########
|
156
189
|
@parser.before = '1.23'
|
157
190
|
@parser.pos = 0
|
158
|
-
assert_equals(
|
159
|
-
|
160
|
-
|
161
|
-
EOB
|
162
|
-
|
163
|
-
|
164
|
-
|
191
|
+
assert_equals(
|
192
|
+
msg + "value",
|
193
|
+
strip_indent(
|
194
|
+
<<-EOB
|
195
|
+
value (1.23)
|
196
|
+
EOB
|
197
|
+
),
|
198
|
+
_format([ @parser.next_sql_token ])
|
199
|
+
)
|
165
200
|
|
166
201
|
########
|
167
202
|
@parser.before = '-1.23 '
|
168
203
|
@parser.pos = 0
|
169
|
-
assert_equals(
|
170
|
-
|
171
|
-
|
172
|
-
EOB
|
173
|
-
|
174
|
-
|
175
|
-
|
204
|
+
assert_equals(
|
205
|
+
msg + "value",
|
206
|
+
strip_indent(
|
207
|
+
<<-EOB
|
208
|
+
value (-1.23)
|
209
|
+
EOB
|
210
|
+
),
|
211
|
+
_format([ @parser.next_sql_token ])
|
212
|
+
)
|
176
213
|
|
177
214
|
########
|
178
215
|
@parser.before = '1.23e45 '
|
179
216
|
@parser.pos = 0
|
180
|
-
assert_equals(
|
181
|
-
|
182
|
-
|
183
|
-
EOB
|
184
|
-
|
185
|
-
|
186
|
-
|
217
|
+
assert_equals(
|
218
|
+
msg + "value",
|
219
|
+
strip_indent(
|
220
|
+
<<-EOB
|
221
|
+
value (1.23e45)
|
222
|
+
EOB
|
223
|
+
),
|
224
|
+
_format([ @parser.next_sql_token ])
|
225
|
+
)
|
187
226
|
|
188
227
|
########
|
189
228
|
@parser.before = '1.23e-45 '
|
190
229
|
@parser.pos = 0
|
191
|
-
assert_equals(
|
192
|
-
|
193
|
-
|
194
|
-
EOB
|
195
|
-
|
196
|
-
|
197
|
-
|
230
|
+
assert_equals(
|
231
|
+
msg + "value",
|
232
|
+
strip_indent(
|
233
|
+
<<-EOB
|
234
|
+
value (1.23e-45)
|
235
|
+
EOB
|
236
|
+
),
|
237
|
+
_format([ @parser.next_sql_token ])
|
238
|
+
)
|
198
239
|
|
199
240
|
########
|
200
241
|
@parser.before = '-1.23e-45 '
|
201
242
|
@parser.pos = 0
|
202
|
-
assert_equals(
|
203
|
-
|
204
|
-
|
205
|
-
EOB
|
206
|
-
|
207
|
-
|
208
|
-
|
243
|
+
assert_equals(
|
244
|
+
msg + "value",
|
245
|
+
strip_indent(
|
246
|
+
<<-EOB
|
247
|
+
value (-1.23e-45)
|
248
|
+
EOB
|
249
|
+
),
|
250
|
+
_format([ @parser.next_sql_token ])
|
251
|
+
)
|
209
252
|
|
210
253
|
########
|
211
254
|
@parser.before = '0x01 '
|
212
255
|
@parser.pos = 0
|
213
|
-
assert_equals(
|
214
|
-
|
215
|
-
|
216
|
-
EOB
|
217
|
-
|
218
|
-
|
219
|
-
|
256
|
+
assert_equals(
|
257
|
+
msg + "value",
|
258
|
+
strip_indent(
|
259
|
+
<<-EOB
|
260
|
+
value (0x01)
|
261
|
+
EOB
|
262
|
+
),
|
263
|
+
_format([ @parser.next_sql_token ])
|
264
|
+
)
|
220
265
|
|
221
266
|
########
|
222
267
|
@parser.before = '1x'
|
223
268
|
@parser.pos = 0
|
224
|
-
assert_equals(
|
225
|
-
|
226
|
-
|
227
|
-
EOB
|
228
|
-
|
229
|
-
|
230
|
-
|
269
|
+
assert_equals(
|
270
|
+
msg + "value",
|
271
|
+
strip_indent(
|
272
|
+
<<-EOB
|
273
|
+
value (1)
|
274
|
+
EOB
|
275
|
+
),
|
276
|
+
_format([ @parser.next_sql_token ])
|
277
|
+
)
|
231
278
|
end
|
232
279
|
|
233
280
|
|
@@ -235,136 +282,178 @@ EOB
|
|
235
282
|
msg = "parser basic case - "
|
236
283
|
|
237
284
|
########
|
238
|
-
assert_equals(
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
EOB
|
251
|
-
|
252
|
-
|
253
|
-
|
285
|
+
assert_equals(
|
286
|
+
msg + "",
|
287
|
+
strip_indent(
|
288
|
+
<<-EOB
|
289
|
+
keyword (select)
|
290
|
+
space ( )
|
291
|
+
name (a)
|
292
|
+
space ( )
|
293
|
+
keyword (from)
|
294
|
+
space ( )
|
295
|
+
name (b)
|
296
|
+
symbol (;)
|
297
|
+
EOB
|
298
|
+
),
|
299
|
+
_format( @parser.parse( strip_indent(
|
300
|
+
<<-EOB
|
301
|
+
select a from b;
|
302
|
+
EOB
|
303
|
+
)))
|
304
|
+
)
|
254
305
|
|
255
306
|
########
|
256
|
-
assert_equals(
|
257
|
-
|
258
|
-
|
259
|
-
EOB
|
260
|
-
|
261
|
-
|
262
|
-
EOB
|
263
|
-
|
264
|
-
|
265
|
-
|
307
|
+
assert_equals(
|
308
|
+
msg + "minus + non-number",
|
309
|
+
strip_indent(
|
310
|
+
<<-EOB
|
311
|
+
symbol (-)
|
312
|
+
name (a)
|
313
|
+
EOB
|
314
|
+
),
|
315
|
+
_format( @parser.parse( strip_indent(
|
316
|
+
<<-EOB
|
317
|
+
-a
|
318
|
+
EOB
|
319
|
+
)))
|
320
|
+
)
|
266
321
|
|
267
322
|
########
|
268
|
-
assert_equals(
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
EOB
|
280
|
-
|
281
|
-
|
323
|
+
assert_equals(
|
324
|
+
msg + "single comment",
|
325
|
+
strip_indent(
|
326
|
+
<<-EOB
|
327
|
+
keyword (select)
|
328
|
+
space (\n)
|
329
|
+
comment (-- x)
|
330
|
+
name (a)
|
331
|
+
EOB
|
332
|
+
),
|
333
|
+
_format( @parser.parse(strip_indent(
|
334
|
+
<<-EOB
|
335
|
+
select
|
336
|
+
-- x
|
337
|
+
a
|
338
|
+
EOB
|
339
|
+
)))
|
340
|
+
)
|
282
341
|
|
283
342
|
########
|
284
|
-
assert_equals(
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
'()'
|
289
|
-
EOB
|
290
|
-
|
291
|
-
|
292
|
-
|
343
|
+
assert_equals(
|
344
|
+
msg + "parenthesis in single quote",
|
345
|
+
strip_indent(
|
346
|
+
<<-EOB
|
347
|
+
value ('()')
|
348
|
+
EOB
|
349
|
+
),
|
350
|
+
_format( @parser.parse(strip_indent(
|
351
|
+
<<-EOB
|
352
|
+
'()'
|
353
|
+
EOB
|
354
|
+
)))
|
355
|
+
)
|
293
356
|
|
294
357
|
########
|
295
|
-
assert_equals(
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
"()"
|
300
|
-
EOB
|
301
|
-
|
302
|
-
|
303
|
-
|
358
|
+
assert_equals(
|
359
|
+
msg + "parenthesis in double quote",
|
360
|
+
strip_indent(
|
361
|
+
<<-EOB
|
362
|
+
name ("()")
|
363
|
+
EOB
|
364
|
+
),
|
365
|
+
_format( @parser.parse(strip_indent(
|
366
|
+
<<-EOB
|
367
|
+
"()"
|
368
|
+
EOB
|
369
|
+
)))
|
370
|
+
)
|
304
371
|
|
305
372
|
########
|
306
|
-
assert_equals(
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
EOB
|
314
|
-
|
315
|
-
|
316
|
-
|
373
|
+
assert_equals(
|
374
|
+
msg + "multiple line comment: 1",
|
375
|
+
strip_indent(
|
376
|
+
<<-EOB
|
377
|
+
name (aa)
|
378
|
+
comment (/*bb*/)
|
379
|
+
name (cc)
|
380
|
+
EOB
|
381
|
+
),
|
382
|
+
_format( @parser.parse(strip_indent(
|
383
|
+
<<-EOB
|
384
|
+
aa/*bb*/cc
|
385
|
+
EOB
|
386
|
+
)))
|
387
|
+
)
|
317
388
|
|
318
389
|
########
|
319
|
-
assert_equals(
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
390
|
+
assert_equals(
|
391
|
+
msg + "multiple line comment: 2",
|
392
|
+
strip_indent(
|
393
|
+
<<-EOB
|
394
|
+
name (aa)
|
395
|
+
comment (/*b
|
396
|
+
b*/)
|
397
|
+
name (cc)
|
398
|
+
EOB
|
399
|
+
),
|
400
|
+
_format( @parser.parse(strip_indent(
|
401
|
+
<<-EOB
|
402
|
+
aa/*b
|
403
|
+
b*/cc
|
404
|
+
EOB
|
405
|
+
)))
|
406
|
+
)
|
332
407
|
|
333
408
|
########
|
334
|
-
assert_equals(
|
335
|
-
|
336
|
-
|
337
|
-
EOB
|
338
|
-
|
339
|
-
|
340
|
-
EOB
|
341
|
-
|
342
|
-
|
343
|
-
|
409
|
+
assert_equals(
|
410
|
+
msg + "invalid paired double quote",
|
411
|
+
strip_indent(
|
412
|
+
<<-EOB
|
413
|
+
name (aa)
|
414
|
+
name ("bb)
|
415
|
+
EOB
|
416
|
+
),
|
417
|
+
_format( @parser.parse(strip_indent(
|
418
|
+
<<-EOB
|
419
|
+
aa"bb
|
420
|
+
EOB
|
421
|
+
)))
|
422
|
+
)
|
344
423
|
|
345
424
|
########
|
346
|
-
assert_equals(
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
group by
|
351
|
-
EOB
|
352
|
-
|
353
|
-
|
354
|
-
|
425
|
+
assert_equals(
|
426
|
+
msg + "multiwords keyword",
|
427
|
+
strip_indent(
|
428
|
+
<<-EOB
|
429
|
+
keyword (group by)
|
430
|
+
EOB
|
431
|
+
),
|
432
|
+
_format( @parser.parse(strip_indent(
|
433
|
+
<<-EOB
|
434
|
+
group by
|
435
|
+
EOB
|
436
|
+
)))
|
437
|
+
)
|
355
438
|
|
356
439
|
########
|
357
|
-
assert_equals(
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
440
|
+
assert_equals(
|
441
|
+
msg + "multiwords keyword 2",
|
442
|
+
strip_indent(
|
443
|
+
<<-EOB
|
444
|
+
name (a)
|
445
|
+
space ( )
|
446
|
+
keyword (group by)
|
447
|
+
space ( )
|
448
|
+
name (B)
|
449
|
+
EOB
|
450
|
+
),
|
451
|
+
_format( @parser.parse(strip_indent(
|
452
|
+
<<-EOB
|
453
|
+
a group by B
|
454
|
+
EOB
|
455
|
+
)))
|
456
|
+
)
|
368
457
|
|
369
458
|
end
|
370
459
|
end
|