Skip to content

Commit 6c52aef

Browse files
committed
HHH-17276 Expose size based lob-ness in DdlType and retain info in runtime model
1 parent 7cb7405 commit 6c52aef

32 files changed

+505
-106
lines changed

gradle/databases.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ ext {
174174
//
175175
// To avoid hibernate-spatial tests failure, JVM must be enabled as stated in documentation:
176176
// https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/autonomous-oracle-java.html
177-
'jdbc.url' : 'jdbc:oracle:thin:@(description=(retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=' + dbHost + '.oraclecloud.com))(connect_data=(service_name=' + dbService + '_tp.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))',
177+
'jdbc.url' : 'jdbc:oracle:thin:@(description=(retry_count=5)(retry_delay=1)(address=(protocol=tcps)(port=1521)(host=' + dbHost + '.oraclecloud.com))(connect_data=(service_name=' + dbService + '_tp.adb.oraclecloud.com))(security=(ssl_server_dn_match=no)))?oracle.jdbc.enableQueryResultCache=false&oracle.jdbc.thinForceDNSLoadBalancing=true&tcp.nodelay=yes',
178178
'connection.init_sql' : ''
179179
],
180180
oracle_cloud_db19c : [

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
106106
//length parameter is measured in bits, not bytes)
107107
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( BINARY, "bit($l)", this ) );
108108
ddlTypeRegistry.addDescriptor(
109-
CapacityDependentDdlType.builder( VARBINARY, columnType( BLOB ), this )
109+
CapacityDependentDdlType.builder(
110+
VARBINARY,
111+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,
112+
columnType( BLOB ),
113+
this
114+
)
110115
.withTypeCapacity( getMaxVarbinaryLength(), "bit varying($l)" )
111116
.build()
112117
);

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

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,37 +185,85 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
185185
int varcharDdlTypeCapacity = 32_672;
186186

187187
ddlTypeRegistry.addDescriptor(
188-
CapacityDependentDdlType.builder( VARBINARY, columnType( LONG32VARBINARY ), columnType( VARBINARY ), this )
188+
CapacityDependentDdlType.builder(
189+
VARBINARY,
190+
isLob( LONG32VARBINARY )
191+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
192+
: CapacityDependentDdlType.LobKind.NONE,
193+
columnType( LONG32VARBINARY ),
194+
columnType( VARBINARY ),
195+
this
196+
)
189197
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARBINARY ) )
190198
.build()
191199
);
192200
ddlTypeRegistry.addDescriptor(
193-
CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), columnType( VARCHAR ), this )
201+
CapacityDependentDdlType.builder(
202+
VARCHAR,
203+
isLob( LONG32VARCHAR )
204+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
205+
: CapacityDependentDdlType.LobKind.NONE,
206+
columnType( LONG32VARCHAR ),
207+
columnType( VARCHAR ),
208+
this
209+
)
194210
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARCHAR ) )
195211
.build()
196212
);
197213
ddlTypeRegistry.addDescriptor(
198-
CapacityDependentDdlType.builder( NVARCHAR, columnType( LONG32VARCHAR ), columnType( NVARCHAR ), this )
214+
CapacityDependentDdlType.builder(
215+
NVARCHAR,
216+
isLob( LONG32NVARCHAR )
217+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
218+
: CapacityDependentDdlType.LobKind.NONE,
219+
columnType( LONG32VARCHAR ),
220+
columnType( NVARCHAR ),
221+
this
222+
)
199223
.withTypeCapacity( varcharDdlTypeCapacity, columnType( NVARCHAR ) )
200224
.build()
201225
);
202226

203227
ddlTypeRegistry.addDescriptor(
204-
CapacityDependentDdlType.builder( BINARY, columnType( LONG32VARBINARY ), columnType( VARBINARY ), this )
228+
CapacityDependentDdlType.builder(
229+
BINARY,
230+
isLob( LONG32VARBINARY )
231+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
232+
: CapacityDependentDdlType.LobKind.NONE,
233+
columnType( LONG32VARBINARY ),
234+
columnType( VARBINARY ),
235+
this
236+
)
205237
.withTypeCapacity( 254, "char($l) for bit data" )
206238
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARBINARY ) )
207239
.build()
208240
);
209241

