Skip to content

Commit

Permalink
HHH-11740 : Default MultiTableBulkIdStrategy for DB2 does not work wi…
Browse files Browse the repository at this point in the history
…th connection pools

(cherry picked from commit 061a1ca)
  • Loading branch information
gbadner committed May 15, 2017
1 parent d28663c commit 1d7ed4a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
Expand Up @@ -6,6 +6,12 @@
*/
package org.hibernate.dialect;

import org.hibernate.hql.spi.id.IdTableSupportStandardImpl;
import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy;
import org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy;
import org.hibernate.hql.spi.id.local.AfterUseAction;
import org.hibernate.hql.spi.id.local.LocalTemporaryTableBulkIdStrategy;

/**
* An SQL dialect for DB2 9.7.
*
Expand All @@ -18,4 +24,29 @@ public String getCrossJoinSeparator() {
// DB2 9.7 and later support "cross join"
return " cross join ";
}

@Override
public MultiTableBulkIdStrategy getDefaultMultiTableBulkIdStrategy() {
// Starting in DB2 9.7, "real" global temporary tables that can be shared between sessions
// are supported; (obviously) data is not shared between sessions.
return new GlobalTemporaryTableBulkIdStrategy(
new IdTableSupportStandardImpl() {
@Override
public String generateIdTableName(String baseName) {
return super.generateIdTableName( baseName );
}

@Override
public String getCreateIdTableCommand() {
return "create global temporary table";
}

@Override
public String getCreateIdTableStatementOptions() {
return "not logged";
}
},
AfterUseAction.CLEAN
);
}
}
Expand Up @@ -33,6 +33,7 @@
import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy;
import org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy;
import org.hibernate.hql.spi.id.local.AfterUseAction;
import org.hibernate.hql.spi.id.local.LocalTemporaryTableBulkIdStrategy;
import org.hibernate.internal.CoreLogging;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.internal.util.JdbcExceptionHelper;
Expand Down Expand Up @@ -397,7 +398,10 @@ public boolean supportsCommentOn() {

@Override
public MultiTableBulkIdStrategy getDefaultMultiTableBulkIdStrategy() {
return new GlobalTemporaryTableBulkIdStrategy(
// Prior to DB2 9.7, "real" global temporary tables that can be shared between sessions
// are *not* supported; even though the DB2 command says to declare a "global" temp table
// Hibernate treats it as a "local" temp table.
return new LocalTemporaryTableBulkIdStrategy(
new IdTableSupportStandardImpl() {
@Override
public String generateIdTableName(String baseName) {
Expand All @@ -414,7 +418,8 @@ public String getCreateIdTableStatementOptions() {
return "not logged";
}
},
AfterUseAction.CLEAN
AfterUseAction.DROP,
null
);
}

Expand Down

0 comments on commit 1d7ed4a

Please sign in to comment.