From 5cfd7dfa823c230df9abafdeb392283e19b0bdde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Kuruc?= Date: Wed, 29 May 2024 12:31:06 +0200 Subject: [PATCH] HHH-18180 Informix IF EXISTS clauses support --- .../community/dialect/InformixDialect.java | 19 ++++++++++++++++++- .../sequence/InformixSequenceSupport.java | 10 +++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java index af2d988ac3..78bde65a19 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/InformixDialect.java @@ -93,6 +93,7 @@ public class InformixDialect extends Dialect { private final UniqueDelegate uniqueDelegate; private final LimitHandler limitHandler; + private final SequenceSupport sequenceSupport; private final StandardForeignKeyExporter foreignKeyExporter = new StandardForeignKeyExporter( this ) { @Override public String[] getSqlCreateStrings( @@ -137,6 +138,7 @@ public InformixDialect(DatabaseVersion version) { //version 11 and above, parameters are supported //but I have not tested this at all! : new SkipFirstLimitHandler( getVersion().isSameOrAfter( 11 ) ); + sequenceSupport = new InformixSequenceSupport( getVersion().isSameOrAfter( 11, 70 ) ); } @Override @@ -399,7 +401,7 @@ public String getAddPrimaryKeyConstraintString(String constraintName) { @Override public SequenceSupport getSequenceSupport() { - return InformixSequenceSupport.INSTANCE; + return sequenceSupport; } @Override @@ -417,6 +419,21 @@ public LimitHandler getLimitHandler() { return limitHandler; } + @Override + public boolean supportsIfExistsBeforeTableName() { + return getVersion().isSameOrAfter( 11, 70 ); + } + + @Override + public boolean supportsIfExistsBeforeTypeName() { + return getVersion().isSameOrAfter( 11, 70 ); + } + + @Override + public boolean supportsIfExistsBeforeConstraintName() { + return getVersion().isSameOrAfter( 11, 70 ); + } + @Override public boolean supportsOrderByInSubquery() { // This is just a guess diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/sequence/InformixSequenceSupport.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/sequence/InformixSequenceSupport.java index ac4fafa47e..e1d34e959d 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/sequence/InformixSequenceSupport.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/sequence/InformixSequenceSupport.java @@ -16,11 +16,19 @@ */ public final class InformixSequenceSupport extends NextvalSequenceSupport { - public static final SequenceSupport INSTANCE = new InformixSequenceSupport(); + private boolean supportsIfExists = false; + + public InformixSequenceSupport(boolean supportsIfExists){ + this.supportsIfExists = supportsIfExists; + } @Override public String getFromDual() { return " from informix.systables where tabid=1"; } + @Override + public String getDropSequenceString(String sequenceName) { + return "drop sequence " + ( supportsIfExists ? "if exists " : "" ) + sequenceName; + } }