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