anbt-sql-formatter 0.0.6 → 0.0.7

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
  SHA256:
3
- metadata.gz: 533c8ba946b0b41bb3e9b56631b9e4fcbf7fd8e643b6c0875c1a3d1b2f8f25c8
4
- data.tar.gz: e74a08b3d979b1cab4d998533c8ed6167cfe703ee75288da4e45d31c25e91d41
3
+ metadata.gz: c4680b59adee7c6d2e6bcb649d73b095d3bbcd3d102f8517d50acefc89dfe089
4
+ data.tar.gz: dac35873e1d94941ec19156d2738fe75c1b0e156e2357cc1a10e263157c253c6
5
5
  SHA512:
6
- metadata.gz: cfd6fdc3fc8621957778f559464c7ab863cc5665b0ec084cbf755010ee6fd1699e7f3ad1952bc85d43d6d1fb233eb1b49858935d3c67fe1a7f4b9c4b8c20e476
7
- data.tar.gz: 9b8ddfe422d4fb89f381751c95517ab8252a9abd6a915df228886deffec4d478c95f9983a356d681ac12ea8eb035cdb21424816074d4980547897a03c5328e7d
6
+ metadata.gz: 52692fbb602a719f52a13077bd72b7a4c8d065ba484c6fbd141f928ad3987364dd3517c6fd7d66f9283acee8ecf8fd7033d2df467ffe6a5e0aa4f9e401b7cc6d
7
+ data.tar.gz: dcc161a7b754fd3937dfa8c799950aba2ea88a1db9990f38fb4e51ff6cb69e6c07ce619bd4843dba358e93f31d3787ba231ca076fbbdcd0216b224628f802b18
@@ -1,3 +1,13 @@
1
+ # 0.0.7 (2018-08-11)
2
+
3
+ No breaking changes.
4
+
5
+ ## Feattues
6
+
7
+ - New configuration parameter `Rule#in_values_num`
8
+ for controlling number of values in IN clause per line.
9
+
10
+
1
11
  # 0.0.6 (2018-03-31)
2
12
 
3
13
  No breaking changes.
@@ -5,13 +5,8 @@ begin
5
5
  require "anbt-sql-formatter/formatter"
6
6
  rescue LoadError
7
7
  $LOAD_PATH << File.expand_path(
8
- File.join(
9
- __FILE__,
10
- "..",
11
- "..",
12
- "lib"
13
- )
14
- )
8
+ File.join(__FILE__, "..", "..", "lib")
9
+ )
15
10
  require "anbt-sql-formatter/formatter"
16
11
  end
17
12
 
@@ -36,7 +31,6 @@ def main
36
31
  rule.function_names << func_name.upcase
37
32
  }
38
33
 
39
- #rule.indentString = "('-')"
40
34
  rule.indent_string = " "
41
35
 
42
36
  formatter = AnbtSql::Formatter.new(rule)
@@ -3,6 +3,7 @@
3
3
  require "anbt-sql-formatter/rule"
4
4
  require "anbt-sql-formatter/parser"
5
5
  require "anbt-sql-formatter/exception"
6
+ require "anbt-sql-formatter/in_values_checker"
6
7
  require "anbt-sql-formatter/helper" # Stack
7
8
 
8
9
 
@@ -16,7 +17,7 @@ class AnbtSql
16
17
  def initialize(rule)
17
18
  @rule = rule
18
19
  @parser = AnbtSql::Parser.new(@rule)
19
-
20
+
20
21
  # 丸カッコが関数のものかどうかを記憶
21
22
  @function_bracket = Stack.new
22
23
  end
@@ -52,7 +53,7 @@ class AnbtSql
52
53
  if sql_str.end_with?("\n")
53
54
  is_sql_ends_with_new_line = true
54
55
  end
55
-
56
+
56
57
  tokens = @parser.parse(sql_str)
57
58
 
58
59
  statements = split_to_statements(tokens)
@@ -74,12 +75,12 @@ class AnbtSql
74
75
  end
