You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ab...@apache.org on 2019/06/26 13:27:32 UTC

[cayenne] branch master updated (362c9bf -> 4422aa5)

This is an automated email from the ASF dual-hosted git repository.

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


    from 362c9bf  CAY-2541 Add test.
     new c7c8ef4  CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException
     new 01f3755  CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException
     new 4422aa5  Merge PR #393

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 RELEASE-NOTES.txt                                  |  1 +
 .../cayenne/access/jdbc/reader/IdRowReader.java    | 10 +++--
 .../org/apache/cayenne/query/ColumnSelectIT.java   | 51 ++++++++++++++++++++++
 3 files changed, 59 insertions(+), 3 deletions(-)


[cayenne] 03/03: Merge PR #393

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 4422aa56a64bbb7a0f4e88d339186b6187a88e89
Merge: 362c9bf 01f3755
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Wed Jun 26 16:23:51 2019 +0300

    Merge PR #393

 RELEASE-NOTES.txt                                  |  1 +
 .../cayenne/access/jdbc/reader/IdRowReader.java    | 10 +++--
 .../org/apache/cayenne/query/ColumnSelectIT.java   | 51 ++++++++++++++++++++++
 3 files changed, 59 insertions(+), 3 deletions(-)


[cayenne] 01/03: CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c7c8ef44b14257ae4fd7b35514b9349e9b874472
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Tue Jun 25 13:48:49 2019 +0300

    CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException
---
 RELEASE-NOTES.txt                                       |  1 +
 .../apache/cayenne/access/jdbc/reader/IdRowReader.java  | 14 ++++++++++----
 .../java/org/apache/cayenne/query/ColumnSelectIT.java   | 17 +++++++++++++++++
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 1fa3317..39f91cd 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@ CAY-2577 Between property with extended type failure
 CAY-2578 Wrong bindings in select of related entity by compound FK
 CAY-2580 Cgen: Can't use custom templates for client mode
 CAY-2582 Double insert of manyToMany relationship mapped to Set
+CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException
 
 ----------------------------------
 Release: 4.1.B1
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
index 528417a..4005fae 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
@@ -19,6 +19,8 @@
 package org.apache.cayenne.access.jdbc.reader;
 
 import java.sql.ResultSet;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataRow;
@@ -54,12 +56,16 @@ class IdRowReader<T> extends BaseRowReader<T> {
             throw new CayenneRuntimeException("Root DBEntity has no PK defined: %s", dbEntity);
         }
 
-        int[] pk = new int[len];
         ColumnDescriptor[] columns = descriptor.getColumns();
