This is an automated email from the ASF dual-hosted git repository.
rubenql pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git
The following commit(s) were added to refs/heads/main by this push:
new af0e9e44c [CALCITE-5257] NVARCHAR is treated as 'UNKNOWN TYPE' when
searching Oracle
af0e9e44c is described below
commit af0e9e44ccff4580c1560835da62e8d593181c86
Author: ILuffZhe <[email protected]>
AuthorDate: Sat Sep 3 12:09:10 2022 +0800
[CALCITE-5257] NVARCHAR is treated as 'UNKNOWN TYPE' when searching Oracle
---
.../calcite/avatica/util/AbstractCursor.java | 1 +
.../calcite/avatica/CursorFactoryDeduceTest.java | 27 ++++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
b/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
index b3f68020f..fed875035 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
@@ -129,6 +129,7 @@ public abstract class AbstractCursor implements Cursor {
return new FixedStringAccessor(getter, columnMetaData.displaySize);
}
case Types.VARCHAR:
+ case Types.NVARCHAR:
return new StringAccessor(getter);
case Types.BINARY:
case Types.VARBINARY:
diff --git
a/core/src/test/java/org/apache/calcite/avatica/CursorFactoryDeduceTest.java
b/core/src/test/java/org/apache/calcite/avatica/CursorFactoryDeduceTest.java
index 11f0464ed..6050ba425 100644
--- a/core/src/test/java/org/apache/calcite/avatica/CursorFactoryDeduceTest.java
+++ b/core/src/test/java/org/apache/calcite/avatica/CursorFactoryDeduceTest.java
@@ -43,6 +43,8 @@ public class CursorFactoryDeduceTest {
ColumnMetaData.scalar(Types.INTEGER, "INT",
ColumnMetaData.Rep.PRIMITIVE_INT);
static final ColumnMetaData.AvaticaType STRING_TYPE =
ColumnMetaData.scalar(Types.VARCHAR, "STRING",
ColumnMetaData.Rep.STRING);
+ static final ColumnMetaData.AvaticaType NVARCHAR_STRING_TYPE =
+ ColumnMetaData.scalar(Types.NVARCHAR, "STRING",
ColumnMetaData.Rep.STRING);
static final ColumnMetaData.AvaticaType DOUBLE_TYPE =
ColumnMetaData.scalar(Types.DOUBLE, "DOUBLE", ColumnMetaData.Rep.DOUBLE);
@@ -217,6 +219,31 @@ public class CursorFactoryDeduceTest {
assertFalse(cursor.next());
}
}
+
+ @Test public void deduceRecordCursorFactoryProjectedNvarcharField() throws
Exception {
+ List<ColumnMetaData> columnsMetaDataList = Arrays.asList(
+ MetaImpl.columnMetaData("stringField", 1, NVARCHAR_STRING_TYPE, true),
+ MetaImpl.columnMetaData("doubleField", 2, DOUBLE_TYPE, true)
+ );
+ Meta.CursorFactory cursorFactory =
+ Meta.CursorFactory.deduce(columnsMetaDataList, SimplePOJO.class);
+
+ try (Cursor cursor = MetaImpl.createCursor(cursorFactory, ROWS)) {
+ List<Cursor.Accessor> accessors =
+ cursor.createAccessors(columnsMetaDataList, Unsafe.localCalendar(),
null);
+
+ assertEquals(columnsMetaDataList.size(), accessors.size());
+ Cursor.Accessor strAccessor = accessors.get(0);
+
+ for (Object row : ROWS) {
+ assertTrue(cursor.next());
+ SimplePOJO pjo = (SimplePOJO) row;
+ assertEquals(pjo.stringField, strAccessor.getObject());
+ }
+
+ assertFalse(cursor.next());
+ }
+ }
}
// End CursorFactoryDeduceTest.java