75
76
  end
76
77
 
77
-
78
+
78
79
  def modify_keyword_case(tokens)
79
80
  # SQLキーワードは大文字とする。or ...
80
81
  tokens.each{ |token|
81
82
  next if token._type != AnbtSql::TokenConstants::KEYWORD
82
-
83
+
83
84
  case @rule.keyword
84
85
  when AnbtSql::Rule::KEYWORD_NONE
85
86
  ;
@@ -91,7 +92,7 @@ class AnbtSql
91
92
  }
92
93
  end
93
94
 
94
-
95
+
95
96
  ##
96
97
  # .
97
98
  # ["(", "+", ")"] => ["(+)"]
@@ -101,7 +102,7 @@ class AnbtSql
101
102
  while index < tokens.size - 2
102
103
  if (tokens[index ].string == "(" &&
103
104
  tokens[index + 1].string == "+" &&
104
- tokens[index + 2].string == ")")
105
+ tokens[index + 2].string == ")")
105
106
  tokens[index].string = "(+)"
106
107
  ArrayUtil.remove(tokens, index + 1)
107
108
  ArrayUtil.remove(tokens, index + 1)
@@ -142,21 +143,21 @@ class AnbtSql
142
143
  token = ArrayUtil.get(tokens, index )
143
144
 
144
145
  if (prev._type != AnbtSql::TokenConstants::SPACE &&
145
- token._type != AnbtSql::TokenConstants::SPACE)
146
+ token._type != AnbtSql::TokenConstants::SPACE)
146
147
  # カンマの後にはスペース入れない
147
148
  if not @rule.space_after_comma
148
149
  if prev.string == ","
149
150
  index += 1 ; next
150
151
  end
151
152
  end
152
-
153
+
153
154
  # 関数名の後ろにはスペースは入れない
154
155
  # no space after function name
155
156
  if (@rule.function?(prev.string) &&
156
157
  token.string == "(")
157
158
  index += 1 ; next
158
159
  end
159
-
160
+
160
161
  ArrayUtil.add(tokens, index,
161
162
  AnbtSql::Token.new(AnbtSql::TokenConstants::SPACE, " ")
162
163
  )
@@ -164,8 +165,8 @@ class AnbtSql
164
165
  index += 1
165
166
  end
166
167
  end
167
-
168
-
168
+
169
+
169
170
  def format_list_main_loop(tokens)
170
171
  # インデントを整える。
171
172
  indent = 0
@@ -176,13 +177,14 @@ class AnbtSql
176
177
  " ")
177
178
 
178
179
  encounter_between = false
180
+ in_values_checker = nil
179
181
 
180
182
  index = 0
181
183
  # Length of tokens changes in loop!
182
184
  while index < tokens.size
183
185
  token = ArrayUtil.get(tokens, index)
184
-
185
- if token._type == AnbtSql::TokenConstants::SYMBOL # ****
186
+
187
+ if token._type == AnbtSql::TokenConstants::SYMBOL
186
188
 
187
189
  # indentを1つ増やし、'('のあとで改行。
188
190
  if token.string == "("
@@ -196,18 +198,23 @@ class AnbtSql
196
198
  indent = (bracket_indent.pop()).to_i
197
199
  index += insert_return_and_indent(tokens, index, indent)
198
200
  @function_bracket.pop()
199
-
201
+
200
202
  # ','の前で改行
201
203
  elsif token.string == ","
202
- index += insert_return_and_indent(tokens, index, indent, "x")
204
+ if in_values_checker.nil? || in_values_checker.check()
205
+ index += insert_return_and_indent(tokens, index, indent, "x")
206
+ end
203
207
 
204
208
  elsif token.string == ";"
205
209
  # 2005.07.26 Tosiki Iga とりあえずセミコロンでSQL文がつぶれないように改良
206
210
  indent = 0
207
211
  index += insert_return_and_indent(tokens, index, indent)
208
212
  end
