Skip to content

Commit c0cb619

Browse files
committed
HHH-19521 Implement temporary and cte table derivation based on boot model
1 parent 8bb5c34 commit c0cb619

33 files changed

+862
-645
lines changed

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

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
import org.hibernate.dialect.sequence.SQLServer16SequenceSupport;
4545
import org.hibernate.dialect.sequence.SQLServerSequenceSupport;
4646
import org.hibernate.dialect.sequence.SequenceSupport;
47+
import org.hibernate.dialect.temptable.SQLServerLocalTemporaryTableStrategy;
48+
import org.hibernate.dialect.temptable.TemporaryTableStrategy;
4749
import org.hibernate.dialect.type.SQLServerCastingXmlArrayJdbcTypeConstructor;
4850
import org.hibernate.dialect.type.SQLServerCastingXmlJdbcType;
4951
import org.hibernate.dialect.unique.AlterTableUniqueIndexDelegate;
@@ -1149,19 +1151,14 @@ public void appendDateTimeLiteral(
11491151
}
11501152
}
11511153

1154+
@Override
1155+
public TemporaryTableStrategy getLocalTemporaryTableStrategy() {
1156+
return SQLServerLocalTemporaryTableStrategy.INSTANCE;
1157+
}
1158+
11521159
@Override
11531160
public String getCreateTemporaryTableColumnAnnotation(int sqlTypeCode) {
1154-
switch (sqlTypeCode) {
1155-
case Types.CHAR:
1156-
case Types.NCHAR:
1157-
case Types.VARCHAR:
1158-
case Types.NVARCHAR:
1159-
case Types.LONGVARCHAR:
1160-
case Types.LONGNVARCHAR:
1161-
return "collate database_default";
1162-
default:
1163-
return "";
1164-
}
1161+
return SQLServerLocalTemporaryTableStrategy.INSTANCE.getCreateTemporaryTableColumnAnnotation( sqlTypeCode );
11651162
}
11661163

11671164
@Override

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import org.hibernate.dialect.temptable.LegacyTemporaryTableStrategy;
5959
import org.hibernate.dialect.temptable.PersistentTemporaryTableStrategy;
6060
import org.hibernate.dialect.temptable.StandardTemporaryTableExporter;
61-
import org.hibernate.dialect.temptable.TemporaryTable;
6261
import org.hibernate.dialect.temptable.TemporaryTableExporter;
6362
import org.hibernate.dialect.temptable.TemporaryTableKind;
6463
import org.hibernate.dialect.temptable.TemporaryTableStrategy;
@@ -3209,15 +3208,7 @@ public SqmMultiTableMutationStrategy getFallbackSqmMutationStrategy(
32093208
public SqmMultiTableInsertStrategy getFallbackSqmInsertStrategy(
32103209
EntityMappingType entityDescriptor,
32113210
RuntimeModelCreationContext runtimeModelCreationContext) {
3212-
return new PersistentTableInsertStrategy(
3213-
TemporaryTable.createEntityTable(
3214-
entityDescriptor,
3215-
name -> TemporaryTable.ENTITY_TABLE_PREFIX + name,
3216-
this,
3217-
runtimeModelCreationContext
3218-
),
3219-
runtimeModelCreationContext.getSessionFactory()
3220-
);
3211+
return new PersistentTableInsertStrategy( entityDescriptor, runtimeModelCreationContext );
32213212
}
32223213

32233214
// UDT support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.hibernate.dialect.sequence.SQLServerSequenceSupport;
3333
import org.hibernate.dialect.sequence.SequenceSupport;
3434
import org.hibernate.dialect.sql.ast.SQLServerSqlAstTranslator;
35+
import org.hibernate.dialect.temptable.SQLServerLocalTemporaryTableStrategy;
36+
import org.hibernate.dialect.temptable.TemporaryTableStrategy;
3537
import org.hibernate.dialect.type.SQLServerCastingXmlArrayJdbcTypeConstructor;
3638
import org.hibernate.dialect.type.SQLServerCastingXmlJdbcType;
3739
import org.hibernate.dialect.unique.AlterTableUniqueIndexDelegate;
@@ -1068,13 +1070,14 @@ public void appendDateTimeLiteral(
10681070
}
10691071
}
10701072

1073+
@Override
1074+
public TemporaryTableStrategy getLocalTemporaryTableStrategy() {
1075+
return SQLServerLocalTemporaryTableStrategy.INSTANCE;
1076+
}
1077+
10711078
@Override
10721079
public String getCreateTemporaryTableColumnAnnotation(int sqlTypeCode) {
1073-
return switch (sqlTypeCode) {
1074-
case Types.CHAR, Types.NCHAR, Types.VARCHAR, Types.NVARCHAR, Types.LONGVARCHAR, Types.LONGNVARCHAR ->
1075-
"collate database_default";
1076-
default -> "";
1077-
};
1080+
return SQLServerLocalTemporaryTableStrategy.INSTANCE.getCreateTemporaryTableColumnAnnotation( sqlTypeCode );
10781081
}
10791082

10801083
@Override

hibernate-core/src/main/java/org/hibernate/dialect/temptable/DB2GlobalTemporaryTableStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public String getTemporaryTableCreateOptions() {
1717
}
1818

1919
@Override
20-
public String getTemporaryTableCreateCommand() {
21-
return "declare global temporary table";
20+
public boolean supportsTemporaryTablePrimaryKey() {
21+
return false;
2222
}
2323
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.dialect.temptable;
6+
7+
import org.hibernate.type.SqlTypes;
8+
9+
/**
10+
* SQL Server specific local temporary table strategy.
11+
*/
12+
public class SQLServerLocalTemporaryTableStrategy extends TransactSQLLocalTemporaryTableStrategy {
13+
14+
public static final SQLServerLocalTemporaryTableStrategy INSTANCE = new SQLServerLocalTemporaryTableStrategy();
15+
16+
@Override
17+
public String getCreateTemporaryTableColumnAnnotation(int sqlTypeCode) {
18+
return switch ( sqlTypeCode ) {
19+
case SqlTypes.CHAR, SqlTypes.VARCHAR, SqlTypes.CLOB, SqlTypes.NCHAR, SqlTypes.NVARCHAR, SqlTypes.NCLOB ->
20+
"collate database_default";
21+
default -> "";
22+
};
23+
}
24+
25+
}

0 commit comments

Comments
 (0)