each_sql 0.1.0 → 0.2.0
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/CHANGELOG.rdoc +7 -0
- data/Gemfile.lock +2 -0
- data/README.rdoc +1 -3
- data/VERSION +1 -1
- data/lib/each_sql/each_sql.rb +80 -67
- data/lib/each_sql.rb +35 -9
- data/test/test_each_sql.rb +147 -34
- metadata +10 -9
data/CHANGELOG.rdoc
ADDED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -31,9 +31,7 @@ Enumerate each SQL statement in the given SQL script.
|
|
31
31
|
- pgplsql support.
|
32
32
|
|
33
33
|
== Warning
|
34
|
-
|
35
|
-
I thought this would be simple when I first started, but actually it wasn't, and the code now is a mess.
|
36
|
-
Use it at your own risk.
|
34
|
+
Stored procedure handling is at best incomplete. Use it at your own risk.
|
37
35
|
|
38
36
|
== Contributing to each_sql
|
39
37
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/each_sql/each_sql.rb
CHANGED
@@ -8,7 +8,7 @@ class EachSQL
|
|
8
8
|
def initialize input, options
|
9
9
|
raise NotImplementedError.new if options.nil?
|
10
10
|
# immutables
|
11
|
-
@org_input = input
|
11
|
+
@org_input = input.sub(/\A#{[65279].pack('U*')}/, '') # BOM
|
12
12
|
@options = options
|
13
13
|
@blocks = @options[:blocks]
|
14
14
|
@nblocks = @options[:nesting_blocks]
|
@@ -16,21 +16,17 @@ class EachSQL
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def each
|
19
|
-
|
19
|
+
# Phase 1: comment out input
|
20
|
+
@input = @org_input.dup
|
21
|
+
@input_c = zero_out @org_input
|
22
|
+
|
20
23
|
return nil if @input.nil? || @input.empty?
|
21
24
|
|
22
25
|
@delimiter = @options[:delimiter]
|
23
26
|
|
24
|
-
|
25
|
-
while @input
|
26
|
-
# First look for next delimiter, this is to reduce the search space for blocks.
|
27
|
-
extend_scope
|
28
|
-
|
29
|
-
# We're done. Finished. Period. Out!
|
30
|
-
break if scope.empty?
|
31
|
-
|
27
|
+
while @input && @input.length > 0
|
32
28
|
# Extract a statement
|
33
|
-
statement =
|
29
|
+
statement = next_statement
|
34
30
|
|
35
31
|
# When a non-empty statement is found
|
36
32
|
statement = @options[:strip_delimiter].call self, statement if @options[:strip_delimiter]
|
@@ -48,7 +44,8 @@ class EachSQL
|
|
48
44
|
end
|
49
45
|
|
50
46
|
# Ignore
|
51
|
-
if
|
47
|
+
if statement.length > 0 &&
|
48
|
+
(@options[:ignore] || []).all? { |ipat| statement !~ ipat }
|
52
49
|
yield statement
|
53
50
|
@prev_statement = statement
|
54
51
|
end
|
@@ -59,75 +56,84 @@ class EachSQL
|
|
59
56
|
|
60
57
|
attr_accessor :delimiter, :delimiter_string
|
61
58
|
private
|
59
|
+
def zero_out input
|
60
|
+
output = input.dup
|
61
|
+
idx = 0
|
62
|
+
# Look for the closest block
|
63
|
+
while true
|
64
|
+
block_start, opener_length, opener, closer = @blocks.map { |opener, closer|
|
65
|
+
md = match output, opener, idx
|
66
|
+
[md && md[:begin], md && md[:length], opener, closer]
|
67
|
+
}.reject { |e| e.first.nil? }.min_by(&:first)
|
68
|
+
break if block_start.nil?
|
62
69
|
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
ret = scope.strip
|
68
|
-
@input = @input[@next_head..-1]
|
69
|
-
reset_cursor
|
70
|
-
return ret
|
71
|
-
end
|
72
|
-
|
73
|
-
def reset_cursor
|
74
|
-
@cur = @from = @to = 0
|
75
|
-
end
|
70
|
+
md = match output, closer, block_start + opener_length
|
71
|
+
idx = block_end = md ? md[:end] : (output.length-1)
|
76
72
|
|
77
|
-
|
78
|
-
|
73
|
+
output[block_start...block_end] = ' ' * (block_end - block_start)
|
74
|
+
end
|
75
|
+
output
|
79
76
|
end
|
80
77
|
|
81
|
-
def
|
82
|
-
|
78
|
+
def next_statement
|
79
|
+
@cur = 0
|
83
80
|
|
84
|
-
|
85
|
-
@to = md.begin(0) + md[0].length
|
86
|
-
@next_head = @to
|
87
|
-
else
|
88
|
-
@to = @input.length
|
89
|
-
@next_head = @input.length
|
81
|
+
while process_next_block != :done
|
90
82
|
end
|
91
|
-
|
83
|
+
|
84
|
+
ret = @input[0...@cur].strip
|
85
|
+
@input = @input[@cur..-1]
|
86
|
+
@input_c = @input_c[@cur..-1]
|
87
|
+
return ret
|
92
88
|
end
|
93
89
|
|
94
90
|
def process_next_block expect = nil
|
91
|
+
# Look for the closest delimiter
|
92
|
+
md = match @input_c, @delimiter, @cur
|
93
|
+
delim_start = md ? md[:begin] : @input.length
|
94
|
+
delim_end = md ? md[:end] : @input.length
|
95
|
+
|
95
96
|
# Look for the closest block
|
96
|
-
|
97
|
+
target_blocks =
|
98
|
+
if @options[:nesting_context].any? {|pat| @input_c.match pat }
|
99
|
+
@all_blocks
|
100
|
+
else
|
101
|
+
@blocks
|
102
|
+
end
|
103
|
+
|
104
|
+
block_start, body_start, opener, closer = target_blocks.map { |opener, closer|
|
97
105
|
closer = closer[:closer] if closer.is_a? Hash
|
98
|
-
md =
|
99
|
-
[md && md
|
106
|
+
md = match @input_c, opener, @cur
|
107
|
+
[md && md[:begin], md && md[:end], opener, closer]
|
100
108
|
}.reject { |e| e.first.nil? }.min_by(&:first)
|
101
109
|
|
102
|
-
#
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
return :end_nest
|
110
|
+
# If we're nested, look for the parent's closer as well
|
111
|
+
if expect && (md = match @input_c, expect, @cur) &&
|
112
|
+
(block_start.nil? || md[:begin] < block_start)
|
113
|
+
|
114
|
+
@cur = md[:end]
|
115
|
+
return :nest_closer
|
109
116
|
end
|
110
117
|
|
111
|
-
#
|
112
|
-
|
118
|
+
# No block until the next delimiter
|
119
|
+
if block_start.nil? || block_start > delim_start
|
120
|
+
@cur = delim_end
|
121
|
+
return :done
|
122
|
+
end
|
123
|
+
|
124
|
+
# #####################################
|
113
125
|
|
114
126
|
# We found a block. Look for the end of it
|
115
|
-
@cur =
|
127
|
+
@cur = body_start
|
116
128
|
|
117
129
|
# If nesting block, we go deeper
|
118
130
|
if @nblocks.keys.include? opener
|
119
|
-
@prev_delimiter = @delimiter
|
120
|
-
if @nblocks[opener].is_a? Hash
|
121
|
-
@delimiter = @nblocks[opener][:delimiter] || @delimiter
|
122
|
-
end
|
123
131
|
while true
|
124
132
|
ret = process_next_block(closer)
|
125
|
-
|
126
|
-
|
127
|
-
extend_scope if ret == :not_found
|
128
|
-
throw_exception(closer) if scope.length == @input.length
|
133
|
+
break if ret == :nest_closer
|
134
|
+
throw_exception(closer) if @cur >= @input.length - 1
|
129
135
|
end
|
130
|
-
@
|
136
|
+
return :done if @nblocks[opener].is_a?(Hash) && @nblocks[opener][:pop]
|
131
137
|
|
132
138
|
# If non-nesting block, just skip through it
|
133
139
|
else
|
@@ -137,22 +143,29 @@ private
|
|
137
143
|
return :continue
|
138
144
|
end
|
139
145
|
|
140
|
-
def
|
141
|
-
md =
|
142
|
-
|
146
|
+
def match str, pat, idx
|
147
|
+
md = str[idx..-1].match(pat)
|
148
|
+
return nil if md.nil?
|
143
149
|
|
144
|
-
|
150
|
+
result = {
|
151
|
+
:begin => md && (md.begin(0) + idx),
|
152
|
+
:length => md && md[0].length,
|
153
|
+
:end => md && (md.end(0) + idx)
|
154
|
+
}
|
155
|
+
result
|
156
|
+
end
|
145
157
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
158
|
+
def skip_through_block closer
|
159
|
+
md = match @input_c, closer, @cur
|
160
|
+
throw_exception(closer) if md.nil?
|
161
|
+
|
162
|
+
@cur = md[:end]
|
150
163
|
end
|
151
164
|
|
152
165
|
def throw_exception closer
|
153
166
|
raise ArgumentError.new(
|
154
167
|
"Unclosed block: was expecting #{closer.inspect} " +
|
155
|
-
"while processing #{
|
168
|
+
"while processing #{(@input[0, 60] + ' ... ').inspect}" +
|
156
169
|
(@prev_statement ?
|
157
170
|
" after #{@prev_statement.inspect}" : ""))
|
158
171
|
end
|
data/lib/each_sql.rb
CHANGED
@@ -20,14 +20,19 @@ class EachSQL
|
|
20
20
|
:default => {
|
21
21
|
:delimiter => /;+/,
|
22
22
|
:blocks => {
|
23
|
+
/`/ => /`/,
|
24
|
+
/"/ => /"/,
|
23
25
|
/'/ => /'/,
|
24
26
|
/\/\*[^+]/ => /\*\//,
|
25
27
|
/--+/ => $/,
|
26
28
|
},
|
27
29
|
:nesting_blocks => {
|
28
|
-
/\bdeclare\b/
|
29
|
-
/\bbegin\b/i =>
|
30
|
+
/\bdeclare.*?;\s*?begin\b/im => /;\s*?end\b/i,
|
31
|
+
/\bbegin\b/i => /;\s*?end\b/i,
|
30
32
|
},
|
33
|
+
:nesting_context => [
|
34
|
+
/\A\s*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im
|
35
|
+
],
|
31
36
|
:callbacks => {},
|
32
37
|
:ignore => [],
|
33
38
|
:replace => {},
|
@@ -38,6 +43,8 @@ class EachSQL
|
|
38
43
|
:mysql => {
|
39
44
|
:delimiter => /;+|delimiter\s+\S+/i,
|
40
45
|
:blocks => {
|
46
|
+
/`/ => /`/,
|
47
|
+
/"/ => /"/,
|
41
48
|
/'/ => /'/,
|
42
49
|
/\/\*[^+]/ => /\*\//,
|
43
50
|
/--+/ => $/,
|
@@ -45,11 +52,14 @@ class EachSQL
|
|
45
52
|
:nesting_blocks => {
|
46
53
|
/\bbegin\b/i => /\bend\b/i
|
47
54
|
},
|
55
|
+
:nesting_context => [
|
56
|
+
/\A\s*(begin|create\b[^;]+?\b(procedure|function|trigger))\b/im
|
57
|
+
],
|
48
58
|
# We need to change delimiter on `delimiter' command
|
49
59
|
:callbacks => {
|
50
60
|
/^\s*delimiter\s+(\S+)/i => lambda { |obj, stmt, md|
|
51
61
|
new_delimiter = Regexp.new(Regexp.escape md[1])
|
52
|
-
obj.delimiter =
|
62
|
+
obj.delimiter = /(#{new_delimiter})+|delimiter\s+\S+/i
|
53
63
|
obj.delimiter_string = md[1]
|
54
64
|
}
|
55
65
|
},
|
@@ -58,29 +68,45 @@ class EachSQL
|
|
58
68
|
],
|
59
69
|
:replace => {},
|
60
70
|
:strip_delimiter => lambda { |obj, stmt|
|
61
|
-
stmt.
|
71
|
+
stmt.gsub(/(#{Regexp.escape(obj.delimiter_string || ';')})+\Z/, '')
|
62
72
|
}
|
63
73
|
},
|
64
74
|
|
65
75
|
:oracle => {
|
66
76
|
:delimiter => /;+/,
|
67
77
|
:blocks => {
|
78
|
+
/`/ => /`/,
|
79
|
+
/"/ => /"/,
|
68
80
|
/'/ => /'/,
|
69
81
|
/\/\*[^+]/ => /\*\//,
|
70
82
|
/--+/ => $/,
|
71
83
|
},
|
72
84
|
:nesting_blocks => {
|
73
85
|
/\bbegin\b/i => /\bend\b/i,
|
74
|
-
/\
|
86
|
+
/\bdeclare.*?;\s*?begin\b/im => {
|
75
87
|
:closer => %r{;\s*/}m,
|
76
|
-
|
88
|
+
# Stops immediately
|
89
|
+
:pop => true
|
90
|
+
},
|
91
|
+
/\bcreate[^;]+?\b(procedure|function|trigger|package)\b/im => {
|
92
|
+
:closer => %r{;\s*/}m,
|
93
|
+
# Stops immediately
|
94
|
+
:pop => true
|
95
|
+
}
|
96
|
+
},
|
97
|
+
:nesting_context => [
|
98
|
+
/\A\s*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im
|
99
|
+
],
|
100
|
+
:callbacks => {
|
101
|
+
/\Abegin\b/ => lambda { |obj, stmt, md|
|
102
|
+
# Oracle needs this
|
103
|
+
stmt << ';' if stmt !~ /;\Z/
|
77
104
|
}
|
78
105
|
},
|
79
|
-
:callbacks => {},
|
80
106
|
:ignore => [],
|
81
|
-
:replace => {},
|
107
|
+
:replace => { %r[\A/] => '' },
|
82
108
|
:strip_delimiter => lambda { |obj, stmt| obj
|
83
|
-
stmt.
|
109
|
+
stmt.gsub(/(#{stmt =~ /;\s*\// ? '/' : ';'})+\Z/, '')
|
84
110
|
}
|
85
111
|
}
|
86
112
|
}
|
data/test/test_each_sql.rb
CHANGED
@@ -1,24 +1,22 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
1
3
|
$LOAD_PATH << File.dirname(__FILE__)
|
2
4
|
require 'helper'
|
3
5
|
|
4
6
|
class TestEachSql < Test::Unit::TestCase
|
5
7
|
def setup
|
6
8
|
@sql = [
|
7
|
-
"
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
"select * from /* block comment ; */ e",
|
19
|
-
"select *
|
20
|
-
from -- line comment ; /* ;; */
|
21
|
-
f",
|
9
|
+
"-------------- begin-end block;
|
10
|
+
declare
|
11
|
+
/* end; */
|
12
|
+
/* begin */
|
13
|
+
null;
|
14
|
+
null;
|
15
|
+
null;
|
16
|
+
begin
|
17
|
+
/* end */
|
18
|
+
null;
|
19
|
+
end",
|
22
20
|
"-------------- begin-end block;
|
23
21
|
begin
|
24
22
|
-- begin-end block;
|
@@ -34,16 +32,21 @@ begin
|
|
34
32
|
-- end
|
35
33
|
/* end */
|
36
34
|
end",
|
37
|
-
"
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
35
|
+
"select * from a",
|
36
|
+
"select
|
37
|
+
*
|
38
|
+
from
|
39
|
+
b",
|
40
|
+
"select 'abc', 'abc;', 'abc''', 'abc/*', 'abc--' from c",
|
41
|
+
|
42
|
+
"select
|
43
|
+
/*+ help */ *
|
44
|
+
from
|
45
|
+
d",
|
46
|
+
"select * from /* block comment ; */ e",
|
47
|
+
"select *
|
48
|
+
from -- line comment ; /* ;; */
|
49
|
+
f",
|
47
50
|
"-------------- begin-end block;
|
48
51
|
declare
|
49
52
|
/* end; */
|
@@ -66,13 +69,79 @@ begin
|
|
66
69
|
/* end */
|
67
70
|
end",
|
68
71
|
"select * from dual",
|
69
|
-
"select
|
72
|
+
"select b `begin` from dual",
|
73
|
+
'select b "begin" from dual',
|
74
|
+
'select
|
75
|
+
begin , begin.* from begin'
|
76
|
+
]
|
70
77
|
|
71
|
-
@oracle =
|
78
|
+
@oracle = [
|
79
|
+
'select * from dual',
|
80
|
+
'create /* procedure */ sequence a',
|
81
|
+
"create package something as
|
82
|
+
procedure log;
|
83
|
+
procedure log;
|
84
|
+
procedure log;
|
85
|
+
end something;",
|
86
|
+
"Create or replace Procedure tmmp(p1 number default 'begin', p2 number) as
|
87
|
+
str number(8, 2) := 1 / 4;
|
88
|
+
begin
|
89
|
+
1 / 2;
|
90
|
+
begin
|
91
|
+
1 / 4;
|
92
|
+
null;
|
93
|
+
end;
|
94
|
+
exception
|
95
|
+
when others then
|
96
|
+
raise;
|
97
|
+
end;",
|
98
|
+
"declare
|
99
|
+
a int;
|
100
|
+
begin
|
101
|
+
1 / 2;
|
102
|
+
begin
|
103
|
+
1 / 4;
|
104
|
+
null;
|
105
|
+
end;
|
106
|
+
exception
|
107
|
+
when others then
|
108
|
+
raise;
|
109
|
+
end;",
|
110
|
+
"begin
|
111
|
+
null;
|
112
|
+
end;",
|
113
|
+
"select * from dual",
|
114
|
+
"select begin, end, create, procedure, end, from dual",
|
115
|
+
"select * from dual"
|
116
|
+
]
|
117
|
+
|
118
|
+
@oracle_script = "
|
72
119
|
select * from dual;
|
73
|
-
|
120
|
+
create /* procedure */ sequence a;
|
121
|
+
create package something as
|
122
|
+
procedure log;
|
123
|
+
procedure log;
|
124
|
+
procedure log;
|
125
|
+
end something;
|
126
|
+
/
|
127
|
+
|
128
|
+
Create or replace Procedure tmmp(p1 number default 'begin', p2 number) as
|
74
129
|
str number(8, 2) := 1 / 4;
|
75
130
|
begin
|
131
|
+
1 / 2;
|
132
|
+
begin
|
133
|
+
1 / 4;
|
134
|
+
null;
|
135
|
+
end;
|
136
|
+
exception
|
137
|
+
when others then
|
138
|
+
raise;
|
139
|
+
end;
|
140
|
+
/
|
141
|
+
declare
|
142
|
+
a int;
|
143
|
+
begin
|
144
|
+
1 / 2;
|
76
145
|
begin
|
77
146
|
1 / 4;
|
78
147
|
null;
|
@@ -82,15 +151,53 @@ exception
|
|
82
151
|
raise;
|
83
152
|
end;
|
84
153
|
/
|
85
|
-
|
154
|
+
begin
|
155
|
+
null;
|
156
|
+
end;
|
157
|
+
/
|
158
|
+
select * from dual;
|
159
|
+
;
|
160
|
+
;
|
161
|
+
;
|
86
162
|
|
87
|
-
|
163
|
+
|
164
|
+
;;;;;;
|
165
|
+
;
|
166
|
+
|
167
|
+
select begin, end, create, procedure, end, from dual;
|
168
|
+
select * from dual;
|
169
|
+
"
|
170
|
+
|
171
|
+
@mysql = [
|
172
|
+
"drop procedure if exists proc",
|
173
|
+
"create procedure proc(p1 int, p2 int)
|
174
|
+
begin
|
175
|
+
null;
|
176
|
+
begin
|
177
|
+
null;
|
178
|
+
end;
|
179
|
+
end",
|
180
|
+
"drop procedure if exists proc2",
|
181
|
+
"create procedure proc(p1 int, p2 int)
|
182
|
+
begin
|
183
|
+
null;
|
184
|
+
|
185
|
+
end",
|
186
|
+
"select * from dual",
|
187
|
+
"select b `begin` from dual",
|
188
|
+
'select b "begin" from dual',
|
189
|
+
'select
|
190
|
+
begin , begin.* from begin'
|
191
|
+
]
|
192
|
+
@mysql_script = "
|
88
193
|
delimiter //
|
89
194
|
drop procedure if exists proc //
|
90
195
|
create procedure proc(p1 int, p2 int)
|
91
196
|
begin
|
92
197
|
null;
|
93
|
-
|
198
|
+
begin
|
199
|
+
null;
|
200
|
+
end;
|
94
201
|
end //
|
95
202
|
delimiter ;
|
96
203
|
|
@@ -103,7 +210,11 @@ begin
|
|
103
210
|
end $$
|
104
211
|
delimiter ;
|
105
212
|
|
106
|
-
select * from dual;
|
213
|
+
select * from dual;
|
214
|
+
select b `begin` from dual;
|
215
|
+
select b \"begin\" from dual;
|
216
|
+
select
|
217
|
+
begin , begin.* from begin"
|
107
218
|
end
|
108
219
|
|
109
220
|
def test_sql
|
@@ -117,16 +228,18 @@ select * from dual;"
|
|
117
228
|
end
|
118
229
|
|
119
230
|
def test_oracle
|
120
|
-
EachSQL(@
|
231
|
+
EachSQL(@oracle_script, :oracle).each_with_index do |sql,idx|
|
121
232
|
puts sql
|
122
233
|
puts '-' * 40
|
234
|
+
assert_equal @oracle[idx], sql
|
123
235
|
end
|
124
236
|
end
|
125
237
|
|
126
238
|
def test_mysql
|
127
|
-
EachSQL(@
|
239
|
+
EachSQL(@mysql_script, :mysql).each_with_index do |sql,idx|
|
128
240
|
puts sql
|
129
241
|
puts '-' * 40
|
242
|
+
assert_equal @mysql[idx], sql
|
130
243
|
end
|
131
244
|
end
|
132
245
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: each_sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-06-
|
12
|
+
date: 2011-06-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &2161248000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2161248000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jeweler
|
27
|
-
requirement: &
|
27
|
+
requirement: &2161247520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.6.2
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2161247520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rcov
|
38
|
-
requirement: &
|
38
|
+
requirement: &2161247040 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2161247040
|
47
47
|
description: Enumerate through each SQL statement in SQL scripts.
|
48
48
|
email: junegunn.c@gmail.com
|
49
49
|
executables: []
|
@@ -53,6 +53,7 @@ extra_rdoc_files:
|
|
53
53
|
- README.rdoc
|
54
54
|
files:
|
55
55
|
- .document
|
56
|
+
- CHANGELOG.rdoc
|
56
57
|
- Gemfile
|
57
58
|
- Gemfile.lock
|
58
59
|
- LICENSE.txt
|
@@ -79,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
80
|
version: '0'
|
80
81
|
segments:
|
81
82
|
- 0
|
82
|
-
hash:
|
83
|
+
hash: 2241318967940806787
|
83
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
85
|
none: false
|
85
86
|
requirements:
|