HHH-17520 Schema creation fails with interval second data type on PostgreSQL

This commit is contained in:
Andrea Boriero 2023-12-12 16:22:01 +01:00 committed by Andrea Boriero
parent ddb3e579e7
commit 1e21da14cd
6 changed files with 37 additions and 2 deletions

View File

@ -1144,6 +1144,12 @@ public class CockroachLegacyDialect extends Dialect {
};
}
@Override
public int getDefaultIntervalSecondScale() {
// The maximum scale for `interval second` is 6 unfortunately
return 6;
}
// CockroachDB doesn't support this by default. See sql.multiple_modifications_of_table.enabled
//
// @Override

View File

@ -1460,4 +1460,10 @@ public class PostgreSQLLegacyDialect extends Dialect {
}
return sql;
}
@Override
public int getDefaultIntervalSecondScale() {
// The maximum scale for `interval second` is 6 unfortunately
return 6;
}
}

View File

@ -1138,6 +1138,11 @@ public class CockroachDialect extends Dialect {
return new CockroachDialectQueryHints(query, hintList).getQueryHintString();
}
@Override
public int getDefaultIntervalSecondScale() {
// The maximum scale for `interval second` is 6 unfortunately
return 6;
}
// CockroachDB doesn't support this by default. See sql.multiple_modifications_of_table.enabled

View File

@ -5391,4 +5391,17 @@ public abstract class Dialect implements ConversionContext, TypeContributor, Fun
public FunctionalDependencyAnalysisSupport getFunctionalDependencyAnalysisSupport() {
return FunctionalDependencyAnalysisSupportImpl.NONE;
}
/**
* Resolves the default scale for a {@link SqlTypes.INTERVAL_SECOND} type code for the given column
* <p>
* Usually 9 (nanosecond) or 6 (microseconds).
*
* @return the default scale, in decimal digits,
* of the fractional seconds field
*/
public int getDefaultIntervalSecondScale(){
// The default scale necessary is 9 i.e. nanosecond resolution
return 9;
}
}

View File

@ -1541,4 +1541,10 @@ public class PostgreSQLDialect extends Dialect {
return "$" + position;
}
}
@Override
public int getDefaultIntervalSecondScale() {
// The maximum scale for `interval second` is 6 unfortunately
return 6;
}
}

View File

@ -161,8 +161,7 @@ public class DurationJavaType extends AbstractClassJavaType<Duration> {
@Override
public int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType) {
if ( jdbcType.getDdlTypeCode() == SqlTypes.INTERVAL_SECOND ) {
// The default scale necessary is 9 i.e. nanosecond resolution
return 9;
return dialect.getDefaultIntervalSecondScale();
}
else {
// For non-interval types, we use the type numeric(21)