Class AbstractInformationExtractorImpl
- java.lang.Object
-
- org.hibernate.tool.schema.extract.internal.AbstractInformationExtractorImpl
-
- All Implemented Interfaces:
InformationExtractor
- Direct Known Subclasses:
InformationExtractorJdbcDatabaseMetaDataImpl
public abstract class AbstractInformationExtractorImpl extends Object implements InformationExtractor
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
AbstractInformationExtractorImpl.ForeignKeyBuilder
protected static class
AbstractInformationExtractorImpl.ForeignKeyBuilderImpl
-
Constructor Summary
Constructors Constructor Description AbstractInformationExtractorImpl(ExtractionContext extractionContext)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addColumns(TableInformation tableInformation)
protected void
addExtractedColumnInformation(TableInformation tableInformation, ResultSet resultSet)
boolean
catalogExists(Identifier catalog)
Does the given catalog exist yet?protected JDBCException
convertSQLException(SQLException sqlException, String message)
protected String
determineCatalogFilter(Identifier catalog)
protected String
determineSchemaFilter(Identifier schema)
protected ExtractionContext
getExtractionContext()
Iterable<ForeignKeyInformation>
getForeignKeys(TableInformation tableInformation)
Extract information about foreign keys defined on the given table (targeting or point-at other tables).Iterable<IndexInformation>
getIndexes(TableInformation tableInformation)
Extract information about indexes defined against the given table.PrimaryKeyInformation
getPrimaryKey(TableInformationImpl tableInformation)
Extract information about the given table's primary key.protected String
getResultSetCatalogLabel()
protected String
getResultSetColumnNameLabel()
protected String
getResultSetColumnPositionColumn()
protected String
getResultSetColumnSizeLabel()
protected String
getResultSetDecimalDigitsLabel()
protected String
getResultSetForeignKeyColumnNameLabel()
protected String
getResultSetForeignKeyLabel()
protected String
getResultSetIndexNameLabel()
protected String
getResultSetIndexTypeLabel()
protected String
getResultSetIsNullableLabel()
protected String
getResultSetPrimaryKeyCatalogLabel()
protected String
getResultSetPrimaryKeyColumnNameLabel()
protected String
getResultSetPrimaryKeyNameLabel()
protected String
getResultSetPrimaryKeySchemaLabel()
protected String
getResultSetPrimaryKeyTableLabel()
protected String
getResultSetRemarksLabel()
protected String
getResultSetSchemaLabel()
protected String
getResultSetSqlTypeCodeLabel()
protected String
getResultSetTableNameLabel()
protected String
getResultSetTableTypeLabel()
protected abstract String
getResultSetTableTypesPhysicalTableConstant()
protected String
getResultSetTypeNameLabel()
TableInformation
getTable(Identifier catalog, Identifier schema, Identifier tableName)
Look for a matching table.NameSpaceTablesInformation
getTables(Identifier catalog, Identifier schema)
Extract all the tables information.protected IdentifierHelper
identifierHelper()
protected TruthValue
interpretNullable(int nullable)
protected boolean
isPhysicalTableType(String tableType)
protected abstract <T> T
processCatalogsResultSet(ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a column of existing catalog names.protected abstract <T> T
processColumnsResultSet(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern, ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a row for any existing catalog/schema/table/column combination as specified by thecatalog
,schemaPattern
,tableNamePattern
, andcolumnNamePattern
parameters described below.protected abstract <T> T
processImportedKeysResultSet(String catalog, String schema, String table, ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a row for each foreign key/ primary key column making up a foreign key for any existing catalog/schema/table combination as specified by thecatalog
,schema
, andtable
parameters described below.protected abstract <T> T
processIndexInfoResultSet(String catalog, String schema, String table, boolean unique, boolean approximate, ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a row for each column defined in an index.protected abstract <T> T
processPrimaryKeysResultSet(String catalogFilter, String schemaFilter, Identifier tableName, ExtractionContext.ResultSetProcessor<T> processor)
protected abstract <T> T
processSchemaResultSet(String catalog, String schemaPattern, ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a row for any existing catalog/schema combination as specified by thecatalog
andschemaPattern
parameters described below.protected abstract <T> T
processTableResultSet(String catalog, String schemaPattern, String tableNamePattern, String[] types, ExtractionContext.ResultSetProcessor<T> processor)
Must do the following: obtain aResultSet
containing a row for any existing catalog/schema/table/table type combination as specified by thecatalogFilter
,schemaFilter
,tableNameFilter
, andtableTypes
parameters described below.boolean
schemaExists(Identifier catalog, Identifier schema)
Does the given schema exist yet?protected String
toMetaDataObjectName(Identifier identifier)
-
-
-
Constructor Detail
-
AbstractInformationExtractorImpl
public AbstractInformationExtractorImpl(ExtractionContext extractionContext)
-
-
Method Detail
-
identifierHelper
protected IdentifierHelper identifierHelper()
-
convertSQLException
protected JDBCException convertSQLException(SQLException sqlException, String message)
-
toMetaDataObjectName
protected String toMetaDataObjectName(Identifier identifier)
-
getExtractionContext
protected ExtractionContext getExtractionContext()
-
getResultSetCatalogLabel
protected String getResultSetCatalogLabel()
-
getResultSetSchemaLabel
protected String getResultSetSchemaLabel()
-
getResultSetTableNameLabel
protected String getResultSetTableNameLabel()
-
getResultSetTableTypeLabel
protected String getResultSetTableTypeLabel()
-
getResultSetRemarksLabel
protected String getResultSetRemarksLabel()
-
getResultSetPrimaryKeyCatalogLabel
protected String getResultSetPrimaryKeyCatalogLabel()
-
getResultSetPrimaryKeySchemaLabel
protected String getResultSetPrimaryKeySchemaLabel()
-
getResultSetPrimaryKeyTableLabel
protected String getResultSetPrimaryKeyTableLabel()
-
getResultSetColumnNameLabel
protected String getResultSetColumnNameLabel()
-
getResultSetSqlTypeCodeLabel
protected String getResultSetSqlTypeCodeLabel()
-
getResultSetTypeNameLabel
protected String getResultSetTypeNameLabel()
-
getResultSetColumnSizeLabel
protected String getResultSetColumnSizeLabel()
-
getResultSetDecimalDigitsLabel
protected String getResultSetDecimalDigitsLabel()
-
getResultSetIsNullableLabel
protected String getResultSetIsNullableLabel()
-
getResultSetIndexTypeLabel
protected String getResultSetIndexTypeLabel()
-
getResultSetIndexNameLabel
protected String getResultSetIndexNameLabel()
-
getResultSetForeignKeyLabel
protected String getResultSetForeignKeyLabel()
-
getResultSetPrimaryKeyNameLabel
protected String getResultSetPrimaryKeyNameLabel()
-
getResultSetColumnPositionColumn
protected String getResultSetColumnPositionColumn()
-
getResultSetPrimaryKeyColumnNameLabel
protected String getResultSetPrimaryKeyColumnNameLabel()
-
getResultSetForeignKeyColumnNameLabel
protected String getResultSetForeignKeyColumnNameLabel()
-
processCatalogsResultSet
protected abstract <T> T processCatalogsResultSet(ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a column of existing catalog names. The column label must be the same as returned bygetResultSetCatalogLabel()
. - execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
- Type Parameters:
T
- - defined byprocessor
- Parameters:
processor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
catalogExists
public boolean catalogExists(Identifier catalog)
Description copied from interface:InformationExtractor
Does the given catalog exist yet?- Specified by:
catalogExists
in interfaceInformationExtractor
- Parameters:
catalog
- The name of the catalog to look for.- Returns:
true
if the catalog does exist;false
otherwise
-
processSchemaResultSet
protected abstract <T> T processSchemaResultSet(String catalog, String schemaPattern, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a row for any existing catalog/schema combination as specified by thecatalog
andschemaPattern
parameters described below. The row contents will not be examined byprocessor.process( resultSet )
, so column label names are not specified; - execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
The
catalog
andschemaPattern
parameters are as specified byDatabaseMetaData.getSchemas(String, String)
, and are copied here:- Type Parameters:
T
- - defined byprocessor
- Parameters:
catalog
- – a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; null means catalog name should not be used to narrow down the search.schemaPattern
- – a schema name; must match the schema name as it is stored in the database; null means schema name should not be used to narrow down the search.processor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
schemaExists
public boolean schemaExists(Identifier catalog, Identifier schema)
Description copied from interface:InformationExtractor
Does the given schema exist yet?- Specified by:
schemaExists
in interfaceInformationExtractor
- Parameters:
catalog
- The name of the catalog to look in.schema
- The name of the schema to look for.- Returns:
true
if the schema does exist;false
otherwise
-
determineCatalogFilter
protected String determineCatalogFilter(Identifier catalog)
-
determineSchemaFilter
protected String determineSchemaFilter(Identifier schema)
-
getTable
public TableInformation getTable(Identifier catalog, Identifier schema, Identifier tableName)
Description copied from interface:InformationExtractor
Look for a matching table.- Specified by:
getTable
in interfaceInformationExtractor
- Parameters:
catalog
- Can benull
, indicating that any catalog may be considered a match. A non-null
value indicates that search should be limited to the passed catalog.schema
- Can benull
, indicating that any schema may be considered a match. A non-null
value indicates that search should be limited to the passed schema .tableName
- The name of the table to look for.- Returns:
- table info for the matching table
-
getTables
public NameSpaceTablesInformation getTables(Identifier catalog, Identifier schema)
Description copied from interface:InformationExtractor
Extract all the tables information.- Specified by:
getTables
in interfaceInformationExtractor
- Parameters:
catalog
- Can benull
, indicating that any catalog may be considered a match. A non-null
value indicates that search should be limited to the passed catalog.schema
- Can benull
, indicating that any schema may be considered a match. A non-null
value indicates that search should be limited to the passed schema .- Returns:
- a
NameSpaceTablesInformation
-
processColumnsResultSet
protected abstract <T> T processColumnsResultSet(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a row for any existing catalog/schema/table/column combination as specified by thecatalog
,schemaPattern
,tableNamePattern
, andcolumnNamePattern
parameters described below. TheResultSet
must contain the following, consistent with the corresponding columns returned byDatabaseMetaData.getColumns(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
- column label
getResultSetTableNameLabel()
for table name - column label
getResultSetColumnNameLabel()
for column name - column label
getResultSetSqlTypeCodeLabel()
SQL type code from java.sql.Types - column label
getResultSetTypeNameLabel()
for database column type name - column label
getResultSetColumnSizeLabel()
for column size - column label
getResultSetDecimalDigitsLabel()
for number of fractional digits - column label
getResultSetIsNullableLabel()
for nullability
- column label
- execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
The
catalog
,schemaPattern
,tableNamePattern
, andcolumnNamePattern
parameters are as specified byDatabaseMetaData.getColumns(String, String, String, String)
, and are copied here:- Type Parameters:
T
- - defined byprocessor
- Parameters:
catalog
- – a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; null means that the catalog name should not be used to narrow the searchschemaPattern
- – a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; null means that the schema name should not be used to narrow the searchtableNamePattern
- – a table name pattern; must match the table name as it is stored in the databasecolumnNamePattern
- – a column name pattern; must match the column name as it is stored in the databaseprocessor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
addExtractedColumnInformation
protected void addExtractedColumnInformation(TableInformation tableInformation, ResultSet resultSet) throws SQLException
- Throws:
SQLException
-
processTableResultSet
protected abstract <T> T processTableResultSet(String catalog, String schemaPattern, String tableNamePattern, String[] types, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a row for any existing catalog/schema/table/table type combination as specified by thecatalogFilter
,schemaFilter
,tableNameFilter
, andtableTypes
parameters described below. TheResultSet
must contain the following, consistent with the corresponding columns returned byDatabaseMetaData.getTables(String, String, String, String[])
- column label
getResultSetTableNameLabel()
for table name - column label
getResultSetTableTypeLabel()
for table type - column label
getResultSetRemarksLabel()
for table comment
- column label
- execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
The
catalog
,schemaPattern
,tableNamePattern
, andcolumnNamePattern
parameters are as specified byDatabaseMetaData.getTables(String, String, String, String[])
, and are copied here:- Type Parameters:
T
- - defined byprocessor
- Parameters:
catalog
- - a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; null means that the catalog name should not be used to narrow the searchschemaPattern
- - a schema name pattern; must match the schema name as it is stored in the database; "" retrieves those without a schema; null means that the schema name should not be used to narrow the searchtableNamePattern
- - a table name pattern; must match the table name as it is stored in the databasetypes
- - a list of table typesprocessor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
getResultSetTableTypesPhysicalTableConstant
protected abstract String getResultSetTableTypesPhysicalTableConstant()
-
isPhysicalTableType
protected boolean isPhysicalTableType(String tableType)
-
addColumns
protected void addColumns(TableInformation tableInformation)
-
interpretNullable
protected TruthValue interpretNullable(int nullable)
-
processPrimaryKeysResultSet
protected abstract <T> T processPrimaryKeysResultSet(String catalogFilter, String schemaFilter, Identifier tableName, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
- Throws:
SQLException
-
getPrimaryKey
public PrimaryKeyInformation getPrimaryKey(TableInformationImpl tableInformation)
Description copied from interface:InformationExtractor
Extract information about the given table's primary key.- Specified by:
getPrimaryKey
in interfaceInformationExtractor
- Parameters:
tableInformation
- The table for which to locate primary key information,- Returns:
- The extracted primary key information
-
processIndexInfoResultSet
protected abstract <T> T processIndexInfoResultSet(String catalog, String schema, String table, boolean unique, boolean approximate, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a row for each column defined in an index. TheResultSet
must contain the following, consistent with the corresponding columns returned byDatabaseMetaData.getIndexInfo(String, String, String, boolean, boolean)
- column label
getResultSetIndexNameLabel()
for index name; null when TYPE is tableIndexStatistic - column label
getResultSetIndexTypeLabel()
index type:-
DatabaseMetaData.tableIndexStatistic
- this identifies table statistics that are returned in conjunction with a table's index descriptions -
Any value other than
DatabaseMetaData.tableIndexStatistic
- this indicates that a table's index description (not statisics) is being returned.
-
-
column label
getResultSetColumnNameLabel()
- column name;null
when TYPE isDatabaseMetaData.tableIndexStatistic
- column label
- execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
The
catalog
,schemaPattern
,tableNamePattern
, andcolumnNamePattern
parameters are as specified byDatabaseMetaData.getIndexInfo(String, String, String, boolean, boolean)
, and are copied here:- Type Parameters:
T
- - defined byprocessor
- Parameters:
catalog
- – a catalog name; must match the catalog name as it is stored in this database; "" retrieves those without a catalog; null means that the catalog name should not be used to narrow the searchschema
- – a schema name; must match the schema name as it is stored in this database; "" retrieves those without a schema; null means that the schema name should not be used to narrow the searchtable
- – a table name; must match the table name as it is stored in this databaseunique
- – when true, return only indices for unique values; when false, return indices regardless of whether unique or notapproximate
- – when true, result is allowed to reflect approximate or out of data values; when false, results are requested to be accurateprocessor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
getIndexes
public Iterable<IndexInformation> getIndexes(TableInformation tableInformation)
Description copied from interface:InformationExtractor
Extract information about indexes defined against the given table. Typically called from the TableInformation itself as part of on-demand initialization of its state.- Specified by:
getIndexes
in interfaceInformationExtractor
- Parameters:
tableInformation
- The table for which to locate indexes- Returns:
- The extracted index information
-
processImportedKeysResultSet
protected abstract <T> T processImportedKeysResultSet(String catalog, String schema, String table, ExtractionContext.ResultSetProcessor<T> processor) throws SQLException
Must do the following:-
obtain a
ResultSet
containing a row for each foreign key/ primary key column making up a foreign key for any existing catalog/schema/table combination as specified by thecatalog
,schema
, andtable
parameters described below. TheResultSet
must contain the following, consistent with the corresponding columns returned byDatabaseMetaData.getImportedKeys(java.lang.String, java.lang.String, java.lang.String)
:-
column label
getResultSetForeignKeyLabel()
- foreign key name (may be null) -
column label
getResultSetPrimaryKeyCatalogLabel()
- primary key table catalog being imported (may be null) -
column label
getResultSetPrimaryKeySchemaLabel()
- primary key table schema being imported (may be null) -
column label
getResultSetPrimaryKeyTableLabel()
- primary key table name being imported -
column label
getResultSetForeignKeyColumnNameLabel()
- foreign key column name -
column label
getResultSetPrimaryKeyColumnNameLabel()
- primary key column name being imported
-
column label
- execute
processor.process( resultSet )
; -
release resources whether
processor.process( resultSet )
executes successfully or not.
The
catalog
,schema
, andtable
parameters are as specified byDatabaseMetaData.getImportedKeys(String, String, String)
and are copied here:- Type Parameters:
T
- - defined byprocessor
- Parameters:
catalog
- – a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; null means that the catalog name should not be used to narrow the searchschema
- – a schema name; must match the schema name as it is stored in the database; "" retrieves those without a schema; null means that the schema name should not be used to narrow the searchtable
- – a table name; must match the table name as it is stored in the databaseprocessor
- - the provided ResultSetProcessor.- Returns:
- - defined by
processor
- Throws:
SQLException
- - if a database error occurs
-
obtain a
-
getForeignKeys
public Iterable<ForeignKeyInformation> getForeignKeys(TableInformation tableInformation)
Description copied from interface:InformationExtractor
Extract information about foreign keys defined on the given table (targeting or point-at other tables). Typically called from the TableInformation itself as part of on-demand initialization of its state.- Specified by:
getForeignKeys
in interfaceInformationExtractor
- Parameters:
tableInformation
- The table for which to locate foreign-keys- Returns:
- The extracted foreign-key information
-
-