HHH-5632 - Import initial services work
This commit is contained in:
parent
e3e5df4d2e
commit
1a522bb968
|
@ -0,0 +1,126 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.internal.util.jdbc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Models type info extracted from {@link java.sql.DatabaseMetaData#getTypeInfo()}
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class TypeInfo {
|
||||||
|
private final String typeName;
|
||||||
|
private final int jdbcTypeCode;
|
||||||
|
private final String[] createParams;
|
||||||
|
private final boolean unsigned;
|
||||||
|
private final int precision;
|
||||||
|
private final short minimumScale;
|
||||||
|
private final short maximumScale;
|
||||||
|
private final boolean fixedPrecisionScale;
|
||||||
|
private final String literalPrefix;
|
||||||
|
private final String literalSuffix;
|
||||||
|
private final boolean caseSensitive;
|
||||||
|
private final TypeSearchability searchability;
|
||||||
|
private final TypeNullability nullability;
|
||||||
|
|
||||||
|
public TypeInfo(
|
||||||
|
String typeName,
|
||||||
|
int jdbcTypeCode,
|
||||||
|
String[] createParams,
|
||||||
|
boolean unsigned,
|
||||||
|
int precision,
|
||||||
|
short minimumScale,
|
||||||
|
short maximumScale,
|
||||||
|
boolean fixedPrecisionScale,
|
||||||
|
String literalPrefix,
|
||||||
|
String literalSuffix,
|
||||||
|
boolean caseSensitive,
|
||||||
|
TypeSearchability searchability,
|
||||||
|
TypeNullability nullability) {
|
||||||
|
this.typeName = typeName;
|
||||||
|
this.jdbcTypeCode = jdbcTypeCode;
|
||||||
|
this.createParams = createParams;
|
||||||
|
this.unsigned = unsigned;
|
||||||
|
this.precision = precision;
|
||||||
|
this.minimumScale = minimumScale;
|
||||||
|
this.maximumScale = maximumScale;
|
||||||
|
this.fixedPrecisionScale = fixedPrecisionScale;
|
||||||
|
this.literalPrefix = literalPrefix;
|
||||||
|
this.literalSuffix = literalSuffix;
|
||||||
|
this.caseSensitive = caseSensitive;
|
||||||
|
this.searchability = searchability;
|
||||||
|
this.nullability = nullability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeName() {
|
||||||
|
return typeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getJdbcTypeCode() {
|
||||||
|
return jdbcTypeCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCreateParams() {
|
||||||
|
return createParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUnsigned() {
|
||||||
|
return unsigned;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPrecision() {
|
||||||
|
return precision;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getMinimumScale() {
|
||||||
|
return minimumScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public short getMaximumScale() {
|
||||||
|
return maximumScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFixedPrecisionScale() {
|
||||||
|
return fixedPrecisionScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLiteralPrefix() {
|
||||||
|
return literalPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLiteralSuffix() {
|
||||||
|
return literalSuffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCaseSensitive() {
|
||||||
|
return caseSensitive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeSearchability getSearchability() {
|
||||||
|
return searchability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypeNullability getNullability() {
|
||||||
|
return nullability;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.internal.util.jdbc;
|
||||||
|
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import org.hibernate.util.ArrayHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper to extract type innformation from {@link DatabaseMetaData JDBC metadata}
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class TypeInfoExtracter {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger( TypeInfoExtracter.class );
|
||||||
|
|
||||||
|
private TypeInfoExtracter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the extraction
|
||||||
|
*
|
||||||
|
* @param metaData The JDBC metadata
|
||||||
|
*
|
||||||
|
* @return The extracted metadata
|
||||||
|
*/
|
||||||
|
public static LinkedHashSet<TypeInfo> extractTypeInfo(DatabaseMetaData metaData) {
|
||||||
|
LinkedHashSet<TypeInfo> typeInfoSet = new LinkedHashSet<TypeInfo>();
|
||||||
|
try {
|
||||||
|
ResultSet resultSet = metaData.getTypeInfo();
|
||||||
|
try {
|
||||||
|
while ( resultSet.next() ) {
|
||||||
|
typeInfoSet.add(
|
||||||
|
new TypeInfo(
|
||||||
|
resultSet.getString( "TYPE_NAME" ),
|
||||||
|
resultSet.getInt( "DATA_TYPE" ),
|
||||||
|
interpretCreateParams( resultSet.getString( "CREATE_PARAMS" ) ),
|
||||||
|
resultSet.getBoolean( "UNSIGNED_ATTRIBUTE" ),
|
||||||
|
resultSet.getInt( "PRECISION" ),
|
||||||
|
resultSet.getShort( "MINIMUM_SCALE" ),
|
||||||
|
resultSet.getShort( "MAXIMUM_SCALE" ),
|
||||||
|
resultSet.getBoolean( "FIXED_PREC_SCALE" ),
|
||||||
|
resultSet.getString( "LITERAL_PREFIX" ),
|
||||||
|
resultSet.getString( "LITERAL_SUFFIX" ),
|
||||||
|
resultSet.getBoolean( "CASE_SENSITIVE" ),
|
||||||
|
TypeSearchability.interpret( resultSet.getShort( "SEARCHABLE" ) ),
|
||||||
|
TypeNullability.interpret( resultSet.getShort( "NULLABLE" ) )
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( SQLException e ) {
|
||||||
|
log.warn( "Error accessing type info result set : " + e.toString() );
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
try {
|
||||||
|
resultSet.close();
|
||||||
|
}
|
||||||
|
catch ( SQLException e ) {
|
||||||
|
log.warn( "Unable to release type info result set" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( SQLException e ) {
|
||||||
|
log.warn( "Unable to retrieve type info result set : " + e.toString() );
|
||||||
|
}
|
||||||
|
|
||||||
|
return typeInfoSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String[] interpretCreateParams(String value) {
|
||||||
|
if ( value == null || value.length() == 0 ) {
|
||||||
|
return ArrayHelper.EMPTY_STRING_ARRAY;
|
||||||
|
}
|
||||||
|
return value.split( "," );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.internal.util.jdbc;
|
||||||
|
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the instrinsic nullability of a data type as reported by the JDBC driver.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public enum TypeNullability {
|
||||||
|
/**
|
||||||
|
* The data type can accept nulls
|
||||||
|
* @see DatabaseMetaData#typeNullable
|
||||||
|
*/
|
||||||
|
NULLABLE,
|
||||||
|
/**
|
||||||
|
* The data type cannot accept nulls
|
||||||
|
* @see DatabaseMetaData#typeNoNulls
|
||||||
|
*/
|
||||||
|
NON_NULLABLE,
|
||||||
|
/**
|
||||||
|
* It is unknown if the data type accepts nulls
|
||||||
|
* @see DatabaseMetaData#typeNullableUnknown
|
||||||
|
*/
|
||||||
|
UNKNOWN;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on the code retrieved from {@link DatabaseMetaData#getTypeInfo()} for the {@code NULLABLE}
|
||||||
|
* column, return the appropriate enum.
|
||||||
|
*
|
||||||
|
* @param code The retrieved code value.
|
||||||
|
*
|
||||||
|
* @return The corresponding enum.
|
||||||
|
*/
|
||||||
|
public static TypeNullability interpret(short code) {
|
||||||
|
switch ( code ) {
|
||||||
|
case DatabaseMetaData.typeNullable: {
|
||||||
|
return NULLABLE;
|
||||||
|
}
|
||||||
|
case DatabaseMetaData.typeNoNulls: {
|
||||||
|
return NON_NULLABLE;
|
||||||
|
}
|
||||||
|
case DatabaseMetaData.typeNullableUnknown: {
|
||||||
|
return UNKNOWN;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw new IllegalArgumentException( "Unknown type nullability code [" + code + "] enountered" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.internal.util.jdbc;
|
||||||
|
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes the searchability of a data type as reported by the JDBC driver.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public enum TypeSearchability {
|
||||||
|
/**
|
||||||
|
* Type is not searchable.
|
||||||
|
* @see java.sql.DatabaseMetaData#typePredNone
|
||||||
|
*/
|
||||||
|
NONE,
|
||||||
|
/**
|
||||||
|
* Type is fully searchable
|
||||||
|
* @see java.sql.DatabaseMetaData#typeSearchable
|
||||||
|
*/
|
||||||
|
FULL,
|
||||||
|
/**
|
||||||
|
* Type is valid only in {@code WHERE ... LIKE}
|
||||||
|
* @see java.sql.DatabaseMetaData#typePredChar
|
||||||
|
*/
|
||||||
|
CHAR,
|
||||||
|
/**
|
||||||
|
* Type is supported only in {@code WHERE ... LIKE}
|
||||||
|
* @see java.sql.DatabaseMetaData#typePredBasic
|
||||||
|
*/
|
||||||
|
BASIC;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on the code retrieved from {@link java.sql.DatabaseMetaData#getTypeInfo()} for the {@code SEARCHABLE}
|
||||||
|
* column, return the appropriate enum.
|
||||||
|
*
|
||||||
|
* @param code The retrieved code value.
|
||||||
|
*
|
||||||
|
* @return The corresponding enum.
|
||||||
|
*/
|
||||||
|
public static TypeSearchability interpret(short code) {
|
||||||
|
switch ( code ) {
|
||||||
|
case DatabaseMetaData.typeSearchable: {
|
||||||
|
return FULL;
|
||||||
|
}
|
||||||
|
case DatabaseMetaData.typePredNone: {
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
case DatabaseMetaData.typePredBasic: {
|
||||||
|
return BASIC;
|
||||||
|
}
|
||||||
|
case DatabaseMetaData.typePredChar: {
|
||||||
|
return CHAR;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
throw new IllegalArgumentException( "Unknown type searchability code [" + code + "] enountered" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue