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

📄 astquerytranslatortest.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
字号:
// $Id: ASTQueryTranslatorTest.java 8889 2005-12-20 17:35:54Z steveebersole $package org.hibernate.test.hql;import junit.framework.Test;import junit.framework.TestSuite;/** * Tests cases where the AST based QueryTranslator does not generate identical SQL. * * @author josh Dec 6, 2004 9:07:58 AM */public class ASTQueryTranslatorTest extends QueryTranslatorTestCase {	public ASTQueryTranslatorTest(String x) {		super( x );	}	public static Test suite() {		return new TestSuite( ASTQueryTranslatorTest.class );	}	protected boolean dropAfterFailure() {		return false;	}	// ##### TESTS THAT DON'T PASS BECAUSE THEY GENERATE DIFFERENT, POSSIBLY VALID SQL #####	public void testSelectManyToOne() {		assertTranslation("select distinct a.zoo from Animal a where a.zoo is not null");		assertTranslation("select a.zoo from Animal a");	}	public void testSelectExpression() {		//old qt cant handle select-clause expressions		assertTranslation("select a.bodyWeight + m.bodyWeight from Animal a join a.mother m");	}		public void testFetchProperties() {		//not implemented in old qt		assertTranslation("from Animal a fetch all properties join a.offspring o fetch all properties");	}		public void testOldSyntax() {		//generates ANSI join instead of theta join		assertTranslation("from a in class Animal, o in elements(a.offspring), h in class Human");	}		public void testImplicitJoinInsideOutsideSubselect() {		// new qt re-uses the joins defined by 's.other.count' path when referenced in the subquery,		// whereas the old qt reuses only the "root table" (not the already defined join to 'other'):		//   OLD SQL :		//      select  simple0_.id_ as col_0_0_		//      from    Simple simple0_,		//              Simple simple1_		//      where   (simple1_.count_>0		//      and     simple0_.other=simple1_.id_)		//      and     (simple0_.id_=some(		//                  select  simple2_.id_		//                  from    Simple simple2_,		//                          Simple simple3_,		//                          Simple simple4_		//                  where   (simple3_.count_=simple4_.count_		//                  and     simple2_.other=simple3_.id_		//                  and     simple0_.other=simple4_.id_)		//              ))		//   NEW SQL :		//      select  simple0_.id_ as col_0_0_		//      from    Simple simple0_,		//              Simple simple1_		//      where   (simple1_.count_>0		//      and     simple0_.id_=some(		//                  select  simple2_.id_		//                  from    Simple simple2_,		//                          Simple simple3_		//                  where   (simple3_.count_=simple1_.count_		//                  and     simple2_.other=simple3_.id_)		//            )		//        and simple0_.other=simple1_.id_)		assertTranslation( "from Simple s where s = some( from Simple sim where sim.other.count=s.other.count ) and s.other.count > 0" );		assertTranslation( "from Simple s where s.other.count > 0 and s = some( from Simple sim where sim.other.count=s.other.count )" );	}	public void testNakedPropertyRef() {		// this is needed for ejb3 selects and bulk statements		//      Note: these all fail because the old parser did not have this		//      feature, it just "passes the tokens through" to the SQL.		assertTranslation( "from Animal where bodyWeight = bodyWeight" );		assertTranslation( "select bodyWeight from Animal" );		assertTranslation( "select max(bodyWeight) from Animal" );	}	public void testNakedComponentPropertyRef() {		// this is needed for ejb3 selects and bulk statements		//      Note: these all fail because the old parser did not have this		//      feature, it just "passes the tokens through" to the SQL.		assertTranslation( "from Human where name.first = 'Gavin'" );		assertTranslation( "select name from Human" );		assertTranslation( "select upper(h.name.first) from Human as h" );		assertTranslation( "select upper(name.first) from Human" );	}	public void testNakedMapIndex() throws Exception {		assertTranslation( "from Zoo where mammals['dog'].description like '%black%'" );	}	public void testNakedImplicitJoins() {		assertTranslation( "from Animal where mother.father = ?" );	}	public void testDuplicateImplicitJoinInWhere() {		//new qt has more organized joins		assertTranslation("from Human h where h.mother.bodyWeight>10 and h.mother.bodyWeight<10");	}		public void testWhereExpressions() {		assertTranslation("from User u where u.userName='gavin' and u.human.name.first='Gavin'");		//new qt has more organized joins		assertTranslation("from User u where u.human.name.last='King' and u.human.name.first='Gavin'");		assertTranslation("from Bar bar where bar.baz.name='josh'");		assertTranslation("from Bar bar where bar.baz.name='josh' and not bar.baz.name='gavin'");	}		public void testImplicitJoinInSelect() {		//slightly diff select clause, both correct		assertTranslation("select foo.long, foo.foo from Foo foo");	}		public void testSelectStandardFunctions() throws Exception {		//old parser throws an exception		assertTranslation( "select current_date(), current_time(), current_timestamp() from Animal" );	}	public void testSelectClauseImplicitJoin() throws Exception {		//the old query translator has a bug which results in the wrong return type!		assertTranslation( "select d.owner.mother from Dog d" );	}	public void testComplexWhereExpression() throws Exception {		// classic QT generates lots of extra parens and some extra theta joins.		assertTranslation( "select distinct s from Simple s\n" +				"where ( ( s.other.count + 3 ) = (15*2)/2 and s.count = 69) or ( ( s.other.count + 2 ) / 7 ) = 2" );	}	public void testDuplicateImplicitJoin() throws Exception {		// old qt generates an extra theta join		assertTranslation( "from Animal an where an.mother.bodyWeight > 10 and an.mother.bodyWeight < 20" );	}	public void testKeywordClassNameAndAlias() throws Exception {		// The old QT throws an exception, the new one doesn't, which is better		assertTranslation( "from Order order" );	}	public void testComponent3() throws Exception {		// The old translator generates duplicate inner joins *and* duplicate theta join clauses in the where statement in this case.		assertTranslation( "from Dog dog where dog.owner.name.first = 'Gavin' and dog.owner.name.last='King' and dog.owner.bodyWeight<70" );	}	public void testUncorrelatedSubselectWithJoin() throws Exception {		// The old translator generates unnecessary inner joins for the Animal subclass of zoo.mammals		// The new one is working fine now!		assertTranslation( "from Animal a where a in (select mam from Zoo zoo join zoo.mammals mam)" );	}	public void testFetch() throws Exception {		//SQL is correct, new qt is not throwing an exception when it should be (minor issue)		assertTranslation("from Customer cust left join fetch cust.billingAddress where cust.customerId='abc123'");	}	public void testImplicitJoin() throws Exception {		//old qt generates an exception, the new one doesnt 		//this is actually invalid HQL, an implicit join on a many-valued association		assertTranslation( "from Animal an where an.offspring.mother.bodyWeight > 10" );	}}

⌨️ 快捷键说明

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