Skip to content

Commit 6ccc673

Browse files
committed
HHH-19365 GaussDB Dialect Support-fix some test cases fail
1 parent ae63e50 commit 6ccc673

File tree

2 files changed

+52
-22
lines changed

2 files changed

+52
-22
lines changed

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

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66

77
import jakarta.persistence.GenerationType;
88
import jakarta.persistence.TemporalType;
9+
import jakarta.persistence.Timeout;
910
import org.checkerframework.checker.nullness.qual.Nullable;
1011
import org.hibernate.Length;
1112
import org.hibernate.LockMode;
1213
import org.hibernate.LockOptions;
13-
import org.hibernate.PessimisticLockException;
1414
import org.hibernate.QueryTimeoutException;
15+
import org.hibernate.Timeouts;
1516
import org.hibernate.boot.model.FunctionContributions;
1617
import org.hibernate.boot.model.TypeContributions;
1718
import org.hibernate.community.dialect.identity.GaussDBIdentityColumnSupport;
@@ -39,6 +40,7 @@
3940
import org.hibernate.engine.jdbc.env.spi.NameQualifierSupport;
4041
import org.hibernate.engine.spi.SessionFactoryImplementor;
4142
import org.hibernate.exception.LockAcquisitionException;
43+
import org.hibernate.exception.LockTimeoutException;
4244
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
4345
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtractor;
4446
import org.hibernate.exception.spi.ViolatedConstraintNameExtractor;
@@ -810,7 +812,7 @@ public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
810812
return new LockAcquisitionException( message, sqlException, sql );
811813
case "55P03":
812814
// LOCK NOT AVAILABLE
813-
return new PessimisticLockException( message, sqlException, sql );
815+
return new LockTimeoutException( message, sqlException, sql );
814816
case "57014":
815817
return new QueryTimeoutException( message, sqlException, sql );
816818
}
@@ -1039,10 +1041,38 @@ public void appendDateTimeLiteral(
10391041
}
10401042
}
10411043

1044+
private String withTimeout(String lockString, Timeout timeout) {
1045+
return switch (timeout.milliseconds()) {
1046+
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
1047+
case Timeouts.SKIP_LOCKED_MILLI -> supportsSkipLocked() ? lockString + " skip locked" : lockString;
1048+
default -> lockString;
1049+
};
1050+
}
1051+
1052+
@Override
1053+
public String getWriteLockString(Timeout timeout) {
1054+
return withTimeout( getForUpdateString(), timeout );
1055+
}
1056+
1057+
@Override
1058+
public String getWriteLockString(String aliases, Timeout timeout) {
1059+
return withTimeout( getForUpdateString( aliases ), timeout );
1060+
}
1061+
1062+
@Override
1063+
public String getReadLockString(Timeout timeout) {
1064+
return withTimeout(" for share", timeout );
1065+
}
1066+
1067+
@Override
1068+
public String getReadLockString(String aliases, Timeout timeout) {
1069+
return withTimeout(" for share of " + aliases, timeout );
1070+
}
1071+
10421072
private String withTimeout(String lockString, int timeout) {
10431073
return switch (timeout) {
1044-
case LockOptions.NO_WAIT -> supportsNoWait() ? lockString + " nowait" : lockString;
1045-
case LockOptions.SKIP_LOCKED -> supportsSkipLocked() ? lockString + " skip locked" : lockString;
1074+
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
1075+
case Timeouts.SKIP_LOCKED_MILLI -> supportsSkipLocked() ? lockString + " skip locked" : lockString;
10461076
default -> lockString;
10471077
};
10481078
}

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

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,6 @@ public GaussDBFunctionRegistry(FunctionContributions functionContributions) {
4545
}
4646

4747
public void register() {
48-
functionContributions.getFunctionRegistry().register( "min", new GaussDBMinMaxFunction( "min" ) );
49-
functionContributions.getFunctionRegistry().register( "max", new GaussDBMinMaxFunction( "max" ) );
50-
51-
// uses # instead of ^ for XOR
52-
functionContributions.getFunctionRegistry().patternDescriptorBuilder( "bitxor", "(?1 # ?2)" )
53-
.setExactArgumentCount( 2 )
54-
.setArgumentTypeResolver( StandardFunctionArgumentTypeResolvers.ARGUMENT_OR_IMPLIED_RESULT_TYPE )
55-
.register();
56-
57-
functionContributions.getFunctionRegistry().register(
58-
"round", new GaussDBTruncRoundFunction( "round", true )
59-
);
60-
functionContributions.getFunctionRegistry().register(
61-
"trunc",
62-
new GaussDBTruncFunction( true, functionContributions.getTypeConfiguration() )
63-
);
64-
functionContributions.getFunctionRegistry().registerAlternateKey( "truncate", "trunc" );
65-
6648
CommonFunctionFactory functionFactory = new CommonFunctionFactory( functionContributions);
6749
functionFactory.cot();
6850
functionFactory.radians();
@@ -115,6 +97,24 @@ public void register() {
11597
functionFactory.sha( "sha256(?1)" );
11698
functionFactory.md5( "decode(md5(?1), 'hex')" );
11799

100+
functionContributions.getFunctionRegistry().register( "min", new GaussDBMinMaxFunction( "min" ) );
101+
functionContributions.getFunctionRegistry().register( "max", new GaussDBMinMaxFunction( "max" ) );
102+
103+
// uses # instead of ^ for XOR
104+
functionContributions.getFunctionRegistry().patternDescriptorBuilder( "bitxor", "(?1 # ?2)" )
105+
.setExactArgumentCount( 2 )
106+
.setArgumentTypeResolver( StandardFunctionArgumentTypeResolvers.ARGUMENT_OR_IMPLIED_RESULT_TYPE )
107+
.register();
108+
109+
functionContributions.getFunctionRegistry().register(
110+
"round", new GaussDBTruncRoundFunction( "round", true )
111+
);
112+
functionContributions.getFunctionRegistry().register(
113+
"trunc",
114+
new GaussDBTruncFunction( true, functionContributions.getTypeConfiguration() )
115+
);
116+
functionContributions.getFunctionRegistry().registerAlternateKey( "truncate", "trunc" );
117+
118118
format_toChar_gaussdb();
119119
array_gaussdb();
120120
arrayRemoveIndex_gaussdb();

0 commit comments

Comments
 (0)