209
-
210
- elsif token._type == AnbtSql::TokenConstants::KEYWORD # ****
213
+
214
+ elsif token._type == AnbtSql::TokenConstants::KEYWORD
215
+ in_values_checker = nil if in_values_checker
216
+
217
+ in_values_checker = AnbtSql::InValuesChecker.new(@rule) if equals_ignore_case(token.string, "IN")
211
218
 
212
219
  # indentを2つ増やし、キーワードの後ろで改行
213
220
  if (equals_ignore_case(token.string, "DELETE") ||
@@ -254,7 +261,7 @@ class AnbtSql
254
261
  # キーワードの前で改行。indentを強制的に0にする。
255
262
  if (equals_ignore_case(token.string, "UNION" ) ||
256
263
  equals_ignore_case(token.string, "INTERSECT") ||
257
- equals_ignore_case(token.string, "EXCEPT" ) )
264
+ equals_ignore_case(token.string, "EXCEPT" ) )
258
265
  indent -= 2
259
266
  index += insert_return_and_indent(tokens, index , indent)
260
267
  index += insert_return_and_indent(tokens, index + 1, indent)
@@ -272,7 +279,7 @@ class AnbtSql
272
279
  encounter_between = false
273
280
  end
274
281
 
275
- elsif (token._type == AnbtSql::TokenConstants::COMMENT) # ****
282
+ elsif (token._type == AnbtSql::TokenConstants::COMMENT)
276
283
 
277
284
  if token.string.start_with?("/*")
278
285
  # マルチラインコメントの後に改行を入れる。
@@ -282,12 +289,12 @@ class AnbtSql
282
289
  end
283
290
  end
284
291
  prev = token
285
-
292
+
286
293
  index += 1
287
294
  end
288
295
  end
289
-
290
-
296
+
297
+
291
298
  # before: [..., "(", space, "X", space, ")", ...]
292
299
  # after: [..., "(X)", ...]
293
300
  # ただし、これでは "(X)" という一つの symbol トークンになってしまう。
@@ -295,7 +302,7 @@ class AnbtSql
295
302
  # せっかくなので symbol/X/symbol と分けたい。
296
303
  def special_treatment_for_parenthesis_with_one_element(tokens)
297
304
  (tokens.size - 1).downto(4).each{|index|
298
- next if (index >= tokens.size())
305
+ next if (index >= tokens.size())
299
306
 
300
307
  t0 = ArrayUtil.get(tokens, index )
301
308
  t1 = ArrayUtil.get(tokens, index - 1)
@@ -305,7 +312,7 @@ class AnbtSql
305
312
 
306
313
  if (equals_ignore_case(t4.string , "(") &&
307
314
  equals_ignore_case(t3.string.strip, "" ) &&
308
- equals_ignore_case(t1.string.strip, "" ) &&
315
+ equals_ignore_case(t1.string.strip, "" ) &&
309
316
  equals_ignore_case(t0.string , ")") )
310
317
  t4.string = t4.string + t2.string + t0.string
311
318
  ArrayUtil.remove(tokens, index )
@@ -316,7 +323,7 @@ class AnbtSql
316
323
  }
317
324
  end
318
325
 
319
-
326
+
320
327
  def format_list(tokens)
321
328
  return [] if tokens.empty?
322
329
 
@@ -328,7 +335,7 @@ class AnbtSql
328
335
  ArrayUtil.remove(tokens, 0)
329
336
  end
330
337
  return [] if tokens.empty?
331
-
338
+
332
339
  token = ArrayUtil.get(tokens, tokens.size() - 1)
333
340
  if token._type == AnbtSql::TokenConstants::SPACE
334
341
  ArrayUtil.remove(tokens, tokens.size() - 1)
@@ -357,11 +364,11 @@ class AnbtSql
357
364
  # 関数内では改行は挿入しない
358
365
  # No linefeed in function.
359
366
  return 0 if (@function_bracket.include?(true))
360
-
367
+
361
368
  begin
