cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ntimof...@apache.org
Subject [cayenne] branch master updated: CAY-2578 Wrong bindings in select of related entity by compound FK fix tests
Date Sat, 11 May 2019 13:48:34 GMT
This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new efcba9b  CAY-2578 Wrong bindings in select of related entity by compound FK   fix
tests
efcba9b is described below

commit efcba9bb11e53ba1b608dd11bee33b77fec3e3a0
Author: Nikita Timofeev <stariy95@gmail.com>
AuthorDate: Sat May 11 16:48:18 2019 +0300

    CAY-2578 Wrong bindings in select of related entity by compound FK
      fix tests
---
 .../src/main/java/org/apache/cayenne/dba/JdbcAdapter.java      | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index 8da76e0..2ad9d06 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -55,6 +55,7 @@ import java.sql.PreparedStatement;
 import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.function.Function;
@@ -456,7 +457,14 @@ public class JdbcAdapter implements DbAdapter {
 
         boolean first = true;
 
-        for (DbJoin join : rel.getJoins()) {
+        // sort joins in the order PK are set in target, to avoid errors on some DBs
+        List<DbJoin> joins = rel.getJoins();
+        if(rel.isToPK()) {
+            List<DbAttribute> pks = rel.getTargetEntity().getPrimaryKeys();
+            joins.sort(Comparator.comparingInt(join -> pks.indexOf(join.getTarget())));
+        }
+
+        for (DbJoin join : joins) {
             if (first) {
                 first = false;
             } else {


Mime
View raw message