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