System.Data.ProviderBase.AbstractDataReader.CreateReaderCacheContainer C# (CSharp) Method

CreateReaderCacheContainer() protected method

protected CreateReaderCacheContainer ( int jdbcType, int columnIndex ) : IReaderCacheContainer
jdbcType int
columnIndex int
return IReaderCacheContainer
		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();
			}
		}