You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ht...@apache.org on 2015/04/14 00:22:59 UTC
svn commit: r1673300 - in /openjpa/branches/2.1.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/
Author: hthomann
Date: Mon Apr 13 22:22:58 2015
New Revision: 1673300
URL: http://svn.apache.org/r1673300
Log:
OPENJPA-2571: Criteria Builder query generates extra alias when using multiselect.
Added:
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java
Modified:
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
Modified: openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?rev=1673300&r1=1673299&r2=1673300&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Mon Apr 13 22:22:58 2015
@@ -2894,7 +2894,20 @@ public class SelectImpl
if (this.var != null) {
this.append(this.var);
} else if (this.path == null && this.correlatedVar != null && _sel._dict.isImplicitJoin()) {
- this.append(this.correlatedVar);
+ String str = this.var;
+ for(Object o : _sel._parent._aliases.keySet()){
+ if (o instanceof Key) {
+ Key k = (Key) o;
+ if (this.correlatedVar.equals(k._path)) {
+ str = this.correlatedVar;
+ break;
+ }
+ }else if (o.equals(this.correlatedVar)){
+ str = this.correlatedVar;
+ break;
+ }
+ }
+ this.append(str);
}
this.var = null;
_outer = false;
Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,452 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="T_DIM_DAY")
+public class DimDay {
+
+ @Id
+ @Column(name="DAY_KY")
+ private Long key;
+
+ @Column(name="DAY_DT")
+ private Date date;
+
+ @Column(name = "DAY_FULL_NM")
+ private String dayFullName;
+
+ @Column(name = "QTR_FULL_NM")
+ private String qtrFullName;
+
+ @Column(name = "MNTH_FULL_NM")
+ private String monthFullName;
+
+ @Column(name = "MNTH_SHRT_NM")
+ private String monthName;
+
+ @Column(name = "YR_NBR")
+ private String year;
+
+ @Column(name = "QTR_IN_YR_NBR")
+ private int quarterInYearNumber;
+
+ @Column(name = "YR_CD")
+ private String yearCode;
+
+ @Column(name = "QTR_CD")
+ private String quarterCode;
+
+ @Column(name = "MNTH_CD")
+ private String monthCode;
+
+ @Column(name = "MNTH_IN_YR_NBR")
+ private Long monthInYearNumber;
+
+ @Column(name="CUR_MNTH_IND")
+ private Long currentMonthInd;
+
+ @Column(name="CUR_QTR_IND")
+ private Long currentQtrInd;
+
+ @Column(name="CUR_YR_IND")
+ private Long currentYearInd;
+
+ @Column(name="PREV_MNTH_IND")
+ private Long prevMonthInd;
+
+ @Column(name="PREV_QTR_IND")
+ private Long prevQtrInd;
+
+ @Column(name="PREV_YR_IND")
+ private Long prevYearInd;
+
+ @Column(name="CUR_MNTH_IN_PREV_YR_IND")
+ private Long currentMonthVsPrevYearInd;
+
+ @Column(name="CUR_QTR_IN_PREV_YR_IND")
+ private Long currentQtrVsPrevYearInd;
+
+ @Column(name="WK_IN_YR_NBR")
+ private Long weekInYear;
+
+ @Column(name="WK_IN_YR_FULL_NM")
+ private String weekInYearFullNm;
+
+ @Column(name = "DAY_IN_WK_NBR")
+ private Long dayInWeek;
+
+ @Column(name = "DAY_IN_MNTH_NBR")
+ private Long dayInMonth;
+
+ @Column(name = "DAY_IN_QTR_NBR")
+ private Long dayInQuarter;
+
+ @Column(name = "DAY_IN_YR_NBR")
+ private Long dayInYear;
+
+ @Column(name="EOM_IND")
+ private Long eomInd;
+
+ @Column(name="EOQ_IND")
+ private Long eoqInd;
+
+ @Column(name="EOY_IND")
+ private Long eoyInd;
+
+ @Column(name = "ROLL_13_MNTH_IND")
+ private Long roll13MonthInd;
+
+ @Column(name = "ROLL_4_YRS_IND")
+ private Long roll4YearsInd;
+
+ @Column(name = "ROLL_5_QTRS_IND")
+ private Long roll5QuartersInd;
+
+ @Column(name="MNTH_STRT_DAY_KY")
+ private Long monthStrtDate;
+
+ @Column(name="MNTH_END_DAY_KY")
+ private Long monthEndDate;
+
+ @Column(name="QTR_STRT_DAY_KY")
+ private Long quarterStrtDate;
+
+ @Column(name="QTR_END_DAY_KY")
+ private Long quarterEndDate;
+
+ @Column(name = "YR_STRT_DAY_KY")
+ private Long yearStrtDate;
+
+ @Column(name = "YR_END_DAY_KY")
+ private Long yearEndDate;
+
+ public Long getKey() {
+ return key;
+ }
+
+ public void setKey(Long key) {
+ this.key = key;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ public String getDayFullName() {
+ return dayFullName;
+ }
+
+ public void setDayFullName(String dayFullName) {
+ this.dayFullName = dayFullName;
+ }
+
+ public String getQtrFullName() {
+ return qtrFullName;
+ }
+
+ public void setQtrFullName(String qtrFullName) {
+ this.qtrFullName = qtrFullName;
+ }
+
+ public String getMonthName() {
+ return monthName;
+ }
+
+ public void setMonthFullName(String monthName) {
+ this.monthName = monthName;
+ }
+
+ public String getYear() {
+ return year;
+ }
+
+ public void setYear(String year) {
+ this.year = year;
+ }
+
+ public Long getCurrentMonthInd() {
+ return currentMonthInd;
+ }
+
+ public void setCurrentMonthInd(Long currentMonthInd) {
+ this.currentMonthInd = currentMonthInd;
+ }
+
+ public Long getCurrentQtrInd() {
+ return currentQtrInd;
+ }
+
+ public void setCurrentQtrInd(Long currentQtrInd) {
+ this.currentQtrInd = currentQtrInd;
+ }
+
+ public Long getCurrentYearInd() {
+ return currentYearInd;
+ }
+
+ public void setCurrentYearInd(Long currentYearInd) {
+ this.currentYearInd = currentYearInd;
+ }
+
+ public Long getPrevQtrInd() {
+ return prevQtrInd;
+ }
+
+ public void setPrevQtrInd(Long prevQtrInd) {
+ this.prevQtrInd = prevQtrInd;
+ }
+
+ public Long getPrevYearInd() {
+ return prevYearInd;
+ }
+
+ public void setPrevYearInd(Long prevYearInd) {
+ this.prevYearInd = prevYearInd;
+ }
+
+ public Long getCurrentMonthVsPrevYearInd() {
+ return currentMonthVsPrevYearInd;
+ }
+
+ public void setCurrentMonthVsPrevYearInd(Long currentMonthVsPrevYearInd) {
+ this.currentMonthVsPrevYearInd = currentMonthVsPrevYearInd;
+ }
+
+ public Long getCurrentQtrVsPrevYearInd() {
+ return currentQtrVsPrevYearInd;
+ }
+
+ public void setCurrentQtrVsPrevYearInd(Long currentQtrVsPrevYearInd) {
+ this.currentQtrVsPrevYearInd = currentQtrVsPrevYearInd;
+ }
+
+ public Long getPrevMonthInd() {
+ return prevMonthInd;
+ }
+
+ public void setPrevMonthInd(Long prevMonthInd) {
+ this.prevMonthInd = prevMonthInd;
+ }
+
+ public Long getWeekInYear() {
+ return weekInYear;
+ }
+
+ public void setWeekInYear(Long weekInYear) {
+ this.weekInYear = weekInYear;
+ }
+
+ public void setMonthName(String monthName) {
+ this.monthName = monthName;
+ }
+
+ public Long getEomInd() {
+ return eomInd;
+ }
+
+ public void setEomInd(Long eomInd) {
+ this.eomInd = eomInd;
+ }
+
+ public String getYearCode() {
+ return yearCode;
+ }
+
+ public void setYearCode(String yearCode) {
+ this.yearCode = yearCode;
+ }
+
+ public String getQuarterCode() {
+ return quarterCode;
+ }
+
+ public void setQuarterCode(String quarterCode) {
+ this.quarterCode = quarterCode;
+ }
+
+ public String getMonthCode() {
+ return monthCode;
+ }
+
+ public void setMonthCode(String monthCode) {
+ this.monthCode = monthCode;
+ }
+
+ public String getMonthFullName() {
+ return monthFullName;
+ }
+
+ public String getWeekInYearFullNm() {
+ return weekInYearFullNm;
+ }
+
+ public void setWeekInYearFullNm(String weekInYearFullNm) {
+ this.weekInYearFullNm = weekInYearFullNm;
+ }
+
+ public Long getMonthInYearNumber() {
+ return monthInYearNumber;
+ }
+
+ public void setMonthInYearNumber(Long monthInYearNumber) {
+ this.monthInYearNumber = monthInYearNumber;
+ }
+
+ public int getQuarterInYearNumber() {
+ return quarterInYearNumber;
+ }
+
+ public void setQuarterInYearNumber(int quarterInYearNumber) {
+ this.quarterInYearNumber = quarterInYearNumber;
+ }
+
+ public Long getRoll13MonthInd() {
+ return roll13MonthInd;
+ }
+
+ public void setRoll13MonthInd(Long roll13MonthInd) {
+ this.roll13MonthInd = roll13MonthInd;
+ }
+
+ public Long getRoll4YearsInd() {
+ return roll4YearsInd;
+ }
+
+ public void setRoll4YearsInd(Long roll4YearsInd) {
+ this.roll4YearsInd = roll4YearsInd;
+ }
+
+ public Long getRoll5QuartersInd() {
+ return roll5QuartersInd;
+ }
+
+ public void setRoll5QuartersInd(Long roll5QuartersInd) {
+ this.roll5QuartersInd = roll5QuartersInd;
+ }
+
+ public Long getDayInMonth() {
+ return dayInMonth;
+ }
+
+ public void setDayInMonth(Long dayInMonth) {
+ this.dayInMonth = dayInMonth;
+ }
+
+ public Long getDayInQuarter() {
+ return dayInQuarter;
+ }
+
+ public void setDayInQuarter(Long dayInQuarter) {
+ this.dayInQuarter = dayInQuarter;
+ }
+
+ public Long getDayInYear() {
+ return dayInYear;
+ }
+
+ public void setDayInYear(Long dayInYear) {
+ this.dayInYear = dayInYear;
+ }
+
+ public Long getEoqInd() {
+ return eoqInd;
+ }
+
+ public void setEoqInd(Long eoqInd) {
+ this.eoqInd = eoqInd;
+ }
+
+ public Long getEoyInd() {
+ return eoyInd;
+ }
+
+ public void setEoyInd(Long eoyInd) {
+ this.eoyInd = eoyInd;
+ }
+
+ public Long getMonthStrtDate() {
+ return monthStrtDate;
+ }
+
+ public void setMonthStrtDate(Long monthStrtDate) {
+ this.monthStrtDate = monthStrtDate;
+ }
+
+ public Long getMonthEndDate() {
+ return monthEndDate;
+ }
+
+ public void setMonthEndDate(Long monthEndDate) {
+ this.monthEndDate = monthEndDate;
+ }
+
+ public Long getQuarterStrtDate() {
+ return quarterStrtDate;
+ }
+
+ public void setQuarterStrtDate(Long quarterStrtDate) {
+ this.quarterStrtDate = quarterStrtDate;
+ }
+
+ public Long getQuarterEndDate() {
+ return quarterEndDate;
+ }
+
+ public void setQuarterEndDate(Long quarterEndDate) {
+ this.quarterEndDate = quarterEndDate;
+ }
+
+ public Long getYearStrtDate() {
+ return yearStrtDate;
+ }
+
+ public void setYearStrtDate(Long yearStrtDate) {
+ this.yearStrtDate = yearStrtDate;
+ }
+
+ public Long getYearEndDate() {
+ return yearEndDate;
+ }
+
+ public void setYearEndDate(Long yearEndDate) {
+ this.yearEndDate = yearEndDate;
+ }
+
+ public Long getDayInWeek() {
+ return dayInWeek;
+ }
+
+ public void setDayInWeek(Long dayInWeek) {
+ this.dayInWeek = dayInWeek;
+ }
+
+
+}
Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/DimDay_.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.lang.Integer;
+import java.lang.Long;
+import java.lang.String;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=DimDay.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon Feb 23 16:53:34 MST 2015")
+public class DimDay_ {
+ public static volatile SingularAttribute<DimDay,Long> currentMonthInd;
+ public static volatile SingularAttribute<DimDay,Long> currentMonthVsPrevYearInd;
+ public static volatile SingularAttribute<DimDay,Long> currentQtrInd;
+ public static volatile SingularAttribute<DimDay,Long> currentQtrVsPrevYearInd;
+ public static volatile SingularAttribute<DimDay,Long> currentYearInd;
+ public static volatile SingularAttribute<DimDay,Date> date;
+ public static volatile SingularAttribute<DimDay,String> dayFullName;
+ public static volatile SingularAttribute<DimDay,Long> dayInMonth;
+ public static volatile SingularAttribute<DimDay,Long> dayInQuarter;
+ public static volatile SingularAttribute<DimDay,Long> dayInWeek;
+ public static volatile SingularAttribute<DimDay,Long> dayInYear;
+ public static volatile SingularAttribute<DimDay,Long> eomInd;
+ public static volatile SingularAttribute<DimDay,Long> eoqInd;
+ public static volatile SingularAttribute<DimDay,Long> eoyInd;
+ public static volatile SingularAttribute<DimDay,Long> key;
+ public static volatile SingularAttribute<DimDay,String> monthCode;
+ public static volatile SingularAttribute<DimDay,Long> monthEndDate;
+ public static volatile SingularAttribute<DimDay,String> monthFullName;
+ public static volatile SingularAttribute<DimDay,Long> monthInYearNumber;
+ public static volatile SingularAttribute<DimDay,String> monthName;
+ public static volatile SingularAttribute<DimDay,Long> monthStrtDate;
+ public static volatile SingularAttribute<DimDay,Long> prevMonthInd;
+ public static volatile SingularAttribute<DimDay,Long> prevQtrInd;
+ public static volatile SingularAttribute<DimDay,Long> prevYearInd;
+ public static volatile SingularAttribute<DimDay,String> qtrFullName;
+ public static volatile SingularAttribute<DimDay,String> quarterCode;
+ public static volatile SingularAttribute<DimDay,Long> quarterEndDate;
+ public static volatile SingularAttribute<DimDay,Integer> quarterInYearNumber;
+ public static volatile SingularAttribute<DimDay,Long> quarterStrtDate;
+ public static volatile SingularAttribute<DimDay,Long> roll13MonthInd;
+ public static volatile SingularAttribute<DimDay,Long> roll4YearsInd;
+ public static volatile SingularAttribute<DimDay,Long> roll5QuartersInd;
+ public static volatile SingularAttribute<DimDay,Long> weekInYear;
+ public static volatile SingularAttribute<DimDay,String> weekInYearFullNm;
+ public static volatile SingularAttribute<DimDay,String> year;
+ public static volatile SingularAttribute<DimDay,String> yearCode;
+ public static volatile SingularAttribute<DimDay,Long> yearEndDate;
+ public static volatile SingularAttribute<DimDay,Long> yearStrtDate;
+}
Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,308 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "T_FACT_WORK_ASGNMT")
+public class FactWorkAssignment {
+ @Id
+ @Column(name = "CLNT_OBJ_ID")
+ private String orgOID;
+
+ @Column(name = "rec_eff_strt_dt")
+ private Date effStartDt;
+
+ @Column(name = "rec_eff_end_dt")
+ private Date effEndDt;
+
+
+ @Column(name = "rec_eff_strt_day_ky")
+ private Long effectiveStartDate;
+
+ @Column(name = "rec_eff_end_day_ky")
+ private Long effectiveEndDate;
+
+ @Column(name = "pers_ky")
+ private Long personKey;
+
+ @Column(name = "pers_obj_id")
+ private String personObjId;
+
+ @Column(name = "prmry_work_asgnmt_ind")
+ private int primary;
+
+ @Column(name = "empl_cnt")
+ private int employeeCount;
+
+ @Column(name = "work_asgnmt_stus_cd")
+ private String statusCode;
+
+ @Column(name="WORK_ASGNMT_STUS_DSC")
+ private String statusDesc;
+
+ @Column(name="WORK_ASGNMT_NBR")
+ private String workAssgnmntNbr;
+
+ @Column(name = "work_loc_ky")
+ private Long workLocationKey;
+
+ @Column(name = "hr_orgn_ky")
+ private Long hrOrgKey;
+
+ @Column(name = "PAYRL_ORGN_KY")
+ private Long payrollOrgKey;
+
+ @Column(name = "job_ky")
+ private Long jobKey;
+
+ @Column(name = "PERS_PRFL_ATTR_KY")
+ private Long personProfileKey;
+
+ @Column(name = "mngr_ky")
+ private Long managerKey;
+
+ @Column(name = "PAY_GRP_KY")
+ private Long paygroupKey;
+
+ @Column(name = "SAL_PLAN_KY")
+ private Long salPlanKey;
+
+ @Column(name = "COMPA_RT")
+ private Double compaRt;
+
+ @Column(name="CLK_NBR")
+ private String clockNumber;
+
+ @Column(name="DATA_CNTL_NBR")
+ private String dataCntrlNumber;
+
+ @Column(name="SEC_CLR_CD")
+ private String secClrCd;
+
+ @Column(name = "CUR_REC_IND")
+ private boolean currentRecord;
+
+ public Long getSalPlanKey() {
+ return salPlanKey;
+ }
+
+ public void setSalPlanKey(Long salPlanKey) {
+ this.salPlanKey = salPlanKey;
+ }
+
+ public Long getManagerKey() {
+ return managerKey;
+ }
+
+ public void setManagerKey(Long managerKey) {
+ this.managerKey = managerKey;
+ }
+
+ public Long getPersonProfileKey() {
+ return personProfileKey;
+ }
+
+ public void setPersonProfileKey(Long personProfileKey) {
+ this.personProfileKey = personProfileKey;
+ }
+
+ public int getPrimary() {
+ return primary;
+ }
+
+ public void setPrimary(int primary) {
+ this.primary = primary;
+ }
+
+ public int getEmployeeCount() {
+ return employeeCount;
+ }
+
+ public void setEmployeeCount(int employeeCount) {
+ this.employeeCount = employeeCount;
+ }
+
+ public String getStatusCode() {
+ return statusCode;
+ }
+
+ public void setStatusCode(String statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ public String getStatusDesc() {
+ return statusDesc;
+ }
+
+ public void setStatusDesc(String statusDesc) {
+ this.statusDesc = statusDesc;
+ }
+
+ public Long getWorkLocationKey() {
+ return workLocationKey;
+ }
+
+ public void setWorkLocationKey(Long workLocationKey) {
+ this.workLocationKey = workLocationKey;
+ }
+
+ public Long getHrOrgKey() {
+ return hrOrgKey;
+ }
+
+ public void setHrOrgKey(Long hrOrgKey) {
+ this.hrOrgKey = hrOrgKey;
+ }
+
+ public Long getJobKey() {
+ return jobKey;
+ }
+
+ public void setJobKey(Long jobKey) {
+ this.jobKey = jobKey;
+ }
+
+ public Long getPayrollOrgKey() {
+ return payrollOrgKey;
+ }
+
+ public void setPayrollOrgKey(Long payrollOrgKey) {
+ this.payrollOrgKey = payrollOrgKey;
+ }
+
+ public Double getCompaRt() {
+ return compaRt;
+ }
+
+ public void setCompaRt(Double compaRt) {
+ this.compaRt = compaRt;
+ }
+
+ public Long getPaygroupKey() {
+ return paygroupKey;
+ }
+
+ public void setPaygroupKey(Long paygroupKey) {
+ this.paygroupKey = paygroupKey;
+ }
+
+ public String getClockNumber() {
+ return clockNumber;
+ }
+
+ public void setClockNumber(String clockNumber) {
+ this.clockNumber = clockNumber;
+ }
+
+ public String getDataCntrlNumber() {
+ return dataCntrlNumber;
+ }
+
+ public void setDataCntrlNumber(String dataCntrlNumber) {
+ this.dataCntrlNumber = dataCntrlNumber;
+ }
+
+ public String getSecClrCd() {
+ return secClrCd;
+ }
+
+ public void setSecClrCd(String secClrCd) {
+ this.secClrCd = secClrCd;
+ }
+
+ public boolean isCurrentRecord() {
+ return currentRecord;
+ }
+
+ public void setCurrentRecord(boolean currentRecord) {
+ this.currentRecord = currentRecord;
+ }
+
+ public String getWorkAssgnmntNbr() {
+ return workAssgnmntNbr;
+ }
+
+ public void setWorkAssgnmntNbr(String workAssgnmntNbr) {
+ this.workAssgnmntNbr = workAssgnmntNbr;
+ }
+
+ public String getOrgOID() {
+ return orgOID;
+ }
+
+ public void setOrgOID(String orgOID) {
+ this.orgOID = orgOID;
+ }
+
+ public Long getEffectiveStartDate() {
+ return effectiveStartDate;
+ }
+
+ public void setEffectiveStartDate(Long effectiveStartDate) {
+ this.effectiveStartDate = effectiveStartDate;
+ }
+
+ public Long getEffectiveEndDate() {
+ return effectiveEndDate;
+ }
+
+ public void setEffectiveEndDate(Long effectiveEndDate) {
+ this.effectiveEndDate = effectiveEndDate;
+ }
+
+ public Long getPersonKey() {
+ return personKey;
+ }
+
+ public void setPersonKey(Long personKey) {
+ this.personKey = personKey;
+ }
+
+ public String getPersonObjId() {
+ return personObjId;
+ }
+
+ public void setPersonObjId(String personObjId) {
+ this.personObjId = personObjId;
+ }
+
+ public Date getEffStartDt() {
+ return effStartDt;
+ }
+
+ public void setEffStartDt(Date effStartDt) {
+ this.effStartDt = effStartDt;
+ }
+
+ public Date getEffEndDt() {
+ return effEndDt;
+ }
+
+ public void setEffEndDt(Date effEndDt) {
+ this.effEndDt = effEndDt;
+ }
+
+}
Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/FactWorkAssignment_.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.lang.Boolean;
+import java.lang.Double;
+import java.lang.Integer;
+import java.lang.Long;
+import java.lang.String;
+import java.util.Date;
+import javax.persistence.metamodel.SingularAttribute;
+
+@javax.persistence.metamodel.StaticMetamodel
+(value=FactWorkAssignment.class)
+@javax.annotation.Generated
+(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="Mon Feb 23 16:16:50 MST 2015")
+public class FactWorkAssignment_ {
+ public static volatile SingularAttribute<FactWorkAssignment,String> clockNumber;
+ public static volatile SingularAttribute<FactWorkAssignment,Double> compaRt;
+ public static volatile SingularAttribute<FactWorkAssignment,Boolean> currentRecord;
+ public static volatile SingularAttribute<FactWorkAssignment,String> dataCntrlNumber;
+ public static volatile SingularAttribute<FactWorkAssignment,Date> effEndDt;
+ public static volatile SingularAttribute<FactWorkAssignment,Date> effStartDt;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> effectiveEndDate;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> effectiveStartDate;
+ public static volatile SingularAttribute<FactWorkAssignment,Integer> employeeCount;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> hrOrgKey;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> jobKey;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> managerKey;
+ public static volatile SingularAttribute<FactWorkAssignment,String> orgOID;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> paygroupKey;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> payrollOrgKey;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> personKey;
+ public static volatile SingularAttribute<FactWorkAssignment,String> personObjId;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> personProfileKey;
+ public static volatile SingularAttribute<FactWorkAssignment,Integer> primary;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> salPlanKey;
+ public static volatile SingularAttribute<FactWorkAssignment,String> secClrCd;
+ public static volatile SingularAttribute<FactWorkAssignment,String> statusCode;
+ public static volatile SingularAttribute<FactWorkAssignment,String> statusDesc;
+ public static volatile SingularAttribute<FactWorkAssignment,String> workAssgnmntNbr;
+ public static volatile SingularAttribute<FactWorkAssignment,Long> workLocationKey;
+}
Added: openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java?rev=1673300&view=auto
==============================================================================
--- openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java (added)
+++ openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/multiselect/TestCriteriaMultiselectAliasing.java Mon Apr 13 22:22:58 2015
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.criteria.multiselect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Tuple;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Selection;
+import javax.persistence.criteria.Subquery;
+
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+public class TestCriteriaMultiselectAliasing extends SQLListenerTestCase {
+ CriteriaQuery<Tuple> critQuery;
+ String critQueryString;
+
+ String doCB = System.getProperty("doCB");
+
+ @Override
+ public void setUp() throws Exception {
+ // Only run on Oracle....the asserts at this time look for SQL specific to the
+ // way things are generated for Oracle.
+ setSupportedDatabases(
+ org.apache.openjpa.jdbc.sql.OracleDictionary.class);
+ if (isTestsDisabled()) {
+ return;
+ }
+
+ super.setUp(DimDay.class, FactWorkAssignment.class
+ ,"openjpa.Log","SQL=TRACE,Tests=TRACE", "openjpa.ConnectionFactoryProperties",
+ "PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=72"
+ );
+
+ critQuery = createCriteriaBuilder();
+ critQueryString = critQuery.toString();
+ System.out.println("critQueryString = " + critQueryString);
+ }
+
+ public void test (){
+ if ("true".equals(doCB)){
+ this.ttestCriteriaQuery();
+ }
+ else{
+ this.ttestGeneratedCriteriaQueryString();
+ }
+
+ }
+ /**
+ * This method produce wrong query like (note the extra T_DIM_DAY t3):
+ * SELECT t0.empl_cnt FROM
+ * T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1, T_DIM_DAY t3
+ * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND t0.pers_obj_id IN (
+ * SELECT t2.pers_obj_id FROM T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND
+ * t3.MNTH_STRT_DAY_KY >= ?)))
+ * [params=(String) dummy1, (int) 1, (String) dummy1, (long) 20150201]
+ *
+ * The correct query should be:
+ * SELECT t0.empl_cnt FROM
+ * T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1
+ * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND t0.pers_obj_id IN (
+ * SELECT t2.pers_obj_id FROM T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND
+ * t3.MNTH_STRT_DAY_KY >= ?)))
+ * [params=(String) dummy1, (int) 1, (String) dummy1, (long) 20150201]
+ *
+ */
+ public void ttestCriteriaQuery() {
+ EntityManager em = emf.createEntityManager();
+ resetSQL();
+ em.createQuery(critQuery).getResultList();
+ assertNotSQL(".*T_DIM_DAY t3.*");
+ assertSQL(".*T_DIM_DAY t1.*");
+ em.close();
+ }
+
+ /**
+ * If we execute just the string generated by Criteria Builder, we
+ * do not see an extra alias. We see:
+ * SELECT t0.empl_cnt FROM T_FACT_WORK_ASGNMT t0, T_DIM_DAY t1
+ * WHERE (t0.CLNT_OBJ_ID = ? AND t1.ROLL_13_MNTH_IND = ? AND
+ * t0.pers_obj_id IN (SELECT t2.pers_obj_id FROM
+ * T_FACT_WORK_ASGNMT t2 WHERE (t2.CLNT_OBJ_ID = ? AND
+ * t1.MNTH_STRT_DAY_KY = ?)))
+ */
+ public void ttestGeneratedCriteriaQueryString(){
+ if (!"true".equals(doCB)){
+ EntityManager em = emf.createEntityManager();
+ System.out.println("NOT doing CB");
+ resetSQL();
+ em.createQuery(critQueryString).getResultList();
+ assertNotSQL(".*T_DIM_DAY t3.*");
+ assertSQL(".*T_DIM_DAY t1.*");
+ em.close();
+ }
+ }
+
+ public CriteriaQuery<Tuple> createCriteriaBuilder(){
+ EntityManager em = emf.createEntityManager();
+
+ List<Predicate> predicates = new ArrayList<Predicate>();
+ CriteriaBuilder cb = em.getCriteriaBuilder();
+ CriteriaQuery<Tuple> cq = cb.createTupleQuery();
+ Root<DimDay> day = cq.from(DimDay.class);
+
+ Root<FactWorkAssignment> wa = cq.from(FactWorkAssignment.class);
+
+ predicates.add(cb.equal(wa.get(FactWorkAssignment_.orgOID), "dummy1"));
+ predicates.add(cb.equal(day.get(DimDay_.roll13MonthInd), 1));
+
+ Subquery<String> subQuery = cq.subquery(String.class);
+
+ Root<FactWorkAssignment> wa1 = subQuery.from(FactWorkAssignment.class);
+
+ subQuery.select(wa1.get(FactWorkAssignment_.personObjId));
+ List<Predicate> subQueryPredicates = new ArrayList<Predicate>();
+ subQueryPredicates.add(cb.equal(wa1.get(FactWorkAssignment_.orgOID), "dummy1"));
+
+ //Removing this seem to "fix" the issue....I think the fact that we use 'day' from
+ //the 'outer' query has an affect....is it OK to use 'day' from the outer query?? I'm
+ //assuming so since 'testGeneratedCriteriaQueryString' generates the expected SQL.
+// subQueryPredicates.add(cb.greaterThanOrEqualTo(day.get(DimDay_.monthStrtDate), new Long(20150201L)));
+ subQueryPredicates.add(cb.equal(day.get(DimDay_.monthStrtDate), new Long(20150201L)));
+
+ //Doing this places the 'T_DIM_DAY t3' in the 'inner'/sub query. Is this the proper solution?? Or just a
+ //hacky work around?
+ //Root<DimDay> day2 = subQuery.from(DimDay.class);
+ //subQueryPredicates.add(cb.greaterThanOrEqualTo(day2.get(DimDay_.monthStrtDate), new Long(20150201L)));
+
+ subQuery.where(subQueryPredicates.toArray(new Predicate[] {}));
+
+ Predicate predicate = wa.get(FactWorkAssignment_.personObjId).in(subQuery);
+
+ predicates.add(predicate);
+
+ List<Selection<?>> selections = new ArrayList<Selection<?>>();
+
+ Expression<Integer> expHC = wa.get(FactWorkAssignment_.employeeCount);
+ selections.add(expHC);
+
+ cq.multiselect(selections).where(predicates.toArray(new Predicate[] {}));
+
+ return cq;
+ }
+}