Browse Source

allow a more lenient matching mode when searching for delimiters in <sql>

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@675954 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 17 years ago
parent
commit
e7b3093e3e
3 changed files with 68 additions and 9 deletions
  1. +6
    -0
      WHATSNEW
  2. +9
    -9
      src/main/org/apache/tools/ant/taskdefs/SQLExec.java
  3. +53
    -0
      src/tests/junit/org/apache/tools/ant/taskdefs/SQLExecTest.java

+ 6
- 0
WHATSNEW View File

@@ -137,6 +137,12 @@ Other changes:
database.
Bugzilla Report 36712.

* A new attribute strictDelimiterMatching can be used to ignore case
or whitespace differences when <sql> searches for delimiters.
This is useful if you execute a SQL script that has contains "GO"
and "go" as delimiters.
Bugzilla Report 26459.

Changes from Ant 1.7.0 TO Ant 1.7.1
=============================================



+ 9
- 9
src/main/org/apache/tools/ant/taskdefs/SQLExec.java View File

@@ -853,12 +853,11 @@ public class SQLExec extends JDBCTask {

public int lastDelimiterPosition(StringBuffer buf, String currentLine) {
if (strictDelimiterMatching) {
if (delimiterType.equals(DelimiterType.NORMAL)
&& StringUtils.endsWith(buf, delimiter)) {
if ((delimiterType.equals(DelimiterType.NORMAL)
&& StringUtils.endsWith(buf, delimiter)) ||
(delimiterType.equals(DelimiterType.ROW)
&& currentLine.equals(delimiter))) {
return buf.length() - delimiter.length();
} else if (delimiterType.equals(DelimiterType.ROW)
&& currentLine.equals(delimiter)) {
return 0;
}
// no match
return -1;
@@ -877,17 +876,18 @@ public class SQLExec extends JDBCTask {
return -1;
}
while (endIndex >= 0) {
if (buf.substring(bufferIndex, 1).toLowerCase(Locale.US)
.charAt(0) != d.charAt(endIndex)) {
if (buf.substring(bufferIndex, bufferIndex + 1)
.toLowerCase(Locale.US).charAt(0)
!= d.charAt(endIndex)) {
return -1;
}
bufferIndex--;
endIndex--;
}
return bufferIndex;
return bufferIndex + 1;
} else {
return currentLine.trim().toLowerCase(Locale.US).equals(d)
? 0 : -1;
? buf.length() - currentLine.length() : -1;
}
}
}


+ 53
- 0
src/tests/junit/org/apache/tools/ant/taskdefs/SQLExecTest.java View File

@@ -252,4 +252,57 @@ public class SQLExecTest extends TestCase {
assertEquals(0,
s.lastDelimiterPosition(new StringBuffer("GO"), null));
}

public void testLastDelimiterPositionNormalModeNonStrict() {
SQLExec s = new SQLExec();
s.setStrictDelimiterMatching(false);
assertEquals(-1,
s.lastDelimiterPosition(new StringBuffer(), null));
assertEquals(-1,
s.lastDelimiterPosition(new StringBuffer("GO"), null));
assertEquals(0,
s.lastDelimiterPosition(new StringBuffer("; "), null));
assertEquals(2,
s.lastDelimiterPosition(new StringBuffer("ab;"), null));
s.setDelimiter("GO");
assertEquals(0,
s.lastDelimiterPosition(new StringBuffer("GO "), null));
assertEquals(0,
s.lastDelimiterPosition(new StringBuffer("go"), null));
assertEquals(0,
s.lastDelimiterPosition(new StringBuffer("GO"), null));
}

public void testLastDelimiterPositionRowModeStrict() {
SQLExec s = new SQLExec();
SQLExec.DelimiterType t = new SQLExec.DelimiterType();
t.setValue("row");
s.setDelimiterType(t);
assertEquals(-1, s.lastDelimiterPosition(null, ""));
assertEquals(-1, s.lastDelimiterPosition(null, "GO"));
assertEquals(-1, s.lastDelimiterPosition(null, "; "));
assertEquals(1, s.lastDelimiterPosition(new StringBuffer("ab"), ";"));
s.setDelimiter("GO");
assertEquals(-1, s.lastDelimiterPosition(null, "GO "));
assertEquals(-1, s.lastDelimiterPosition(null, "go"));
assertEquals(0, s.lastDelimiterPosition(new StringBuffer("ab"), "GO"));
}

public void testLastDelimiterPositionRowModeNonStrict() {
SQLExec s = new SQLExec();
SQLExec.DelimiterType t = new SQLExec.DelimiterType();
t.setValue("row");
s.setDelimiterType(t);
s.setStrictDelimiterMatching(false);
assertEquals(-1, s.lastDelimiterPosition(null, ""));
assertEquals(-1, s.lastDelimiterPosition(null, "GO"));
assertEquals(0, s.lastDelimiterPosition(new StringBuffer("; "), "; "));
assertEquals(1, s.lastDelimiterPosition(new StringBuffer("ab"), ";"));
s.setDelimiter("GO");
assertEquals(1,
s.lastDelimiterPosition(new StringBuffer("abcd"), "GO "));
assertEquals(0, s.lastDelimiterPosition(new StringBuffer("go"), "go"));
assertEquals(0, s.lastDelimiterPosition(new StringBuffer("ab"), "GO"));
}

}

Loading…
Cancel
Save