From cd90353b44616bfdf723fdfa9242815d6cb34959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Gr=C3=BCn?= Date: Mon, 7 Sep 2015 17:12:20 +0200 Subject: [PATCH] Fix for issue #1089 --- .../dbsupport/db2/DB2SqlStatementBuilder.java | 16 +++++++++++ .../db2zos/DB2zosSqlStatementBuilder.java | 16 +++++++++++ .../derby/DerbySqlStatementBuilder.java | 11 ++++++++ .../SqlStatementBuilderSmallTest.java | 27 +++++++++++++++++++ 4 files changed, 70 insertions(+) diff --git a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2/DB2SqlStatementBuilder.java b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2/DB2SqlStatementBuilder.java index 7cfe4d0843..649207d0e3 100644 --- a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2/DB2SqlStatementBuilder.java +++ b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2/DB2SqlStatementBuilder.java @@ -33,6 +33,22 @@ public class DB2SqlStatementBuilder extends SqlStatementBuilder { */ private String statementStart = ""; + @Override + protected String extractAlternateOpenQuote(String token) { + if (token.startsWith("X'")) { + return "X'"; + } + return null; + } + + @Override + protected String computeAlternateCloseQuote(String openQuote) { + if (openQuote.equals("X'")) { + return "'"; + } + return openQuote; + } + @Override protected Delimiter changeDelimiterIfNecessary(String line, Delimiter delimiter) { if (StringUtils.countOccurrencesOf(statementStart, " ") < 4) { diff --git a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2zos/DB2zosSqlStatementBuilder.java b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2zos/DB2zosSqlStatementBuilder.java index 12e69ffa8b..b45a53b7a1 100644 --- a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2zos/DB2zosSqlStatementBuilder.java +++ b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/db2zos/DB2zosSqlStatementBuilder.java @@ -33,6 +33,22 @@ public class DB2zosSqlStatementBuilder extends SqlStatementBuilder { */ private String statementStart = ""; + @Override + protected String extractAlternateOpenQuote(String token) { + if (token.startsWith("X'")) { + return "X'"; + } + return null; + } + + @Override + protected String computeAlternateCloseQuote(String openQuote) { + if (openQuote.equals("X'")) { + return "'"; + } + return openQuote; + } + @Override protected Delimiter changeDelimiterIfNecessary(String line, Delimiter delimiter) { if (StringUtils.countOccurrencesOf(statementStart, " ") < 4) { diff --git a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/derby/DerbySqlStatementBuilder.java b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/derby/DerbySqlStatementBuilder.java index 29c66a4d38..667e18dd74 100644 --- a/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/derby/DerbySqlStatementBuilder.java +++ b/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/derby/DerbySqlStatementBuilder.java @@ -26,6 +26,17 @@ protected String extractAlternateOpenQuote(String token) { if (token.startsWith("$$")) { return "$$"; } + if (token.startsWith("X'")) { + return "X'"; + } return null; } + + @Override + protected String computeAlternateCloseQuote(String openQuote) { + if (openQuote.equals("X'")) { + return "'"; + } + return openQuote; + } } diff --git a/flyway-core/src/test/java/org/flywaydb/core/internal/dbsupport/SqlStatementBuilderSmallTest.java b/flyway-core/src/test/java/org/flywaydb/core/internal/dbsupport/SqlStatementBuilderSmallTest.java index 56afcfad00..7d6887c0ce 100644 --- a/flyway-core/src/test/java/org/flywaydb/core/internal/dbsupport/SqlStatementBuilderSmallTest.java +++ b/flyway-core/src/test/java/org/flywaydb/core/internal/dbsupport/SqlStatementBuilderSmallTest.java @@ -15,6 +15,9 @@ */ package org.flywaydb.core.internal.dbsupport; +import org.flywaydb.core.internal.dbsupport.db2.DB2SqlStatementBuilder; +import org.flywaydb.core.internal.dbsupport.db2zos.DB2zosSqlStatementBuilder; +import org.flywaydb.core.internal.dbsupport.derby.DerbySqlStatementBuilder; import org.flywaydb.core.internal.dbsupport.h2.H2SqlStatementBuilder; import org.flywaydb.core.internal.dbsupport.oracle.OracleSqlStatementBuilder; import org.flywaydb.core.internal.dbsupport.postgresql.PostgreSQLSqlStatementBuilder; @@ -128,6 +131,30 @@ public void oracleEndsWithOpenMultilineStringLiteralNoSpace() { assertFalse(endsWithOpenMultilineStringLiteral(new OracleSqlStatementBuilder(), "SELECT' 'FROM DUAL;")); } + @Test + public void db2EndsWithOpenMultilineStringLiteral() { + assertFalse(endsWithOpenMultilineStringLiteral(new DB2SqlStatementBuilder(), "SELECT' 'FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2SqlStatementBuilder(), "SELECT '123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2SqlStatementBuilder(), "SELECT X'0123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2SqlStatementBuilder(), "SELECT X'0123',X'0456' FROM DUAL;")); + } + + @Test + public void db2zosEndsWithOpenMultilineStringLiteral() { + assertFalse(endsWithOpenMultilineStringLiteral(new DB2zosSqlStatementBuilder(), "SELECT' 'FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2zosSqlStatementBuilder(), "SELECT '123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2zosSqlStatementBuilder(), "SELECT X'0123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DB2zosSqlStatementBuilder(), "SELECT X'0123',X'0456' FROM DUAL;")); + } + + @Test + public void derbyEndsWithOpenMultilineStringLiteral() { + assertFalse(endsWithOpenMultilineStringLiteral(new DerbySqlStatementBuilder(), "SELECT' 'FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DerbySqlStatementBuilder(), "SELECT '123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DerbySqlStatementBuilder(), "SELECT X'0123' FROM DUAL;")); + assertFalse(endsWithOpenMultilineStringLiteral(new DerbySqlStatementBuilder(), "SELECT X'0123',X'0456' FROM DUAL;")); + } + @Test public void stripDelimiter() { StringBuilder sql = new StringBuilder("SELECT * FROM t WHERE a = 'Straßenpaß';");