in core/src/main/java/org/apache/calcite/avatica/AvaticaSite.java [293:383]
public static Object get(Cursor.Accessor accessor, int targetSqlType,
Calendar localCalendar) throws SQLException {
switch (targetSqlType) {
case Types.CLOB:
case Types.DATALINK:
case Types.NCLOB:
case Types.REF:
case Types.SQLXML:
throw notImplemented();
case Types.STRUCT:
return accessor.getStruct();
case Types.ARRAY:
return accessor.getArray();
case Types.BIGINT:
final long aLong = accessor.getLong();
if (aLong == 0 && accessor.wasNull()) {
return null;
}
return aLong;
case Types.BINARY:
case Types.LONGVARBINARY:
case Types.VARBINARY:
return accessor.getBytes();
case Types.BIT:
case Types.BOOLEAN:
final boolean aBoolean = accessor.getBoolean();
if (!aBoolean && accessor.wasNull()) {
return null;
}
return aBoolean;
case Types.BLOB:
return accessor.getBlob();
case Types.DATE:
return accessor.getDate(localCalendar);
case Types.DECIMAL:
case Types.NUMERIC:
return accessor.getBigDecimal();
case Types.DISTINCT:
throw notImplemented();
case Types.DOUBLE:
case Types.FLOAT: // yes really; SQL FLOAT is up to 8 bytes
final double aDouble = accessor.getDouble();
if (aDouble == 0 && accessor.wasNull()) {
return null;
}
return aDouble;
case Types.INTEGER:
final int anInt = accessor.getInt();
if (anInt == 0 && accessor.wasNull()) {
return null;
}
return anInt;
case Types.JAVA_OBJECT:
case Types.NULL:
case Types.OTHER:
return accessor.getObject();
case Types.LONGNVARCHAR:
case Types.LONGVARCHAR:
case Types.NVARCHAR:
case Types.VARCHAR:
case Types.CHAR:
case Types.NCHAR:
return accessor.getString();
case Types.REAL:
final float aFloat = accessor.getFloat();
if (aFloat == 0 && accessor.wasNull()) {
return null;
}
return aFloat;
case Types.ROWID:
throw notImplemented();
case Types.SMALLINT:
final short aShort = accessor.getShort();
if (aShort == 0 && accessor.wasNull()) {
return null;
}
return aShort;
case Types.TIME:
return accessor.getTime(localCalendar);
case Types.TIMESTAMP:
return accessor.getTimestamp(localCalendar);
case Types.TINYINT:
final byte aByte = accessor.getByte();
if (aByte == 0 && accessor.wasNull()) {
return null;
}
return aByte;
default:
throw notImplemented();
}
}