| /* |
| * Copyright (c) 2006, 2020 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.parser; |
| |
| import org.eclipse.persistence.jpa.jpql.parser.CollectionExpression; |
| import org.eclipse.persistence.jpa.jpql.parser.ConditionalExpressionBNF; |
| import org.eclipse.persistence.jpa.jpql.parser.CountFunction; |
| import org.eclipse.persistence.jpa.jpql.parser.Expression; |
| import org.eclipse.persistence.jpa.jpql.parser.FromClause; |
| import org.eclipse.persistence.jpa.jpql.parser.IdentificationVariable; |
| import org.eclipse.persistence.jpa.jpql.parser.JPQLExpression; |
| import org.eclipse.persistence.jpa.jpql.parser.LikeExpression; |
| import org.eclipse.persistence.jpa.jpql.parser.ObjectExpression; |
| import org.eclipse.persistence.jpa.jpql.parser.SelectClause; |
| import org.eclipse.persistence.jpa.jpql.parser.SelectStatement; |
| import org.eclipse.persistence.jpa.jpql.parser.StateFieldPathExpression; |
| import org.eclipse.persistence.jpa.jpql.parser.UnknownExpression; |
| import org.junit.Test; |
| import static org.eclipse.persistence.jpa.tests.jpql.parser.JPQLParserTester.*; |
| import static org.junit.Assert.*; |
| |
| @SuppressWarnings("nls") |
| public final class JPQLExpressionTest1_0 extends JPQLParserTest { |
| |
| @Test |
| public void testGetExpression_1() { |
| |
| String actualQuery = " SELECT AVG ( mag ) FROM Magazine mag"; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(actualQuery, getGrammar(), true); |
| |
| Expression expression = jpqlExpression.getExpression(actualQuery, 0); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof JPQLExpression); |
| |
| expression = jpqlExpression.getExpression(actualQuery, 2); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof JPQLExpression); |
| |
| expression = jpqlExpression.getExpression(actualQuery, 4); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectClause); |
| |
| expression = jpqlExpression.getExpression(actualQuery, 10); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectClause); |
| |
| expression = jpqlExpression.getExpression(actualQuery, 25); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectStatement); |
| |
| expression = jpqlExpression.getExpression(actualQuery, 30); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof FromClause); |
| } |
| |
| @Test |
| public void testGetExpression_2() { |
| |
| String query = "SELECT OBJECT(e), COUNT(DISTINCT e) FROM Employee e"; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| |
| Expression expression = jpqlExpression.getExpression(query, 0); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof JPQLExpression); |
| |
| expression = jpqlExpression.getExpression(query, 14); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof ObjectExpression); |
| |
| // In 'SELECT' |
| for (int index = 1; index < 8; index++) { |
| expression = jpqlExpression.getExpression(query, index); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectClause); |
| } |
| |
| // In 'OBJECT(' |
| for (int index = 8; index < 15; index++) { |
| expression = jpqlExpression.getExpression(query, index); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof ObjectExpression); |
| } |
| |
| // In 'e' of 'OBJECT(e)' |
| expression = jpqlExpression.getExpression(query, 15); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof IdentificationVariable); |
| |
| expression = jpqlExpression.getExpression(query, 17); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof CollectionExpression); |
| |
| expression = jpqlExpression.getExpression(query, 18); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof CollectionExpression); |
| |
| expression = jpqlExpression.getExpression(query, 24); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof CountFunction); |
| |
| expression = jpqlExpression.getExpression(query, 35); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof CountFunction); |
| |
| expression = jpqlExpression.getExpression(query, 36); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectStatement); |
| } |
| |
| @Test |
| public void testGetExpression_3() { |
| |
| String query = "SELECT e FROM Employee e"; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| |
| Expression expression = jpqlExpression.getExpression(query, 8); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof IdentificationVariable); |
| |
| expression = jpqlExpression.getExpression(query, 6); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectClause); |
| } |
| |
| @Test |
| public void testGetExpression_4() { |
| |
| String query = "S"; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| |
| Expression expression = jpqlExpression.getExpression(query, 1); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof UnknownExpression); |
| } |
| |
| @Test |
| public void testGetExpression_5() { |
| |
| String query = "SELECT "; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| |
| Expression expression = jpqlExpression.getExpression(query, 7); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof SelectClause); |
| } |
| |
| @Test |
| public void testGetExpression_6() { |
| |
| String query = "SELECT e " + |
| "FROM Employee e " + |
| "HAVING e.department.name LIKE 'Sales%' "; |
| |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| int position = query.length(); |
| |
| Expression expression = jpqlExpression.getExpression(query, position); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof LikeExpression); |
| } |
| |
| @Test |
| public void testGetExpression_7() { |
| |
| String query = "SELECT SUM(e.name) FROM Employee e"; |
| JPQLExpression jpqlExpression = JPQLQueryBuilder.buildQuery(query, getGrammar(), true); |
| int position = "SELECT SUM(e.".length(); |
| |
| Expression expression = jpqlExpression.getExpression(query, position); |
| assertNotNull(expression); |
| assertTrue("The expression was " + expression.getClass().getSimpleName(), expression instanceof StateFieldPathExpression); |
| } |
| |
| @Test |
| public void testJPQLFragment_1() { |
| |
| String jpqlFragment = "e.name <> 'JPQL' AND SUBSTRING(e.name, 0, 2)"; |
| |
| ExpressionTester conditionalExpression = |
| path("e.name").different(string("'JPQL'")) |
| .and( |
| substring(path("e.name"), numeric(0), numeric(2)) |
| ); |
| |
| testQuery(jpqlFragment, conditionalExpression, ConditionalExpressionBNF.ID); |
| } |
| } |