210242
// This is the maximum size for the CHAR datatype on Derby
211243
ddlTypeRegistry.addDescriptor(
212-
CapacityDependentDdlType.builder( CHAR, columnType( LONG32VARCHAR ), columnType( CHAR ), this )
244+
CapacityDependentDdlType.builder(
245+
CHAR,
246+
isLob( LONG32VARCHAR )
247+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
248+
: CapacityDependentDdlType.LobKind.NONE,
249+
columnType( LONG32VARCHAR ),
250+
columnType( CHAR ),
251+
this
252+
)
213253
.withTypeCapacity( 254, columnType( CHAR ) )
214254
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
215255
.build()
216256
);
217257
ddlTypeRegistry.addDescriptor(
218-
CapacityDependentDdlType.builder( NCHAR, columnType( LONG32NVARCHAR ), columnType( NCHAR ), this )
258+
CapacityDependentDdlType.builder(
259+
NCHAR,
260+
isLob( LONG32NVARCHAR )
261+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
262+
: CapacityDependentDdlType.LobKind.NONE,
263+
columnType( LONG32NVARCHAR ),
264+
columnType( NCHAR ),
265+
this
266+
)
219267
.withTypeCapacity( 254, columnType( NCHAR ) )
220268
.withTypeCapacity( getMaxVarcharLength(), columnType( NVARCHAR ) )
221269
.build()

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import static org.hibernate.type.SqlTypes.CHAR;
4343
import static org.hibernate.type.SqlTypes.CLOB;
4444
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
45+
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
4546
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
4647
import static org.hibernate.type.SqlTypes.NCHAR;
4748
import static org.hibernate.type.SqlTypes.NCLOB;
@@ -113,7 +114,15 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
113114

114115
//Mimer CHARs are ASCII!!
115116
ddlTypeRegistry.addDescriptor(
116-
CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), "nvarchar(" + getMaxNVarcharLength() + ")", this )
117+
CapacityDependentDdlType.builder(
118+
VARCHAR,
119+
isLob( LONG32VARCHAR ) ?
120+
CapacityDependentDdlType.LobKind.BIGGEST_LOB :
121+
CapacityDependentDdlType.LobKind.NONE,
122+
columnType( LONG32VARCHAR ),
123+
"nvarchar(" + getMaxNVarcharLength() + ")",
124+
this
125+
)
117126
.withTypeCapacity( getMaxNVarcharLength(), columnType( VARCHAR ) )
118127
.build()
119128
);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
311311

312312
final CapacityDependentDdlType.Builder varcharBuilder = CapacityDependentDdlType.builder(
313313
VARCHAR,
314-
columnType( CLOB ),
314+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( CLOB ),
315315
"char",
316316
this
317317
)
@@ -324,7 +324,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
324324

325325
final CapacityDependentDdlType.Builder nvarcharBuilder = CapacityDependentDdlType.builder(
326326
NVARCHAR,
327-
columnType( NCLOB ),
327+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( NCLOB ),
328328
"char",
329329
this
330330
)
@@ -337,7 +337,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
337337

338338
final CapacityDependentDdlType.Builder varbinaryBuilder = CapacityDependentDdlType.builder(
339339
VARBINARY,
340-
columnType( BLOB ),
340+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( BLOB ),
341341
"binary",
342342
this
343343
)

hibernate-core/src/main/java/org/hibernate/dialect/AbstractHANADialect.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
300300

301301
// varbinary max length 5000
302302
ddlTypeRegistry.addDescriptor(
303-
CapacityDependentDdlType.builder( BINARY, "blob", this )
303+
CapacityDependentDdlType.builder( BINARY, CapacityDependentDdlType.LobKind.BIGGEST_LOB, "blob", this )
304304
.withTypeCapacity( getMaxVarbinaryLength(), "varbinary($l)" )
305305
.build()
306306
);

hibernate-core/src/main/java/org/hibernate/dialect/DerbyDialect.java

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,37 +182,85 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
182182
int varcharDdlTypeCapacity = 32_672;
183183

184184
ddlTypeRegistry.addDescriptor(
185-
CapacityDependentDdlType.builder( VARBINARY, columnType( LONG32VARBINARY ), columnType( VARBINARY ), this )
185+
CapacityDependentDdlType.builder(
186+
VARBINARY,
187+
isLob( LONG32VARBINARY )
188+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
189+
: CapacityDependentDdlType.LobKind.NONE,
190+
columnType( LONG32VARBINARY ),
191+
columnType( VARBINARY ),
192+
this
193+
)
186194
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARBINARY ) )
187195
.build()
188196
);
189197
ddlTypeRegistry.addDescriptor(
190-
CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), columnType( VARCHAR ), this )
198+
CapacityDependentDdlType.builder(
199+
VARCHAR,
200+
isLob( LONG32VARCHAR )
201+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
202+
: CapacityDependentDdlType.LobKind.NONE,
203+
columnType( LONG32VARCHAR ),
204+
columnType( VARCHAR ),
205+
this
206+
)
191207
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARCHAR ) )
192208
.build()
193209
);
194210
ddlTypeRegistry.addDescriptor(
195-
CapacityDependentDdlType.builder( NVARCHAR, columnType( LONG32VARCHAR ), columnType( NVARCHAR ), this )
211+
CapacityDependentDdlType.builder(
212+
NVARCHAR,
213+
isLob( LONG32NVARCHAR )
214+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
215+
: CapacityDependentDdlType.LobKind.NONE,
216+
columnType( LONG32VARCHAR ),
217+
columnType( NVARCHAR ),
218+
this
219+
)
196220
.withTypeCapacity( varcharDdlTypeCapacity, columnType( NVARCHAR ) )
197221
.build()
198222
);
199223

200224
ddlTypeRegistry.addDescriptor(
201-
CapacityDependentDdlType.builder( BINARY, columnType( LONG32VARBINARY ), columnType( VARBINARY ), this )
225+
CapacityDependentDdlType.builder(
226+
BINARY,
227+
isLob( LONG32VARBINARY )
228+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
229+
: CapacityDependentDdlType.LobKind.NONE,
230+
columnType( LONG32VARBINARY ),
231+
columnType( VARBINARY ),
232+
this
233+
)
202234
.withTypeCapacity( 254, "char($l) for bit data" )
203235
.withTypeCapacity( varcharDdlTypeCapacity, columnType( VARBINARY ) )
204236
.build()
205237
);
206238

