anbt-sql-formatter 0.0.6 → 0.0.7

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