[CALCITE-4757] Allow columns of type Null in ResultSet (NobiGo)

Close apache/calcite-avatica#152
diff --git a/core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java b/core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java
index b7f46a0..e70aa87 100644
--- a/core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java
+++ b/core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java
@@ -343,6 +343,7 @@
       }
       return anInt;
     case Types.JAVA_OBJECT:
+    case Types.NULL:
     case Types.OTHER:
       return accessor.getObject();
     case Types.LONGNVARCHAR:
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 f23a372..fa357d5 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
@@ -211,6 +211,7 @@
         throw new AssertionError("bad " + columnMetaData.type.rep);
       }
     case Types.JAVA_OBJECT:
+    case Types.NULL:
     case Types.OTHER: // e.g. map
       if (columnMetaData.type.getName().startsWith("INTERVAL_")) {
         int end = columnMetaData.type.getName().indexOf("(");
diff --git a/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetConversionsTest.java b/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetConversionsTest.java
index 694c7f6..c49e047 100644
--- a/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetConversionsTest.java
+++ b/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetConversionsTest.java
@@ -176,7 +176,11 @@
           columnMetaData("bit", 13,
               ColumnMetaData.scalar(Types.BIT, "BIT",
                   ColumnMetaData.Rep.PRIMITIVE_BOOLEAN),
-              DatabaseMetaData.columnNoNulls));
+              DatabaseMetaData.columnNoNulls),
+          columnMetaData("null", 14,
+              ColumnMetaData.scalar(Types.NULL, "NULL",
+                  ColumnMetaData.Rep.OBJECT),
+              DatabaseMetaData.columnNullable));
 
       List<Object> row = Collections.<Object>singletonList(
           new Object[] {
@@ -185,7 +189,8 @@
               new Timestamp(1476130718123L),
               Arrays.asList(1, 2, 3),
               new StructImpl(Arrays.asList(42, false)),
-              false
+              false,
+              null,
           });
 
       CursorFactory factory = CursorFactory.deduce(columns, null);