protected virtual IReaderCacheContainer CreateReaderCacheContainer(int jdbcType, int columnIndex) {
switch ((DbConvert.JavaSqlTypes)jdbcType) {
case DbConvert.JavaSqlTypes.ARRAY :
return new ArrayReaderCacheContainer();
case DbConvert.JavaSqlTypes.BIGINT :
return new Int64ReaderCacheContainer();
case DbConvert.JavaSqlTypes.BINARY :
case DbConvert.JavaSqlTypes.VARBINARY :
case DbConvert.JavaSqlTypes.LONGVARBINARY :
return new BytesReaderCacheContainer();
case DbConvert.JavaSqlTypes.BIT :
return new BooleanReaderCacheContainer();
case DbConvert.JavaSqlTypes.BLOB :
return new BlobReaderCacheContainer();
case DbConvert.JavaSqlTypes.VARCHAR:
case DbConvert.JavaSqlTypes.CHAR :
if (String.CompareOrdinal("uniqueidentifier", ResultsMetaData.getColumnTypeName(columnIndex)) == 0) {
return new GuidReaderCacheContainer();
}
else {
return new StringReaderCacheContainer();
}
case DbConvert.JavaSqlTypes.CLOB :
return new ClobReaderCacheContainer();
case DbConvert.JavaSqlTypes.TIME :
return new TimeSpanReaderCacheContainer();
case DbConvert.JavaSqlTypes.DATE :
AbstractDBConnection conn = (AbstractDBConnection)((ICloneable)_command.Connection);
string driverName = conn.JdbcConnection.getMetaData().getDriverName();
if (driverName.StartsWith("PostgreSQL")) {
return new DateTimeReaderCacheContainer();
}
else
goto case DbConvert.JavaSqlTypes.TIMESTAMP;
case DbConvert.JavaSqlTypes.TIMESTAMP :
return new TimestampReaderCacheContainer();
case DbConvert.JavaSqlTypes.DECIMAL :
case DbConvert.JavaSqlTypes.NUMERIC :
// jdbc driver for oracle identitfies both FLOAT and NUMBEr columns as
// java.sql.Types.NUMERIC (2), columnTypeName NUMBER, columnClassName java.math.BigDecimal
// therefore we relay on scale
int scale = ResultsMetaData.getScale(columnIndex);
if (scale == -127) {
// Oracle db type FLOAT
return new DoubleReaderCacheContainer();
}
else {
return new DecimalReaderCacheContainer();
}
case DbConvert.JavaSqlTypes.DOUBLE :
case DbConvert.JavaSqlTypes.FLOAT :
return new DoubleReaderCacheContainer();
case DbConvert.JavaSqlTypes.INTEGER :
return new Int32ReaderCacheContainer();
case DbConvert.JavaSqlTypes.LONGVARCHAR :
return new StringReaderCacheContainer();
case DbConvert.JavaSqlTypes.NULL :
return new NullReaderCacheContainer();
case DbConvert.JavaSqlTypes.REAL :
return new FloatReaderCacheContainer();
case DbConvert.JavaSqlTypes.REF :
return new RefReaderCacheContainer();
case DbConvert.JavaSqlTypes.SMALLINT :
return new Int16ReaderCacheContainer();
case DbConvert.JavaSqlTypes.TINYINT :
return new ByteReaderCacheContainer();
case DbConvert.JavaSqlTypes.DISTINCT :
case DbConvert.JavaSqlTypes.JAVA_OBJECT :
case DbConvert.JavaSqlTypes.OTHER :
case DbConvert.JavaSqlTypes.STRUCT :
default :
return new ObjectReaderCacheContainer();
}
}