Skip to content

Commit 5394659

Browse files
committed
HHH-9966 - Improve schema tooling support for creating catalogs and schemas
1 parent 33b00de commit 5394659

File tree

7 files changed

+99
-364
lines changed

7 files changed

+99
-364
lines changed

hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaUpdate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.hibernate.internal.CoreMessageLogger;
3333
import org.hibernate.internal.log.DeprecationLogger;
3434
import org.hibernate.service.ServiceRegistry;
35-
import org.hibernate.tool.schema.extract.internal.legacy.DatabaseInformationImpl;
35+
import org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl;
3636
import org.hibernate.tool.schema.extract.spi.DatabaseInformation;
3737
import org.hibernate.tool.schema.internal.TargetDatabaseImpl;
3838
import org.hibernate.tool.schema.internal.TargetFileImpl;

hibernate-core/src/main/java/org/hibernate/tool/hbm2ddl/SchemaValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.hibernate.internal.CoreMessageLogger;
3131
import org.hibernate.internal.log.DeprecationLogger;
3232
import org.hibernate.service.ServiceRegistry;
33-
import org.hibernate.tool.schema.extract.internal.legacy.DatabaseInformationImpl;
33+
import org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl;
3434
import org.hibernate.tool.schema.extract.spi.DatabaseInformation;
3535
import org.hibernate.tool.schema.spi.SchemaManagementTool;
3636

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/DatabaseInformationImpl.java

Lines changed: 90 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,94 +6,150 @@
66
*/
77
package org.hibernate.tool.schema.extract.internal;
88

9+
import java.sql.SQLException;
910
import java.util.HashMap;
1011
import java.util.Map;
1112

1213
import org.hibernate.boot.model.naming.Identifier;
1314
import org.hibernate.boot.model.relational.Namespace;
1415
import org.hibernate.boot.model.relational.QualifiedSequenceName;
1516
import org.hibernate.boot.model.relational.QualifiedTableName;
17+
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
18+
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
19+
import org.hibernate.service.ServiceRegistry;
1620
import org.hibernate.tool.schema.extract.spi.DatabaseInformation;
1721
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
22+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
1823
import org.hibernate.tool.schema.extract.spi.SequenceInformation;
1924
import org.hibernate.tool.schema.extract.spi.TableInformation;
2025

