From: Sven Schöling Date: Mon, 17 Sep 2012 12:33:06 +0000 (+0200) Subject: DBUpgrade kann jetzt auch dollar quoting in SQL. X-Git-Tag: release-3.0.0beta1~232^2~5 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=b2448c147778ca345decb911aee36f13eca610ae;p=kivitendo-erp.git DBUpgrade kann jetzt auch dollar quoting in SQL. --- diff --git a/SL/DBUpgrade2.pm b/SL/DBUpgrade2.pm index be7c54f5b..a74e8ae82 100644 --- a/SL/DBUpgrade2.pm +++ b/SL/DBUpgrade2.pm @@ -162,13 +162,26 @@ sub process_query { if (@quote_chars) { if ($char eq $quote_chars[-1]) { pop(@quote_chars); + } elsif (length $quote_chars[-1] > 1 + && substr($quote_chars[-1], 0, 1) eq $char + && substr($_, $i, length $quote_chars[-1]) eq $quote_chars[-1]) { + $i += length $quote_chars[-1] - 1; + $char = $quote_chars[-1]; + pop(@quote_chars); } $query .= $char; } else { + my ($tag, $tag_end); if (($char eq "'") || ($char eq "\"")) { push(@quote_chars, $char); + } elsif ($char eq '$' # start of dollar quoting + && ($tag_end = index($_, '$', $i + 1)) > -1 # ends on same line + && (do { substr($_, $i + 1, $tag_end - $i - 1); 1 }) # extract tag + && $tag =~ /^ (?= [A-Za-z_] [A-Za-z0-9_]* | ) $/x) { # tag is identifier + push @quote_chars, $char = '$' . $tag . '$'; + $i = $tag_end; } elsif ($char eq ";") { # Query is complete. Send it.