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

📄 querytranslatortestcase.java

📁 介绍了hibernate的入门有一些基本常用的事例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// $Id: QueryTranslatorTestCase.java,v 1.25 2005/02/27 13:57:59 oneovthafew Exp $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.classic.Session;import org.hibernate.engine.SessionFactoryImplementor;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.classic.ClassicQueryTranslatorFactory;import org.hibernate.test.TestCase;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 TestCase {	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 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, HashMap 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, 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 );	}	private void assertTranslation(String hql, HashMap 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, 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...");			QueryTranslatorFactory ast = new ASTQueryTranslatorFactory();			newQueryTranslator = ast.createQueryTranslator( hql, Collections.EMPTY_MAP, factory );			newQueryTranslator.compile( 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 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 ) );		}	}	protected Exception compileBadHql(String hql, boolean scalar) {		QueryTranslator newQueryTranslator;		Map replacements = null;		Exception newException = null;		SessionFactoryImplementor factory = getSessionFactoryImplementor();		try {			QueryTranslatorFactory ast = new ASTQueryTranslatorFactory();			newQueryTranslator = ast.createQueryTranslator( hql, Collections.EMPTY_MAP, factory );			newQueryTranslator.compile( replacements, scalar );		}		catch ( QueryException e ) {			newException = e;		}		catch ( MappingException e ) {			newException = e;		}		assertNotNull( "Expected exception from compilation of '" + hql + "'!", newException );		return newException;	}	private void checkSql(QueryTranslator oldQueryTranslator, QueryTranslator newQueryTranslator, String hql, boolean scalar, String sql) {		String oldsql = oldQueryTranslator.getSQLString();		String newsql = newQueryTranslator.getSQLString();		System.out.println( "HQL    : " + hql );		System.out.println( "OLD SQL: " + oldsql );		System.out.println( "NEW SQL: " + newsql );		if ( sql == null ) {			// Check the generated SQL.			assertSQLEquals( "SQL is not the same as the old SQL (scalar=" + scalar + ")", oldsql, newsql );		}		else {			assertSQLEquals( "SQL is not the same as the expected SQL (scalar=" + scalar + ")", sql, newsql );		}	}	private void assertSQLEquals(String message, String oldsql, String newsql) {		Map oldMap = getTokens(oldsql);		Map newMap = getTokens(newsql);		if ( !oldMap.equals(newMap) ) {			assertEquals(message, oldsql, newsql);					}				//String oldsqlStripped = stripExtraSpaces( oldsql );		//String newsqlStripped = stripExtraSpaces( newsql );		//assertEquals( message, oldsqlStripped, newsqlStripped );	}		private Map getTokens(String sql) {		Map result = new TreeMap();		if (sql==null) return result;		result.put( "=", new Integer( StringHelper.countUnquoted(sql, '=') ) );		StringTokenizer tokenizer = new StringTokenizer( sql, "(),= " );		while ( tokenizer.hasMoreTokens() ) {			String fragment = tokenizer.nextToken();			/*if ( "on".equals(fragment) ) fragment = "and";			if ( "join".equals(fragment) || "inner".equals(fragment) ) continue;*/			Integer count = (Integer) result.get(fragment);			if ( count==null ) {

⌨️ 快捷键说明

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