Prior to this commit, executing an SQL script via
ResourceDatabasePopulator would fail if a statement in the script
contained a line comment within the statement.
This commit ensures that standard SQL comments (i.e., any text beginning
with two hyphens and extending to the end of the line) are properly
omitted from the statement before executing it.
In addition, multiple adjacent whitespace characters within a statement,
but outside a literal, are now collapsed into a single space.
Issue: SPR-10075
@ -54,7 +55,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -54,7 +55,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@ -127,7 +127,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -127,7 +127,6 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@ -153,8 +152,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -153,8 +152,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
logger.info("Executing SQL script from "+resource);
@ -175,7 +174,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -175,7 +174,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@ -192,8 +191,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -192,8 +191,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
logger.debug("Failed to execute SQL script statement at line "+lineNumber+
" of resource "+resource+": "+statement,ex);
logger.debug("Failed to execute SQL script statement at line "+lineNumber
+" of resource "+resource+": "+statement,ex);
}
}
else{
@ -239,7 +238,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -239,7 +238,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
}
maybeAddSeparatorToScript(scriptBuilder);
returnscriptBuilder.toString();
}finally{
}
finally{
lnr.close();
}
}
@ -252,7 +252,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -252,7 +252,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
if(trimmed.length()==this.separator.length()){
return;
}
// separator ends in whitespace, so we might want to see if the script is trying to end the same way
// separator ends in whitespace, so we might want to see if the script is trying
@ -270,7 +271,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -270,7 +271,7 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@ -278,29 +279,18 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -278,29 +279,18 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@ -322,7 +312,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -322,7 +312,8 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
inLiteral=!inLiteral;
}
if(!inLiteral){
if(startsWithDelimiter(script,i,delim)){
if(script.startsWith(delim,i)){
// we've reached the end of the current statement
if(sb.length()>0){
statements.add(sb.toString());
sb=newStringBuilder();
@ -330,9 +321,28 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
@@ -330,9 +321,28 @@ public class ResourceDatabasePopulator implements DatabasePopulator {
i+=delim.length()-1;
continue;
}
elseif(c=='\n'||c=='\t'){
elseif(script.startsWith(commentPrefix,i)){
// skip over any content from the start of the comment to the EOL
intindexOfNextNewline=script.indexOf("\n",i);
if(indexOfNextNewline>i){
i=indexOfNextNewline;
continue;
}
else{
// if there's no newline after the comment, we must be at the end