/* * Copyright 2014 - 2017 Blazebit. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.blazebit.persistence.testsuite; import static com.googlecode.catchexception.CatchException.verifyException; import static org.junit.Assert.assertEquals; import org.junit.Test; import com.blazebit.persistence.CriteriaBuilder; import com.blazebit.persistence.testsuite.AbstractCoreTest; import com.blazebit.persistence.testsuite.entity.Document; import com.blazebit.persistence.testsuite.entity.Person; /** * * @author Christian Beikov * @author Moritz Becker * @since 1.0 */ public class GreaterTest extends AbstractCoreTest { @Test public void testGt() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); criteria.where("d.age").gt(20L); assertEquals("SELECT d FROM Document d WHERE d.age > :param_0", criteria.getQueryString()); criteria.getResultList(); } @Test public void testGtNull() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); verifyException(criteria.where("d.age"), NullPointerException.class).gt(null); } @Test public void testGtExpression() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); criteria.where("d.age").gtExpression("d.owner.age"); assertEquals("SELECT d FROM Document d JOIN d.owner owner_1 WHERE d.age > owner_1.age", criteria.getQueryString()); criteria.getResultList(); } @Test public void testGtExpressionNull() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); verifyException(criteria.where("d.age"), NullPointerException.class).gtExpression(null); } @Test public void testGe() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); criteria.where("d.age").ge(20L); assertEquals("SELECT d FROM Document d WHERE d.age >= :param_0", criteria.getQueryString()); criteria.getResultList(); } @Test public void testGeNull() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); verifyException(criteria.where("d.age"), NullPointerException.class).ge(null); } @Test public void testGeExpression() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); criteria.where("d.age").geExpression("d.owner.age"); assertEquals("SELECT d FROM Document d JOIN d.owner owner_1 WHERE d.age >= owner_1.age", criteria.getQueryString()); criteria.getResultList(); } @Test public void testGeExpressionNull() { CriteriaBuilder<Document> criteria = cbf.create(em, Document.class, "d"); verifyException(criteria.where("d.age"), NullPointerException.class).geExpression(null); } @Test public void testGeAll() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").ge().all().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id >= ALL(SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); crit.getResultList(); } @Test public void testGeAny() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").ge().any().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id >= ANY(SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); crit.getResultList(); } @Test public void testGeOne() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").ge().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id >= (SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); crit.getResultList(); } @Test public void testGtAll() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").gt().all().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id > ALL(SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); } @Test public void testGtAny() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").gt().any().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id > ANY(SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); } @Test public void testGtOne() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("id").gt().from(Person.class, "p").select("id").where("name").eqExpression("d.name").end(); String expected = "SELECT d FROM Document d WHERE d.id > (SELECT p.id FROM Person p WHERE p.name = d.name)"; assertEquals(expected, crit.getQueryString()); } @Test public void testGtSubqueryWithSurroundingExpression() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("age").gt("alias", "1 + alias").from(Person.class, "p").select("COUNT(id)").end(); assertEquals("SELECT d FROM Document d WHERE d.age > 1 + (SELECT COUNT(p.id) FROM Person p)", crit.getQueryString()); crit.getResultList(); } @Test public void testGtMultipleSubqueryWithSurroundingExpression() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("age").gt("alias", "alias * alias").from(Person.class, "p").select("COUNT(id)").end(); assertEquals("SELECT d FROM Document d WHERE d.age > (SELECT COUNT(p.id) FROM Person p) * (SELECT COUNT(p.id) FROM Person p)", crit.getQueryString()); crit.getResultList(); } @Test public void testGeSubqueryWithSurroundingExpression() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("age").ge("alias", "1 + alias").from(Person.class, "p").select("COUNT(id)").end(); assertEquals("SELECT d FROM Document d WHERE d.age >= 1 + (SELECT COUNT(p.id) FROM Person p)", crit.getQueryString()); crit.getResultList(); } @Test public void testGeMultipleSubqueryWithSurroundingExpression() { CriteriaBuilder<Document> crit = cbf.create(em, Document.class, "d"); crit.where("age").ge("alias", "alias * alias").from(Person.class, "p").select("COUNT(id)").end(); assertEquals("SELECT d FROM Document d WHERE d.age >= (SELECT COUNT(p.id) FROM Person p) * (SELECT COUNT(p.id) FROM Person p)", crit.getQueryString()); crit.getResultList(); } }