/*
 * Copyright (c) 2018, 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
 */

package jpql.query;

import java.io.Serializable;
import java.util.Collection;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.OneToMany;

@Entity
@NamedQueries
({
    @NamedQuery(name="employee.?1",                query="SELECT e FROM Employee e WHERE e.name = ?1 ORDER BY e.name"),
    @NamedQuery(name="employee.addition1",         query="SELECT 2 + 2.2F FROM Employee e"),
    @NamedQuery(name="employee.addition2",         query="SELECT AVG(e.salary) + 2E2 FROM Employee e"),
    @NamedQuery(name="employee.addition3",         query="SELECT e.salary + 2 FROM Employee e"),
    @NamedQuery(name="employee.addition4",         query="SELECT e.name + 2 FROM Employee e"),
    @NamedQuery(name="employee.and",               query="SELECT OBJECT(e) FROM Employee e WHERE e.phoneNumbers IS EMPTY and e.name like 'testFlushModeOnUpdateQuery'"),
    @NamedQuery(name="employee.case1",             query="SELECT CASE WHEN e.name = 'Java Persistence Query Language' THEN 'Java Persistence Query Language' WHEN e.salary BETWEEN 1 and 2 THEN SUBSTRING(e.name, 0, 2) ELSE e.name END FROM Employee e"),
    @NamedQuery(name="employee.case2",             query="SELECT CASE WHEN e.name = 'JPQL' THEN e.working WHEN e.salary BETWEEN 1 and 2 THEN TRUE ELSE p.completed END FROM Employee e, Project p"),
    @NamedQuery(name="employee.case3",             query="SELECT CASE WHEN e.name = 'JPQL' THEN e.working WHEN e.salary BETWEEN 1 and 2 THEN SUBSTRING(e.name, 0, 2) ELSE e.dept END FROM Employee e"),
    @NamedQuery(name="employee.caseInsensitive",   query="SELECT e FROM Employee E"),
    @NamedQuery(name="employee.collection",        query="SELECT e.name, d.dname FROM Employee e, Dept d"),
    @NamedQuery(name="employee.date1",             query="SELECT CURRENT_DATE FROM Employee e"),
    @NamedQuery(name="employee.date2",             query="SELECT {d '2008-12-31'} FROM Employee e"),
    @NamedQuery(name="employee.delete",            query="DELETE FROM Employee e"),
    @NamedQuery(name="employee.delete.dept",       query="DELETE FROM Employee e WHERE e.department = :dept"),
    @NamedQuery(name="employee.dept",              query="SELECT e FROM Employee e WHERE e.salary = (SELECT MAX(e.salary) FROM Employee a WHERE a.department = :dept)"),
    @NamedQuery(name="employee.deptBase",          query="SELECT e FROM Employee e WHERE e.department = :dept AND e.salary > :base"),
    @NamedQuery(name="employee.deptno",            query="select e from Employee e where e.dept.deptno in (:deptno)"),
    @NamedQuery(name="employee.division1",         query="SELECT 2 / 2.2F FROM Employee e"),
    @NamedQuery(name="employee.division2",         query="SELECT AVG(e.salary) / 2E2 FROM Employee e"),
    @NamedQuery(name="employee.division3",         query="SELECT e.salary / 2 FROM Employee e"),
    @NamedQuery(name="employee.division4",         query="SELECT e.name / 2 FROM Employee e"),
    @NamedQuery(name="employee.empId",             query="select ds from Employee ds, Product ci where ds.empId = :conversationId AND ds.state = 0 AND ds.cikey = ci.cikey AND  ci.state <> 2"),
    @NamedQuery(name="employee.enum",              query="SELECT CASE WHEN e.name = 'Pascal' THEN jpql.query.EnumType.FIRST_NAME WHEN e.name = 'JPQL' THEN jpql.query.EnumType.LAST_NAME ELSE jpql.query.EnumType.NAME END FROM Employee e"),
    @NamedQuery(name="employee.lower",             query="SELECT LOWER(e.name) FROM Employee e"),
    @NamedQuery(name="employee.false",             query="SELECT FALSE FROM Employee e"),
    @NamedQuery(name="employee.findAll",           query="SELECT e FROM Employee e"),
    @NamedQuery(name="employee.fromSubquery1",     query="Select e3.salary from Employee e, (Select count(e2), e2.department from Employee e2 group by e2.department) e3 where e3.department = :dept"),
    @NamedQuery(name="employee.fromSubquery2",     query="Select e3.salary from Employee e, (Select count(e2), e2.department from Employee e2 group by e2.department) e3 where e.department = e3.department"),
    @NamedQuery(name="employee.fromSubquery3",     query="Select e3.count from Employee e, (Select count(e2) as count, e2.department from Employee e2 group by e2.department) e3 where e.department = e3.department"),
    @NamedQuery(name="employee.fromSubquery4",     query="Select e3.result from Employee e, (Select count(e2) + 2.2 as result, e2.department from Employee e2 group by e2.department) e3 where e.department = e3.department"),
    @NamedQuery(name="employee.func1",             query="SELECT FUNC('toString', e.name) FROM Employee e"),
    @NamedQuery(name="employee.func2",             query="SELECT FUNC('age', e.empId, e.salary) FROM Employee e"),
    @NamedQuery(name="employee.func3",             query="SELECT FUNC('age', e.empId, e.name) FROM Employee e"),
    @NamedQuery(name="employee.func4",             query="SELECT FUNC('age', e.empId, :name) FROM Employee e"),
    @NamedQuery(name="employee.in",                query="SELECT e FROM Employee e WHERE e.name IN :type"),
    @NamedQuery(name="employee.join.fetch1",       query="SELECT e FROM Employee e JOIN FETCH e.address WHERE e.empId = :ID"),
    @NamedQuery(name="employee.join.fetch2",       query="SELECT e, e.name FROM Employee e JOIN FETCH e.address WHERE e.empId = :ID"),
    @NamedQuery(name="employee.join.left1",        query="SELECT a FROM Employee e LEFT JOIN e.address a"),
    @NamedQuery(name="employee.join.left2",        query="SELECT m, e FROM Employee e LEFT JOIN e.managerEmployee m"),
    @NamedQuery(name="employee.max",               query="SELECT MAX(e.salary) FROM Employee e"),
    @NamedQuery(name="employee.min",               query="SELECT MIN(e.salary) FROM Employee e"),
    @NamedQuery(name="employee.mod",               query="SELECT MOD(e.salary, e.empId) FROM Employee e"),
    @NamedQuery(name="employee.multiplication1",   query="SELECT 2 * 2.2F FROM Employee e"),
    @NamedQuery(name="employee.multiplication2",   query="SELECT AVG(e.salary) * 2E2 FROM Employee e"),
    @NamedQuery(name="employee.multiplication3",   query="SELECT e.salary * 2 FROM Employee e"),
    @NamedQuery(name="employee.multiplication4",   query="SELECT e.name * 2 FROM Employee e"),
    @NamedQuery(name="employee.nullif1",           query="SELECT NULLIF(e.name, 'JPQL') FROM Employee e"),
    @NamedQuery(name="employee.nullif2",           query="SELECT NULLIF(2 + 2, 'JPQL') FROM Employee e"),
    @NamedQuery(name="employee.object1",           query="SELECT OBJECT(e) FROM Employee e"),
    @NamedQuery(name="employee.object2",           query="SELECT OBJECT(e) FROM Employee e WHERE e.name = ?1"),
    @NamedQuery(name="employee.resultVariable1",   query="SELECT e.name AS n From Employee e"),
    @NamedQuery(name="employee.resultVariable2",   query="SELECT e.name n From Employee e"),
    @NamedQuery(name="employee.resultVariable3",   query="SELECT e.salary / 1000D n From Employee e"),
    @NamedQuery(name="employee.select",            query="SELECT e FROM Employee e"),
    @NamedQuery(name="employee.sum",               query="SELECT SUM(e.salary) FROM Employee e"),
    @NamedQuery(name="employee.subquery1",         query="SELECT e FROM Employee e WHERE EXISTS (SELECT p FROM Project p JOIN p.employees emp WHERE emp = e AND p.name = :name)"),
    @NamedQuery(name="employee.subquery2",         query="SELECT e FROM Employee e WHERE e.empId in (SELECT MIN(ee.empId) FROM Employee ee)"),
    @NamedQuery(name="employee.subquery.code_1",   query="SELECT e FROM Employee e WHERE e.salary > (SELECT AVG(f.salary) FROM Employee f)"),
    @NamedQuery(name="employee.substraction1",     query="SELECT 2 - 2.2F FROM Employee e"),
    @NamedQuery(name="employee.substraction2",     query="SELECT AVG(e.salary) - 2E2 FROM Employee e"),
    @NamedQuery(name="employee.substraction3",     query="SELECT e.salary - 2 FROM Employee e"),
    @NamedQuery(name="employee.substraction4",     query="SELECT e.name - 2 FROM Employee e"),
    @NamedQuery(name="employee.trim",              query="SELECT TRIM(e.name) FROM Employee e"),
    @NamedQuery(name="employee.true",              query="SELECT TRUE FROM Employee e"),
    @NamedQuery(name="employee.update1",           query="UPDATE Employee e SET e.name = ?1"),
    @NamedQuery(name="employee.update2",           query="UPDATE Employee e set e.salary = e.roomNumber, e.roomNumber = e.salary, e.address = null where e.name = 'testUpdateUsingTempStorage'"),
    @NamedQuery(name="employee.update.positional", query="UPDATE Employee e SET e.manager = ?1 WHERE e.department = ?2"),
    @NamedQuery(name="employee.upper",             query="SELECT UPPER(e.name) FROM Employee e")
})
@SuppressWarnings("unused")
public class Employee implements Serializable {

    private static final long serialVersionUID = 202974405054090345L;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)
    @JoinColumn(name = "ADDR_ID")
    private Address address;
    private String department;
    @ManyToOne
    @JoinColumn(name = "DEPTNO")
    private Dept dept;
    @Embedded
    private EmbeddedAddress embeddedAddress;
    @Id
    @Column(name = "EMP_ID", nullable = false)
    private Long empId;
    private String manager;
    @ManyToOne(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
    private Employee managerEmployee;
    private String name;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
    private Collection<Phone> phoneNumbers;
    private int roomNumber;
    private Long salary;
    private Boolean working;

    public Employee() {
        super();
    }

    public Employee(Long empId) {
        super();
        this.empId = empId;
    }

    @Embeddable
    public static class EmbeddedAddress {
        private String city;
        private String streetName;
        private String zipCode;
    }
}
