blob: 7e1a7dd5f69e02ccefefe7b73de168f1aab29040 [file] [log] [blame]
/*
* 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.JPAVersion;
import org.eclipse.persistence.jpa.tests.jpql.EclipseLinkVersionTools;
import org.junit.Test;
import static org.eclipse.persistence.jpa.jpql.parser.Expression.*;
import static org.eclipse.persistence.jpa.tests.jpql.parser.JPQLParserTester.*;
@SuppressWarnings("nls")
public final class ResultVariableTest extends JPQLParserTest {
@Test
public void test_JPQLQuery_01() {
String jpqlQuery = "SELECT e AS n FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(variable("e"), "n")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_02() {
String jpqlQuery = "SELECT e n FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariable(variable("e"), "n")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_03() {
String jpqlQuery = "SELECT AVG(e.age) AS g FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(avg("e.age"), "g")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_04() {
String jpqlQuery = "SELECT AVG(e.age) g FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariable(avg("e.age"), "g")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_05() {
String jpqlQuery = "SELECT AVG(e.age) + 2 AS g FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(avg("e.age").add(numeric(2)), "g")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_06() {
String jpqlQuery = "SELECT AVG(e.age) + 2 AS g FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(avg("e.age").add(numeric(2)), "g")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_07() {
String jpqlQuery = "SELECT AVG(e.age) AS g, e.name AS n FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(
resultVariableAs(avg("e.age"), "g"),
resultVariableAs(path("e.name"), "n")
),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_08() {
String jpqlQuery = "SELECT AVG(e.age) g, e.name n FROM Employee e";
ExpressionTester selectStatement = selectStatement(
select(
resultVariable(avg("e.age"), "g"),
resultVariable(path("e.name"), "n")
),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_09() {
String jpqlQuery = "SELECT AVG(e.age) AS";
ResultVariableTester resultVariable = resultVariableAs(avg(path("e.age")), nullExpression());
resultVariable.hasSpaceAfterAs = false;
ExpressionTester selectStatement = selectStatement(
select(resultVariable)
);
testInvalidQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_10() {
String jpqlQuery = "SELECT AVG(e.age) AS ";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(avg(path("e.age")), nullExpression()))
);
testInvalidQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_11() {
String jpqlQuery = "SELECT AS";
ResultVariableTester resultVariable = resultVariableAs(nullExpression(), nullExpression());
resultVariable.hasSpaceAfterAs = false;
ExpressionTester selectStatement = selectStatement(
select(resultVariable)
);
testInvalidQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_12() {
String jpqlQuery = "SELECT AS ";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(nullExpression(), nullExpression()))
);
testInvalidQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_13() {
String jpqlQuery = "SELECT AS n";
ExpressionTester selectStatement = selectStatement(
select(resultVariableAs(nullExpression(), "n"))
);
testInvalidQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_14() {
String jpqlQuery = "SELECT e AS emp FROM Employee e ORDER BY emp";
SelectStatementTester selectStatement = selectStatement(
select(resultVariableAs(variable("e"), "emp")),
from("Employee", "e"),
orderBy(orderByItem(variable("emp")))
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_15() {
String jpqlQuery = "SELECT e.name, AVG(e.age) AS age FROM Employee e ORDER BY age";
SelectStatementTester selectStatement = selectStatement(
select(path("e.name"), resultVariableAs(avg("e.age"), "age")),
from("Employee", "e"),
orderBy(orderByItem(variable("age")))
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_16() {
String jpqlQuery = "SELECT e.name, e.dept, e.UUID, e.salary AS salary, AVG(e.age) AS age FROM Employee e ORDER BY age, salary ASC";
SelectStatementTester selectStatement = selectStatement(
select(
path("e.name"),
path("e.dept"),
path("e.UUID"),
resultVariableAs(path("e.salary"), "salary"),
resultVariableAs(avg("e.age"), "age")
),
from("Employee", "e"),
orderBy(
orderByItem(variable("age")),
orderByItemAsc(variable("salary"))
)
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_17() {
if (getGrammar().getJPAVersion().isOlderThan(JPAVersion.VERSION_2_1)) {
return;
}
String jpqlQuery = "SELECT e.name, " +
" UPPER(e.dept) dept, " +
" e.UUID, " +
" e.salary AS salary, " +
" AVG(e.age) + e.age AS age " +
"FROM Employee e " +
"ORDER BY age, salary ASC";
SelectStatementTester selectStatement = selectStatement(
select(
path("e.name"),
resultVariable(upper(path("e.dept")), "dept"),
path("e.UUID"),
resultVariableAs(path("e.salary"), "salary"),
resultVariableAs(avg("e.age").add(path("e.age")), "age")
),
from("Employee", "e"),
orderBy(
orderByItem(variable("age")),
orderByItemAsc(variable("salary"))
)
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_18() {
String jpqlQuery = "SELECT a.name, " +
" a.UUID, " +
" a.typeUUID AS assetTypeUUID, " +
" p.name AS projectName, " +
" ap.usageType " +
"FROM Asset a, " +
" UsedAssetUsingProject ap, " +
" Project p " +
"WHERE a.UUID = ap.usedAsset AND ap.usingProject = p.UUID";
SelectStatementTester selectStatement = selectStatement(
select(
path("a.name"),
path("a.UUID"),
resultVariableAs(path("a.typeUUID"), "assetTypeUUID"),
resultVariableAs(path("p.name"), "projectName"),
path("ap.usageType")
),
from(
"Asset", "a",
"UsedAssetUsingProject", "ap",
"Project", "p"
),
where(
path("a.UUID")
.equal(
path("ap.usedAsset")
)
.and(
path("ap.usingProject")
.equal(
path("p.UUID")
)
)
)
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_19() {
String jpqlQuery = "select f.id as id, f.name as name, f.description as description from Foo f";
SelectStatementTester selectStatement = selectStatement(
select(
resultVariableAs(path("f.id"), "id"),
resultVariableAs(path("f.name"), "name"),
resultVariableAs(path("f.description"), "description")
),
from("Foo", "f")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_20() {
if (!isEclipseLinkProvider() || EclipseLinkVersionTools.isOlderThan2_1(getGrammar())) {
return;
}
String jpqlQuery = "SELECT FUNC('MONTH', o.dateOperation) mois, " +
" FUNC('YEAR', o.dateOperation) annee, " +
" o.category.name categ, " +
" SUM(o.amount) " +
"FROM BBankOperation o " +
"GROUP BY annee, mois, categ " +
"ORDER BY annee ASC, mois ASC, categ ASC";
SelectStatementTester selectStatement = selectStatement(
select(
resultVariable(function(FUNC, "'MONTH'", path("o.dateOperation")), "mois"),
resultVariable(function(FUNC, "'YEAR'", path("o.dateOperation")), "annee"),
resultVariable(path("o.category.name"), "categ"),
sum("o.amount")
),
from("BBankOperation", "o"),
groupBy(
variable("annee"),
variable("mois"),
variable("categ")
),
orderBy(
orderByItemAsc(variable("annee")),
orderByItemAsc(variable("mois")),
orderByItemAsc(variable("categ"))
)
);
testQuery(jpqlQuery, selectStatement);
}
}