protected virtual void SetSchemaType(DataRow schemaRow, ResultSetMetaData metaData, int columnIndex) {
DbConvert.JavaSqlTypes columnType = (DbConvert.JavaSqlTypes)metaData.getColumnType(columnIndex);
switch (columnType) {
case DbConvert.JavaSqlTypes.ARRAY: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Array);
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.BIGINT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt64;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.BINARY: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.BIT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfBoolean;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.BLOB: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.VARCHAR:
case DbConvert.JavaSqlTypes.CHAR: {
// FIXME : specific for Microsoft SQl Server driver
if (String.CompareOrdinal(metaData.getColumnTypeName(columnIndex), "uniqueidentifier") == 0) {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Guid;
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfGuid;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
}
else
if (String.CompareOrdinal(metaData.getColumnTypeName(columnIndex), "sql_variant") == 0) {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Object;
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
}
else {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
}
break;
}
case DbConvert.JavaSqlTypes.CLOB: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString; // instead og .java.sql.Clob
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.DATE: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDateTime;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
// else if(DbConvert.JavaSqlTypes.DISTINCT)
// {
// schemaRow ["ProviderType = (int)GetProviderType((int)columnType);
// schemaRow ["DataType = typeof (?);
// schemaRow ["IsLong = false;
// }
case DbConvert.JavaSqlTypes.DOUBLE: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble; // was typeof(float)
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.FLOAT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.REAL: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfFloat;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.INTEGER: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt32;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.JAVA_OBJECT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.LONGVARBINARY: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.LONGVARCHAR: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfString;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.DECIMAL:
case DbConvert.JavaSqlTypes.NUMERIC: {
int scale = ResultsMetaData.getScale(columnIndex);
if (scale == -127) {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDouble;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
}
else {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDecimal;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
}
break;
}
case DbConvert.JavaSqlTypes.REF: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Ref);
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
case DbConvert.JavaSqlTypes.SMALLINT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfInt16;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.STRUCT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = typeof (java.sql.Struct);
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.TIME: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfTimespan;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.TIMESTAMP: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfDateTime;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.TINYINT: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByte;
schemaRow [(int)SCHEMA_TABLE.IsLong] = false;
break;
}
case DbConvert.JavaSqlTypes.VARBINARY: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = GetProviderType((int)columnType);
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfByteArray;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
default: {
schemaRow [(int)SCHEMA_TABLE.ProviderType] = DbType.Object;
schemaRow [(int)SCHEMA_TABLE.DataType] = DbTypes.TypeOfObject;
schemaRow [(int)SCHEMA_TABLE.IsLong] = true;
break;
}
}
}