cleaned up JdbcMocks in test sources and moved it to hibernate-testing
This commit is contained in:
parent
a5271d6e76
commit
039382e8be
|
@ -1,209 +0,0 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.test.boot.database.qualfiedTableNaming;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class JdbcMocks {
|
||||
|
||||
public static Connection createConnection(String databaseName, int majorVersion) {
|
||||
return createConnection( databaseName, majorVersion, -9999 );
|
||||
}
|
||||
|
||||
public static Connection createConnection(String databaseName, int majorVersion, int minorVersion) {
|
||||
DatabaseMetaDataHandler metadataHandler = new DatabaseMetaDataHandler( databaseName, majorVersion, minorVersion );
|
||||
ConnectionHandler connectionHandler = new ConnectionHandler();
|
||||
|
||||
DatabaseMetaData metadataProxy = ( DatabaseMetaData ) Proxy.newProxyInstance(
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
new Class[] {DatabaseMetaData.class},
|
||||
metadataHandler
|
||||
);
|
||||
|
||||
Connection connectionProxy = ( Connection ) Proxy.newProxyInstance(
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
new Class[] { Connection.class },
|
||||
connectionHandler
|
||||
);
|
||||
|
||||
metadataHandler.setConnectionProxy( connectionProxy );
|
||||
connectionHandler.setMetadataProxy( metadataProxy );
|
||||
|
||||
return connectionProxy;
|
||||
}
|
||||
|
||||
private static class ConnectionHandler implements InvocationHandler {
|
||||
private DatabaseMetaData metadataProxy;
|
||||
|
||||
public void setMetadataProxy(DatabaseMetaData metadataProxy) {
|
||||
this.metadataProxy = metadataProxy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
final String methodName = method.getName();
|
||||
if ( "getMetaData".equals( methodName ) ) {
|
||||
return metadataProxy;
|
||||
}
|
||||
|
||||
if ( "toString".equals( methodName ) ) {
|
||||
return "Connection proxy [@" + hashCode() + "]";
|
||||
}
|
||||
|
||||
if ( "hashCode".equals( methodName ) ) {
|
||||
return Integer.valueOf( this.hashCode() );
|
||||
}
|
||||
|
||||
if ( "getCatalog".equals( methodName ) ) {
|
||||
return "DB1";
|
||||
}
|
||||
|
||||
if ( "supportsRefCursors".equals( methodName ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( canThrowSQLException( method ) ) {
|
||||
throw new SQLException();
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class DatabaseMetaDataHandler implements InvocationHandler {
|
||||
private final String databaseName;
|
||||
private final int majorVersion;
|
||||
private final int minorVersion;
|
||||
|
||||
private Connection connectionProxy;
|
||||
|
||||
public void setConnectionProxy(Connection connectionProxy) {
|
||||
this.connectionProxy = connectionProxy;
|
||||
}
|
||||
|
||||
private DatabaseMetaDataHandler(String databaseName, int majorVersion) {
|
||||
this( databaseName, majorVersion, -9999 );
|
||||
}
|
||||
|
||||
private DatabaseMetaDataHandler(String databaseName, int majorVersion, int minorVersion) {
|
||||
this.databaseName = databaseName;
|
||||
this.majorVersion = majorVersion;
|
||||
this.minorVersion = minorVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
final String methodName = method.getName();
|
||||
if ( "getDatabaseProductName".equals( methodName ) ) {
|
||||
return databaseName;
|
||||
}
|
||||
|
||||
if ( "getDatabaseMajorVersion".equals( methodName ) ) {
|
||||
return Integer.valueOf( majorVersion );
|
||||
}
|
||||
|
||||
if ( "getDatabaseMinorVersion".equals( methodName ) ) {
|
||||
return Integer.valueOf( minorVersion );
|
||||
}
|
||||
|
||||
if ( "getConnection".equals( methodName ) ) {
|
||||
return connectionProxy;
|
||||
}
|
||||
|
||||
if ( "toString".equals( methodName ) ) {
|
||||
return "DatabaseMetaData proxy [db-name=" + databaseName + ", version=" + majorVersion + "]";
|
||||
}
|
||||
|
||||
if ( "hashCode".equals( methodName ) ) {
|
||||
return Integer.valueOf( this.hashCode() );
|
||||
}
|
||||
|
||||
if ( "supportsNamedParameters".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( "supportsResultSetType".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( "supportsGetGeneratedKeys".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( "supportsBatchUpdates".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( "dataDefinitionIgnoredInTransactions".equals( methodName ) ) {
|
||||
return false ;
|
||||
}
|
||||
|
||||
if ( "dataDefinitionCausesTransactionCommit".equals( methodName ) ) {
|
||||
return false ;
|
||||
}
|
||||
|
||||
if ( "getSQLKeywords".equals( methodName ) ) {
|
||||
return "after,ansi,append,attach,audit,before,bitmap,boolean,buffered,byte,cache,call,cluster,clustersize,codeset,database,datafiles,dataskip,datetime,dba,dbdate,dbmoney,debug,define,delimiter,deluxe,detach,dirty,distributions,document,each,elif,exclusive,exit,explain,express,expression,extend,extent,file,fillfactor,foreach,format,fraction,fragment,gk,hash,high,hold,hybrid,if,index,init,labeleq,labelge,labelgt,labelle,labellt,let,listing,lock,log,low,matches,maxerrors,medium,mode,modify,money,mounting,new,nvarchar,off,old,operational,optical,optimization,page,pdqpriority,pload,private,raise,range,raw,recordend,recover,referencing,rejectfile,release,remainder,rename,reserve,resolution,resource,resume,return,returning,returns,ridlist,robin,rollforward,round,row,rowids,sameas,samples,schedule,scratch,serial,share,skall,skinhibit,skshow,smallfloat,stability,standard,start,static,statistics,stdev,step,sync,synonym,system,temp,text,timeout,trace,trigger,units,unlock,variance,wait,while,xload,xunload" ;
|
||||
}
|
||||
|
||||
if ( "getSQLStateType".equals( methodName ) ) {
|
||||
return DatabaseMetaData.sqlStateXOpen ;
|
||||
}
|
||||
|
||||
if ( "locatorsUpdateCopy".equals( methodName ) ) {
|
||||
return false ;
|
||||
}
|
||||
|
||||
if ( "getTypeInfo".equals( methodName ) ) {
|
||||
com.sun.rowset.CachedRowSetImpl rowSet = new com.sun.rowset.CachedRowSetImpl();
|
||||
return rowSet ;
|
||||
}
|
||||
|
||||
if ( "storesLowerCaseIdentifiers".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( "storesUpperCaseIdentifiers".equals( methodName ) ) {
|
||||
return false ;
|
||||
}
|
||||
|
||||
if ( "getCatalogSeparator".equals( methodName ) ) {
|
||||
return ":" ;
|
||||
}
|
||||
|
||||
if ( "isCatalogAtStart".equals( methodName ) ) {
|
||||
return true ;
|
||||
}
|
||||
|
||||
if ( canThrowSQLException( method ) ) {
|
||||
throw new SQLException();
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean canThrowSQLException(Method method) {
|
||||
final Class[] exceptions = method.getExceptionTypes();
|
||||
for ( Class exceptionType : exceptions ) {
|
||||
if ( SQLException.class.isAssignableFrom( exceptionType ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -18,17 +18,14 @@ import org.hibernate.cfg.AvailableSettings;
|
|||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||
import org.hibernate.engine.jdbc.env.spi.NameQualifierSupport;
|
||||
import org.hibernate.mapping.Table;
|
||||
import org.hibernate.persister.entity.EntityPersister;
|
||||
import org.hibernate.persister.entity.SingleTableEntityPersister;
|
||||
import org.hibernate.tool.schema.internal.StandardTableExporter;
|
||||
|
||||
import org.hibernate.testing.jdbc.JdbcMocks;
|
||||
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
|
|
|
@ -0,0 +1,338 @@
|
|||
/*
|
||||
* Hibernate, Relational Persistence for Idiomatic Java
|
||||
*
|
||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
||||
*/
|
||||
package org.hibernate.testing.jdbc;
|
||||
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.SQLException;
|
||||
import javax.sql.rowset.RowSetProvider;
|
||||
|
||||
import org.hibernate.engine.jdbc.env.spi.AnsiSqlKeywords;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@SuppressWarnings({"UnnecessaryBoxing", "unused"})
|
||||
public class JdbcMocks {
|
||||
|
||||
public static class Options {
|
||||
private String databaseProductName;
|
||||
private int databaseMajorVersion = -9999;
|
||||
private int databaseMinorVersion = -9999;
|
||||
|
||||
private String catalogName = "db1";
|
||||
|
||||
private boolean supportsRefCursors = false;
|
||||
private boolean supportsNamedParameters = true;
|
||||
private boolean supportsResultSetType = true;
|
||||
private boolean supportsGetGeneratedKeys = true;
|
||||
private boolean supportsBatchUpdates = true;
|
||||
private boolean dataDefinitionIgnoredInTransactions = false;
|
||||
private boolean dataDefinitionCausesTransactionCommit = false;
|
||||
private String sqlKeywords = StringHelper.join( ",", AnsiSqlKeywords.INSTANCE.sql2003() );
|
||||
private int sqlStateType = DatabaseMetaData.sqlStateXOpen;
|
||||
private boolean locatorsUpdateCopy = false;
|
||||
private boolean storesLowerCaseIdentifiers = true;
|
||||
private boolean storesUpperCaseIdentifiers = false;
|
||||
private String catalogSeparator = ":";
|
||||
private boolean isCatalogAtStart = true;
|
||||
}
|
||||
|
||||
public static class ConnectionBuilder {
|
||||
private final Options options;
|
||||
|
||||
public ConnectionBuilder() {
|
||||
this( new Options() );
|
||||
}
|
||||
|
||||
public ConnectionBuilder(Options options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
public Connection buildConnection() {
|
||||
ConnectionHandler connectionHandler = new ConnectionHandler( options );
|
||||
return (Connection) Proxy.newProxyInstance(
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
new Class[] { Connection.class },
|
||||
connectionHandler
|
||||
);
|
||||
}
|
||||
|
||||
public ConnectionBuilder setDatabaseProductName(String databaseProductName) {
|
||||
this.options.databaseProductName = databaseProductName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setDatabaseMajorVersion(int databaseMajorVersion) {
|
||||
this.options.databaseMajorVersion = databaseMajorVersion;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setDatabaseMinorVersion(int databaseMinorVersion) {
|
||||
this.options.databaseMinorVersion = databaseMinorVersion;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setCatalogName(String catalogName) {
|
||||
this.options.catalogName = catalogName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSupportsRefCursors(boolean supportsRefCursors) {
|
||||
this.options.supportsRefCursors = supportsRefCursors;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSupportsNamedParameters(boolean supportsNamedParameters) {
|
||||
this.options.supportsNamedParameters = supportsNamedParameters;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSupportsResultSetType(boolean supportsResultSetType) {
|
||||
this.options.supportsResultSetType = supportsResultSetType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSupportsGetGeneratedKeys(boolean supportsGetGeneratedKeys) {
|
||||
this.options.supportsGetGeneratedKeys = supportsGetGeneratedKeys;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSupportsBatchUpdates(boolean supportsBatchUpdates) {
|
||||
this.options.supportsBatchUpdates = supportsBatchUpdates;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setDataDefinitionIgnoredInTransactions(boolean dataDefinitionIgnoredInTransactions) {
|
||||
this.options.dataDefinitionIgnoredInTransactions = dataDefinitionIgnoredInTransactions;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setDataDefinitionCausesTransactionCommit(boolean dataDefinitionCausesTransactionCommit) {
|
||||
this.options.dataDefinitionCausesTransactionCommit = dataDefinitionCausesTransactionCommit;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSqlKeywords(String sqlKeywords) {
|
||||
this.options.sqlKeywords = sqlKeywords;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setSqlStateType(int sqlStateType) {
|
||||
this.options.sqlStateType = sqlStateType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setLocatorsUpdateCopy(boolean locatorsUpdateCopy) {
|
||||
this.options.locatorsUpdateCopy = locatorsUpdateCopy;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setStoresLowerCaseIdentifiers(boolean storesLowerCaseIdentifiers) {
|
||||
this.options.storesLowerCaseIdentifiers = storesLowerCaseIdentifiers;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setStoresUpperCaseIdentifiers(boolean storesUpperCaseIdentifiers) {
|
||||
this.options.storesUpperCaseIdentifiers = storesUpperCaseIdentifiers;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setCatalogSeparator(String catalogSeparator) {
|
||||
this.options.catalogSeparator = catalogSeparator;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ConnectionBuilder setCatalogAtStart(boolean catalogAtStart) {
|
||||
this.options.isCatalogAtStart = catalogAtStart;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public static Connection createConnection(String databaseName, int majorVersion) {
|
||||
return new ConnectionBuilder()
|
||||
.setDatabaseProductName( databaseName )
|
||||
.setDatabaseMajorVersion( majorVersion )
|
||||
.buildConnection();
|
||||
}
|
||||
|
||||
public static Connection createConnection(String databaseName, int majorVersion, int minorVersion) {
|
||||
return new ConnectionBuilder()
|
||||
.setDatabaseProductName( databaseName )
|
||||
.setDatabaseMajorVersion( majorVersion )
|
||||
.setDatabaseMinorVersion( minorVersion )
|
||||
.buildConnection();
|
||||
}
|
||||
|
||||
private static class ConnectionHandler implements InvocationHandler {
|
||||
private final Options options;
|
||||
private DatabaseMetaData metadataProxy;
|
||||
|
||||
public ConnectionHandler(Options options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
final String methodName = method.getName();
|
||||
if ( "getMetaData".equals( methodName ) ) {
|
||||
return getMetadataProxy( (Connection) proxy );
|
||||
}
|
||||
|
||||
if ( "toString".equals( methodName ) ) {
|
||||
return "Connection proxy [@" + hashCode() + "]";
|
||||
}
|
||||
|
||||
if ( "hashCode".equals( methodName ) ) {
|
||||
return Integer.valueOf( this.hashCode() );
|
||||
}
|
||||
|
||||
if ( "getCatalog".equals( methodName ) ) {
|
||||
return options.catalogName;
|
||||
}
|
||||
|
||||
if ( "supportsRefCursors".equals( methodName ) ) {
|
||||
return options.supportsRefCursors;
|
||||
}
|
||||
|
||||
if ( canThrowSQLException( method ) ) {
|
||||
throw new SQLException();
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private DatabaseMetaData getMetadataProxy(Connection connectionProxy) {
|
||||
if ( metadataProxy == null ) {
|
||||
// we need to make it
|
||||
final DatabaseMetaDataHandler metadataHandler = new DatabaseMetaDataHandler( options, connectionProxy );
|
||||
metadataProxy = (DatabaseMetaData) Proxy.newProxyInstance(
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
new Class[] {DatabaseMetaData.class},
|
||||
metadataHandler
|
||||
);
|
||||
}
|
||||
return metadataProxy;
|
||||
}
|
||||
}
|
||||
|
||||
private static class DatabaseMetaDataHandler implements InvocationHandler {
|
||||
private final Options options;
|
||||
private final Connection connectionProxy;
|
||||
|
||||
public DatabaseMetaDataHandler(Options options, Connection connectionProxy) {
|
||||
this.options = options;
|
||||
this.connectionProxy = connectionProxy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
final String methodName = method.getName();
|
||||
if ( "getDatabaseProductName".equals( methodName ) ) {
|
||||
return options.databaseProductName;
|
||||
}
|
||||
|
||||
if ( "getDatabaseMajorVersion".equals( methodName ) ) {
|
||||
return Integer.valueOf( options.databaseMajorVersion );
|
||||
}
|
||||
|
||||
if ( "getDatabaseMinorVersion".equals( methodName ) ) {
|
||||
return Integer.valueOf( options.databaseMinorVersion );
|
||||
}
|
||||
|
||||
if ( "getConnection".equals( methodName ) ) {
|
||||
return connectionProxy;
|
||||
}
|
||||
|
||||
if ( "toString".equals( methodName ) ) {
|
||||
return "DatabaseMetaData proxy [db-name=" + options.databaseProductName + ", version=" + options.databaseMajorVersion + "]";
|
||||
}
|
||||
|
||||
if ( "hashCode".equals( methodName ) ) {
|
||||
return Integer.valueOf( this.hashCode() );
|
||||
}
|
||||
|
||||
if ( "supportsNamedParameters".equals( methodName ) ) {
|
||||
return options.supportsNamedParameters;
|
||||
}
|
||||
|
||||
if ( "supportsResultSetType".equals( methodName ) ) {
|
||||
return options.supportsResultSetType;
|
||||
}
|
||||
|
||||
if ( "supportsGetGeneratedKeys".equals( methodName ) ) {
|
||||
return options.supportsGetGeneratedKeys;
|
||||
}
|
||||
|
||||
if ( "supportsBatchUpdates".equals( methodName ) ) {
|
||||
return options.supportsBatchUpdates;
|
||||
}
|
||||
|
||||
if ( "dataDefinitionIgnoredInTransactions".equals( methodName ) ) {
|
||||
return options.dataDefinitionIgnoredInTransactions;
|
||||
}
|
||||
|
||||
if ( "dataDefinitionCausesTransactionCommit".equals( methodName ) ) {
|
||||
return options.dataDefinitionCausesTransactionCommit;
|
||||
}
|
||||
|
||||
if ( "getSQLKeywords".equals( methodName ) ) {
|
||||
return options.sqlKeywords;
|
||||
}
|
||||
|
||||
if ( "getSQLStateType".equals( methodName ) ) {
|
||||
return options.sqlStateType;
|
||||
}
|
||||
|
||||
if ( "locatorsUpdateCopy".equals( methodName ) ) {
|
||||
return options.locatorsUpdateCopy;
|
||||
}
|
||||
|
||||
if ( "getTypeInfo".equals( methodName ) ) {
|
||||
return RowSetProvider.newFactory().createCachedRowSet();
|
||||
}
|
||||
|
||||
if ( "storesLowerCaseIdentifiers".equals( methodName ) ) {
|
||||
return options.storesLowerCaseIdentifiers;
|
||||
}
|
||||
|
||||
if ( "storesUpperCaseIdentifiers".equals( methodName ) ) {
|
||||
return options.storesUpperCaseIdentifiers;
|
||||
}
|
||||
|
||||
if ( "getCatalogSeparator".equals( methodName ) ) {
|
||||
return options.catalogSeparator;
|
||||
}
|
||||
|
||||
if ( "isCatalogAtStart".equals( methodName ) ) {
|
||||
return options.isCatalogAtStart;
|
||||
}
|
||||
|
||||
if ( canThrowSQLException( method ) ) {
|
||||
throw new SQLException();
|
||||
}
|
||||
else {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean canThrowSQLException(Method method) {
|
||||
final Class[] exceptions = method.getExceptionTypes();
|
||||
for ( Class exceptionType : exceptions ) {
|
||||
if ( SQLException.class.isAssignableFrom( exceptionType ) ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue