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 <iluff...@163.com>
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

Reply via email to