Skip to content

Commit 96d0e86

Browse files
committed
HHH-13843 Create InformationExtractor through Dialect to allow batch loading
Cache the result of the batch loaded tables, foreign keys, primary keys and indexes to serve objects looked up by qualified name from cache. This reduces the amount of server round trips on schema migration. Ultimately, this per dialect flexibility is necessary to implement UDT validation and migration
1 parent 565c1da commit 96d0e86

25 files changed

+1048
-20
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@
7070
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
7171
import org.hibernate.sql.ast.tree.Statement;
7272
import org.hibernate.sql.exec.spi.JdbcOperation;
73+
import org.hibernate.tool.schema.extract.internal.InformationExtractorPostgreSQLImpl;
7374
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
75+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
76+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
7477
import org.hibernate.type.JavaObjectType;
7578
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
7679
import org.hibernate.type.descriptor.jdbc.ClobJdbcType;
@@ -1218,4 +1221,8 @@ public boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates() {
12181221
return false;
12191222
}
12201223

1224+
@Override
1225+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1226+
return new InformationExtractorPostgreSQLImpl( extractionContext );
1227+
}
12211228
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,10 @@
7575
import org.hibernate.sql.model.MutationOperation;
7676
import org.hibernate.sql.model.internal.OptionalTableUpdate;
7777
import org.hibernate.sql.model.jdbc.OptionalTableUpdateOperation;
78+
import org.hibernate.tool.schema.extract.internal.InformationExtractorPostgreSQLImpl;
7879
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
80+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
81+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
7982
import org.hibernate.tool.schema.internal.StandardTableExporter;
8083
import org.hibernate.tool.schema.spi.Exporter;
8184
import org.hibernate.type.JavaObjectType;
@@ -1377,4 +1380,9 @@ public boolean supportsFromClauseInUpdate() {
13771380
public boolean supportsBindingNullSqlTypeForSetNull() {
13781381
return true;
13791382
}
1383+
1384+
@Override
1385+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1386+
return new InformationExtractorPostgreSQLImpl( extractionContext );
1387+
}
13801388
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,11 @@
101101
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
102102
import org.hibernate.sql.ast.tree.Statement;
103103
import org.hibernate.sql.exec.spi.JdbcOperation;
104+
import org.hibernate.tool.schema.extract.internal.InformationExtractorOracleImpl;
104105
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorOracleDatabaseImpl;
105106
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
107+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
108+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
106109
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
107110
import org.hibernate.tool.schema.internal.StandardTableExporter;
108111
import org.hibernate.tool.schema.spi.Exporter;
@@ -1770,4 +1773,8 @@ public boolean supportsRowValueConstructorSyntaxInInSubQuery() {
17701773
return getVersion().isSameOrAfter( 9 );
17711774
}
17721775

1776+
@Override
1777+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1778+
return new InformationExtractorOracleImpl( extractionContext );
1779+
}
17731780
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@
9494
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
9595
import org.hibernate.sql.ast.tree.Statement;
9696
import org.hibernate.sql.exec.spi.JdbcOperation;
97+
import org.hibernate.tool.schema.extract.internal.InformationExtractorPostgreSQLImpl;
9798
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
99+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
100+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
98101
import org.hibernate.tool.schema.internal.StandardTableExporter;
99102
import org.hibernate.tool.schema.spi.Exporter;
100103
import org.hibernate.type.JavaObjectType;
@@ -1657,4 +1660,9 @@ public boolean supportsRecursiveSearchClause() {
16571660
return getVersion().isSameOrAfter( 14 );
16581661
}
16591662

