下面列出了怎么用org.hibernate.engine.jdbc.env.spi.NameQualifierSupport的API类实例代码及写法,或者点击链接到github查看源代码。
private Format buildFormat(
NameQualifierSupport nameQualifierSupport,
String catalogSeparator,
boolean catalogAtEnd) {
switch ( nameQualifierSupport ) {
case NONE: {
return NoQualifierSupportFormat.INSTANCE;
}
case CATALOG: {
return catalogAtEnd
? new NameCatalogFormat( catalogSeparator )
: new CatalogNameFormat( catalogSeparator );
}
case SCHEMA: {
return SchemaNameFormat.INSTANCE;
}
default: {
return catalogAtEnd
? new SchemaNameCatalogFormat( catalogSeparator )
: new CatalogSchemaNameFormat( catalogSeparator );
}
}
}
private NameQualifierSupport determineNameQualifierSupport(DatabaseMetaData databaseMetaData) throws SQLException {
final boolean supportsCatalogs = databaseMetaData.supportsCatalogsInTableDefinitions();
final boolean supportsSchemas = databaseMetaData.supportsSchemasInTableDefinitions();
if ( supportsCatalogs && supportsSchemas ) {
return NameQualifierSupport.BOTH;
}
else if ( supportsCatalogs ) {
return NameQualifierSupport.CATALOG;
}
else if ( supportsSchemas ) {
return NameQualifierSupport.SCHEMA;
}
else {
return NameQualifierSupport.NONE;
}
}
public NormalizingIdentifierHelperImpl(
JdbcEnvironment jdbcEnvironment,
NameQualifierSupport nameQualifierSupport,
boolean globallyQuoteIdentifiers,
boolean globallyQuoteIdentifiersSkipColumnDefinitions,
boolean autoQuoteKeywords,
Set<String> reservedWords,
IdentifierCaseStrategy unquotedCaseStrategy,
IdentifierCaseStrategy quotedCaseStrategy) {
this.jdbcEnvironment = jdbcEnvironment;
this.nameQualifierSupport = nameQualifierSupport;
this.globallyQuoteIdentifiers = globallyQuoteIdentifiers;
this.globallyQuoteIdentifiersSkipColumnDefinitions = globallyQuoteIdentifiersSkipColumnDefinitions;
this.autoQuoteKeywords = autoQuoteKeywords;
if ( reservedWords != null ) {
this.reservedWords.addAll( reservedWords );
}
this.unquotedCaseStrategy = unquotedCaseStrategy == null ? IdentifierCaseStrategy.UPPER : unquotedCaseStrategy;
this.quotedCaseStrategy = quotedCaseStrategy == null ? IdentifierCaseStrategy.MIXED : quotedCaseStrategy;
}
public QualifiedObjectNameFormatterStandardImpl(
NameQualifierSupport nameQualifierSupport,
DatabaseMetaData databaseMetaData) throws SQLException {
this(
nameQualifierSupport,
databaseMetaData.getCatalogSeparator(),
!databaseMetaData.isCatalogAtStart()
);
}
@Override @SuppressWarnings("unchecked")
public <R extends Service> R getService(Class<R> serviceRole) {
if ( serviceRole == VertxInstance.class ) {
return (R) vertxService;
}
else if ( serviceRole == JdbcEnvironment.class ) {
return (R) new JdbcEnvironment() {
@Override
public Dialect getDialect() {
return new MySQL8Dialect();
}
@Override
public ExtractedDatabaseMetaData getExtractedDatabaseMetaData() {
return null;
}
@Override
public Identifier getCurrentCatalog() {
return null;
}
@Override
public Identifier getCurrentSchema() {
return null;
}
@Override
public QualifiedObjectNameFormatter getQualifiedObjectNameFormatter() {
return null;
}
@Override
public IdentifierHelper getIdentifierHelper() {
return null;
}
@Override
public NameQualifierSupport getNameQualifierSupport() {
return null;
}
@Override
public SqlExceptionHelper getSqlExceptionHelper() {
return null;
}
@Override
public LobCreatorBuilder getLobCreatorBuilder() {
return null;
}
@Override
public TypeInfo getTypeInfoForJdbcCode(int jdbcTypeCode) {
return null;
}
};
}
else {
throw new IllegalArgumentException( "This is a mock service - need to explicitly handle any service we might need during testing" );
}
}
public QualifiedObjectNameFormatterStandardImpl(
NameQualifierSupport nameQualifierSupport,
String catalogSeparator,
boolean catalogAtEnd) {
this.format = buildFormat( nameQualifierSupport, catalogSeparator, catalogAtEnd );
}
public QualifiedObjectNameFormatterStandardImpl(NameQualifierSupport nameQualifierSupport) {
// most dbs simply do <catalog>.<schema>.<name>
this( nameQualifierSupport, ".", false );
}
/**
* Constructor form used when the JDBC {@link java.sql.DatabaseMetaData} is not available.
*
* @param serviceRegistry The service registry
* @param dialect The resolved dialect.
*/
public JdbcEnvironmentImpl(ServiceRegistryImplementor serviceRegistry, Dialect dialect) {
this.dialect = dialect;
final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class );
NameQualifierSupport nameQualifierSupport = dialect.getNameQualifierSupport();
if ( nameQualifierSupport == null ) {
// assume both catalogs and schemas are supported
nameQualifierSupport = NameQualifierSupport.BOTH;
}
this.nameQualifierSupport = nameQualifierSupport;
this.sqlExceptionHelper = buildSqlExceptionHelper( dialect, logWarnings( cfgService, dialect ) );
final IdentifierHelperBuilder identifierHelperBuilder = IdentifierHelperBuilder.from( this );
identifierHelperBuilder.setGloballyQuoteIdentifiers( globalQuoting( cfgService ) );
identifierHelperBuilder.setSkipGlobalQuotingForColumnDefinitions( globalQuotingSkippedForColumnDefinitions( cfgService ) );
identifierHelperBuilder.setAutoQuoteKeywords( autoKeywordQuoting( cfgService ) );
identifierHelperBuilder.setNameQualifierSupport( nameQualifierSupport );
IdentifierHelper identifierHelper = null;
ExtractedDatabaseMetaDataImpl.Builder dbMetaDataBuilder = new ExtractedDatabaseMetaDataImpl.Builder( this );
try {
identifierHelper = dialect.buildIdentifierHelper( identifierHelperBuilder, null );
dbMetaDataBuilder.setSupportsNamedParameters( dialect.supportsNamedParameters( null ) );
}
catch (SQLException sqle) {
// should never ever happen
log.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
}
if ( identifierHelper == null ) {
identifierHelper = identifierHelperBuilder.build();
}
this.identifierHelper = identifierHelper;
this.extractedMetaDataSupport = dbMetaDataBuilder.build();
this.currentCatalog = identifierHelper.toIdentifier(
cfgService.getSetting( AvailableSettings.DEFAULT_CATALOG, StandardConverters.STRING )
);
this.currentSchema = Identifier.toIdentifier(
cfgService.getSetting( AvailableSettings.DEFAULT_SCHEMA, StandardConverters.STRING )
);
this.qualifiedObjectNameFormatter = new QualifiedObjectNameFormatterStandardImpl( nameQualifierSupport );
this.lobCreatorBuilder = LobCreatorBuilderImpl.makeLobCreatorBuilder();
}
/**
* Constructor form used from testing
*
* @param dialect The dialect
*/
public JdbcEnvironmentImpl(DatabaseMetaData databaseMetaData, Dialect dialect) throws SQLException {
this.dialect = dialect;
this.sqlExceptionHelper = buildSqlExceptionHelper( dialect, false );
this.extractedMetaDataSupport = new ExtractedDatabaseMetaDataImpl.Builder( this )
.apply( databaseMetaData )
.setSupportsNamedParameters( databaseMetaData.supportsNamedParameters() )
.build();
NameQualifierSupport nameQualifierSupport = dialect.getNameQualifierSupport();
if ( nameQualifierSupport == null ) {
nameQualifierSupport = determineNameQualifierSupport( databaseMetaData );
}
this.nameQualifierSupport = nameQualifierSupport;
final IdentifierHelperBuilder identifierHelperBuilder = IdentifierHelperBuilder.from( this );
identifierHelperBuilder.setNameQualifierSupport( nameQualifierSupport );
IdentifierHelper identifierHelper = null;
try {
identifierHelper = dialect.buildIdentifierHelper( identifierHelperBuilder, databaseMetaData );
}
catch (SQLException sqle) {
// should never ever happen
log.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
}
if ( identifierHelper == null ) {
identifierHelper = identifierHelperBuilder.build();
}
this.identifierHelper = identifierHelper;
this.currentCatalog = null;
this.currentSchema = null;
this.qualifiedObjectNameFormatter = new QualifiedObjectNameFormatterStandardImpl(
nameQualifierSupport,
databaseMetaData
);
this.lobCreatorBuilder = LobCreatorBuilderImpl.makeLobCreatorBuilder();
}
/**
* The main constructor form. Builds a JdbcEnvironment using the available DatabaseMetaData
*
* @param serviceRegistry The service registry
* @param dialect The resolved dialect
* @param databaseMetaData The available DatabaseMetaData
*
* @throws SQLException
*/
public JdbcEnvironmentImpl(
ServiceRegistryImplementor serviceRegistry,
Dialect dialect,
DatabaseMetaData databaseMetaData) throws SQLException {
this.dialect = dialect;
final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class );
this.sqlExceptionHelper = buildSqlExceptionHelper( dialect, logWarnings( cfgService, dialect ) );
this.extractedMetaDataSupport = new ExtractedDatabaseMetaDataImpl.Builder( this )
.apply( databaseMetaData )
.setConnectionSchemaName( determineCurrentSchemaName( databaseMetaData, serviceRegistry, dialect ) )
.setSupportsNamedParameters(dialect.supportsNamedParameters(databaseMetaData))
.build();
NameQualifierSupport nameQualifierSupport = dialect.getNameQualifierSupport();
if ( nameQualifierSupport == null ) {
nameQualifierSupport = determineNameQualifierSupport( databaseMetaData );
}
this.nameQualifierSupport = nameQualifierSupport;
final IdentifierHelperBuilder identifierHelperBuilder = IdentifierHelperBuilder.from( this );
identifierHelperBuilder.setGloballyQuoteIdentifiers( globalQuoting( cfgService ) );
identifierHelperBuilder.setSkipGlobalQuotingForColumnDefinitions( globalQuotingSkippedForColumnDefinitions( cfgService ) );
identifierHelperBuilder.setAutoQuoteKeywords( autoKeywordQuoting( cfgService ) );
identifierHelperBuilder.setNameQualifierSupport( nameQualifierSupport );
IdentifierHelper identifierHelper = null;
try {
identifierHelper = dialect.buildIdentifierHelper( identifierHelperBuilder, databaseMetaData );
}
catch (SQLException sqle) {
// should never ever happen
log.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
}
if ( identifierHelper == null ) {
identifierHelper = identifierHelperBuilder.build();
}
this.identifierHelper = identifierHelper;
// and that current-catalog and current-schema happen after it
this.currentCatalog = identifierHelper.toIdentifier( extractedMetaDataSupport.getConnectionCatalogName() );
this.currentSchema = identifierHelper.toIdentifier( extractedMetaDataSupport.getConnectionSchemaName() );
this.qualifiedObjectNameFormatter = new QualifiedObjectNameFormatterStandardImpl(
nameQualifierSupport,
databaseMetaData
);
this.typeInfoSet.addAll( TypeInfo.extractTypeInfo( databaseMetaData ) );
this.lobCreatorBuilder = LobCreatorBuilderImpl.makeLobCreatorBuilder(
cfgService.getSettings(),
databaseMetaData.getConnection()
);
}
@Override
public NameQualifierSupport getNameQualifierSupport() {
return nameQualifierSupport;
}
@Override
public NameQualifierSupport getNameQualifierSupport() {
return NameQualifierSupport.SCHEMA;
}
@Override
public NameQualifierSupport getNameQualifierSupport() {
return NameQualifierSupport.SCHEMA;
}
@Override
public NameQualifierSupport getNameQualifierSupport() {
return getInstance().getNameQualifierSupport();
}
/**
* By default interpret this based on DatabaseMetaData.
*
* @return
*/
public NameQualifierSupport getNameQualifierSupport() {
return null;
}