-        for (int i = 0, j = 0; i < columns.length; i++) {
+
+        Set<DbAttribute> addedAttributes = new HashSet<>();
+        int[] pk = new int[len];
+        int index = 0;
+        for(int i = 0; i < columns.length; i++) {
             DbAttribute a = dbEntity.getAttribute(columns[i].getName());
-            if (a != null && a.isPrimaryKey()) {
-                pk[j++] = i;
+            if(a != null && a.isPrimaryKey() && !addedAttributes.contains(a)) {
+                pk[index++] = i;
+                addedAttributes.add(a);
             }
         }
 
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
index 53b25a3..d275b51 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
@@ -36,6 +36,7 @@ import org.apache.cayenne.ResultBatchIterator;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.exp.ExpressionFactory;
 import org.apache.cayenne.exp.property.EntityProperty;
 import org.apache.cayenne.exp.property.NumericProperty;
 import org.apache.cayenne.exp.property.PropertyFactory;
@@ -1101,4 +1102,20 @@ public class ColumnSelectIT extends ServerCase {
         assertNotNull(artist);
         assertTrue(artist.getArtistName().startsWith("artist"));
     }
+
+    @Test
+    public void test2PkSelect() {
+        List<Object[]> results = ObjectSelect.columnQuery(Artist.class,
+                PropertyFactory.createSelf(Artist.class),
+                PropertyFactory
+                        .createBase(ExpressionFactory
+                                .dbPathExp("paintingArray.toArtist.ARTIST_ID"),
+                                Integer.class))
+                .where(Artist.ARTIST_ID_PK_PROPERTY.eq(1L))
+                .pageSize(1)
+                .select(context);
+        assertEquals(1, results.size());
+        assertEquals("artist1", ((Artist)results.get(0)[0]).getArtistName());
+        assertEquals(1, results.get(0)[1]);
+    }
 }


[cayenne] 02/03: CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 01f3755859d5933971a9941a0ae25a8780904ff9
Author: Arseni Bulatski <an...@gmail.com>
AuthorDate: Wed Jun 26 16:21:14 2019 +0300

    CAY-2588 IdRowReader: ArrayIndexOutOfBoundsException
---
 .../cayenne/access/jdbc/reader/IdRowReader.java    | 14 ++++-----
 .../org/apache/cayenne/query/ColumnSelectIT.java   | 34 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
index 4005fae..2b4d79a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java
@@ -19,8 +19,6 @@
 package org.apache.cayenne.access.jdbc.reader;
 
 import java.sql.ResultSet;
-import java.util.HashSet;
-import java.util.Set;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.DataRow;
@@ -58,14 +56,14 @@ class IdRowReader<T> extends BaseRowReader<T> {
 
         ColumnDescriptor[] columns = descriptor.getColumns();
 
-        Set<DbAttribute> addedAttributes = new HashSet<>();
         int[] pk = new int[len];
-        int index = 0;
-        for(int i = 0; i < columns.length; i++) {
+        int offset = resultMetadata != null ?
+                resultMetadata.getColumnOffset() :
+                0;
+        for(int i = offset, j = 0; i < offset + len; i++) {
             DbAttribute a = dbEntity.getAttribute(columns[i].getName());
-            if(a != null && a.isPrimaryKey() && !addedAttributes.contains(a)) {
-                pk[index++] = i;
-                addedAttributes.add(a);
+            if(a != null && a.isPrimaryKey()) {
+                pk[j++] = i;
             }
         }
 
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
index d275b51..3f31925 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/ColumnSelectIT.java
@@ -44,6 +44,8 @@ import org.apache.cayenne.exp.property.StringProperty;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.testdo.testmap.ArtistExhibit;
+import org.apache.cayenne.testdo.testmap.Exhibit;
 import org.apache.cayenne.testdo.testmap.Gallery;
 import org.apache.cayenne.testdo.testmap.Painting;
 import org.apache.cayenne.testdo.testmap.PaintingInfo;
@@ -1118,4 +1120,36 @@ public class ColumnSelectIT extends ServerCase {
         assertEquals("artist1", ((Artist)results.get(0)[0]).getArtistName());
         assertEquals(1, results.get(0)[1]);
     }
+
+    @Test
+    public void test2Objects2Pk() {
+        Artist artist = ObjectSelect.query(Artist.class)
+                .where(Artist.ARTIST_ID_PK_PROPERTY.eq(1L))
+                .selectFirst(context);
+        ArtistExhibit artistExhibit = context.newObject(ArtistExhibit.class);
+        Exhibit exhibit = context.newObject(Exhibit.class);
+        exhibit.setOpeningDate(new Date());
+        exhibit.setClosingDate(new Date());
+        artistExhibit.setToArtist(artist);
+        artistExhibit.setToExhibit(exhibit);
+        Gallery gallery = context.newObject(Gallery.class);
+        gallery.setGalleryName("Test");
+        exhibit.setToGallery(gallery);
+        context.commitChanges();
+
+        List<Object[]> results = ObjectSelect.columnQuery(Artist.class,
+                Artist.ARTIST_NAME,
+                PropertyFactory.createSelf(Artist.class),
+                PropertyFactory
+                        .createBase(ExpressionFactory
+                                        .dbPathExp("artistExhibitArray.ARTIST_ID"),
+                                Integer.class))
+                .where(Artist.ARTIST_ID_PK_PROPERTY.eq(1L))
+                .pageSize(1)
+                .select(context);
+        assertEquals(1, results.size());
+        assertEquals("artist1", results.get(0)[0]);
+        assertEquals("artist1", ((Artist)results.get(0)[1]).getArtistName());
+        assertEquals(1, results.get(0)[2]);
+    }
 }