362
369
  # 挿入する文字列を作成する。
363
370
  s = "\n"
364
-
371
+
365
372
  # インデントをつける。
366
373
  indent = 0 if indent < 0 ## Java版と異なる
367
374
  s += @rule.indent_string * indent
@@ -397,6 +404,6 @@ class AnbtSql
397
404
  rescue => e
398
405
  raise e
399
406
  end
400
- end
407
+ end
401
408
  end
402
409
  end
@@ -0,0 +1,32 @@
1
+ class AnbtSql
2
+ class InValuesChecker
3
+ def initialize(rule)
4
+ if rule.in_values_num.nil?
5
+ @mode = :default
6
+ elsif rule.in_values_num == AnbtSql::Rule::ONELINE_IN_VALUES_NUM
7
+ @mode = :oneline
8
+ @num = rule.in_values_num
9
+ else
10
+ @mode = :compact
11
+ @num = rule.in_values_num
12
+ @counter = 0
13
+ end
14
+ end
15
+
16
+ def check
17
+ if @mode == :default
18
+ true
19
+ elsif @mode == :oneline
20
+ false
21
+ else
22
+ @counter += 1
23
+ if @counter == @num
24
+ @counter = 0
25
+ true
26
+ else
27
+ false
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -32,15 +32,24 @@ class AnbtSql
32
32
  attr_accessor :kw_nl_x
33
33
  attr_accessor :kw_nl_x_plus1_indent
34
34
 
35
+ # Limit number of values per line in IN clause to this value.
36
+ #
37
+ # nil:: one value per line (default)
38
+ # n (>=2):: n values per line
39
+ # ONELINE_IN_VALUES_NUM:: all values in one line
40
+ attr_accessor :in_values_num
41
+
35
42
  # キーワードの変換規則: 何もしない
36
43
  KEYWORD_NONE = 0
37
44
 
38
45
  # キーワードの変換規則: 大文字にする
39
46
  KEYWORD_UPPER_CASE = 1
40
-
47
+
41
48
  # キーワードの変換規則: 小文字にする
42
49
  KEYWORD_LOWER_CASE = 2
43
50
 
51
+ # IN の値を一行表示する場合の in_values_num 値
52
+ ONELINE_IN_VALUES_NUM = 0
44
53
 
45
54
  def initialize
46
55
  # キーワードの変換規則.
@@ -51,7 +60,7 @@ class AnbtSql
51
60
  @indent_string = " "
52
61
 
53
62
  @space_after_comma = false
54
-
63
+
55
64
  # __foo
56
65
  # ____KW
57
66
  @kw_plus1_indent_x_nl = %w(INSERT INTO CREATE DROP TRUNCATE TABLE CASE)
@@ -65,12 +74,12 @@ class AnbtSql
65
74
  # __foo
66
75
  # ____KW
67
76
  @kw_nl_x_plus1_indent = %w(ON USING)
68
-
77
+
69
78
  # __foo
70
79
  # __KW
71
80
  @kw_nl_x = %w(OR THEN ELSE)
72
81
  # @kw_nl_x = %w(OR WHEN ELSE)
73
-
82
+
74
83
  @kw_multi_words = ["ORDER BY", "GROUP BY"]
75
84
 
76
85
  # 関数の名前。
@@ -117,7 +126,7 @@ class AnbtSql
117
126
  return true
118
127
  end
119
128
  end
120
-
129
+
121
130
  return false
122
131
  end
123
132
  end
@@ -1,7 +1,7 @@
1
1
  module Anbt
2
2
  module Sql
