HHH-16252 SQL syntax error on drop constraint
This commit is contained in:
parent
02f5ae6b81
commit
c6c3e07d11
|
@ -76,14 +76,21 @@ public class AlterTableUniqueDelegate implements UniqueDelegate {
|
||||||
SqlStringGenerationContext context) {
|
SqlStringGenerationContext context) {
|
||||||
final String tableName = context.format( uniqueKey.getTable().getQualifiedTableName() );
|
final String tableName = context.format( uniqueKey.getTable().getQualifiedTableName() );
|
||||||
final StringBuilder command = new StringBuilder( dialect.getAlterTableString(tableName) );
|
final StringBuilder command = new StringBuilder( dialect.getAlterTableString(tableName) );
|
||||||
|
command.append( ' ' );
|
||||||
command.append( dialect.getDropUniqueKeyString() );
|
command.append( dialect.getDropUniqueKeyString() );
|
||||||
if ( dialect.supportsIfExistsBeforeConstraintName() ) {
|
if ( dialect.supportsIfExistsBeforeConstraintName() ) {
|
||||||
command.append( "if exists " );
|
command.append( " if exists " );
|
||||||
|
command.append( dialect.quote( uniqueKey.getName() ) );
|
||||||
}
|
}
|
||||||
command.append( dialect.quote( uniqueKey.getName() ) );
|
else if ( dialect.supportsIfExistsAfterConstraintName() ) {
|
||||||
if ( dialect.supportsIfExistsAfterConstraintName() ) {
|
command.append( ' ' );
|
||||||
|
command.append( dialect.quote( uniqueKey.getName() ) );
|
||||||
command.append( " if exists" );
|
command.append( " if exists" );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
command.append( ' ' );
|
||||||
|
command.append( dialect.quote( uniqueKey.getName() ) );
|
||||||
|
}
|
||||||
return command.toString();
|
return command.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,10 +14,20 @@ import org.hibernate.JDBCException;
|
||||||
import org.hibernate.LockMode;
|
import org.hibernate.LockMode;
|
||||||
import org.hibernate.LockOptions;
|
import org.hibernate.LockOptions;
|
||||||
import org.hibernate.PessimisticLockException;
|
import org.hibernate.PessimisticLockException;
|
||||||
|
import org.hibernate.boot.model.naming.Identifier;
|
||||||
|
import org.hibernate.boot.model.relational.QualifiedName;
|
||||||
|
import org.hibernate.boot.model.relational.QualifiedSequenceName;
|
||||||
|
import org.hibernate.boot.model.relational.QualifiedTableName;
|
||||||
|
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
|
||||||
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.PostgreSQLDialect;
|
import org.hibernate.dialect.PostgreSQLDialect;
|
||||||
import org.hibernate.QueryTimeoutException;
|
import org.hibernate.QueryTimeoutException;
|
||||||
|
import org.hibernate.dialect.unique.AlterTableUniqueDelegate;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
|
||||||
import org.hibernate.exception.LockAcquisitionException;
|
import org.hibernate.exception.LockAcquisitionException;
|
||||||
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
|
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
|
||||||
|
import org.hibernate.mapping.Table;
|
||||||
|
import org.hibernate.mapping.UniqueKey;
|
||||||
|
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
@ -124,4 +134,86 @@ public class PostgreSQLDialectTestCase extends BaseUnitTestCase {
|
||||||
|
|
||||||
assertEquals("alter table if exists table_name", dialect.getAlterTableString( "table_name" ));
|
assertEquals("alter table if exists table_name", dialect.getAlterTableString( "table_name" ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue( jiraKey = "HHH-16252" )
|
||||||
|
public void testAlterTableDropConstraintString() {
|
||||||
|
PostgreSQLDialect dialect = new PostgreSQLDialect();
|
||||||
|
AlterTableUniqueDelegate alterTable = new AlterTableUniqueDelegate( dialect );
|
||||||
|
final Table table = new Table( "orm", "table_name" );
|
||||||
|
final UniqueKey uniqueKey = new UniqueKey();
|
||||||
|
uniqueKey.setName( "unique_something" );
|
||||||
|
uniqueKey.setTable( table );
|
||||||
|
final String sql = alterTable.getAlterTableToDropUniqueKeyCommand(
|
||||||
|
uniqueKey,
|
||||||
|
null,
|
||||||
|
new MockSqlStringGenerationContext()
|
||||||
|
);
|
||||||
|
|
||||||
|
assertEquals("alter table if exists table_name drop constraint if exists unique_something", sql );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class MockSqlStringGenerationContext implements SqlStringGenerationContext {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Dialect getDialect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IdentifierHelper getIdentifierHelper() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier toIdentifier(String text) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getDefaultCatalog() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier catalogWithDefault(Identifier explicitCatalogOrNull) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getDefaultSchema() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier schemaWithDefault(Identifier explicitSchemaOrNull) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String format(QualifiedTableName qualifiedName) {
|
||||||
|
return qualifiedName.getTableName().render();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String format(QualifiedSequenceName qualifiedName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String format(QualifiedName qualifiedName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String formatWithoutCatalog(QualifiedSequenceName qualifiedName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMigration() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,9 +88,9 @@ public class SchemaCreationTest {
|
||||||
&& statement.contains("category (code)")
|
&& statement.contains("category (code)")
|
||||||
|| statement.startsWith("create unique nonclustered index")
|
|| statement.startsWith("create unique nonclustered index")
|
||||||
&& statement.contains("category (code)")
|
&& statement.contains("category (code)")
|
||||||
|| statement.startsWith("alter table if exists category add constraint")
|
|| statement.startsWith("alter table if exists category add constraint ")
|
||||||
&& statement.contains("unique (code)")
|
&& statement.contains("unique (code)")
|
||||||
|| statement.startsWith("alter table category add constraint")
|
|| statement.startsWith("alter table category add constraint ")
|
||||||
&& statement.contains("unique (code)")
|
&& statement.contains("unique (code)")
|
||||||
|| statement.startsWith("create table category")
|
|| statement.startsWith("create table category")
|
||||||
&& statement.contains("code " + varchar255 + " not null unique")
|
&& statement.contains("code " + varchar255 + " not null unique")
|
||||||
|
|
|
@ -139,11 +139,11 @@ public class UniqueConstraintDropTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkDropConstraint(String tableName, String columnName) throws IOException {
|
private boolean checkDropConstraint(String tableName, String columnName) throws IOException {
|
||||||
String regex = getDialect().getAlterTableString( tableName ) + getDialect().getDropUniqueKeyString();
|
String regex = getDialect().getAlterTableString( tableName ) + ' ' + getDialect().getDropUniqueKeyString();
|
||||||
if ( getDialect().supportsIfExistsBeforeConstraintName() ) {
|
if ( getDialect().supportsIfExistsBeforeConstraintName() ) {
|
||||||
regex += "if exists ";
|
regex += " if exists";
|
||||||
}
|
}
|
||||||
regex += "uk_.*";
|
regex += " uk_.*";
|
||||||
if ( getDialect().supportsIfExistsAfterConstraintName() ) {
|
if ( getDialect().supportsIfExistsAfterConstraintName() ) {
|
||||||
regex += " if exists";
|
regex += " if exists";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue