| /* |
| * Copyright (c) 2011, 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.tools.model; |
| |
| import org.junit.Test; |
| import static org.eclipse.persistence.jpa.tests.jpql.JPQLQueries2_0.*; |
| |
| /** |
| * This tests the automatic creation by the builder of a {@link org.eclipse.persistence.jpa.jpql.tools.model.query.StateObject} by converting the |
| * parsed representation of a JPQL query using the JPQL grammar defined in JPA 2.0. |
| * |
| * @version 2.4 |
| * @since 2.4 |
| * @author Pascal Filion |
| */ |
| public final class StateObjectTest2_0 extends AbstractStateObjectTest2_0 { |
| |
| @Test |
| public void test_Query_001() throws Exception { |
| |
| // UPDATE Employee e |
| // SET e.salary = |
| // CASE WHEN e.rating = 1 THEN e.salary * 1.1 |
| // WHEN e.rating = 2 THEN e.salary * 1.05 |
| // ELSE e.salary * 1.01 |
| // END |
| |
| testQuery(query_001(), stateObject_205()); |
| } |
| |
| @Test |
| public void test_Query_002() throws Exception { |
| |
| // SELECT e.name, |
| // CASE TYPE(e) WHEN Exempt THEN 'Exempt' |
| // WHEN Contractor THEN 'Contractor' |
| // WHEN Intern THEN 'Intern' |
| // ELSE 'NonExempt' |
| // END |
| // FROM Employee e, Contractor c |
| // WHERE e.dept.name = 'Engineering' |
| |
| testQuery(query_002(), stateObject_206()); |
| } |
| |
| @Test |
| public void test_Query_003() throws Exception { |
| |
| // SELECT e.name, |
| // f.name, |
| // CONCAT(CASE WHEN f.annualMiles > 50000 THEN 'Platinum ' |
| // WHEN f.annualMiles > 25000 THEN 'Gold ' |
| // ELSE '' |
| // END, |
| // 'Frequent Flyer') |
| // FROM Employee e JOIN e.frequentFlierPlan f |
| |
| testQuery(query_003(), stateObject_207()); |
| } |
| |
| @Test |
| public void test_Query_004() throws Exception { |
| |
| // SELECT e |
| // FROM Employee e |
| // WHERE TYPE(e) IN (Exempt, Contractor) |
| |
| testQuery(query_004(), stateObject_208()); |
| } |
| |
| @Test |
| public void test_Query_005() throws Exception { |
| |
| // SELECT e |
| // FROM Employee e |
| // WHERE TYPE(e) IN (:empType1, :empType2) |
| |
| testQuery(query_005(), stateObject_209()); |
| } |
| |
| @Test |
| public void test_Query_006() throws Exception { |
| |
| // SELECT e |
| // FROM Employee e |
| // WHERE TYPE(e) IN :empTypes |
| |
| testQuery(query_006(), stateObject_210()); |
| } |
| |
| @Test |
| public void test_Query_007() throws Exception { |
| |
| // SELECT TYPE(employee) |
| // FROM Employee employee |
| // WHERE TYPE(employee) <> Exempt |
| |
| testQuery(query_007(), stateObject_211()); |
| } |
| |
| @Test |
| public void test_Query_008() throws Exception { |
| |
| // SELECT t |
| // FROM CreditCard c JOIN c.transactionHistory t |
| // WHERE c.holder.name = 'John Doe' AND INDEX(t) BETWEEN 0 AND 9 |
| |
| testQuery(query_008(), stateObject_212()); |
| } |
| |
| @Test |
| public void test_Query_009() throws Exception { |
| |
| // SELECT w.name |
| // FROM Course c JOIN c.studentWaitlist w |
| // WHERE c.name = 'Calculus' |
| // AND |
| // INDEX(w) = 0 |
| |
| testQuery(query_009(), stateObject_213()); |
| } |
| |
| @Test |
| public void test_Query_010() throws Exception { |
| |
| // UPDATE Employee e |
| // SET e.salary = CASE e.rating WHEN 1 THEN e.salary * 1.1 |
| // WHEN 2 THEN e.salary * 1.05 |
| // ELSE e.salary * 1.01 |
| // END |
| |
| testQuery(query_010(), stateObject_214()); |
| } |
| |
| @Test |
| public void test_Query_011() throws Exception { |
| |
| // SELECT o.quantity, o.cost*1.08 AS taxedCost, a.zipcode |
| // FROM Customer c JOIN c.orders o JOIN c.address a |
| // WHERE a.state = 'CA' AND a.county = 'Santa Clara' |
| // ORDER BY o.quantity, taxedCost, a.zipcode |
| |
| testQuery(query_011(), stateObject_217()); |
| } |
| |
| @Test |
| public void test_Query_012() throws Exception { |
| |
| // SELECT AVG(o.quantity) as q, a.zipcode |
| // FROM Customer c JOIN c.orders o JOIN c.address a |
| // WHERE a.state = 'CA' |
| // GROUP BY a.zipcode |
| // ORDER BY q DESC"; |
| |
| testQuery(query_012(), stateObject_218()); |
| } |
| |
| @Test |
| public void test_Query_013() throws Exception { |
| |
| // SELECT e.salary / 1000D n |
| // From Employee e |
| |
| testQuery(query_013(), stateObject_222()); |
| } |
| |
| @Test |
| public void test_Query_014() throws Exception { |
| |
| // SELECT MOD(a.id, 2) AS m |
| // FROM Address a JOIN FETCH a.customerList |
| // ORDER BY m, a.zipcode |
| |
| testQuery(query_014(), stateObject_223()); |
| } |
| |
| @Test |
| public void test_Query_015() throws Exception { |
| |
| // SELECT ENTRY(addr) FROM Alias a JOIN a.addresses addr |
| |
| testQuery(query_015(), stateObject_014()); |
| } |
| |
| @Test |
| public void test_Query_016() throws Exception { |
| |
| // SELECT p |
| // FROM Employee e JOIN e.projects p |
| // WHERE e.id = :id AND INDEX(p) = 1 |
| |
| testQuery(query_016(), stateObject_139()); |
| } |
| } |