⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 querytranslatortestcase.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// $Id: QueryTranslatorTestCase.java 11361 2007-03-29 12:48:35Z steve.ebersole@jboss.com $package org.hibernate.test.hql;import java.sql.Connection;import java.sql.ParameterMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.StringTokenizer;import java.util.TreeMap;import junit.framework.ComparisonFailure;import org.hibernate.EntityMode;import org.hibernate.MappingException;import org.hibernate.QueryException;import org.hibernate.junit.functional.FunctionalTestCase;import org.hibernate.classic.Session;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.engine.query.HQLQueryPlan;import org.hibernate.hql.QueryTranslator;import org.hibernate.hql.QueryTranslatorFactory;import org.hibernate.hql.ast.ASTQueryTranslatorFactory;import org.hibernate.hql.ast.HqlToken;import org.hibernate.hql.ast.QueryTranslatorImpl;import org.hibernate.hql.ast.util.ASTPrinter;import org.hibernate.hql.classic.ClassicQueryTranslatorFactory;import org.hibernate.type.Type;import org.hibernate.type.TypeFactory;import org.hibernate.util.StringHelper;/** * Test case superclass for testing QueryTranslator implementations. * * @author josh Dec 6, 2004 8:21:21 AM */public abstract class QueryTranslatorTestCase extends FunctionalTestCase {	public QueryTranslatorTestCase(String x) {		super( x );		// Create an instance of HqlToken, so that it will have an entry point outside the package.  This		// will stop IDEA's code inspector from suggesting that HqlToken should be package local.		new HqlToken();	}	public String[] getMappings() {		return new String[] {				"hql/Animal.hbm.xml",				"hql/EntityWithCrazyCompositeKey.hbm.xml",				"hql/CrazyIdFieldNames.hbm.xml",				"hql/SimpleEntityWithAssociation.hbm.xml",				"hql/ComponentContainer.hbm.xml",				"batchfetch/ProductLine.hbm.xml",				"cid/Customer.hbm.xml",				"cid/Order.hbm.xml",				"cid/LineItem.hbm.xml",				"cid/Product.hbm.xml",				"legacy/Baz.hbm.xml",				"legacy/Category.hbm.xml",				"legacy/Commento.hbm.xml",				"legacy/Container.hbm.xml",				"legacy/Custom.hbm.xml",				"legacy/Eye.hbm.xml",				"legacy/Fee.hbm.xml",				"legacy/FooBar.hbm.xml",				"legacy/Fum.hbm.xml",				"legacy/Glarch.hbm.xml",				"legacy/Holder.hbm.xml",				"legacy/Many.hbm.xml",				"legacy/Marelo.hbm.xml",				"legacy/MasterDetail.hbm.xml",				"legacy/Middle.hbm.xml",				"legacy/Multi.hbm.xml",				"legacy/Nameable.hbm.xml",				"legacy/One.hbm.xml",				"legacy/Qux.hbm.xml",				"legacy/Simple.hbm.xml",				"legacy/SingleSeveral.hbm.xml",				"legacy/WZ.hbm.xml",				"legacy/UpDown.hbm.xml",				"compositeelement/Parent.hbm.xml",				"onetoone/joined/Person.hbm.xml",				"any/Properties.hbm.xml"		};	}	public boolean createSchema() {		return false;	}	public boolean recreateSchemaAfterFailure() {		return false;	}	public void assertTranslation(String hql) throws QueryException, MappingException {		assertTranslation( hql, null );	}	public void assertTranslation(String hql, boolean scalar) throws QueryException, MappingException {		assertTranslation( hql, null, scalar, null );	}	protected void assertTranslation(String hql, Map replacements) {		ComparisonFailure cf = null;		try {			assertTranslation( hql, replacements, false, null );		}		catch ( ComparisonFailure e ) {			e.printStackTrace();			cf = e;		}		if ("false".equals(System.getProperty("org.hibernate.test.hql.SkipScalarQuery","false"))) {			// Run the scalar translation anyway, even if there was a comparison failure.			assertTranslation( hql, replacements, true, null );		}		if (cf != null)			throw cf;	}	protected void runClassicTranslator(String hql) throws Exception {		SessionFactoryImplementor factory = getSessionFactoryImplementor();		Map replacements = new HashMap();		QueryTranslator oldQueryTranslator = null;		try {			QueryTranslatorFactory classic = new ClassicQueryTranslatorFactory();			oldQueryTranslator = classic.createQueryTranslator( hql, hql, Collections.EMPTY_MAP, factory );			oldQueryTranslator.compile( replacements, false );		}		catch ( Exception e ) {			e.printStackTrace();			throw e;		}		String oldsql = oldQueryTranslator.getSQLString();		System.out.println( "HQL    : " + hql );		System.out.println( "OLD SQL: " + oldsql );	}	protected void assertTranslation(String hql, Map replacements, boolean scalar, String sql) {		SessionFactoryImplementor factory = getSessionFactoryImplementor();		// Create an empty replacements map if we don't have one.		if ( replacements == null ) {			replacements = new HashMap();		}		// steve -> note that the empty maps here represent the currently enabled filters...		QueryTranslator oldQueryTranslator = null;		Exception oldException = null;		try {			System.out.println("Compiling with classic QueryTranslator...");			QueryTranslatorFactory classic = new ClassicQueryTranslatorFactory();			oldQueryTranslator = classic.createQueryTranslator( hql, hql, Collections.EMPTY_MAP, factory );			oldQueryTranslator.compile( replacements, scalar );		}		catch ( QueryException e ) {			oldException = e;		}		catch ( MappingException e ) {			oldException = e;		}		QueryTranslator newQueryTranslator = null;		Exception newException = null;		try {			System.out.println("Compiling with AST QueryTranslator...");			newQueryTranslator = createNewQueryTranslator( hql, replacements, scalar );		}		catch ( QueryException e ) {			newException = e;		}		catch ( MappingException e ) {			newException = e;		}		// If the old QT threw an exception, the new one should too.		if ( oldException != null ) {//			oldException.printStackTrace();			assertNotNull( "New query translator did *NOT* throw an exception, the old one did : " + oldException, newException );			assertEquals( oldException.getMessage(), newException.getMessage() );			return;	// Don't bother with the rest of the assertions.		}		else if ( newException != null ) {			newException.printStackTrace();			assertNull( "Old query translator did not throw an exception, the new one did", newException );		}		// -- check all of the outputs --		checkSql( oldQueryTranslator, newQueryTranslator, hql, scalar, sql );		checkQuerySpaces( oldQueryTranslator, newQueryTranslator );		checkReturnedTypes( oldQueryTranslator, newQueryTranslator );		checkColumnNames( oldQueryTranslator, newQueryTranslator );	}	protected QueryTranslatorImpl createNewQueryTranslator(String hql, Map replacements, boolean scalar) {		SessionFactoryImplementor factory = getSessionFactoryImplementor();		return createNewQueryTranslator( hql, replacements, scalar, factory );	}	private QueryTranslatorImpl createNewQueryTranslator(String hql, Map replacements, boolean scalar, SessionFactoryImplementor factory) {		QueryTranslatorFactory ast = new ASTQueryTranslatorFactory();		QueryTranslatorImpl newQueryTranslator = ( QueryTranslatorImpl ) ast.createQueryTranslator( hql, hql, Collections.EMPTY_MAP, factory );		newQueryTranslator.compile( replacements, scalar );		return newQueryTranslator;	}	protected QueryTranslatorImpl createNewQueryTranslator(String hql) {		return createNewQueryTranslator( hql, new HashMap(), false );	}	protected QueryTranslatorImpl createNewQueryTranslator(String hql, SessionFactoryImplementor sfimpl) {		return createNewQueryTranslator( hql, new HashMap(), false, sfimpl );	}	protected HQLQueryPlan createQueryPlan(String hql, boolean scalar) {		return new HQLQueryPlan( hql, scalar, Collections.EMPTY_MAP, getSessionFactoryImplementor() );	}	protected HQLQueryPlan createQueryPlan(String hql) {		return createQueryPlan( hql, false );	}	protected SessionFactoryImplementor getSessionFactoryImplementor() {		SessionFactoryImplementor factory = ( SessionFactoryImplementor ) getSessions();		if ( factory == null ) {			throw new NullPointerException( "Unable to create factory!" );		}		return factory;	}	private void checkColumnNames(QueryTranslator oldQueryTranslator, QueryTranslator newQueryTranslator) {		// Check the column names.		String[][] oldColumnNames = oldQueryTranslator.getColumnNames();		String[][] newColumnNames = newQueryTranslator.getColumnNames();		/*assertEquals( "Column name array is not the right length!", oldColumnNames.length, newColumnNames.length );		for ( int i = 0; i < oldColumnNames.length; i++ ) {			assertEquals( "Column name array [" + i + "] is not the right length!", oldColumnNames[i].length, newColumnNames[i].length );			for ( int j = 0; j < oldColumnNames[i].length; j++ ) {				assertEquals( "Column name [" + i + "," + j + "]", oldColumnNames[i][j], newColumnNames[i][j] );			}		}*/	}	private void checkReturnedTypes(QueryTranslator oldQueryTranslator, QueryTranslator newQueryTranslator) {		// Check the returned types for a regression.		Type[] oldReturnTypes = oldQueryTranslator.getReturnTypes();		Type[] returnTypes = newQueryTranslator.getReturnTypes();		assertEquals( "Return types array is not the right length!", oldReturnTypes.length, returnTypes.length );		for ( int i = 0; i < returnTypes.length; i++ ) {			assertNotNull( returnTypes[i] );			assertNotNull( oldReturnTypes[i] );			assertEquals( "Returned types did not match!", oldReturnTypes[i].getReturnedClass(), returnTypes[i].getReturnedClass() );			System.out.println("returnedType[" + i + "] = " + returnTypes[i] + " oldReturnTypes[" + i + "] = " + oldReturnTypes[i]);		}	}	private void checkQuerySpaces(QueryTranslator oldQueryTranslator, QueryTranslator newQueryTranslator) {		// Check the query spaces for a regression.		Set oldQuerySpaces = oldQueryTranslator.getQuerySpaces();		Set querySpaces = newQueryTranslator.getQuerySpaces();		assertEquals( "Query spaces is not the right size!", oldQuerySpaces.size(), querySpaces.size() );		for ( Iterator iterator = oldQuerySpaces.iterator(); iterator.hasNext(); ) {			Object o = iterator.next();			assertTrue( "New query space does not contain " + o + "!", querySpaces.contains( o ) );		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -