20
20
import org .hibernate .LockMode ;
21
21
import org .hibernate .LockOptions ;
22
22
import org .hibernate .MappingException ;
23
- import org .hibernate .boot .model .naming .ObjectNameNormalizer ;
23
+ import org .hibernate .boot .model .naming .Identifier ;
24
24
import org .hibernate .boot .model .relational .Database ;
25
25
import org .hibernate .boot .model .relational .Namespace ;
26
26
import org .hibernate .boot .model .relational .QualifiedName ;
@@ -351,21 +351,16 @@ public void configure(Type type, Properties params, ServiceRegistry serviceRegis
351
351
final JdbcEnvironment jdbcEnvironment = serviceRegistry .getService ( JdbcEnvironment .class );
352
352
final Dialect dialect = jdbcEnvironment .getDialect ();
353
353
354
- qualifiedTableName = determineGeneratorTableName ( params , dialect );
355
- renderedTableName = jdbcEnvironment .getQualifiedObjectNameFormatter ().format ( qualifiedTableName , dialect );
356
- segmentColumnName = determineSegmentColumnName ( params , dialect );
357
- valueColumnName = determineValueColumnName ( params , dialect );
354
+ qualifiedTableName = determineGeneratorTableName ( params , jdbcEnvironment );
355
+ segmentColumnName = determineSegmentColumnName ( params , jdbcEnvironment );
356
+ valueColumnName = determineValueColumnName ( params , jdbcEnvironment );
358
357
359
358
segmentValue = determineSegmentValue ( params );
360
359
361
360
segmentValueLength = determineSegmentColumnSize ( params );
362
361
initialValue = determineInitialValue ( params );
363
362
incrementSize = determineIncrementSize ( params );
364
363
365
- this .selectQuery = buildSelectQuery ( dialect );
366
- this .updateQuery = buildUpdateQuery ();
367
- this .insertQuery = buildInsertQuery ();
368
-
369
364
// if the increment size is greater than one, we prefer pooled optimization; but we
370
365
// need to see if the user prefers POOL or POOL_LO...
371
366
final String defaultPooledOptimizerStrategy = ConfigurationHelper .getBoolean ( Environment .PREFER_POOLED_VALUES_LO , params , false )
@@ -390,18 +385,30 @@ public void configure(Type type, Properties params, ServiceRegistry serviceRegis
390
385
*
391
386
* @see #getTableName()
392
387
* @param params The params supplied in the generator config (plus some standard useful extras).
393
- * @param dialect The dialect in effect
388
+ * @param jdbcEnvironment The JDBC environment
394
389
* @return The table name to use.
395
390
*/
396
391
@ SuppressWarnings ("UnusedParameters" )
397
- protected QualifiedName determineGeneratorTableName (Properties params , Dialect dialect ) {
398
- final ObjectNameNormalizer normalizer = ( ObjectNameNormalizer ) params . get ( IDENTIFIER_NORMALIZER );
392
+ protected QualifiedName determineGeneratorTableName (Properties params , JdbcEnvironment jdbcEnvironment ) {
393
+ final String tableName = ConfigurationHelper . getString ( TABLE_PARAM , params , DEF_TABLE );
399
394
400
- return QualifiedNameParser .INSTANCE .parse (
401
- ConfigurationHelper .getString ( TABLE_PARAM , params , DEF_TABLE ),
402
- normalizer .normalizeIdentifierQuoting ( params .getProperty ( CATALOG ) ),
403
- normalizer .normalizeIdentifierQuoting ( params .getProperty ( SCHEMA ) )
404
- );
395
+ if ( tableName .contains ( "." ) ) {
396
+ return QualifiedNameParser .INSTANCE .parse ( tableName );
397
+ }
398
+ else {
399
+ // todo : need to incorporate implicit catalog and schema names
400
+ final Identifier catalog = jdbcEnvironment .getIdentifierHelper ().toIdentifier (
401
+ ConfigurationHelper .getString ( CATALOG , params )
402
+ );
403
+ final Identifier schema = jdbcEnvironment .getIdentifierHelper ().toIdentifier (
404
+ ConfigurationHelper .getString ( SCHEMA , params )
405
+ );
406
+ return new QualifiedNameParser .NameParts (
407
+ catalog ,
408
+ schema ,
409
+ jdbcEnvironment .getIdentifierHelper ().toIdentifier ( tableName )
410
+ );
411
+ }
405
412
}
406
413
407
414
/**
@@ -412,14 +419,13 @@ protected QualifiedName determineGeneratorTableName(Properties params, Dialect d
412
419
*
413
420
* @see #getSegmentColumnName()
414
421
* @param params The params supplied in the generator config (plus some standard useful extras).
415
- * @param dialect The dialect in effect
422
+ * @param jdbcEnvironment The JDBC environment
416
423
* @return The name of the segment column
417
424
*/
418
425
@ SuppressWarnings ("UnusedParameters" )
419
- protected String determineSegmentColumnName (Properties params , Dialect dialect ) {
420
- final ObjectNameNormalizer normalizer = (ObjectNameNormalizer ) params .get ( IDENTIFIER_NORMALIZER );
426
+ protected String determineSegmentColumnName (Properties params , JdbcEnvironment jdbcEnvironment ) {
421
427
final String name = ConfigurationHelper .getString ( SEGMENT_COLUMN_PARAM , params , DEF_SEGMENT_COLUMN );
422
- return normalizer . toDatabaseIdentifierText ( name );
428
+ return jdbcEnvironment . getIdentifierHelper (). toIdentifier ( name ). render ( jdbcEnvironment . getDialect () );
423
429
}
424
430
425
431
/**
@@ -429,14 +435,13 @@ protected String determineSegmentColumnName(Properties params, Dialect dialect)
429
435
*
430
436
* @see #getValueColumnName()
431
437
* @param params The params supplied in the generator config (plus some standard useful extras).
432
- * @param dialect The dialect in effect
438
+ * @param jdbcEnvironment The JDBC environment
433
439
* @return The name of the value column
434
440
*/
435
441
@ SuppressWarnings ("UnusedParameters" )
436
- protected String determineValueColumnName (Properties params , Dialect dialect ) {
437
- final ObjectNameNormalizer normalizer = (ObjectNameNormalizer ) params .get ( IDENTIFIER_NORMALIZER );
442
+ protected String determineValueColumnName (Properties params , JdbcEnvironment jdbcEnvironment ) {
438
443
final String name = ConfigurationHelper .getString ( VALUE_COLUMN_PARAM , params , DEF_VALUE_COLUMN );
439
- return normalizer . toDatabaseIdentifierText ( name );
444
+ return jdbcEnvironment . getIdentifierHelper (). toIdentifier ( name ). render ( jdbcEnvironment . getDialect () );
440
445
}
441
446
442
447
/**
@@ -667,29 +672,45 @@ public void registerExportables(Database database) {
667
672
qualifiedTableName .getCatalogName (),
668
673
qualifiedTableName .getSchemaName ()
669
674
);
670
- final Table table = namespace .createTable ( qualifiedTableName .getObjectName (), false );
671
-
672
- final Column segmentColumn = new ExportableColumn (
673
- database ,
674
- table ,
675
- segmentColumnName ,
676
- StringType .INSTANCE ,
677
- dialect .getTypeName ( Types .VARCHAR , segmentValueLength , 0 , 0 )
678
- );
679
- segmentColumn .setNullable ( false );
680
- table .addColumn ( segmentColumn );
681
-
682
- // lol
683
- table .setPrimaryKey ( new PrimaryKey () );
684
- table .getPrimaryKey ().setTable ( table );
685
- table .getPrimaryKey ().addColumn ( segmentColumn );
686
-
687
- final Column valueColumn = new ExportableColumn (
688
- database ,
689
- table ,
690
- valueColumnName ,
691
- LongType .INSTANCE
675
+
676
+ Table table = namespace .locateTable ( qualifiedTableName .getObjectName () );
677
+ if ( table == null ) {
678
+ table = namespace .createTable ( qualifiedTableName .getObjectName (), false );
679
+
680
+ // todo : note sure the best solution here. do we add the columns if missing? other?
681
+ final Column segmentColumn = new ExportableColumn (
682
+ database ,
683
+ table ,
684
+ segmentColumnName ,
685
+ StringType .INSTANCE ,
686
+ dialect .getTypeName ( Types .VARCHAR , segmentValueLength , 0 , 0 )
687
+ );
688
+ segmentColumn .setNullable ( false );
689
+ table .addColumn ( segmentColumn );
690
+
691
+ // lol
692
+ table .setPrimaryKey ( new PrimaryKey () );
693
+ table .getPrimaryKey ().setTable ( table );
694
+ table .getPrimaryKey ().addColumn ( segmentColumn );
695
+
696
+ final Column valueColumn = new ExportableColumn (
697
+ database ,
698
+ table ,
699
+ valueColumnName ,
700
+ LongType .INSTANCE
701
+ );
702
+ table .addColumn ( valueColumn );
703
+ }
704
+
705
+ // allow physical naming strategies a chance to kick in
706
+ this .renderedTableName = database .getJdbcEnvironment ().getQualifiedObjectNameFormatter ().format (
707
+ table .getQualifiedTableName (),
708
+ dialect
692
709
);
693
- table .addColumn ( valueColumn );
710
+
711
+ this .selectQuery = buildSelectQuery ( dialect );
712
+ this .updateQuery = buildUpdateQuery ();
713
+ this .insertQuery = buildInsertQuery ();
714
+
694
715
}
695
716
}
0 commit comments