2126
/**
27+
* Access to information from the existing database.
28+
*
2229
* @author Steve Ebersole
2330
*/
2431
public class DatabaseInformationImpl implements DatabaseInformation, ExtractionContext.DatabaseObjectAccess {
25-
private final Map<QualifiedTableName,TableInformation> tableInformationMap = new HashMap<QualifiedTableName, TableInformation>();
32+
private final InformationExtractor extractor;
33+
private final ExtractionContext extractionContext;
34+
35+
private final JdbcEnvironment jdbcEnvironment;
36+
2637
private final Map<QualifiedSequenceName,SequenceInformation> sequenceInformationMap = new HashMap<QualifiedSequenceName, SequenceInformation>();
2738

28-
public DatabaseInformationImpl() {
39+
public DatabaseInformationImpl(
40+
ServiceRegistry serviceRegistry,
41+
JdbcEnvironment jdbcEnvironment,
42+
JdbcConnectionAccess jdbcConnectionAccess,
43+
Identifier defaultCatalogName,
44+
Identifier defaultSchemaName) throws SQLException {
45+
this.jdbcEnvironment = jdbcEnvironment;
46+
47+
this.extractionContext = new ExtractionContextImpl(
48+
serviceRegistry,
49+
jdbcEnvironment,
50+
jdbcConnectionAccess,
51+
this,
52+
defaultCatalogName,
53+
defaultSchemaName
54+
);
55+
56+
// todo : make this pluggable
57+
this.extractor = new InformationExtractorJdbcDatabaseMetaDataImpl( extractionContext );
58+
59+
// legacy code did initialize sequences...
60+
initializeSequences();
2961
}
3062

31-
32-
// DatabaseInformation implementation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63+
private void initializeSequences() throws SQLException {
64+
Iterable<SequenceInformation> itr = jdbcEnvironment.getDialect().getSequenceInformationExtractor().extractMetadata( extractionContext );
65+
for ( SequenceInformation sequenceInformation : itr ) {
66+
sequenceInformationMap.put(
67+
// for now, follow the legacy behavior of storing just the
68+
// unqualified sequence name.
69+
new QualifiedSequenceName(
70+
null,
71+
null,
72+
sequenceInformation.getSequenceName().getSequenceName()
73+
),
74+
sequenceInformation
75+
);
76+
}
77+
}
3378

3479
@Override
3580
public boolean schemaExists(Namespace.Name schema) {
36-
return false;
81+
return extractor.schemaExists( schema.getCatalog(), schema.getSchema() );
3782
}
3883

3984
@Override
40-
public TableInformation getTableInformation(Identifier catalogName, Identifier schemaName, Identifier tableName) {
41-
return locateTableInformation( new QualifiedTableName( catalogName, schemaName, tableName ) );
85+
public TableInformation getTableInformation(
86+
Identifier catalogName,
87+
Identifier schemaName,
88+
Identifier tableName) {
89+
return getTableInformation( new QualifiedTableName( catalogName, schemaName, tableName ) );
4290
}
4391

4492
@Override
45-
public TableInformation getTableInformation(Namespace.Name schemaName, Identifier tableName) {
46-
return locateTableInformation( new QualifiedTableName( schemaName, tableName ) );
93+
public TableInformation getTableInformation(
94+
Namespace.Name schemaName,
95+
Identifier tableName) {
96+
return getTableInformation( new QualifiedTableName( schemaName, tableName ) );
4797
}
4898

4999
@Override
50-
public TableInformation getTableInformation(QualifiedTableName tableName) {
51-
return locateTableInformation( tableName );
100+
public TableInformation getTableInformation(QualifiedTableName qualifiedTableName) {
101+
if ( qualifiedTableName.getObjectName() == null ) {
102+
throw new IllegalArgumentException( "Passed table name cannot be null" );
103+
}
104+
105+
return extractor.getTable(
106+
qualifiedTableName.getCatalogName(),
107+
qualifiedTableName.getSchemaName(),
108+
qualifiedTableName.getTableName()
109+
);
52110
}
53111

54112
@Override
55-
public SequenceInformation getSequenceInformation(Identifier catalogName, Identifier schemaName, Identifier sequenceName) {
56-
return locateSequenceInformation( new QualifiedSequenceName( catalogName, schemaName, sequenceName ) );
113+
public void registerTable(TableInformation tableInformation) {
57114
}
58115

59116
@Override
60-
public SequenceInformation getSequenceInformation(Namespace.Name schemaName, Identifier sequenceName) {
61-
return locateSequenceInformation( new QualifiedSequenceName( schemaName, sequenceName ) );
117+
public SequenceInformation getSequenceInformation(
118+
Identifier catalogName,
119+
Identifier schemaName,
120+
Identifier sequenceName) {
121+
return getSequenceInformation( new QualifiedSequenceName( catalogName, schemaName, sequenceName ) );
62122
}
63123

64124
@Override
65-
public SequenceInformation getSequenceInformation(QualifiedSequenceName sequenceName) {
66-
return locateSequenceInformation( sequenceName );
125+
public SequenceInformation getSequenceInformation(
126+
Namespace.Name schemaName,
127+
Identifier sequenceName) {
128+
return getSequenceInformation( new QualifiedSequenceName( schemaName, sequenceName ) );
67129
}
68130

69131
@Override
70-
public boolean catalogExists(Identifier catalog) {
71-
return false;
72-
}
73-
74-
75-
// RegisteredObjectAccess implementation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76-
77-
public void registerTableInformation(TableInformation tableInformation) {
78-
tableInformationMap.put( tableInformation.getName(), tableInformation );
132+
public SequenceInformation getSequenceInformation(QualifiedSequenceName qualifiedSequenceName) {
133+
return locateSequenceInformation( qualifiedSequenceName );
79134
}
80135

81-
public void registerSequenceInformation(SequenceInformation sequenceInformation) {
82-
sequenceInformationMap.put( sequenceInformation.getSequenceName(), sequenceInformation );
136+
@Override
137+
public boolean catalogExists(Identifier catalog) {
138+
return extractor.catalogExists( catalog );
83139
}
84140

85141
@Override
86142
public TableInformation locateTableInformation(QualifiedTableName tableName) {
87-
return tableInformationMap.get( tableName );
143+
return getTableInformation( tableName );
88144
}
89145

90146
@Override
91147
public SequenceInformation locateSequenceInformation(QualifiedSequenceName sequenceName) {
92-
return sequenceInformationMap.get( sequenceName );
93-
}
148+
// again, follow legacy behavior
149+
if ( sequenceName.getCatalogName() != null || sequenceName.getSchemaName() != null ) {
150+
sequenceName = new QualifiedSequenceName( null, null, sequenceName.getSequenceName() );
151+
}
94152

95-
@Override
96-
public void registerTable(TableInformation tableInformation) {
97-
tableInformationMap.put( tableInformation.getName(), tableInformation );
153+
return sequenceInformationMap.get( sequenceName );
98154
}
99155
}

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/legacy/DatabaseInformationImpl.java

Lines changed: 0 additions & 163 deletions
This file was deleted.

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/legacy/package-info.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)