3
3
  module Formatter
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.7"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,193 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "helper")
4
+
5
+ require "anbt-sql-formatter/formatter"
6
+
7
+ class TestAnbtSqlInValues < Test::Unit::TestCase
8
+ def test_format_without_in_values_num
9
+ rule = base_rule
10
+ @fmt = AnbtSql::Formatter.new(rule)
11
+ msg = "without in_values_num setting"
12
+ sql = "select * from users where id in (" + (1...30).to_a.join(",") + ")"
13
+ expected = <<EOS
14
+ SELECT
15
+ *
16
+ FROM
17
+ users
18
+ WHERE
19
+ id IN (
20
+ 1
21
+ ,2
22
+ ,3
23
+ ,4
24
+ ,5
25
+ ,6
26
+ ,7
27
+ ,8
28
+ ,9
29
+ ,10
30
+ ,11
31
+ ,12
32
+ ,13
33
+ ,14
34
+ ,15
35
+ ,16
36
+ ,17
37
+ ,18
38
+ ,19
39
+ ,20
40
+ ,21
41
+ ,22
42
+ ,23
43
+ ,24
44
+ ,25
45
+ ,26
46
+ ,27
47
+ ,28
48
+ ,29
49
+ )
50
+ EOS
51
+
52
+ assert_equals(msg, expected.strip, @fmt.format(sql))
53
+ end
54
+
55
+ def test_format_num_in_values
56
+ rule = base_rule
57
+ rule.in_values_num = 10
58
+ @fmt = AnbtSql::Formatter.new(rule)
59
+ msg = "num in values"
60
+ sql = "select * from users where id in (" + (1...100).to_a.join(",") + ")"
61
+ expected = <<EOS
62
+ SELECT
63
+ *
64
+ FROM
65
+ users
66
+ WHERE
67
+ id IN (
68
+ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10
69
+ ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20
70
+ ,21 ,22 ,23 ,24 ,25 ,26 ,27 ,28 ,29 ,30
71
+ ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40
72
+ ,41 ,42 ,43 ,44 ,45 ,46 ,47 ,48 ,49 ,50
73
+ ,51 ,52 ,53 ,54 ,55 ,56 ,57 ,58 ,59 ,60
74
+ ,61 ,62 ,63 ,64 ,65 ,66 ,67 ,68 ,69 ,70
75
+ ,71 ,72 ,73 ,74 ,75 ,76 ,77 ,78 ,79 ,80
76
+ ,81 ,82 ,83 ,84 ,85 ,86 ,87 ,88 ,89 ,90
77
+ ,91 ,92 ,93 ,94 ,95 ,96 ,97 ,98 ,99
78
+ )
79
+ EOS
80
+
81
+ assert_equals(msg, expected.strip, @fmt.format(sql))
82
+ end
83
+
84
+ def test_format_str_in_values
85
+ rule = base_rule
86
+ rule.in_values_num = 10
87
+ @fmt = AnbtSql::Formatter.new(rule)
88
+ msg = "str in values"
89
+ sql = "select * from users where id in (" + (1...100).map { |i| "'#{i}'" }.join(",") + ")"
90
+ expected = <<EOS
91
+ SELECT
92
+ *
93
+ FROM
94
+ users
95
+ WHERE
96
+ id IN (
97
+ '1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'10'
98
+ ,'11' ,'12' ,'13' ,'14' ,'15' ,'16' ,'17' ,'18' ,'19' ,'20'
99
+ ,'21' ,'22' ,'23' ,'24' ,'25' ,'26' ,'27' ,'28' ,'29' ,'30'
100
+ ,'31' ,'32' ,'33' ,'34' ,'35' ,'36' ,'37' ,'38' ,'39' ,'40'
101
+ ,'41' ,'42' ,'43' ,'44' ,'45' ,'46' ,'47' ,'48' ,'49' ,'50'
102
+ ,'51' ,'52' ,'53' ,'54' ,'55' ,'56' ,'57' ,'58' ,'59' ,'60'
103
+ ,'61' ,'62' ,'63' ,'64' ,'65' ,'66' ,'67' ,'68' ,'69' ,'70'
104
+ ,'71' ,'72' ,'73' ,'74' ,'75' ,'76' ,'77' ,'78' ,'79' ,'80'
105
+ ,'81' ,'82' ,'83' ,'84' ,'85' ,'86' ,'87' ,'88' ,'89' ,'90'
106
+ ,'91' ,'92' ,'93' ,'94' ,'95' ,'96' ,'97' ,'98' ,'99'
107
+ )
108
+ EOS
109
+
110
+ assert_equals(msg, expected.strip, @fmt.format(sql))
111
+ end
112
+
113
+ def test_format_oneline_in_values
114
+ rule = base_rule
115
+ rule.in_values_num = AnbtSql::Rule::ONELINE_IN_VALUES_NUM
116
+ @fmt = AnbtSql::Formatter.new(rule)
117
+ msg = "oneline in values"
118
+ sql = "select * from users where id in (" + (1...50).to_a.join(",") + ")"
119
+ expected = <<EOS
120
+ SELECT
121
+ *
122
+ FROM
123
+ users
124
+ WHERE
125
+ id IN (
126
+ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 ,41 ,42 ,43 ,44 ,45 ,46 ,47 ,48 ,49
127
+ )
128
+ EOS
129
+
130
+ assert_equals(msg, expected.strip, @fmt.format(sql))
131
+ end
132
+
133
+ def test_format_with_space_after_comma
134
+ rule = base_rule
135
+ rule.in_values_num = 10
136
+ rule.space_after_comma = true
137
+ @fmt = AnbtSql::Formatter.new(rule)
138
+ msg = "num in values"
139
+ sql = "select * from users where id in (" + (1...100).to_a.join(",") + ")"
140
+ expected = <<EOS
141
+ SELECT
142
+ *
143
+ FROM
144
+ users
145
+ WHERE
146
+ id IN (
147
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10
148
+ , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20
149
+ , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30
150
+ , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40
151
+ , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50
152
+ , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60
153
+ , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70
154
+ , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80
155
+ , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90
156
+ , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99
157
+ )
158
+ EOS
159
+
160
+ assert_equals(msg, expected.strip, @fmt.format(sql))
161
+ end
162
+
163
+ def test_format_ignore_in_values_compact_when_select
164
+ rule = base_rule
165
+ rule.in_values_num = AnbtSql::Rule::ONELINE_IN_VALUES_NUM
166
+ @fmt = AnbtSql::Formatter.new(rule)
167
+ msg = "num in values"
168
+ sql = "select * from users where id in (select user_id from admins)"
169
+ expected = <<EOS
170
+ SELECT
171
+ *
172
+ FROM
173
+ users
174
+ WHERE
175
+ id IN (
176
+ SELECT
177
+ user_id
178
+ FROM
179
+ admins
180
+ )
181
+ EOS
182
+
183
+ assert_equals(msg, expected.strip, @fmt.format(sql))
184
+ end
185
+
186
+ private
187
+
188
+ def base_rule
189
+ rule = AnbtSql::Rule.new
190
+ rule.indent_string = " "
191
+ rule
192
+ end
193
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anbt-sql-formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - sonota88
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-31 00:00:00.000000000 Z
11
+ date: 2018-08-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A tool for SQL formatting written in Ruby. Ruby port of Blanco SQL Formatter.
14
14
  email:
@@ -30,6 +30,7 @@ files:
30
30
  - lib/anbt-sql-formatter/exception.rb
31
31
  - lib/anbt-sql-formatter/formatter.rb
32
32
  - lib/anbt-sql-formatter/helper.rb
33
+ - lib/anbt-sql-formatter/in_values_checker.rb
33
34
  - lib/anbt-sql-formatter/parser.rb
34
35
  - lib/anbt-sql-formatter/rule.rb
35
36
  - lib/anbt-sql-formatter/token.rb
@@ -44,6 +45,7 @@ files:
44
45
  - test/test_coarse-tokenizer.rb
45
46
  - test/test_formatter.rb
46
47
  - test/test_helper.rb
48
+ - test/test_in_values.rb
47
49
  - test/test_parser.rb
48
50
  - test/test_rule.rb
49
51
  - uninstall.rb