Fix HANA test failures

This commit is contained in:
Christian Beikov 2023-10-12 10:58:33 +02:00
parent db3a69f8bd
commit f13264d71d
13 changed files with 53 additions and 35 deletions

View File

@ -929,6 +929,11 @@ public class MySQLLegacyDialect extends Dialect {
return "select uuid()"; return "select uuid()";
} }
@Override
public boolean supportsCommentOn() {
return true;
}
@Override @Override
public String getTableComment(String comment) { public String getTableComment(String comment) {
return " comment='" + comment + "'"; return " comment='" + comment + "'";

View File

@ -908,12 +908,12 @@ public abstract class AbstractHANADialect extends Dialect {
@Override @Override
public String getTableComment(String comment) { public String getTableComment(String comment) {
return "comment '" + comment + "'"; return " comment '" + comment + "'";
} }
@Override @Override
public String getColumnComment(String comment) { public String getColumnComment(String comment) {
return "comment '" + comment + "'"; return " comment '" + comment + "'";
} }
@Override @Override

View File

@ -1041,6 +1041,11 @@ public class MySQLDialect extends Dialect {
return "select uuid()"; return "select uuid()";
} }
@Override
public boolean supportsCommentOn() {
return true;
}
@Override @Override
public String getTableComment(String comment) { public String getTableComment(String comment) {
return " comment='" + comment + "'"; return " comment='" + comment + "'";

View File

@ -141,17 +141,18 @@ public class StandardTableExporter implements Exporter<Table> {
*/ */
protected void applyComments(Table table, String formattedTableName, List<String> sqlStrings) { protected void applyComments(Table table, String formattedTableName, List<String> sqlStrings) {
if ( dialect.supportsCommentOn() ) { if ( dialect.supportsCommentOn() ) {
if ( table.getComment() != null ) { if ( table.getComment() != null && dialect.getTableComment( "" ).isEmpty() ) {
sqlStrings.add( "comment on table " sqlStrings.add( "comment on table " + formattedTableName + " is '" + table.getComment() + "'" );
+ formattedTableName
+ " is '" + table.getComment() + "'" );
} }
for ( Column column : table.getColumns() ) { if ( dialect.getColumnComment( "" ).isEmpty() ){
String columnComment = column.getComment(); for ( Column column : table.getColumns() ) {
if ( columnComment != null ) { String columnComment = column.getComment();
sqlStrings.add( "comment on column " if ( columnComment != null ) {
+ formattedTableName + '.' + column.getQuotedName( dialect ) sqlStrings.add(
+ " is '" + columnComment + "'" ); "comment on column " + formattedTableName + '.' + column.getQuotedName( dialect )
+ " is '" + columnComment + "'"
);
}
} }
} }
} }

View File

@ -59,7 +59,13 @@ public class CommentGenerationTest {
.execute( EnumSet.of( TargetType.SCRIPT ), metadata ); .execute( EnumSet.of( TargetType.SCRIPT ), metadata );
String fileContent = new String( Files.readAllBytes( output.toPath() ) ); String fileContent = new String( Files.readAllBytes( output.toPath() ) );
assertThat( fileContent.contains( "comment on column version.description " ), is( true ) ); String commentFragment = metadata.getDatabase().getDialect().getColumnComment( "This is a column comment" );
if ( commentFragment.isEmpty() ) {
assertThat( fileContent.contains( "comment on column version.description " ), is( true ) );
}
else {
assertThat( fileContent.contains( commentFragment ), is( true ) );
}
} }
finally { finally {
StandardServiceRegistryBuilder.destroy( ssr ); StandardServiceRegistryBuilder.destroy( ssr );

View File

@ -70,11 +70,11 @@ public class TableCommentTest extends BaseNonConfigCoreFunctionalTestCase {
} }
} }
if ( containsCommentInCreateTableStatement( sqlStatement ) ) { if ( containsCommentInCreateTableStatement( sqlStatement ) ) {
if ( getDialect().supportsCommentOn() && !getDialect().getTableComment( "comment snippet" ).equals( "" ) ) { if ( getDialect().supportsCommentOn() || getDialect().getTableComment( "comment snippet" ).isEmpty() ) {
fail( "Added comment on create table statement when Dialect support create comment on table statement" ); found = true;
} }
else { else {
found = true; fail( "Generated comment on create table statement, but Dialect does not support it" );
} }
} }
} }
@ -83,9 +83,8 @@ public class TableCommentTest extends BaseNonConfigCoreFunctionalTestCase {
} }
private boolean containsCommentInCreateTableStatement(String sqlStatement) { private boolean containsCommentInCreateTableStatement(String sqlStatement) {
return sqlStatement.toLowerCase().contains( "create table" ) && sqlStatement.toLowerCase() return sqlStatement.toLowerCase().contains( getDialect().getCreateTableString() )
.contains( getDialect().getTableComment( "comment snippet" ) && sqlStatement.toLowerCase().contains( getDialect().getTableComment( "comment snippet" ).toLowerCase() );
.toLowerCase() );
} }
@Entity(name = "TableWithComment") @Entity(name = "TableWithComment")

View File

@ -83,7 +83,7 @@ public class CollectionOfSoftDeleteTests {
assertThat( loaded.getBooks() ).isEmpty(); assertThat( loaded.getBooks() ).isEmpty();
assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 ); assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( ".deleted='N'" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsAnyOf( ".deleted='N'", ".deleted=N'N'" );
} ); } );
} }
@ -101,7 +101,7 @@ public class CollectionOfSoftDeleteTests {
assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 ); assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( " join " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( " join " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( ".deleted='N'" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsAnyOf( ".deleted='N'", ".deleted=N'N'" );
} ); } );
} }