207239
// This is the maximum size for the CHAR datatype on Derby
208240
ddlTypeRegistry.addDescriptor(
209-
CapacityDependentDdlType.builder( CHAR, columnType( LONG32VARCHAR ), columnType( CHAR ), this )
241+
CapacityDependentDdlType.builder(
242+
CHAR,
243+
isLob( LONG32VARCHAR )
244+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
245+
: CapacityDependentDdlType.LobKind.NONE,
246+
columnType( LONG32VARCHAR ),
247+
columnType( CHAR ),
248+
this
249+
)
210250
.withTypeCapacity( 254, columnType( CHAR ) )
211251
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
212252
.build()
213253
);
214254
ddlTypeRegistry.addDescriptor(
215-
CapacityDependentDdlType.builder( NCHAR, columnType( LONG32NVARCHAR ), columnType( NCHAR ), this )
255+
CapacityDependentDdlType.builder(
256+
NCHAR,
257+
isLob( LONG32NVARCHAR )
258+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
259+
: CapacityDependentDdlType.LobKind.NONE,
260+
columnType( LONG32NVARCHAR ),
261+
columnType( NCHAR ),
262+
this
263+
)
216264
.withTypeCapacity( 254, columnType( NCHAR ) )
217265
.withTypeCapacity( getMaxVarcharLength(), columnType( NVARCHAR ) )
218266
.build()

hibernate-core/src/main/java/org/hibernate/dialect/Dialect.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,34 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
440440
ddlTypeRegistry.addDescriptor( simpleSqlType( LONG32VARCHAR ) );
441441
ddlTypeRegistry.addDescriptor( simpleSqlType( LONG32NVARCHAR ) );
442442
ddlTypeRegistry.addDescriptor( simpleSqlType( LONG32VARBINARY ) );
443+
444+
if ( rowId( null ) != null ) {
445+
ddlTypeRegistry.addDescriptor( simpleSqlType( ROWID ) );
446+
}
447+
}
448+
449+
protected boolean isLob(int sqlTypeCode) {
450+
switch ( sqlTypeCode ) {
451+
case LONG32VARBINARY:
452+
case LONG32VARCHAR:
453+
case LONG32NVARCHAR:
454+
case BLOB:
455+
case CLOB:
456+
case NCLOB:
457+
return true;
458+
default:
459+
return false;
460+
}
443461
}
444462

445463
private DdlTypeImpl simpleSqlType(int sqlTypeCode) {
446-
return new DdlTypeImpl( sqlTypeCode, columnType( sqlTypeCode ), castType( sqlTypeCode ), this );
464+
return new DdlTypeImpl(
465+
sqlTypeCode,
466+
isLob( sqlTypeCode ),
467+
columnType( sqlTypeCode ),
468+
castType( sqlTypeCode ),
469+
this
470+
);
447471
}
448472

449473
/**
@@ -457,6 +481,11 @@ private DdlTypeImpl simpleSqlType(int sqlTypeCode) {
457481
private CapacityDependentDdlType.Builder sqlTypeBuilder(int sqlTypeCode, int biggestSqlTypeCode, int castTypeCode) {
458482
return CapacityDependentDdlType.builder(
459483
sqlTypeCode,
484+
isLob( sqlTypeCode )
485+
? CapacityDependentDdlType.LobKind.ALL_LOB
486+
: isLob( biggestSqlTypeCode )
487+
? CapacityDependentDdlType.LobKind.BIGGEST_LOB
488+
: CapacityDependentDdlType.LobKind.NONE,
460489
columnType( biggestSqlTypeCode ),
461490
castType( castTypeCode ),
462491
this
@@ -504,6 +533,9 @@ private CapacityDependentDdlType.Builder sqlTypeBuilder(int sqlTypeCode, int big
504533
*/
505534
protected String columnType(int sqlTypeCode) {
506535
switch ( sqlTypeCode ) {
536+
case ROWID:
537+
return "rowid";
538+
507539
case BOOLEAN:
508540
return "boolean";
509541

hibernate-core/src/main/java/org/hibernate/dialect/MySQLDialect.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
316316

317317
final CapacityDependentDdlType.Builder varcharBuilder = CapacityDependentDdlType.builder(
318318
VARCHAR,
319-
columnType( CLOB ),
319+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( CLOB ),
320320
"char",
321321
this
322322
)
@@ -329,7 +329,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
329329

330330
final CapacityDependentDdlType.Builder nvarcharBuilder = CapacityDependentDdlType.builder(
331331
NVARCHAR,
332-
columnType( NCLOB ),
332+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( NCLOB ),
333333
"char",
334334
this
335335
)
@@ -342,7 +342,7 @@ protected void registerColumnTypes(TypeContributions typeContributions, ServiceR
342342

343343
final CapacityDependentDdlType.Builder varbinaryBuilder = CapacityDependentDdlType.builder(
344344
VARBINARY,
345-
columnType( BLOB ),
345+
CapacityDependentDdlType.LobKind.BIGGEST_LOB,columnType( BLOB ),
346346
"binary",
347347
this
348348
)

0 commit comments

Comments
 (0)