Author: cbrisson
Date: Mon Jun 26 13:39:27 2017
New Revision: 1799918
URL: http://svn.apache.org/viewvc?rev=1799918&view=rev
Log:
[engine] Minor fixes to DataSourceResourceLoader test cases for DB vendor
genericity
Modified:
velocity/engine/trunk/velocity-engine-core/pom.xml
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/BaseSQLTest.java
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DBHelper.java
Modified: velocity/engine/trunk/velocity-engine-core/pom.xml
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/pom.xml?rev=1799918&r1=1799917&r2=1799918&view=diff
==============================================================================
--- velocity/engine/trunk/velocity-engine-core/pom.xml (original)
+++ velocity/engine/trunk/velocity-engine-core/pom.xml Mon Jun 26 13:39:27 2017
@@ -37,7 +37,10 @@
<parser.nodefiles>false</parser.nodefiles>
<!-- You can modify those properties locally to test
- the DataSourceResourceLoader against other engines -->
+ the DataSourceResourceLoader against other engines.
+ Please note that you may have to also alter the file
+ src/test/resources/ds/create-db.sql for specific engine SQL grammars.
+ -->
<test.jdbc.driver.groupId>org.hsqldb</test.jdbc.driver.groupId>
<test.jdbc.driver.artifactId>hsqldb</test.jdbc.driver.artifactId>
<test.jdbc.driver.version>2.3.5</test.jdbc.driver.version>
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/BaseSQLTest.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/BaseSQLTest.java?rev=1799918&r1=1799917&r2=1799918&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/BaseSQLTest.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/BaseSQLTest.java
Mon Jun 26 13:39:27 2017
@@ -85,6 +85,12 @@ public abstract class BaseSQLTest
{
Connection connection = dbHelper.getConnection();
Statement statement = connection.createStatement();
+ // Oracle and Derby do not want any final ';'
+ if ((TEST_JDBC_DRIVER_CLASS.equals("oracle.jdbc.OracleDriver")
+ ||
TEST_JDBC_DRIVER_CLASS.equals("org.apache.derby.jdbc.EmbeddedDriver")) &&
sql.endsWith(";"))
+ {
+ sql = sql.substring(0, sql.length() - 1);
+ }
statement.executeUpdate(sql);
}
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DBHelper.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DBHelper.java?rev=1799918&r1=1799917&r2=1799918&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DBHelper.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/sql/DBHelper.java
Mon Jun 26 13:39:27 2017
@@ -21,7 +21,6 @@ package org.apache.velocity.test.sql;
import org.apache.commons.lang3.StringUtils;
-import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
@@ -29,14 +28,18 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
public class DBHelper
{
+ private String driverClass = null;
private Connection connection = null;
public DBHelper(String driverClass, String uri, String login, String
password, String loadFile) throws Exception
{
+ this.driverClass = driverClass;
Class.forName(driverClass);
this.connection = DriverManager.getConnection(uri, login, password);
@@ -65,22 +68,49 @@ public class DBHelper
}
}
+ // avoid ';' inside BEGIN/END blocks
+ private static int nextSemiColon(final String cmd)
+ {
+ int start = 0;
+ int ret = -1;
+ while (true)
+ {
+ ret = cmd.indexOf(';', start);
+ if (ret == -1) break;
+ int begin = cmd.lastIndexOf("BEGIN", ret);
+ int end = cmd.lastIndexOf("END;", ret);
+ if (begin == -1) break;
+ if (end > begin) break;
+ start = ret + 1;
+ }
+ return ret;
+ }
+
private void loadSqlFile(String fileName) throws Exception
{
Statement statement = null;
try
{
- statement = connection.createStatement();
-
String commands = new
String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8);
-
- for (int targetPos = commands.indexOf(';'); targetPos > -1;
- targetPos = commands.indexOf(';'))
+ // manually eat comments, some engines don't like them
+ Pattern removeComments = Pattern.compile("^--.*$",
Pattern.MULTILINE);
+ Matcher matcher = removeComments.matcher(commands);
+ commands = matcher.replaceAll("");
+ for (int targetPos = nextSemiColon(commands); targetPos > -1;
targetPos = nextSemiColon(commands))
{
+ statement = connection.createStatement();
String cmd = commands.substring(0, targetPos + 1);
- statement.execute(cmd);
+ // Oracle doesn't like semi-colons at the end, except for
BEGIN/END blocks...
+ // nor does Derby
+ if (driverClass.equals("oracle.jdbc.OracleDriver") &&
!cmd.endsWith("END;") ||
+ driverClass.equals("org.apache.derby.jdbc.EmbeddedDriver"))
+ {
+ cmd = cmd.substring(0, cmd.length() - 1);
+ }
+ statement.executeUpdate(cmd);
commands = commands.substring(targetPos + 2);
+ statement.close();
}
}
finally