CAY-2631 Can no longer use "byte[]" as root of scalar SQLSelect
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 7c31a98..05ba637 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -101,6 +101,7 @@
CAY-2624 SelectQuery "having" qualifier is not considered when calculating cache key
CAY-2627 Modeler: ObjRelationship creation dialog ignores delete rule
CAY-2628 dbimport: unable to add several relationships to existing entity
+CAY-2631 Can no longer use "byte[]" as root of scalar SQLSelect
----------------------------------
Release: 4.1.B1
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
index c3029ab..118cdd6 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java
@@ -317,7 +317,7 @@
ColumnDescriptor[] columnDescriptors = new ColumnDescriptor[size];
for(int i = 0; i < size; i++) {
ColumnDescriptor columnDescriptor = new ColumnDescriptor();
- columnDescriptor.setJavaClass(query.getResultColumnsTypes().get(i).getName());
+ columnDescriptor.setJavaClass(query.getResultColumnsTypes().get(i).getCanonicalName());
columnDescriptors[i] = columnDescriptor;
}
return columnDescriptors;
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
index 57d4845..0a4e71e 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
@@ -58,14 +58,20 @@
private TableHelper tArtistCt;
+ private TableHelper tPaintingInfo;
+
@Before
public void before() {
tPainting = new TableHelper(dbHelper, "PAINTING")
- .setColumns("PAINTING_ID", "PAINTING_TITLE", "ESTIMATED_PRICE").setColumnTypes(Types.INTEGER,
- Types.VARCHAR, Types.DECIMAL);
+ .setColumns("PAINTING_ID", "PAINTING_TITLE", "ESTIMATED_PRICE")
+ .setColumnTypes(Types.INTEGER, Types.VARCHAR, Types.DECIMAL);
- tArtistCt = new TableHelper(dbHelper, "ARTIST_CT");
- tArtistCt.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
+ tArtistCt = new TableHelper(dbHelper, "ARTIST_CT")
+ .setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
+
+ tPaintingInfo = new TableHelper(dbHelper, "PAINTING_INFO")
+ .setColumns("PAINTING_ID", "IMAGE_BLOB")
+ .setColumnTypes(Types.INTEGER, Types.LONGVARBINARY);
}
private void createPaintingsDataSet() throws Exception {
@@ -538,6 +544,18 @@
assertEquals(1L, ids.get(0).longValue());
}
+ @Test
+ public void testByteArray() throws Exception {
+ byte[] data = {1, 2, 3};
+ tPainting.insert(1, "test", 0);
+ tPaintingInfo.insert(1, data);
+
+ byte[] bytes = SQLSelect
+ .scalarQuery("SELECT IMAGE_BLOB FROM PAINTING_INFO", byte[].class)
+ .selectOne(context);
+ assertArrayEquals(data, bytes);
+ }
+
static class ArtistDataWrapper {
long id;
String name;