View File

@ -113,7 +113,7 @@ public class SimpleSoftDeleteTests {
.multiLoad( 1, 2, 3 ); .multiLoad( 1, 2, 3 );
assertThat( results ).hasSize( 2 ); assertThat( results ).hasSize( 2 );
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "removed='N'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "removed='N'", "removed=N'N'" );
} ); } );
} }
@ -125,7 +125,7 @@ public class SimpleSoftDeleteTests {
statementInspector.clear(); statementInspector.clear();
session.bySimpleNaturalId( SimpleEntity.class ).load( "second" ); session.bySimpleNaturalId( SimpleEntity.class ).load( "second" );
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "removed='N'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "removed='N'", "removed=N'N'" );
} ); } );
} }
@ -145,7 +145,7 @@ public class SimpleSoftDeleteTests {
// trigger load // trigger load
first.getName(); first.getName();
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "active='Y'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "active='Y'", "active=N'Y'" );
assertThat( Hibernate.isInitialized( first ) ).isTrue(); assertThat( Hibernate.isInitialized( first ) ).isTrue();
assertThat( Hibernate.isInitialized( second ) ).isTrue(); assertThat( Hibernate.isInitialized( second ) ).isTrue();

View File

@ -83,10 +83,10 @@ public class ToOneTests {
assertThat( sqlInspector.getSqlQueries() ).hasSize( 2 ); assertThat( sqlInspector.getSqlQueries() ).hasSize( 2 );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( " join " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( " join " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( ".reporter_fk" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( ".reporter_fk" );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( ".active='Y" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsAnyOf( ".active='Y'", ".active=N'Y'" );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsOnlyOnce( "active" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsOnlyOnce( "active" );
assertThat( sqlInspector.getSqlQueries().get( 1 ) ).doesNotContain( " join " ); assertThat( sqlInspector.getSqlQueries().get( 1 ) ).doesNotContain( " join " );
assertThat( sqlInspector.getSqlQueries().get( 1 ) ).contains( ".active='Y" ); assertThat( sqlInspector.getSqlQueries().get( 1 ) ).containsAnyOf( ".active='Y'", ".active=N'Y'" );
assertThat( sqlInspector.getSqlQueries().get( 1 ) ).containsOnlyOnce( "active" ); assertThat( sqlInspector.getSqlQueries().get( 1 ) ).containsOnlyOnce( "active" );
} ); } );
} }

View File

@ -92,7 +92,7 @@ public class FetchLoadableTests {
// trigger loading one of the batch-loadable collections // trigger loading one of the batch-loadable collections
first.getBatchLoadable().size(); first.getBatchLoadable().size();
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "active='Y'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "active='Y'", "active=N'Y'" );
assertThat( Hibernate.isInitialized( first.getBatchLoadable() ) ).isTrue(); assertThat( Hibernate.isInitialized( first.getBatchLoadable() ) ).isTrue();
assertThat( Hibernate.isInitialized( second.getBatchLoadable() ) ).isTrue(); assertThat( Hibernate.isInitialized( second.getBatchLoadable() ) ).isTrue();
} ); } );
@ -121,7 +121,7 @@ public class FetchLoadableTests {
// trigger loading one of the subselect-loadable collections // trigger loading one of the subselect-loadable collections
first.getSubSelectLoadable().size(); first.getSubSelectLoadable().size();
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "active='Y'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "active='Y'", "active=N'Y'" );
assertThat( Hibernate.isInitialized( first.getSubSelectLoadable() ) ).isTrue(); assertThat( Hibernate.isInitialized( first.getSubSelectLoadable() ) ).isTrue();
assertThat( Hibernate.isInitialized( second.getSubSelectLoadable() ) ).isTrue(); assertThat( Hibernate.isInitialized( second.getSubSelectLoadable() ) ).isTrue();
} ); } );

