/******************************************************************************* * Copyright (c) 2005, 2015 SAP. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * SAP - initial API and implementation ******************************************************************************/ package org.eclipse.persistence.testing.tests.wdf.jpa1.query; import java.util.Calendar; import java.util.HashSet; import java.util.Set; import javax.persistence.TemporalType; import org.eclipse.persistence.testing.framework.wdf.Bugzilla; import org.eclipse.persistence.testing.framework.wdf.ToBeInvestigated; import org.junit.Test; public class TestConditionalExpressions extends QueryTest { @Test public void testNumericComparisons() { assertValidQuery("SELECT c FROM City c WHERE 5 > 6"); assertValidQuery("SELECT c FROM City c WHERE 5 < 6"); assertValidQuery("SELECT c FROM City c WHERE 5 >= 6"); assertValidQuery("SELECT c FROM City c WHERE 5 <= 6"); assertValidQuery("SELECT c FROM City c WHERE 5 = 6"); assertValidQuery("SELECT c FROM City c WHERE 5 <> 6"); } @Test @ToBeInvestigated public void testEnumComparison0() { assertInvalidQuery("SELECT c FROM City c WHERE c.type < org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); } @Test @ToBeInvestigated public void testEnumComparison1() { assertInvalidQuery("SELECT c FROM City c WHERE c.type >= org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); } @Test @ToBeInvestigated public void testEnumComparison2() { assertInvalidQuery("SELECT c FROM City c WHERE c.type <= org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); } @Test public void testEnumComparison3() { assertValidQuery("SELECT c FROM City c WHERE c.type = org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); } @Test public void testEnumComparison4() { assertValidQuery("SELECT c FROM City c WHERE c.type <> org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); } @Test public void testEnumComparison5() { assertValidQuery("SELECT c FROM City c WHERE c.id IN (SELECT min(c2.id) FROM City c2 WHERE c2.cityEnum = org.eclipse.persistence.testing.models.wdf.jpa1.jpql.City.CityEnum.BLI)"); } @Test @ToBeInvestigated public void testBooleanComparison0() { assertInvalidQuery("SELECT c FROM City c WHERE c.cool > true"); } @Test @ToBeInvestigated public void testBooleanComparison1() { assertInvalidQuery("SELECT c FROM City c WHERE c.cool < true"); } @Test @ToBeInvestigated public void testBooleanComparison2() { assertInvalidQuery("SELECT c FROM City c WHERE c.cool >= true"); } @Test @ToBeInvestigated public void testBooleanComparison3() { assertInvalidQuery("SELECT c FROM City c WHERE c.cool <= true"); } @Test public void testBooleanComparison4() { assertValidQuery("SELECT c FROM City c WHERE c.cool = true"); } @Test public void testBooleanComparison5() { assertValidQuery("SELECT c FROM City c WHERE c.cool <> true"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) public void testCurrentDateTimeComparison() { assertValidQuery("SELECT c FROM City c WHERE current_time > current_time"); assertValidQuery("SELECT c FROM City c WHERE current_time < current_time"); assertValidQuery("SELECT c FROM City c WHERE current_date >= current_date"); assertValidQuery("SELECT c FROM City c WHERE current_timestamp <= current_timestamp"); assertValidQuery("SELECT c FROM City c WHERE current_time = current_time"); assertValidQuery("SELECT c FROM City c WHERE current_time <> current_time"); } @Test public void testPersistentObjectComparison0() { assertInvalidQuery("SELECT c FROM City c WHERE c > c"); } @Test public void testPersistentObjectComparison1() { assertInvalidQuery("SELECT c FROM City c WHERE c < c"); } @Test public void testPersistentObjectComparison2() { assertInvalidQuery("SELECT c FROM City c WHERE c >= c"); } @Test public void testPersistentObjectComparison3() { assertInvalidQuery("SELECT c FROM City c WHERE c <= c"); } @Test public void testPersistentObjectComparison4() { assertValidQuery("SELECT c FROM City c WHERE c = c"); } @Test public void testPersistentObjectComparison5() { assertValidQuery("SELECT c FROM City c WHERE c <> c"); } @Test public void testSimpleTypeComparisonHandling() { Set<InputParameterHolder> par1 = new HashSet<InputParameterHolder>(); par1.add(new InputParameterHolder("parameter1", Calendar.getInstance(), TemporalType.TIMESTAMP)); assertValidQueryWithParameters("SELECT btfa FROM BasicTypesFieldAccess btfa WHERE btfa.utilCalendar = :parameter1", par1); assertValidQuery("SELECT c FROM City c WHERE (1 + (2 + 3) / 1 * 2) - 5 > -1"); assertValidQuery("SELECT c FROM City c WHERE 'bla' = (SELECT p.string FROM Person p)"); assertValidQuery("SELECT c FROM City c WHERE 'bla' = ALL(SELECT p.string FROM Person p)"); assertValidQuery("SELECT p FROM Person p WHERE 'bla' = p.string"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = all.com.sap.ejbqlparser.test.Scale.STILL_ROCK"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = p.integer.p"); assertValidQuery("SELECT p FROM Person p WHERE 'bla' = ?1"); assertValidQuery("SELECT p FROM Person p WHERE 'bla' = :one"); //assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.STILL_ROCK"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.NO_FIELD"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = MAX(p._float)"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = AVG(p.integer)"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = SUM(p.bigInteger)"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = SUM(p.integer)"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = SUM(p._float)"); assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = COUNT(p._float)"); assertValidQuery("SELECT c FROM City c WHERE (SELECT p.string FROM Person p) = 'bla'"); assertValidQuery("SELECT p FROM Person p HAVING 'bla' = MIN(p.string)"); assertValidQuery("SELECT p FROM Person p WHERE p.string = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE all.com.sap.ejbqlparser.test.Scale.STILL_ROCK = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE p.integer.p = 'bla'"); assertValidQuery("SELECT p FROM Person p WHERE ?1 = 'bla'"); assertValidQuery("SELECT p FROM Person p WHERE :one = 'bla'"); //assertInvalidQuery("SELECT p FROM Person p WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.STILL_ROCK = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.NO_FIELD = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE MAX(p._float) = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE AVG(p.integer) = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE SUM(p.bigInteger) = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE SUM(p.integer) = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE SUM(p._float) = 'bla'"); assertInvalidQuery("SELECT p FROM Person p WHERE COUNT(p._float) = 'bla'"); // TODO mapper: boolean literal in comparison with subquery // assertValidQuery("SELECT c FROM City c WHERE (SELECT p._boolean FROM Person p) = true"); // assertValidQuery("SELECT c FROM City c WHERE (SELECT p._Boolean FROM Person p) = true"); // assertValidQuery("SELECT c FROM City c WHERE ALL(SELECT p._Boolean FROM Person p) = true"); // assertValidQuery("SELECT c FROM City c WHERE SOME(SELECT p._boolean FROM Person p) = true"); // TODO: mapper/parser: boolean comparison with input parameter // assertValidQuery("SELECT p FROM Person p WHERE true = ?1"); // assertValidQuery("SELECT p FROM Person p WHERE true = :one"); assertValidQuery("SELECT p FROM Person p WHERE true = p._boolean"); assertValidQuery("SELECT p FROM Person p WHERE true = p._Boolean"); // assertValidQuery("SELECT p FROM Person p WHERE ?1 = false"); // assertValidQuery("SELECT p FROM Person p WHERE :one = false"); assertValidQuery("SELECT p FROM Person p WHERE p._boolean = false"); assertValidQuery("SELECT p FROM Person p WHERE p._Boolean = false"); assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.integer FROM Person p1) + 1 = 2"); assertValidQuery("SELECT p FROM Person p WHERE 1 + (SELECT p1.integer FROM Person p1) = 2"); //assertInvalidQuery("SELECT p FROM Person p WHERE -(SELECT p1.integer FROM Person p1) > 2"); // TODO fix enum-handling in mapper // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> ALL(SELECT c1.type FROM City c1)"); // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> (SELECT c1.type FROM City c1)"); // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> c.type"); // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> ?1"); // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> :one"); // assertValidQuery("SELECT c FROM City c WHERE (SELECT c1.type FROM City c1) <> org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); assertValidQuery("SELECT c FROM City c WHERE c.type <> org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); // TODO check input-parameter and enum-handling of mapper // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> ?1"); // assertValidQuery("SELECT c FROM City c WHERE :one <> org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); // assertValidQuery("SELECT c FROM City c WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY <> :one"); // assertValidQuery("SELECT c FROM City c WHERE ?1 <> org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY"); assertValidQuery("SELECT p FROM Person p WHERE p.sqlTime >= (SELECT p1.sqlTime FROM Person p1)"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling1() { assertInvalidQuery("SELECT c FROM City c WHERE 'bla' = (SELECT p.integer FROM Person p)"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling2() { assertInvalidQuery("SELECT c FROM City c WHERE 'bla' = ANY(SELECT p.integer FROM Person p)"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling3() { assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = p.integer"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling4() { assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = -(2 + 3)"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling5() { assertInvalidQuery("SELECT c FROM City c WHERE (SELECT p.integer FROM Person p) = 'bla'"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling6() { assertInvalidQuery("SELECT p FROM Person p WHERE p.integer = 'bla'"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling7() { assertInvalidQuery("SELECT p FROM Person p WHERE -(2 + 3) = 'bla'"); } @Test @ToBeInvestigated public void testSimpleTypeComparisonHandling8() { assertValidQuery("SELECT p FROM Person p WHERE MIN(p.string) = 'bla'"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) public void testSimpleComparisonHandlingExcludingOpenSQL() { assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIMESTAMP >= ALL(SELECT p1.sqlTimestamp FROM Person p1)"); assertValidQuery("SELECT p FROM Person p WHERE CURRENT_DATE >= SOME(SELECT p1.sqlDate FROM Person p1)"); assertValidQuery("SELECT p FROM Person p WHERE p.sqlTimestamp <= CURRENT_TIMESTAMP"); assertValidQuery("SELECT p FROM Person p WHERE 'bla' = LOWER('BLA')"); assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIMESTAMP >= p.sqlTimestamp"); assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIMESTAMP >= ?1"); assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIMESTAMP >= :one"); assertValidQuery("SELECT p FROM Person p WHERE LOWER('BLA') = 'bla'"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQL1() { assertValidQuery("SELECT p FROM Person p WHERE +p.integer + -5 * -(p.integer + 5) / -LENGTH(p.string) * -MAX(p._float) + +?1 = +p.integer + -5 * -(p.integer + 5) / -LOCATE(p.string, 'bla') * -AVG(p._float) + +?1"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQL2() { assertValidQuery("SELECT p FROM Person p WHERE MAX(p.sqlDate) <= CURRENT_DATE"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQL3() { assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' = CURRENT_DATE"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQL4() { assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIMESTAMP >= MAX(p.sqlTimestamp)"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQL5() { assertInvalidQuery("SELECT p FROM Person p WHERE CURRENT_DATE = 'bla'"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle0() { assertValidQuery("SELECT p FROM Person p WHERE ?1 <= CURRENT_TIME"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle1() { assertValidQuery("SELECT p FROM Person p WHERE :one <= CURRENT_TIME"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle2() { assertInvalidQuery("SELECT p FROM Person p WHERE CURRENT_TIME = false"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) @ToBeInvestigated public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle3() { assertInvalidQuery("SELECT p FROM Person p WHERE true = CURRENT_TIME"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle4() { assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.sqlTime FROM Person p1) <= CURRENT_TIME"); } @Test // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.ORACLE }) public void testSimpleComparisonHandlingExcludingOpenSQLAndOracle5() { assertValidQuery("SELECT p FROM Person p WHERE CURRENT_TIME >= ANY(SELECT p1.sqlTime FROM Person p1)"); } @Test public void testBeanComparisonHandling() { assertValidQuery("SELECT p FROM Person p WHERE p.city = ALL(Select c FROM City c)"); assertValidQuery("SELECT p FROM Person p WHERE p.city = (Select c FROM City c)"); assertValidQuery("SELECT p FROM Person p, City c WHERE p.city = c"); assertValidQuery("SELECT p FROM Person p WHERE p.city = ?1"); assertValidQuery("SELECT p FROM Person p WHERE ?1 = p.city"); assertValidQuery("SELECT p FROM Person p WHERE p.city = :one"); assertValidQuery("SELECT p FROM Person p WHERE :one = p.city"); assertValidQuery("SELECT p FROM Person p, City c WHERE c = p.city"); assertValidQuery("SELECT p FROM Person p WHERE (Select c FROM City c) = p.city"); assertValidQuery("SELECT p FROM Person p, City c WHERE p.city = (c) and true = true or (false = true and 5 = 6)"); } @Test @ToBeInvestigated public void testBetweenHandling0() { assertValidQuery("SELECT p FROM Person p WHERE p.id BETWEEN (SELECT p1.integer FROM Person p1) AND AVG(p._float)"); } @Test public void testBetweenHandling1() { assertValidQuery("SELECT p FROM Person p WHERE 5 BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling2() { assertInvalidQuery("SELECT p FROM Person p WHERE p BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling3() { assertInvalidQuery("SELECT p FROM Person p WHERE p.city.type BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling4() { assertValidQuery("SELECT p FROM Person p WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY BETWEEN 'bla' AND 'bla'"); } @Test @ToBeInvestigated public void testBetweenHandling5() { assertValidQuery("SELECT p FROM Person p WHERE 5 BETWEEN 2 AND MIN(p.integer)"); } @Test @ToBeInvestigated public void testBetweenHandling6() { assertValidQuery("SELECT p FROM Person p WHERE MAX(p.string) BETWEEN ?1 AND (SELECT p1.string FROM Person p1)"); } @Test @ToBeInvestigated public void testBetweenHandling7() { assertValidQuery("SELECT p FROM Person p WHERE p.id NOT BETWEEN (SELECT p1.integer FROM Person p1) AND AVG(p._float)"); } @Test public void testBetweenHandling8() { assertValidQuery("SELECT p FROM Person p WHERE 5 NOT BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling9() { assertInvalidQuery("SELECT p FROM Person p WHERE p NOT BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling10() { assertInvalidQuery("SELECT p FROM Person p WHERE p.city.type NOT BETWEEN 'bla' AND 'bla'"); } @Test public void testBetweenHandling11() { assertValidQuery("SELECT p FROM Person p WHERE org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY NOT BETWEEN 'bla' AND 'bla'"); } @Test @ToBeInvestigated public void testBetweenHandling12() { assertValidQuery("SELECT p FROM Person p WHERE 5 NOT BETWEEN 2 AND MIN(p.integer)"); } @Test @ToBeInvestigated public void testBetweenHandling13() { assertValidQuery("SELECT p FROM Person p WHERE MAX(p.string) NOT BETWEEN ?1 AND (SELECT p1.string FROM Person p1)"); } @Test public void testPlatformDependendBetweenHandling0() { assertValidQuery("SELECT p FROM Person p WHERE 2 + 3 BETWEEN LENGTH('bla') AND ?1"); } @Test @ToBeInvestigated public void testPlatformDependendBetweenHandling1() { assertValidQuery("SELECT p FROM Person p WHERE p.sqlTimestamp BETWEEN CURRENT_TIMESTAMP AND p.sqlTimestamp"); } @Test @ToBeInvestigated public void testPlatformDependendBetweenHandling2() { assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.string FROM Person p1) BETWEEN MIN(p.string) AND LOWER('bla')"); } @Test public void testPlatformDependendBetweenHandling3() { assertValidQuery("SELECT p FROM Person p WHERE p.sqlTimestamp NOT BETWEEN CURRENT_TIMESTAMP AND p.sqlTimestamp"); } @Test @ToBeInvestigated public void testPlatformDependendBetweenHandling4() { assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.string FROM Person p1) NOT BETWEEN MIN(p.string) AND LOWER('bla')"); } @Test @ToBeInvestigated public void testLikeHandling00() { assertInvalidQuery("SELECT p FROM Person p WHERE 5 LIKE 'bla' ESCAPE 'c'"); } @Test @ToBeInvestigated public void testLikeHandling01() { assertInvalidQuery("SELECT p FROM Person p WHERE p.city.type LIKE 'bla' ESCAPE 'c'"); } @Test public void testLikeHandling02() { assertValidQuery("SELECT p FROM Person p WHERE p.string LIKE 'bla' ESCAPE 'c'"); } @Test public void testLikeHandling03() { assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.string FROM Person p1) LIKE 'bla' ESCAPE 'c'"); } @Test @ToBeInvestigated public void testLikeHandling04() { assertValidQuery("SELECT p FROM Person p WHERE MAX(p.string) LIKE 'bla'"); } @Test public void testLikeHandling05() { assertValidQuery("SELECT p FROM Person p WHERE 'bla' LIKE ?1"); } @Test public void testLikeHandling06() { assertValidQuery("SELECT p FROM Person p WHERE 'bla' LIKE ?1"); } @Test public void testLikeHandling07() { assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' LIKE 'bla' ESCAPE 'bla'"); } @Test public void testLikeHandling08() { assertValidQuery("SELECT p FROM Person p WHERE 'bla' LIKE 'bla' ESCAPE ?1"); } @Test @ToBeInvestigated public void testLikeHandling09() { assertInvalidQuery("SELECT p FROM Person p WHERE 5 NOT LIKE 'bla' ESCAPE 'c'"); } @Test @ToBeInvestigated public void testLikeHandling10() { assertInvalidQuery("SELECT p FROM Person p WHERE p.city.type NOT LIKE 'bla' ESCAPE 'c'"); } @Test public void testLikeHandling11() { assertValidQuery("SELECT p FROM Person p WHERE p.string NOT LIKE 'bla' ESCAPE 'c'"); } @Test public void testLikeHandling12() { assertValidQuery("SELECT p FROM Person p WHERE (SELECT p1.string FROM Person p1) NOT LIKE 'bla' ESCAPE 'c'"); } @Test @ToBeInvestigated public void testLikeHandling13() { assertValidQuery("SELECT p FROM Person p WHERE MAX(p.string) NOT LIKE 'bla'"); } @Test public void testLikeHandling14() { assertValidQuery("SELECT p FROM Person p WHERE 'bla' NOT LIKE ?1"); } @Test public void testLikeHandling15() { assertInvalidQuery("SELECT p FROM Person p WHERE 'bla' NOT LIKE 'bla' ESCAPE 'bla'"); } @Test public void testLikeHandling16() { assertValidQuery("SELECT p FROM Person p WHERE 'bla' NOT LIKE 'bla' ESCAPE ?1"); } // @TestProperties(unsupportedDatabaseVendors = { DatabaseVendor.OPEN_SQL, // DatabaseVendor.SAPDB }) public void testLikeHandlingExcludingOpenSQL() { assertInvalidQuery("SELECT p FROM Person p WHERE LOWER(p.string) LIKE UPPER(p.string)"); assertValidQuery("SELECT p FROM Person p WHERE LOWER(p.string) LIKE '%foobar%'"); } @Test public void testInHandling() { assertInvalidQuery("select p from Person as p where p.city in (2, 3, 4)"); assertInvalidQuery("select p from Person as p where CURRENT_DATE in (2, 3, 4)"); assertValidQuery("select p from Person as p where p._float in (2, 3, 4.4, :one)"); //assertInvalidQuery("select p from Person as p where p._float in (2, 'bla', 4.4)"); //assertInvalidQuery("select p from Person as p where p.city.type in (org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Metal.DEATH)"); assertValidQuery("select p from Person as p where p.city.type in (select c.type from City as c)"); assertValidQuery("select p from Person as p where p.string in ('2', '3', '4.4', :one)"); assertValidQuery("select p from Person as p where p.string in ('2', '3', '4.4', :one)"); //assertInvalidQuery("select p from Person as p where p.city NOT in (2, 3, 4)"); //assertInvalidQuery("select p from Person as p where CURRENT_DATE Not in (2, 3, 4)"); assertValidQuery("select p from Person as p where p._float nOt in (2, 3, 4.4, :one)"); //assertInvalidQuery("select p from Person as p where p._float noT in (2, 'bla', 4.4)"); //assertInvalidQuery("select p from Person as p where p.city.type not in (org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Metal.DEATH)"); assertValidQueryExecution("select p from Person as p where p.city.type not in (select c.type from City as c)"); assertValidQuery("select p from Person as p where p.string not in ('2', '3', '4.4', :one)"); } @Test public void testInBinary() { byte[] byteArr1 = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; byte[] byteArr2 = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; assertValidQueryExecutionWithArgs("SELECT b FROM BasicTypesFieldAccess b WHERE b.primitiveByteArray2Binary IN(?1,?2)", new Object[] { byteArr1, byteArr2 }); } @Test @ToBeInvestigated public void testInHandling0() { assertInvalidQuery("select p from Person as p where 2 in (2, 3, 4)"); } @Test public void testInHandling1() { assertValidQuery("select p from Person as p where p.city.type in (org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY, org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.STUCK_TURTLE, org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUNNING_ELEPHAN, :one)"); } @Test @ToBeInvestigated public void testInHandling2() { assertInvalidQuery("select p from Person as p where 2 not in (2, 3, 4)"); } @Test public void testInHandling3() { assertValidQuery("select p from Person as p where p.city.type not in (org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUSH_PIGSTY, org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.STUCK_TURTLE, org.eclipse.persistence.testing.models.wdf.jpa1.jpql.Scale.RUNNING_ELEPHAN, :one)"); } @Test @ToBeInvestigated public void testInHandling4() { byte[] byteArr1 = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 }; byte[] byteArr2 = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8 }; String queryString = "SELECT p FROM PrincipalEntity p WHERE p.taskInstance.taskInstanceId IN (?1,?2)"; assertValidQueryExecutionWithArgs(queryString, new Object[] { byteArr1, byteArr2 }); } @Test public void testIsNullHandling0() { assertValidQuery("select p from Person as p where p.city is null"); } @Test public void testIsNullHandling1() { assertValidQuery("select p from Person as p where :one is null"); } @Test public void testIsNullHandling2() { assertValidQuery("select p from Person as p where p is null"); } @Test public void testIsNullHandling3() { assertInvalidQuery("select p from Person as p where p.city.cops is null"); } @Test @ToBeInvestigated public void testIsNullHandling4() { assertInvalidQuery("select p from Person as p where 2 + 3 is null"); } @Test public void testIsNullHandling5() { assertValidQuery("select p from Person as p where p.city is not null"); } @Test public void testIsNullHandling6() { assertValidQuery("select p from Person as p where :one is not null"); } @Test public void testIsNullHandling7() { assertValidQuery("select p from Person as p where p is not null"); } @Test public void testIsNullHandling8() { assertInvalidQuery("select p from Person as p where p.city.cops is NOT null"); } @Test @ToBeInvestigated public void testIsNullHandling9() { assertInvalidQuery("select p from Person as p where 2 + 3 is not null"); } @Test public void testIsEmptyHandling0() { assertInvalidQuery("select p from Person p where p.city is empty"); } @Test @ToBeInvestigated public void testIsEmptyHandling1() { assertInvalidQuery("select p from Person p where p is empty"); } @Test public void testIsEmptyHandling2() { assertValidQuery("select c from Criminal c where c.attachedCop.partner.partner.partner.attachedCriminals is empty"); } @Test @ToBeInvestigated public void testIsEmptyHandling3() { assertInvalidQuery("select p from Person p where (2 * 4) is empty"); } @Test public void testIsEmptyHandling4() { assertInvalidQuery("select p from Person p where p.city.rivers is empty"); } @Test public void testIsEmptyHandling5() { assertInvalidQuery("select p from Person p where p.city is not empty"); } @Test @ToBeInvestigated public void testIsEmptyHandling6() { assertInvalidQuery("select p from Person p where p is NOT empty"); } @Test public void testIsEmptyHandling7() { assertValidQuery("select c from Criminal c where c.attachedCop.partner.partner.partner.informers is not empty"); } @Test @ToBeInvestigated public void testIsEmptyHandling8() { assertInvalidQuery("select p from Person p where (2 * 4) is not empty"); } @Test public void testIsEmptyHandling9() { assertInvalidQuery("select p from Person p where p.city.rivers is not empty"); } @Test public void testMemberOfHandling() { assertInvalidQuery("select cri from Criminal cri, City c where cri.attachedCop member c.criminals"); assertInvalidQuery("select cri from Criminal cri, City c where cri member c.rivers"); assertInvalidQuery("select cri from Criminal cri, City c where 5 member c.rivers"); assertInvalidQuery("select p from City c, Person p where p.integer member c.criminals"); assertValidQuery("select c from City c where :one member OF c.criminals"); assertInvalidQuery("select c from City c where (select p from Person p) member OF c.criminals"); assertInvalidQuery("select c from City c where avg(c.id) member OF c.criminals"); assertValidQuery("select cri from Criminal cri, City c where cri.attachedCop not member of c.cops"); assertInvalidQuery("select cri from Criminal cri, City c where cri.attachedCop not member c.criminals"); assertValidQuery("select cri from Criminal cri, City c where cri not member c.criminals"); assertInvalidQuery("select cri from Criminal cri, City c where cri not member c.rivers"); assertInvalidQuery("select cri from Criminal cri, City c where 5 NOT member c.rivers"); assertInvalidQuery("select p from City c, Person p where p.integer not member c.criminals"); assertValidQuery("select c from City c where :one not member OF c.criminals"); assertInvalidQuery("select c from City c where (select p from Person p) not member OF c.criminals"); assertInvalidQuery("select c from City c where avg(c.id) not member OF c.criminals"); } @Test public void testMemberOfHandling0() { assertValidQuery("select cri from Criminal cri, City c where cri.attachedCop member of c.cops"); } @Test public void testMemberOfHandling4() { assertValidQuery("select cri from Criminal cri, City c where cri member c.criminals"); } @Test @ToBeInvestigated public void testMemberOfHandling1() { assertInvalidQuery("select p from City c, Person p where p.city.criminals member OF c.criminals"); } @Test public void testMemberOfHandling2() { assertInvalidQuery("select p from City c, Person p where p.city.criminals not member OF c.criminals"); } @Test public void testExistsHandling() { assertValidQuery("select c from City c where exists (select p from Person p)"); assertValidQuery("select c from City c where not exists (select p from Person p)"); } }