| /* |
| * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation |
| // |
| package org.eclipse.persistence.jpa.tests.jpql; |
| |
| import static org.eclipse.persistence.jpa.jpql.JPQLQueryProblemMessages.*; |
| |
| import java.util.List; |
| |
| import org.eclipse.persistence.jpa.jpql.AbstractGrammarValidator; |
| import org.eclipse.persistence.jpa.jpql.EclipseLinkGrammarValidator; |
| import org.eclipse.persistence.jpa.jpql.EclipseLinkVersion; |
| import org.eclipse.persistence.jpa.jpql.JPQLQueryProblem; |
| import org.eclipse.persistence.jpa.tests.jpql.parser.JPQLQueryStringFormatter; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| |
| /** |
| * The unit-test class used for testing a JPQL query grammatically when the JPA version is 2.1 and |
| * EclipseLink is the persistence provider. The EclipseLink version supported is only 2.4. |
| * |
| * @see EclipseLinkGrammarValidator |
| * |
| * @version 2.5.1 |
| * @since 2.4 |
| * @author Pascal Filion |
| */ |
| @SuppressWarnings("nls") |
| public final class EclipseLinkGrammarValidatorTest2_4 extends AbstractGrammarValidatorTest { |
| |
| private JPQLQueryStringFormatter buildStringFormatter_1() { |
| return new JPQLQueryStringFormatter() { |
| @Override |
| public String format(String jpqlQuery) { |
| return jpqlQuery.replace(",)", ", )"); |
| } |
| }; |
| } |
| |
| private JPQLQueryStringFormatter buildStringFormatter_2() { |
| return new JPQLQueryStringFormatter() { |
| @Override |
| public String format(String query) { |
| return query.replace("firstName)", "firstName )"); |
| } |
| }; |
| } |
| |
| private JPQLQueryStringFormatter buildStringFormatter_3() { |
| return new JPQLQueryStringFormatter() { |
| @Override |
| public String format(String query) { |
| return query.replace(")", " )"); |
| } |
| }; |
| } |
| |
| private JPQLQueryStringFormatter buildStringFormatter_4() { |
| return new JPQLQueryStringFormatter() { |
| @Override |
| public String format(String query) { |
| return query.replace(",", ", "); |
| } |
| }; |
| } |
| |
| private JPQLQueryStringFormatter buildStringFormatter_5() { |
| return new JPQLQueryStringFormatter() { |
| @Override |
| public String format(String query) { |
| return query.replace("(", "( "); |
| } |
| }; |
| } |
| |
| @Override |
| protected AbstractGrammarValidator buildValidator() { |
| return new EclipseLinkGrammarValidator(jpqlGrammar); |
| } |
| |
| @Override |
| protected boolean isJoinFetchIdentifiable() { |
| return true; |
| } |
| |
| protected boolean isNewerThanOrEqual(EclipseLinkVersion version) { |
| EclipseLinkVersion currentVersion = EclipseLinkVersion.value(jpqlGrammar.getProviderVersion()); |
| return currentVersion.isNewerThanOrEqual(version); |
| } |
| |
| @Override |
| protected boolean isSubqueryAllowedAnywhere() { |
| return isNewerThanOrEqual(EclipseLinkVersion.VERSION_2_4); |
| } |
| |
| /** |
| * Check that parsing {@code table('employee') t} returns error. This select expression is invalid. |
| * @throws Exception when test fails. |
| */ |
| @Test |
| public void test_BadExpression_InvalidExpression_4() throws Exception { |
| |
| final String jpqlQuery = "select e from Employee e where e.id in (select table('employee') t from Employee e)"; |
| final int startPosition = "select e from Employee e where e.id in (select ".length() - 1; |
| final int endPosition = "select e from Employee e where e.id in (select table('employee') t".length() - 1; |
| |
| final List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| AbstractSelectClause_InvalidSelectExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| /** |
| * Check that parsing {@code table('employee').id t} returns error. This select expression is invalid. |
| * @throws Exception when test fails. |
| */ |
| @Test |
| public void test_BadExpression_InvalidExpression_5() throws Exception { |
| |
| final String jpqlQuery = "select e from Employee e where e.id in (select table('employee').id t from Employee e)"; |
| final int startPosition = "select e from Employee e where e.id in (select ".length() - 1; |
| final int endPosition = "select e from Employee e where e.id in (select table('employee').id".length() - 1; |
| |
| final List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| BadExpression_InvalidExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_InvalidExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_InvalidExpression); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingDatabaseType); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingDatabaseType); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName) from Employee e"; |
| int startPosition = "Select cast(e.firstName".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName ) from Employee e"; |
| int startPosition = "Select cast(e.firstName ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_2()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_5() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as) from Employee e"; |
| int startPosition = "Select cast(e.firstName as".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_6() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as ) from Employee e"; |
| int startPosition = "Select cast(e.firstName as ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_3()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_7() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName from Employee e"; |
| int startPosition = "Select cast(e.firstName ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingDatabaseType_8() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as from Employee e"; |
| int startPosition = "Select cast(e.firstName as ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| CastExpression_MissingDatabaseType, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingExpression); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(as char) from Employee e"; |
| int startPosition = "Select cast(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingLeftParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingLeftParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select cast from Employee e"; |
| int startPosition = "Select cast".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingLeftParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select cast e.firstName as char) from Employee e"; |
| int startPosition = "Select cast".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingLeftParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select cast as from Employee e"; |
| int startPosition = "Select cast".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| CastExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingRightParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingRightParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, CastExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingRightParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char(2) from Employee e"; |
| int startPosition = "Select cast(e.firstName as char(2)".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_CastExpression_MissingRightParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName as char from Employee e"; |
| int startPosition = "Select cast(e.firstName as char".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| CastExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidFirstExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidFirstExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidFirstExpression_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, 2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidFirstExpression_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(avg(e.age), 2)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(".length(); |
| int endPosition = "Select cast(e.firstName char(avg(e.age)".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_InvalidFirstExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidSecondExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidSecondExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidSecondExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidSecondExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidSecondExpression_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, 2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_InvalidSecondExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_InvalidSecondExpression_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, avg(e.age))) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2, ".length(); |
| int endPosition = "Select cast(e.firstName char(2, avg(e.age)".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_InvalidSecondExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingComma_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, 2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingComma); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingComma_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingComma); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingComma_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2 2)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingComma, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingFirstExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingFirstExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingFirstExpression_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2,)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingFirstExpression_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(, 2)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingFirstExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingFirstExpression_5() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(,)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| DatabaseType_MissingFirstExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char()) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(3)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(3,)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_5() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(3, )) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_4()); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_6() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(3, 3)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_7() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char 3)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingLeftParenthesis_8() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char 3, 3)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingRightParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingRightParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char()) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingRightParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2 from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| DatabaseType_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingRightParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2, ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| DatabaseType_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingRightParenthesis_5() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, 2 from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2, 2".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| DatabaseType_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, 2)) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, DatabaseType_MissingFirstExpression); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_3() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(, 2)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingFirstExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_4() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2,)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2,".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingSecondExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_5() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(2, )) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(2, ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_4()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| DatabaseType_MissingSecondExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_DatabaseType_MissingSecondExpression_6() throws Exception { |
| |
| String jpqlQuery = "Select cast(e.firstName char(,)) from Employee e"; |
| int startPosition = "Select cast(e.firstName char(,".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| DatabaseType_MissingSecondExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_InvalidExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingExpression); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingDatePart_1() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingDatePart); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingDatePart_2() throws Exception { |
| |
| String jpqlQuery = "Select extract(from e.hiringDate) from Employee e"; |
| int startPosition = "Select extract(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingDatePart, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingDatePart_3() throws Exception { |
| |
| String jpqlQuery = "Select extract(e.hiringDate) from Employee e"; |
| int startPosition = "Select extract(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingDatePart, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingDatePart_4() throws Exception { |
| |
| String jpqlQuery = "Select extract( e.hiringDate) from Employee e"; |
| int startPosition = "Select extract(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_5()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingDatePart, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingDatePart_5() throws Exception { |
| |
| String jpqlQuery = "Select extract( from e.hiringDate) from Employee e"; |
| int startPosition = "Select extract(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingDatePart, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingExpression); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingExpression); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_3() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND) from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_4() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND ) from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_3()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_5() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from) from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND from".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_6() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from ) from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND from ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_3()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_7() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND ) from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_3()); |
| |
| testHasProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingExpression_8() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND from ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| ExtractExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingLeftParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingLeftParenthesis); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingLeftParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where extract"; |
| int startPosition = "Select e from Employee e where extract".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| ExtractExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingDatePart); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingExpression); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingLeftParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select extract DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| int startPosition = "Select extract".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| @Ignore("TODO: This is partially parsed, find a better way to parse it.") |
| public void test_ExtractExpression_MissingLeftParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select extract from from Employee e"; |
| int startPosition = "Select extract".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasProblem( |
| problems, |
| ExtractExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingRightParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingRightParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate) from Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, ExtractExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingRightParenthesis_3() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND from e.hiringDate from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND from e.hiringDate".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ExtractExpression_MissingRightParenthesis_4() throws Exception { |
| |
| String jpqlQuery = "Select extract(DAY_MICROSECOND e.hiringDate from Employee e"; |
| int startPosition = "Select extract(DAY_MICROSECOND e.hiringDate".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| ExtractExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingFunctionName_1() throws Exception { |
| |
| String jpqlQuery = "SELECT FUNCTION() FROM Employee e"; |
| int startPosition = "SELECT FUNCTION(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MissingFunctionName, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingFunctionName_2() throws Exception { |
| |
| String jpqlQuery = "SELECT FUNCTION('sql') FROM Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, FunctionExpression_MissingFunctionName); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingOneExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e where column('city', e.address) = 'Ottawa'"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testDoesNotHaveProblem( |
| problems, |
| FunctionExpression_MissingOneExpression |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingOneExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e where column('city') = 'Ottawa'"; |
| int startPosition = "select e from Employee e where column('city'".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MissingOneExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingOneExpression_3() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e where column('city',) = 'Ottawa'"; |
| int startPosition = "select e from Employee e where column('city',".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MissingOneExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingOneExpression_4() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e where column('city', ) = 'Ottawa'"; |
| int startPosition = "select e from Employee e where column('city', ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery, buildStringFormatter_1()); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MissingOneExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingRightParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "SELECT FUNCTION('getName', 'String' FROM Employee e"; |
| int startPosition = "SELECT FUNCTION('getName', 'String'".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MissingRightParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "SELECT FUNCTION('getName', 'String') FROM Employee e"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, FunctionExpression_MissingRightParenthesis); |
| } |
| |
| @Test |
| public void test_FunctionExpression_MoreThanOneExpression_1() throws Exception { |
| |
| String jpqlQuery = "SELECT COLUMN('city', e.name, e.id) FROM Employee e"; |
| int startPosition = "SELECT COLUMN('city', ".length(); |
| int endPosition = "SELECT COLUMN('city', e.name, e.id".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| FunctionExpression_MoreThanOneExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_InExpression_InvalidExpression() throws Exception { |
| |
| String jpqlQuery = "SELECT e FROM Employee e WHERE ABS(e.age) IN :age"; |
| int startPosition = "SELECT e FROM Employee e WHERE ".length(); |
| int endPosition = "SELECT e FROM Employee e WHERE ABS(e.age)".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| if (isNewerThanOrEqual(EclipseLinkVersion.VERSION_2_1)) { |
| testHasNoProblems(problems); |
| } |
| else { |
| testHasOnlyOneProblem( |
| problems, |
| InExpression_InvalidExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| } |
| |
| @Test |
| public void test_OnClause_InvalidConditionalExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e join e.address a on a.id > 2"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, OnClause_InvalidConditionalExpression); |
| } |
| |
| @Test |
| public void test_OnClause_InvalidConditionalExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e join e.address a on a.id"; |
| int startPosition = "select e from Employee e join e.address a on ".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| OnClause_InvalidConditionalExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_OnClause_MissingConditionalExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e join e.address a on"; |
| int startPosition = "select e from Employee e join e.address a on".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| OnClause_MissingConditionalExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_OnClause_MissingConditionalExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e join e.address a on where e.id > 2"; |
| int startPosition = "select e from Employee e join e.address a on ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| OnClause_MissingConditionalExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_OnClause_MissingConditionalExpression_3() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e join e.address a on e.id > 2"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testDoesNotHaveProblem(problems, OnClause_MissingConditionalExpression); |
| } |
| |
| @Test |
| public void test_RegexpExpression_InvalidPatternValue_1() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.firstName regexp :regexp'"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_RegexpExpression_InvalidPatternValue_2() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.firstName regexp '^B.*'"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_RegexpExpression_InvalidPatternValue_3() throws Exception { |
| |
| // TODO |
| } |
| |
| @Test |
| public void test_RegexpExpression_InvalidStringExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where LENGTH(e.name) regexp '^B.*'"; |
| int startPosition = "Select e from Employee e where ".length(); |
| int endPosition = "Select e from Employee e where LENGTH(e.name)".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| RegexpExpression_InvalidStringExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_RegexpExpression_MissingPatternValue_1() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.firstName regexp '^B.*'"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_RegexpExpression_MissingPatternValue_2() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.name regexp"; |
| int startPosition = "Select e from Employee e where e.name regexp".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| RegexpExpression_MissingPatternValue, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_RegexpExpression_MissingPatternValue_3() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.name regexp group by e.name"; |
| int startPosition = "Select e from Employee e where e.name regexp ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| RegexpExpression_MissingPatternValue, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_RegexpExpression_MissingStringExpression_1() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where e.firstName regexp '^B.*'"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_RegexpExpression_MissingStringExpression_2() throws Exception { |
| |
| String jpqlQuery = "Select e from Employee e where regexp '^B.*'"; |
| int startPosition = "Select e from Employee e where ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| RegexpExpression_MissingStringExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableExpression_InvalidExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table(\"EMP\") EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableExpression_InvalidExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableExpression_InvalidExpression_3() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table(2.2) EMP where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table(".length(); |
| int endPosition = "select e from Employee e, table(2.2".length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableExpression_InvalidExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table() EMP where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table(".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableExpression_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingLeftParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingLeftParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table 'EMP') EMP where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableExpression_MissingLeftParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingRightParenthesis_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableExpression_MissingRightParenthesis_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP' EMP where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table('EMP'".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableExpression_MissingRightParenthesis, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') EMP where EMP.EMP_ID <> 0"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table('EMP') ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_3() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') as where EMP.EMP_ID <> 0"; |
| int startPosition = "select e from Employee e, table('EMP') as ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_4() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP')"; |
| int startPosition = "select e from Employee e, table('EMP')".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_5() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') "; |
| int startPosition = "select e from Employee e, table('EMP') ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_6() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') as"; |
| int startPosition = "select e from Employee e, table('EMP') as".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_TableVariableDeclaration_MissingIdentificationVariable_7() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e, table('EMP') as "; |
| int startPosition = "select e from Employee e, table('EMP') as ".length(); |
| int endPosition = startPosition; |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| TableVariableDeclaration_MissingIdentificationVariable, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_UnionClause_MissingExpression_1() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e intersect all select p from Product p where p.id <> 2"; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| |
| @Test |
| public void test_UnionClause_MissingExpression_2() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e intersect"; |
| int startPosition = "select e from Employee e intersect".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| UnionClause_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_UnionClause_MissingExpression_3() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e intersect "; |
| int startPosition = "select e from Employee e intersect ".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| UnionClause_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_UnionClause_MissingExpression_4() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e intersect all"; |
| int startPosition = "select e from Employee e intersect all".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| UnionClause_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_UnionClause_MissingExpression_5() throws Exception { |
| |
| String jpqlQuery = "select e from Employee e intersect all "; |
| int startPosition = "select e from Employee e intersect all ".length(); |
| int endPosition = jpqlQuery.length(); |
| |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| |
| testHasOnlyOneProblem( |
| problems, |
| UnionClause_MissingExpression, |
| startPosition, |
| endPosition |
| ); |
| } |
| |
| @Test |
| public void test_ValidQuery_001() throws Exception { |
| |
| // SELECT l |
| // FROM LastFirstID l |
| // WHERE l.IDNumber IN (SELECT DISTINCT u.IDNumber |
| // FROM Username u |
| // WHERE ( (LOWER(TRIM(FROM u.loginID)) LIKE :usernamePattern) |
| // AND |
| // (TRIM(FROM u.userStatus) IN :userStatusList)) |
| // ) |
| // ORDER BY FUNC('TRANSLATE_CHAR', LOWER( FUNC('NVL', l.lastName, ' '))), |
| // FUNC('TRANSLATE_CHAR', LOWER( FUNC('NVL', l.firstName,' '))) |
| String jpqlQuery = "SELECT l FROM LastFirstID l WHERE l.IDNumber IN (SELECT DISTINCT u.IDNumber FROM Username u WHERE ( ( LOWER(TRIM(FROM u.loginID )) LIKE :usernamePattern ) AND ( TRIM(FROM u.userStatus) IN :userStatusList ) ) ) ORDER BY FUNC('TRANSLATE_CHAR', LOWER( FUNC('NVL', l.lastName, ' ') )), FUNC('TRANSLATE_CHAR', LOWER( FUNC('NVL', l.firstName,' ') )) "; |
| List<JPQLQueryProblem> problems = validate(jpqlQuery); |
| testHasNoProblems(problems); |
| } |
| } |