Skip to content

Commit d9a989d

Browse files
committed
do not split in middle of BEGIN-END blocks
1 parent bf8c988 commit d9a989d

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

t/lib/DodTestUtil.pm

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,28 @@ sub create_sql {
196196
add_drop_table => $drop_table,
197197
);
198198
$sql = $sqlt->translate(\$sql) or die $sqlt->error;
199-
return split /;\s*/s, $sql;
199+
return split_sql($sql);
200200
}
201201
$sql;
202202
}
203203

204+
sub split_sql {
205+
my ($sql) = @_;
206+
my @ret;
207+
while ($sql) {
208+
(my $minimal, my $block, $sql) = split /\s*((?:\bDECLARE\b.*?)?\bBEGIN\b.*?\bEND;)\s*/s, $sql, 2;
209+
if ($minimal) {
210+
push @ret, split /;\s*/s, $minimal;
211+
}
212+
if ($block) {
213+
if (@ret && $minimal !~ /;\z/) {
214+
$ret[-1] .= $block;
215+
} else {
216+
push @ret, $block;
217+
}
218+
}
219+
}
220+
return @ret;
221+
}
222+
204223
1;

0 commit comments

Comments
 (0)