View File

@ -60,7 +60,7 @@ public class UsageTests {
.uniqueResult(); .uniqueResult();
} ); } );
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "deleted='N'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='N'", "deleted=N'N'" );
} }
@Test @Test
@ -91,8 +91,9 @@ public class UsageTests {
} ); } );
assertThat( statementInspector.getSqlQueries() ).hasSize( 1 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 1 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).startsWith( "update " ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).startsWith( "update " );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "deleted='Y'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='Y'", "deleted=N'Y'" );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).endsWith( "deleted='N'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='N'", "deleted=N'N'" );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).endsWith( "'N'" );
scope.inTransaction( (session) -> { scope.inTransaction( (session) -> {
final CollectionOwner owner = session.get( CollectionOwner.class, 1 ); final CollectionOwner owner = session.get( CollectionOwner.class, 1 );
@ -138,8 +139,9 @@ public class UsageTests {
// this will be a "recreate" // this will be a "recreate"
assertThat( statementInspector.getSqlQueries() ).hasSize( 2 ); assertThat( statementInspector.getSqlQueries() ).hasSize( 2 );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).startsWith( "update " ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).startsWith( "update " );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).contains( "deleted='Y'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='Y'", "deleted=N'Y'" );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).endsWith( "deleted='N'" ); assertThat( statementInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='N'", "deleted=N'N'" );
assertThat( statementInspector.getSqlQueries().get( 0 ) ).endsWith( "'N'" );
assertThat( statementInspector.getSqlQueries().get( 1 ) ).startsWith( "insert " ); assertThat( statementInspector.getSqlQueries().get( 1 ) ).startsWith( "insert " );
scope.inTransaction( (session) -> { scope.inTransaction( (session) -> {

View File

@ -58,6 +58,6 @@ public class ConvertedSoftDeleteTests {
assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 ); assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).doesNotContainIgnoringCase( "delete " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).doesNotContainIgnoringCase( "delete " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsIgnoringCase( "update " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsIgnoringCase( "update " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( "deleted='Y'" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "deleted='Y'", "deleted=N'Y'" );
} }
} }

View File

@ -58,6 +58,6 @@ public class ReversedSoftDeleteTests {
assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 ); assertThat( sqlInspector.getSqlQueries() ).hasSize( 1 );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).doesNotContainIgnoringCase( "delete " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).doesNotContainIgnoringCase( "delete " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsIgnoringCase( "update " ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsIgnoringCase( "update " );
assertThat( sqlInspector.getSqlQueries().get( 0 ) ).contains( "active='N'" ); assertThat( sqlInspector.getSqlQueries().get( 0 ) ).containsAnyOf( "active='N'", "active=N'N'" );
} }
} }