parent
62b98712d4
commit
ac93c1d213
|
@ -0,0 +1,111 @@
|
||||||
|
/*
|
||||||
|
* 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.orm.test.query.hql;
|
||||||
|
|
||||||
|
import org.hibernate.orm.test.query.sqm.BaseSqmUnitTest;
|
||||||
|
import org.hibernate.orm.test.query.sqm.domain.Person;
|
||||||
|
import org.hibernate.query.ComparisonOperator;
|
||||||
|
import org.hibernate.query.sqm.tree.domain.SqmPath;
|
||||||
|
import org.hibernate.query.sqm.tree.expression.SqmCollectionSize;
|
||||||
|
import org.hibernate.query.sqm.tree.expression.SqmLiteral;
|
||||||
|
import org.hibernate.query.sqm.tree.predicate.SqmNullnessPredicate;
|
||||||
|
import org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate;
|
||||||
|
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
|
||||||
|
import org.hibernate.query.sqm.tree.select.SqmSelectStatement;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.domain.gambit.EntityOfLists;
|
||||||
|
import org.hibernate.testing.orm.domain.gambit.EntityOfMaps;
|
||||||
|
import org.hibernate.testing.orm.domain.gambit.EntityOfSets;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||||
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for elements of WHERE clauses.
|
||||||
|
*
|
||||||
|
* @author Gunnar Morling
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("WeakerAccess")
|
||||||
|
public class WhereClauseTests extends BaseSqmUnitTest {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {
|
||||||
|
Person.class,
|
||||||
|
EntityOfLists.class,
|
||||||
|
EntityOfSets.class,
|
||||||
|
EntityOfMaps.class,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIsNotNullPredicate() {
|
||||||
|
SqmSelectStatement statement = interpretSelect( "select l from Person l where l.nickName is not null" );
|
||||||
|
assertThat( statement.getQuerySpec().getWhereClause().getPredicate(), instanceOf( SqmNullnessPredicate.class ) );
|
||||||
|
SqmNullnessPredicate predicate = (SqmNullnessPredicate) statement.getQuerySpec().getWhereClause().getPredicate();
|
||||||
|
assertThat( predicate.isNegated(), is(true) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotIsNullPredicate() {
|
||||||
|
SqmSelectStatement statement = interpretSelect( "select l from Person l where not l.nickName is null" );
|
||||||
|
assertThat( statement.getQuerySpec().getWhereClause().getPredicate(), instanceOf( SqmNullnessPredicate.class ) );
|
||||||
|
SqmNullnessPredicate predicate = (SqmNullnessPredicate) statement.getQuerySpec().getWhereClause().getPredicate();
|
||||||
|
assertThat( predicate.isNegated(), is(true) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotIsNotNullPredicate() {
|
||||||
|
SqmSelectStatement statement = interpretSelect( "select l from Person l where not l.nickName is not null" );
|
||||||
|
assertThat( statement.getQuerySpec().getWhereClause().getPredicate(), instanceOf( SqmNullnessPredicate.class ) );
|
||||||
|
SqmNullnessPredicate predicate = (SqmNullnessPredicate) statement.getQuerySpec().getWhereClause().getPredicate();
|
||||||
|
assertThat( predicate.isNegated(), is(false) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCollectionSizeFunction() {
|
||||||
|
SqmSelectStatement statement = interpretSelect( "SELECT t FROM EntityOfSets t WHERE SIZE( t.setOfBasics ) = 311" );
|
||||||
|
|
||||||
|
SqmPredicate predicate = statement.getQuerySpec().getWhereClause().getPredicate();
|
||||||
|
assertThat( predicate, instanceOf( SqmComparisonPredicate.class ) );
|
||||||
|
SqmComparisonPredicate relationalPredicate = ( (SqmComparisonPredicate) predicate );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getSqmOperator(), is( ComparisonOperator.EQUAL ) );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getRightHandExpression(), instanceOf( SqmLiteral.class ) );
|
||||||
|
assertThat( ( (SqmLiteral) relationalPredicate.getRightHandExpression() ).getLiteralValue(), is( 311 ) );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getLeftHandExpression(), instanceOf( SqmCollectionSize.class ) );
|
||||||
|
|
||||||
|
final SqmCollectionSize func = (SqmCollectionSize) relationalPredicate.getLeftHandExpression();
|
||||||
|
assertThat( func.getPluralPath().getLhs().getExplicitAlias(), is( "t" ) );
|
||||||
|
assertThat( func.getPluralPath().getReferencedPathSource().getPathName(), is( "setOfBasics" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListIndexFunction() {
|
||||||
|
SqmSelectStatement statement = interpretSelect( "select l from EntityOfLists t join t.listOfBasics l where index(l) > 2" );
|
||||||
|
|
||||||
|
SqmPredicate predicate = statement.getQuerySpec().getWhereClause().getPredicate();
|
||||||
|
assertThat( predicate, instanceOf( SqmComparisonPredicate.class ) );
|
||||||
|
SqmComparisonPredicate relationalPredicate = ( (SqmComparisonPredicate) predicate );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getSqmOperator(), is( ComparisonOperator.GREATER_THAN ) );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getRightHandExpression(), instanceOf( SqmLiteral.class ) );
|
||||||
|
assertThat( ( (SqmLiteral) relationalPredicate.getRightHandExpression() ).getLiteralValue(), is( 2 ) );
|
||||||
|
|
||||||
|
assertThat( relationalPredicate.getLeftHandExpression(), instanceOf( SqmPath.class ) );
|
||||||
|
final SqmPath indexPath = (SqmPath) relationalPredicate.getLeftHandExpression();
|
||||||
|
|
||||||
|
assertThat( indexPath.getLhs(), notNullValue() );
|
||||||
|
assertThat( indexPath.getLhs().getExplicitAlias(), is( "l" ) );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue