blob: 1353c359a30b3d3d98b809b670a3db71d996df99 [file] [log] [blame]
/*
* Copyright (c) 2006, 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.parser;
import org.eclipse.persistence.jpa.tests.jpql.EclipseLinkVersionTools;
import org.junit.Test;
import static org.eclipse.persistence.jpa.tests.jpql.parser.JPQLParserTester.*;
@SuppressWarnings("nls")
public final class SelectClauseTest extends JPQLParserTest {
private JPQLQueryStringFormatter buildQueryFormatter_11() {
return new JPQLQueryStringFormatter() {
@Override
public String format(String jpqlQuery) {
return jpqlQuery.replaceAll("-1", "- 1");
}
};
}
@Test
public void test_JPQLQuery_01() {
String jpqlQuery = "SELECT AVG(mag.price) FROM Magazine mag";
SelectStatementTester selectStatement = selectStatement(
select(avg("mag.price")),
from("Magazine", "mag")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_02() {
String jpqlQuery = "SELECT e.firstName, e.lastName, e.address FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(collection(path("e.firstName"), path("e.lastName"), path("e.address"))),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_03() {
String jpqlQuery = "SELECT OBJECT(e), COUNT(DISTINCT e) FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(collection(object("e"), countDistinct(variable("e")))),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_04() {
String jpqlQuery = "SELECT COUNT(DISTINCT mag.price) FROM Magazine mag";
SelectStatementTester selectStatement = selectStatement(
select(countDistinct(path("mag.price"))),
from("Magazine", "mag")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_05() {
String jpqlQuery = "SELECT COUNT ( DISTINCT mag.price ) FROM Magazine mag";
SelectStatementTester selectStatement = selectStatement(
select(countDistinct(path("mag.price"))),
from("Magazine", "mag")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_06() {
String jpqlQuery = "SELECT DISTINCT e FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
selectDistinct(variable("e")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_07() {
String jpqlQuery = "SELECT AVG(e.age), e, COUNT(e.name), NEW test(e), OBJECT(e), SUM(e.age) FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(collection(
avg("e.age"),
variable("e"),
count("e.name"),
new_("test", variable("e")),
object("e"),
sum("e.age")
)),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_08() {
String jpqlQuery = "SELECT OBJECT(e) FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(object("e")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_09() {
String jpqlQuery = "SELECT DISTINCT e FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
selectDistinct(variable("e")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_10() {
String jpqlQuery = "SELECT e FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(variable("e")),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
@Test
public void test_JPQLQuery_11() {
if (!isEclipseLinkProvider() || EclipseLinkVersionTools.isOlderThan2_1(getGrammar())) {
return;
}
String jpqlQuery = "SELECT activityDef.ACTIVITY_NAME, " +
"AVG(activity.ACTIVITY_RUNNING_TIME), " +
"COUNT( activity.ACTIVITY_RUNNING_TIME ) , " +
"(SUM(activity.ACTIVITY_RUNNING_TIME * activity.ACTIVITY_RUNNING_TIME) - " +
"(SUM(activity.ACTIVITY_RUNNING_TIME) / COUNT(activityDef.ACTIVITY_NAME) * " +
"SUM(activity.ACTIVITY_RUNNING_TIME) / COUNT(activityDef.ACTIVITY_NAME))* " +
"COUNT(activityDef.ACTIVITY_NAME)) / (COUNT(activityDef.ACTIVITY_NAME) -1) " +
"FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(
path("activityDef.ACTIVITY_NAME"),
avg("activity.ACTIVITY_RUNNING_TIME"),
count("activity.ACTIVITY_RUNNING_TIME"),
sub(
sum(
path("activity.ACTIVITY_RUNNING_TIME")
.multiply(
path("activity.ACTIVITY_RUNNING_TIME")
)
)
.subtract(
sub(
sum("activity.ACTIVITY_RUNNING_TIME")
.divide(
count("activityDef.ACTIVITY_NAME")
)
.multiply(
sum("activity.ACTIVITY_RUNNING_TIME")
)
.divide(
count("activityDef.ACTIVITY_NAME")
)
)
.multiply(
count("activityDef.ACTIVITY_NAME")
)
)
)
.divide(
sub(
count("activityDef.ACTIVITY_NAME")
.subtract(
numeric(1)
)
)
)
),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement, buildQueryFormatter_11());
}
@Test
public void test_JPQLQuery_12() {
if (isJPA1_0()) {
return;
}
String jpqlQuery = "SELECT e.name - e.age + 18, " +
" e.age * 18, " +
" (avg(e.age) * 18) - e.age, " +
" e.salary / 12 + avg(e.salary) " +
"FROM Employee e";
SelectStatementTester selectStatement = selectStatement(
select(
/* Item 1 */
path("e.name")
.subtract(
path("e.age")
.add(
numeric(18)
)
),
/* Item 2 */
path("e.age")
.multiply(
numeric(18)
),
/* Item 3 */
sub(
avg("e.age")
.multiply(
numeric(18)
)
)
.subtract(
path("e.age")
),
/* Item 4 */
path("e.salary")
.divide(
numeric(12)
)
.add(avg("e.salary")
)
),
from("Employee", "e")
);
testQuery(jpqlQuery, selectStatement);
}
}