1663+
@Override
1664+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1665+
return new InformationExtractorPostgreSQLImpl( extractionContext );
1666+
}
1667+
16601668
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@
6262
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
6363
import org.hibernate.sql.ast.tree.Statement;
6464
import org.hibernate.sql.exec.spi.JdbcOperation;
65+
import org.hibernate.tool.schema.extract.internal.InformationExtractorPostgreSQLImpl;
6566
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
67+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
68+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
6669
import org.hibernate.type.JavaObjectType;
6770
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
6871
import org.hibernate.type.descriptor.jdbc.ClobJdbcType;
@@ -1189,4 +1192,9 @@ public String getReadLockString(int timeout) {
11891192
public String getReadLockString(String aliases, int timeout) {
11901193
return withTimeout( " for share of " + aliases, timeout );
11911194
}
1195+
1196+
@Override
1197+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1198+
return new InformationExtractorPostgreSQLImpl( extractionContext );
1199+
}
11921200
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,12 @@
129129
import org.hibernate.sql.model.MutationOperation;
130130
import org.hibernate.sql.model.internal.OptionalTableUpdate;
131131
import org.hibernate.sql.model.jdbc.OptionalTableUpdateOperation;
132+
import org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl;
132133
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl;
133134
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorNoOpImpl;
134135
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
136+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
137+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
135138
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
136139
import org.hibernate.tool.schema.internal.HibernateSchemaManagementTool;
137140
import org.hibernate.tool.schema.internal.StandardAuxiliaryDatabaseObjectExporter;
@@ -2173,6 +2176,16 @@ public SequenceInformationExtractor getSequenceInformationExtractor() {
21732176
: SequenceInformationExtractorLegacyImpl.INSTANCE;
21742177
}
21752178

2179+
/**
2180+
* A {@link InformationExtractor} which is able to extract
2181+
* table, primary key, foreign key, index information etc. via JDBC.
2182+
*
2183+
* @since 7.2
2184+
*/
2185+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
2186+
return new InformationExtractorJdbcDatabaseMetaDataImpl( extractionContext );
2187+
}
2188+
21762189
// GUID support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
21772190

21782191
/**

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@
6868
import org.hibernate.sql.exec.spi.JdbcOperation;
6969
import org.hibernate.sql.model.MutationOperation;
7070
import org.hibernate.sql.model.internal.OptionalTableUpdate;
71+
import org.hibernate.tool.schema.extract.internal.InformationExtractorMySQLImpl;
72+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
73+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
7174
import org.hibernate.type.BasicTypeRegistry;
7275
import org.hibernate.type.NullType;
7376
import org.hibernate.type.SqlTypes;
@@ -1666,4 +1669,8 @@ public MutationOperation createOptionalTableUpdateOperation(EntityMutationTarget
16661669
return super.createOptionalTableUpdateOperation( mutationTarget, optionalTableUpdate, factory );
16671670
}
16681671

1672+
@Override
1673+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1674+
return new InformationExtractorMySQLImpl( extractionContext );
1675+
}
16691676
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,11 @@
8787
import org.hibernate.sql.exec.spi.JdbcOperation;
8888
import org.hibernate.sql.model.MutationOperation;
8989
import org.hibernate.sql.model.internal.OptionalTableUpdate;
90+
import org.hibernate.tool.schema.extract.internal.InformationExtractorOracleImpl;
9091
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorOracleDatabaseImpl;
9192
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
93+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
94+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
9295
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
9396
import org.hibernate.tool.schema.internal.StandardTableExporter;
9497
import org.hibernate.tool.schema.spi.Exporter;
@@ -1874,4 +1877,9 @@ public boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates() {
18741877
return false;
18751878
}
18761879

1880+
@Override
1881+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1882+
return new InformationExtractorOracleImpl( extractionContext );
1883+
}
1884+
18771885
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@
8585
import org.hibernate.sql.exec.spi.JdbcOperation;
8686
import org.hibernate.sql.model.MutationOperation;
8787
import org.hibernate.sql.model.internal.OptionalTableUpdate;
88+
import org.hibernate.tool.schema.extract.internal.InformationExtractorPostgreSQLImpl;
8889
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
90+
import org.hibernate.tool.schema.extract.spi.ExtractionContext;
91+
import org.hibernate.tool.schema.extract.spi.InformationExtractor;
8992
import org.hibernate.tool.schema.internal.StandardTableExporter;
9093
import org.hibernate.tool.schema.spi.Exporter;
9194
import org.hibernate.type.JavaObjectType;
@@ -1656,4 +1659,8 @@ public boolean supportsRecursiveSearchClause() {
16561659
return getVersion().isSameOrAfter( 14 );
16571660
}
16581661

1662+
@Override
1663+
public InformationExtractor getInformationExtractor(ExtractionContext extractionContext) {
1664+
return new InformationExtractorPostgreSQLImpl( extractionContext );
1665+
}
16591666
}

0 commit comments

Comments
 (0)