From 2a924d8d3226ea279db23f615643abfa89c42d7d Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 21 Mar 2022 15:01:43 +0100 Subject: [PATCH] Add more quotes, for history tables --- .../platform/DbTriggerBasedHistoryDdl.java | 12 ++++++++---- .../ddlgeneration/platform/H2HistoryDdl.java | 2 +- .../ddlgeneration/platform/PlatformDdl.java | 18 ++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java index ab8723609..f46dd6977 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/DbTriggerBasedHistoryDdl.java @@ -127,11 +127,11 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { } protected String historyTableName(String baseTableName) { - return normalise(baseTableName) + historySuffix; + return quote(normalise(baseTableName) + historySuffix); } protected String historyViewName(String baseTableName) { - return normalise(baseTableName) + viewSuffix; + return quote(normalise(baseTableName) + viewSuffix); } protected String procedureName(String baseTableName) { @@ -193,7 +193,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { String platformType = platformDdl.convert(type); buffer.append(" "); - buffer.append(columnName, 29); + buffer.append(quote(columnName), 29); buffer.append(platformType); } @@ -201,7 +201,7 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { apply .append("create view ").append(historyViewName(baseTableName)) - .append(" as select * from ").append(baseTableName) + .append(" as select * from ").append(quote(baseTableName)) .append(" union all select * from ").append(historyTableName(baseTableName)) .endOfStatement(); } @@ -268,4 +268,8 @@ public abstract class DbTriggerBasedHistoryDdl implements PlatformHistoryDdl { public boolean alterHistoryTables() { return true; } + + protected String quote(String dbName) { + return platformDdl.quote(dbName); + } } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java index 7e5d2aa87..5f45ee2f7 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java @@ -31,7 +31,7 @@ public class H2HistoryDdl extends DbTriggerBasedHistoryDdl { // Note that this does not take into account the historyTable name (excepts _history suffix) and // does not take into account excluded columns (all columns included in history) apply - .append("create trigger ").append(triggerName).append(" before update,delete on ").append(baseTable) + .append("create trigger ").append(triggerName).append(" before update,delete on ").append(quote(baseTable)) .append(" for each row call \"" + TRIGGER_CLASS + "\";").newLine(); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index 3141ca3fb..7807d9252 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -20,12 +20,17 @@ import io.ebeaninternal.dbmigration.model.MTable; import java.util.List; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Controls the DDL generation for a specific database platform. */ public class PlatformDdl { + // matches on pattern "check ( COLUMNAME ... )". ColumnName is match group 2; + private static final Pattern CHECK_PATTERN = Pattern.compile("(.*?\\( *)([^ ]+)(.*)"); + protected final DatabasePlatform platform; protected PlatformHistoryDdl historyDdl = new NoHistorySupportDdl(); @@ -278,7 +283,7 @@ public class PlatformDdl { * Returns the check constraint. */ public String createCheckConstraint(String ckName, String checkConstraint) { - return " constraint " + maxConstraintName(ckName) + " " + checkConstraint; + return " constraint " + maxConstraintName(ckName) + " " + quoteCheckConstraint(checkConstraint); } /** @@ -612,9 +617,10 @@ public class PlatformDdl { * Alter table adding the check constraint. */ public String alterTableAddCheckConstraint(String tableName, String checkConstraintName, String checkConstraint) { - return "alter table " + quote(tableName) + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + checkConstraint; + return "alter table " + quote(tableName) + " " + addConstraint + " " + maxConstraintName(checkConstraintName) + " " + quoteCheckConstraint(checkConstraint); } + /** * Alter column setting the default value. *

@@ -782,4 +788,12 @@ public class PlatformDdl { return platform.convertQuotedIdentifiers(dbName); } + protected String quoteCheckConstraint(String checkConstraint) { + Matcher matcher = CHECK_PATTERN.matcher(checkConstraint); + if (matcher.matches()) { + return matcher.replaceFirst("$1" + quote(matcher.group(2)) + "$3"); + } + return checkConstraint; + } + }