Skip to content

Commit 1077b6f

Browse files
committed
HHH-18803 Add XML aggregate support for DB2
1 parent d39aa6d commit 1077b6f

File tree

5 files changed

+391
-35
lines changed

5 files changed

+391
-35
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/DB2LegacyDialect.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@
6363
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
6464
import org.hibernate.exception.spi.ViolatedConstraintNameExtractor;
6565
import org.hibernate.internal.util.JdbcExceptionHelper;
66+
import org.hibernate.mapping.AggregateColumn;
6667
import org.hibernate.mapping.Column;
68+
import org.hibernate.mapping.Table;
6769
import org.hibernate.metamodel.mapping.EntityMappingType;
6870
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
6971
import org.hibernate.procedure.internal.DB2CallableStatementSupport;
@@ -87,6 +89,8 @@
8789
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorDB2DatabaseImpl;
8890
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorNoOpImpl;
8991
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
92+
import org.hibernate.tool.schema.internal.StandardTableExporter;
93+
import org.hibernate.tool.schema.spi.Exporter;
9094
import org.hibernate.type.JavaObjectType;
9195
import org.hibernate.type.SqlTypes;
9296
import org.hibernate.type.StandardBasicTypes;
@@ -96,6 +100,7 @@
96100
import org.hibernate.type.descriptor.jdbc.CharJdbcType;
97101
import org.hibernate.type.descriptor.jdbc.ClobJdbcType;
98102
import org.hibernate.type.descriptor.jdbc.InstantJdbcType;
103+
import org.hibernate.type.descriptor.jdbc.JdbcType;
99104
import org.hibernate.type.descriptor.jdbc.LocalDateJdbcType;
100105
import org.hibernate.type.descriptor.jdbc.LocalDateTimeJdbcType;
101106
import org.hibernate.type.descriptor.jdbc.LocalTimeJdbcType;
@@ -154,6 +159,17 @@ public class DB2LegacyDialect extends Dialect {
154159
? LegacyDB2LimitHandler.INSTANCE
155160
: DB2LimitHandler.INSTANCE;
156161
private final UniqueDelegate uniqueDelegate = createUniqueDelegate();
162+
private final StandardTableExporter db2TableExporter = new StandardTableExporter( this ) {
163+
@Override
164+
protected void applyAggregateColumnCheck(StringBuilder buf, AggregateColumn aggregateColumn) {
165+
final JdbcType jdbcType = aggregateColumn.getType().getJdbcType();
166+
if ( jdbcType.isLob() || jdbcType.isXml() ) {
167+
// LOB or XML columns can't have check constraints
168+
return;
169+
}
170+
super.applyAggregateColumnCheck( buf, aggregateColumn );
171+
}
172+
};
157173

158174
public DB2LegacyDialect() {
159175
this( DatabaseVersion.make( 9, 0 ) );
@@ -189,6 +205,11 @@ public DatabaseVersion getDB2Version() {
189205
return this.getVersion();
190206
}
191207

208+
@Override
209+
public Exporter<Table> getTableExporter() {
210+
return this.db2TableExporter;
211+
}
212+
192213
@Override
193214
public int getDefaultStatementBatchSize() {
194215
return 0;

hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@
5353
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
5454
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
5555
import org.hibernate.exception.spi.ViolatedConstraintNameExtractor;
56+
import org.hibernate.mapping.AggregateColumn;
5657
import org.hibernate.mapping.Column;
58+
import org.hibernate.mapping.Table;
5759
import org.hibernate.metamodel.mapping.EntityMappingType;
5860
import org.hibernate.metamodel.spi.RuntimeModelCreationContext;
5961
import org.hibernate.procedure.internal.DB2CallableStatementSupport;
@@ -77,13 +79,16 @@
7779
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorDB2DatabaseImpl;
7880
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorNoOpImpl;
7981
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
82+
import org.hibernate.tool.schema.internal.StandardTableExporter;
83+
import org.hibernate.tool.schema.spi.Exporter;
8084
import org.hibernate.type.JavaObjectType;
8185
import org.hibernate.type.SqlTypes;
8286
import org.hibernate.type.StandardBasicTypes;
8387
import org.hibernate.type.descriptor.ValueExtractor;
8488
import org.hibernate.type.descriptor.java.JavaType;
8589
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
8690
import org.hibernate.type.descriptor.jdbc.InstantJdbcType;
91+
import org.hibernate.type.descriptor.jdbc.JdbcType;
8792
import org.hibernate.type.descriptor.jdbc.LocalDateJdbcType;
8893
import org.hibernate.type.descriptor.jdbc.LocalDateTimeJdbcType;
8994
import org.hibernate.type.descriptor.jdbc.LocalTimeJdbcType;
@@ -146,6 +151,17 @@ public class DB2Dialect extends Dialect {
146151
? LegacyDB2LimitHandler.INSTANCE
147152
: DB2LimitHandler.INSTANCE;
148153
private final UniqueDelegate uniqueDelegate = createUniqueDelegate();
154+
private final StandardTableExporter db2TableExporter = new StandardTableExporter( this ) {
155+
@Override
156+
protected void applyAggregateColumnCheck(StringBuilder buf, AggregateColumn aggregateColumn) {
157+
final JdbcType jdbcType = aggregateColumn.getType().getJdbcType();
158+
if ( jdbcType.isLob() || jdbcType.isXml() ) {
159+
// LOB or XML columns can't have check constraints
160+
return;
161+
}
162+
super.applyAggregateColumnCheck( buf, aggregateColumn );
163+
}
164+
};
149165

150166
public DB2Dialect() {
151167
this( MINIMUM_VERSION );
@@ -171,6 +187,11 @@ public DatabaseVersion getDB2Version() {
171187
return this.getVersion();
172188
}
173189

190+
@Override
191+
public Exporter<Table> getTableExporter() {
192+
return this.db2TableExporter;
193+
}
194+
174195
@Override
175196
public int getDefaultStatementBatchSize() {
176197
return 0;

0 commit comments

Comments
 (0)