3
3
* Copyright Red Hat Inc. and Hibernate Authors
4
4
*/
5
5
package org .hibernate .dialect ;
6
-
7
6
import java .lang .reflect .Array ;
8
7
import java .sql .CallableStatement ;
9
8
import java .sql .ResultSet ;
38
37
import org .hibernate .type .descriptor .java .JavaType ;
39
38
import org .hibernate .type .descriptor .java .PrimitiveByteArrayJavaType ;
40
39
import org .hibernate .type .descriptor .jdbc .BasicExtractor ;
41
- import org .hibernate .type .descriptor .jdbc .StructJdbcType ;
40
+ import org .hibernate .type .descriptor .jdbc .StructAttributeValues ;
41
+ import org .hibernate .type .descriptor .jdbc .StructHelper ;
42
+ import org .hibernate .type .descriptor .jdbc .StructuredJdbcType ;
42
43
import org .hibernate .type .spi .TypeConfiguration ;
43
44
44
- import static org .hibernate .dialect .StructHelper .getEmbeddedPart ;
45
- import static org .hibernate .dialect .StructHelper .instantiate ;
45
+ import static org .hibernate .type . descriptor . jdbc .StructHelper .getEmbeddedPart ;
46
+ import static org .hibernate .type . descriptor . jdbc .StructHelper .instantiate ;
46
47
import static org .hibernate .type .descriptor .DateTimeUtils .appendAsDate ;
47
48
import static org .hibernate .type .descriptor .DateTimeUtils .appendAsLocalTime ;
48
49
import static org .hibernate .type .descriptor .DateTimeUtils .appendAsTime ;
58
59
*
59
60
* Notes: Original code of this class is based on AbstractPostgreSQLStructJdbcType.
60
61
*/
61
- public abstract class AbstractGaussDBStructJdbcType implements StructJdbcType {
62
+ public abstract class AbstractGaussDBStructJdbcType implements StructuredJdbcType {
62
63
63
64
private static final DateTimeFormatter LOCAL_DATE_TIME ;
64
65
static {
@@ -451,9 +452,7 @@ private int deserializeStruct(
451
452
if ( string .charAt ( i + 1 ) == '(' ) {
452
453
// This could be a nested struct
453
454
final JdbcMapping jdbcMapping = getJdbcValueSelectable ( column ).getJdbcMapping ();
454
- if ( jdbcMapping .getJdbcType () instanceof AbstractGaussDBStructJdbcType ) {
455
- final AbstractGaussDBStructJdbcType structJdbcType ;
456
- structJdbcType = (AbstractGaussDBStructJdbcType ) jdbcMapping .getJdbcType ();
455
+ if ( jdbcMapping .getJdbcType () instanceof AbstractGaussDBStructJdbcType structJdbcType ) {
457
456
final Object [] subValues = new Object [structJdbcType .embeddableMappingType .getJdbcValueCount ()];
458
457
final int subEnd = structJdbcType .deserializeStruct (
459
458
string ,
@@ -503,8 +502,7 @@ private int deserializeStruct(
503
502
else if ( string .charAt ( i + 1 ) == '{' ) {
504
503
// This could be a quoted array
505
504
final JdbcMapping jdbcMapping = getJdbcValueSelectable ( column ).getJdbcMapping ();
506
- if ( jdbcMapping instanceof BasicPluralType <?, ?> ) {
507
- final BasicPluralType <?, ?> pluralType = (BasicPluralType <?, ?>) jdbcMapping ;
505
+ if ( jdbcMapping instanceof BasicPluralType <?, ?> pluralType ) {
508
506
final ArrayList <Object > arrayList = new ArrayList <>();
509
507
//noinspection unchecked
510
508
final int subEnd = deserializeArray (
@@ -1003,9 +1001,7 @@ private SelectableMapping getJdbcValueSelectable(int jdbcValueSelectableIndex) {
1003
1001
int count = 0 ;
1004
1002
for ( int i = 0 ; i < size ; i ++ ) {
1005
1003
final ValuedModelPart modelPart = getEmbeddedPart ( embeddableMappingType , orderMapping [i ] );
1006
- final MappingType mappedType = modelPart .getMappedType ();
1007
- if ( mappedType instanceof EmbeddableMappingType ) {
1008
- final EmbeddableMappingType embeddableMappingType = (EmbeddableMappingType ) mappedType ;
1004
+ if ( modelPart .getMappedType () instanceof EmbeddableMappingType embeddableMappingType ) {
1009
1005
final SelectableMapping aggregateMapping = embeddableMappingType .getAggregateMapping ();
1010
1006
if ( aggregateMapping == null ) {
1011
1007
final SelectableMapping subSelectable = embeddableMappingType .getJdbcValueSelectable ( jdbcValueSelectableIndex - count );
@@ -1153,7 +1149,7 @@ private static String unescape(CharSequence string, int start, int end) {
1153
1149
public Object createJdbcValue (Object domainValue , WrapperOptions options ) throws SQLException {
1154
1150
assert embeddableMappingType != null ;
1155
1151
final StringBuilder sb = new StringBuilder ();
1156
- serializeStructTo ( new GaussDBAppender ( sb ), domainValue , options );
1152
+ serializeStructTo ( new PostgreSQLAppender ( sb ), domainValue , options );
1157
1153
return sb .toString ();
1158
1154
}
1159
1155
@@ -1177,17 +1173,17 @@ protected <X> String toString(X value, JavaType<X> javaType, WrapperOptions opti
1177
1173
return null ;
1178
1174
}
1179
1175
final StringBuilder sb = new StringBuilder ();
1180
- serializeStructTo ( new GaussDBAppender ( sb ), value , options );
1176
+ serializeStructTo ( new PostgreSQLAppender ( sb ), value , options );
1181
1177
return sb .toString ();
1182
1178
}
1183
1179
1184
- private void serializeStructTo (GaussDBAppender appender , Object value , WrapperOptions options ) throws SQLException {
1180
+ private void serializeStructTo (PostgreSQLAppender appender , Object value , WrapperOptions options ) throws SQLException {
1185
1181
serializeDomainValueTo ( appender , options , value , '(' );
1186
1182
appender .append ( ')' );
1187
1183
}
1188
1184
1189
1185
private void serializeDomainValueTo (
1190
- GaussDBAppender appender ,
1186
+ PostgreSQLAppender appender ,
1191
1187
WrapperOptions options ,
1192
1188
Object domainValue ,
1193
1189
char separator ) throws SQLException {
@@ -1200,7 +1196,7 @@ private void serializeDomainValueTo(
1200
1196
}
1201
1197
1202
1198
private void serializeJdbcValuesTo (
1203
- GaussDBAppender appender ,
1199
+ PostgreSQLAppender appender ,
1204
1200
WrapperOptions options ,
1205
1201
Object [] jdbcValues ,
1206
1202
char separator ) throws SQLException {
@@ -1215,9 +1211,9 @@ private void serializeJdbcValuesTo(
1215
1211
embeddableMappingType .getJdbcValueSelectable ( i ) :
1216
1212
embeddableMappingType .getJdbcValueSelectable ( orderMapping [i ] );
1217
1213
final JdbcMapping jdbcMapping = selectableMapping .getJdbcMapping ();
1218
- if ( jdbcMapping .getJdbcType () instanceof AbstractGaussDBStructJdbcType ) {
1214
+ if ( jdbcMapping .getJdbcType () instanceof AbstractGaussDBStructJdbcType structJdbcType ) {
1219
1215
appender .quoteStart ();
1220
- ( ( AbstractGaussDBStructJdbcType ) jdbcMapping . getJdbcType () ) .serializeJdbcValuesTo (
1216
+ structJdbcType .serializeJdbcValuesTo (
1221
1217
appender ,
1222
1218
options ,
1223
1219
(Object []) jdbcValue ,
@@ -1233,7 +1229,7 @@ private void serializeJdbcValuesTo(
1233
1229
}
1234
1230
1235
1231
private void serializeConvertedBasicTo (
1236
- GaussDBAppender appender ,
1232
+ PostgreSQLAppender appender ,
1237
1233
WrapperOptions options ,
1238
1234
JdbcMapping jdbcMapping ,
1239
1235
Object subValue ) throws SQLException {
@@ -1243,13 +1239,13 @@ private void serializeConvertedBasicTo(
1243
1239
case SqlTypes .TINYINT :
1244
1240
case SqlTypes .SMALLINT :
1245
1241
case SqlTypes .INTEGER :
1246
- if ( subValue instanceof Boolean ) {
1242
+ if ( subValue instanceof Boolean booleanValue ) {
1247
1243
// BooleanJavaType has this as an implicit conversion
1248
- appender .append ( ( Boolean ) subValue ? '1' : '0' );
1244
+ appender .append ( booleanValue ? '1' : '0' );
1249
1245
break ;
1250
1246
}
1251
- if ( subValue instanceof Enum ) {
1252
- appender .appendSql ( (( Enum <?>) subValue ) .ordinal () );
1247
+ if ( subValue instanceof Enum <?> enumValue ) {
1248
+ appender .appendSql ( enumValue .ordinal () );
1253
1249
break ;
1254
1250
}
1255
1251
case SqlTypes .BOOLEAN :
@@ -1267,9 +1263,9 @@ private void serializeConvertedBasicTo(
1267
1263
case SqlTypes .NCHAR :
1268
1264
case SqlTypes .VARCHAR :
1269
1265
case SqlTypes .NVARCHAR :
1270
- if ( subValue instanceof Boolean ) {
1266
+ if ( subValue instanceof Boolean booleanValue ) {
1271
1267
// BooleanJavaType has this as an implicit conversion
1272
- appender .append ( ( Boolean ) subValue ? 'Y' : 'N' );
1268
+ appender .append ( booleanValue ? 'Y' : 'N' );
1273
1269
break ;
1274
1270
}
1275
1271
case SqlTypes .LONGVARCHAR :
@@ -1404,8 +1400,7 @@ private int injectAttributeValue(
1404
1400
final MappingType mappedType = modelPart .getMappedType ();
1405
1401
final int jdbcValueCount ;
1406
1402
final Object rawJdbcValue = rawJdbcValues [jdbcIndex ];
1407
- if ( mappedType instanceof EmbeddableMappingType ) {
1408
- final EmbeddableMappingType embeddableMappingType = (EmbeddableMappingType ) mappedType ;
1403
+ if ( mappedType instanceof EmbeddableMappingType embeddableMappingType ) {
1409
1404
if ( embeddableMappingType .getAggregateMapping () != null ) {
1410
1405
jdbcValueCount = 1 ;
1411
1406
attributeValues .setAttributeValue ( attributeIndex , rawJdbcValue );
@@ -1443,14 +1438,14 @@ private void appendTemporal(SqlAppender appender, JdbcMapping jdbcMapping, Objec
1443
1438
appender .append ( '"' );
1444
1439
switch ( jdbcMapping .getJdbcType ().getJdbcTypeCode () ) {
1445
1440
case SqlTypes .DATE :
1446
- if ( value instanceof java .util .Date ) {
1447
- appendAsDate ( appender , ( java . util . Date ) value );
1441
+ if ( value instanceof java .util .Date date ) {
1442
+ appendAsDate ( appender , date );
1448
1443
}
1449
- else if ( value instanceof java .util .Calendar ) {
1450
- appendAsDate ( appender , ( java . util . Calendar ) value );
1444
+ else if ( value instanceof java .util .Calendar calendar ) {
1445
+ appendAsDate ( appender , calendar );
1451
1446
}
1452
- else if ( value instanceof TemporalAccessor ) {
1453
- appendAsDate ( appender , ( TemporalAccessor ) value );
1447
+ else if ( value instanceof TemporalAccessor temporalAccessor ) {
1448
+ appendAsDate ( appender , temporalAccessor );
1454
1449
}
1455
1450
else {
1456
1451
appendAsDate (
@@ -1462,14 +1457,13 @@ else if ( value instanceof TemporalAccessor ) {
1462
1457
case SqlTypes .TIME :
1463
1458
case SqlTypes .TIME_WITH_TIMEZONE :
1464
1459
case SqlTypes .TIME_UTC :
1465
- if ( value instanceof java .util .Date ) {
1466
- appendAsTime ( appender , ( java . util . Date ) value , jdbcTimeZone );
1460
+ if ( value instanceof java .util .Date date ) {
1461
+ appendAsTime ( appender , date , jdbcTimeZone );
1467
1462
}
1468
- else if ( value instanceof java .util .Calendar ) {
1469
- appendAsTime ( appender , ( java . util . Calendar ) value , jdbcTimeZone );
1463
+ else if ( value instanceof java .util .Calendar calendar ) {
1464
+ appendAsTime ( appender , calendar , jdbcTimeZone );
1470
1465
}
1471
- else if ( value instanceof TemporalAccessor ) {
1472
- final TemporalAccessor temporalAccessor = (TemporalAccessor ) value ;
1466
+ else if ( value instanceof TemporalAccessor temporalAccessor ) {
1473
1467
if ( temporalAccessor .isSupported ( ChronoField .OFFSET_SECONDS ) ) {
1474
1468
appendAsTime ( appender , temporalAccessor , true , jdbcTimeZone );
1475
1469
}
@@ -1488,14 +1482,13 @@ else if ( value instanceof TemporalAccessor ) {
1488
1482
case SqlTypes .TIMESTAMP :
1489
1483
case SqlTypes .TIMESTAMP_WITH_TIMEZONE :
1490
1484
case SqlTypes .TIMESTAMP_UTC :
1491
- if ( value instanceof java .util .Date ) {
1492
- appendAsTimestampWithMicros ( appender , ( java . util . Date ) value , jdbcTimeZone );
1485
+ if ( value instanceof java .util .Date date ) {
1486
+ appendAsTimestampWithMicros ( appender , date , jdbcTimeZone );
1493
1487
}
1494
- else if ( value instanceof java .util .Calendar ) {
1495
- appendAsTimestampWithMillis ( appender , ( java . util . Calendar ) value , jdbcTimeZone );
1488
+ else if ( value instanceof java .util .Calendar calendar ) {
1489
+ appendAsTimestampWithMillis ( appender , calendar , jdbcTimeZone );
1496
1490
}
1497
- else if ( value instanceof TemporalAccessor ) {
1498
- final TemporalAccessor temporalAccessor = (TemporalAccessor ) value ;
1491
+ else if ( value instanceof TemporalAccessor temporalAccessor ) {
1499
1492
appendAsTimestampWithMicros ( appender , temporalAccessor , temporalAccessor .isSupported ( ChronoField .OFFSET_SECONDS ), jdbcTimeZone );
1500
1493
}
1501
1494
else {
@@ -1522,11 +1515,11 @@ protected <X> Object getBindValue(X value, WrapperOptions options) throws SQLExc
1522
1515
return StructHelper .getJdbcValues ( embeddableMappingType , orderMapping , value , options );
1523
1516
}
1524
1517
1525
- private static class GaussDBAppender extends StringBuilderSqlAppender {
1518
+ private static class PostgreSQLAppender extends StringBuilderSqlAppender {
1526
1519
1527
1520
private int quote = 1 ;
1528
1521
1529
- public GaussDBAppender (StringBuilder sb ) {
1522
+ public PostgreSQLAppender (StringBuilder sb ) {
1530
1523
super ( sb );
1531
1524
}
1532
1525
@@ -1545,7 +1538,7 @@ public void appendNull() {
1545
1538
}
1546
1539
1547
1540
@ Override
1548
- public GaussDBAppender append (char fragment ) {
1541
+ public PostgreSQLAppender append (char fragment ) {
1549
1542
if ( quote != 1 ) {
1550
1543
appendWithQuote ( fragment );
1551
1544
}
@@ -1556,12 +1549,12 @@ public GaussDBAppender append(char fragment) {
1556
1549
}
1557
1550
1558
1551
@ Override
1559
- public GaussDBAppender append (CharSequence csq ) {
1552
+ public PostgreSQLAppender append (CharSequence csq ) {
1560
1553
return append ( csq , 0 , csq .length () );
1561
1554
}
1562
1555
1563
1556
@ Override
1564
- public GaussDBAppender append (CharSequence csq , int start , int end ) {
1557
+ public PostgreSQLAppender append (CharSequence csq , int start , int end ) {
1565
1558
if ( quote != 1 ) {
1566
1559
int len = end - start ;
1567
1560
sb .ensureCapacity ( sb .length () + len );
0 commit comments