-/*\r
- * Firebird ADO.NET Data provider for .NET and Mono \r
- * \r
- * The contents of this file are subject to the Initial \r
- * Developer's Public License Version 1.0 (the "License"); \r
- * you may not use this file except in compliance with the \r
- * License. You may obtain a copy of the License at \r
- * http://www.firebirdsql.org/index.php?op=doc&id=idpl\r
- *\r
- * Software distributed under the License is distributed on \r
- * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either \r
- * express or implied. See the License for the specific \r
- * language governing rights and limitations under the License.\r
- * \r
- * Copyright (c) 2002, 2005 Carlos Guzman Alvarez\r
- * All Rights Reserved.\r
- */\r
-\r
-using System;\r
-using System.Data;\r
-\r
-namespace FirebirdSql.Data.Common\r
-{\r
- internal sealed class TypeHelper\r
- {\r
- #region Constructors\r
-\r
- private TypeHelper()\r
- {\r
- }\r
-\r
- #endregion\r
-\r
- #region Static Methods\r
-\r
- public static short GetSize(DbDataType dataType)\r
- {\r
- switch (dataType)\r
- {\r
- case DbDataType.Array:\r
- case DbDataType.Binary:\r
- case DbDataType.Text:\r
- return 8;\r
-\r
- case DbDataType.SmallInt:\r
- return 2;\r
-\r
- case DbDataType.Integer:\r
- case DbDataType.Float:\r
- case DbDataType.Date:\r
- case DbDataType.Time:\r
- return 4;\r
-\r
- case DbDataType.BigInt:\r
- case DbDataType.Double:\r
- case DbDataType.TimeStamp:\r
- return 8;\r
-\r
- case DbDataType.Guid:\r
- return 16;\r
-\r
- default:\r
- return 0;\r
- }\r
- }\r
-\r
- public static int GetFbType(DbDataType dataType, bool isNullable)\r
- {\r
- int sqltype = 0;\r
-\r
- switch (dataType)\r
- {\r
- case DbDataType.Array:\r
- sqltype = IscCodes.SQL_ARRAY;\r
- break;\r
-\r
- case DbDataType.Binary:\r
- case DbDataType.Text:\r
- sqltype = IscCodes.SQL_BLOB;\r
- break;\r
-\r
- case DbDataType.Char:\r
- sqltype = IscCodes.SQL_TEXT;\r
- break;\r
-\r
- case DbDataType.VarChar:\r
- sqltype = IscCodes.SQL_VARYING;\r
- break;\r
-\r
- case DbDataType.SmallInt:\r
- sqltype = IscCodes.SQL_SHORT;\r
- break;\r
-\r
- case DbDataType.Integer:\r
- sqltype = IscCodes.SQL_LONG;\r
- break;\r
-\r
- case DbDataType.BigInt:\r
- sqltype = IscCodes.SQL_INT64;\r
- break;\r
-\r
- case DbDataType.Float:\r
- sqltype = IscCodes.SQL_FLOAT;\r
- break;\r
-\r
- case DbDataType.Guid:\r
- sqltype = IscCodes.SQL_TEXT;\r
- break;\r
-\r
- case DbDataType.Double:\r
- sqltype = IscCodes.SQL_DOUBLE;\r
- break;\r
-\r
- case DbDataType.Date:\r
- sqltype = IscCodes.SQL_TYPE_DATE;\r
- break;\r
-\r
- case DbDataType.Time:\r
- sqltype = IscCodes.SQL_TYPE_TIME;\r
- break;\r
-\r
- case DbDataType.TimeStamp:\r
- sqltype = IscCodes.SQL_TIMESTAMP;\r
- break;\r
-\r
- default:\r
- throw new ArgumentException("Invalid data type");\r
- }\r
-\r
- if (isNullable)\r
- {\r
- sqltype++;\r
- }\r
-\r
- return sqltype;\r
- }\r
-\r
- public static int GetFbType(int blrType)\r
- {\r
- switch (blrType)\r
- {\r
- case IscCodes.blr_varying:\r
- case IscCodes.blr_varying2:\r
- return IscCodes.SQL_VARYING;\r
-\r
- case IscCodes.blr_text:\r
- case IscCodes.blr_text2:\r
- case IscCodes.blr_cstring:\r
- case IscCodes.blr_cstring2:\r
- return IscCodes.SQL_TEXT;\r
-\r
- case IscCodes.blr_short:\r
- return IscCodes.SQL_SHORT;\r
-\r
- case IscCodes.blr_long:\r
- return IscCodes.SQL_LONG;\r
-\r
- case IscCodes.blr_quad:\r
- return IscCodes.SQL_QUAD;\r
-\r
- case IscCodes.blr_int64:\r
- case IscCodes.blr_blob_id:\r
- return IscCodes.SQL_INT64;\r
-\r
- case IscCodes.blr_double:\r
- return IscCodes.SQL_DOUBLE;\r
-\r
- case IscCodes.blr_d_float:\r
- return IscCodes.SQL_D_FLOAT;\r
-\r
- case IscCodes.blr_float:\r
- return IscCodes.SQL_FLOAT;\r
-\r
- case IscCodes.blr_sql_date:\r
- return IscCodes.SQL_TYPE_DATE;\r
-\r
- case IscCodes.blr_sql_time:\r
- return IscCodes.SQL_TYPE_TIME;\r
-\r
- case IscCodes.blr_timestamp:\r
- return IscCodes.SQL_TIMESTAMP;\r
-\r
- case IscCodes.blr_blob:\r
- return IscCodes.SQL_BLOB;\r
-\r
- default:\r
- throw new ArgumentException("Invalid data type");\r
- }\r
- }\r
-\r
- public static DbDataType GetDbDataType(int blrType, int subType, int scale)\r
- {\r
- switch (blrType)\r
- {\r
- case IscCodes.blr_varying:\r
- case IscCodes.blr_varying2:\r
- return DbDataType.VarChar;\r
-\r
- case IscCodes.blr_text:\r
- case IscCodes.blr_text2:\r
- return DbDataType.Char;\r
-\r
- case IscCodes.blr_cstring:\r
- case IscCodes.blr_cstring2:\r
- return DbDataType.Text;\r
-\r
- case IscCodes.blr_short:\r
- if (subType == 2)\r
- {\r
- return DbDataType.Decimal;\r
- }\r
- else if (subType == 1)\r
- {\r
- return DbDataType.Numeric;\r
- }\r
- else\r
- {\r
- return DbDataType.SmallInt;\r
- }\r
-\r
- case IscCodes.blr_long:\r
- if (subType == 2)\r
- {\r
- return DbDataType.Decimal;\r
- }\r
- else if (subType == 1)\r
- {\r
- return DbDataType.Numeric;\r
- }\r
- else\r
- {\r
- return DbDataType.Integer;\r
- }\r
-\r
- case IscCodes.blr_quad:\r
- case IscCodes.blr_int64:\r
- case IscCodes.blr_blob_id:\r
- if (subType == 2)\r
- {\r
- return DbDataType.Decimal;\r
- }\r
- else if (subType == 1)\r
- {\r
- return DbDataType.Numeric;\r
- }\r
- else\r
- {\r
- return DbDataType.BigInt;\r
- }\r
-\r
- case IscCodes.blr_double:\r
- case IscCodes.blr_d_float:\r
- return DbDataType.Double;\r
-\r
- case IscCodes.blr_float:\r
- return DbDataType.Float;\r
-\r
- case IscCodes.blr_sql_date:\r
- return DbDataType.Date;\r
-\r
- case IscCodes.blr_sql_time:\r
- return DbDataType.Time;\r
-\r
- case IscCodes.blr_timestamp:\r
- return DbDataType.TimeStamp;\r
-\r
- case IscCodes.blr_blob:\r
- if (subType == 1)\r
- {\r
- return DbDataType.Text;\r
- }\r
- else\r
- {\r
- return DbDataType.Binary;\r
- }\r
-\r
- default:\r
- throw new ArgumentException("Invalid data type");\r
- }\r
- }\r
-\r
- public static string GetDataTypeName(DbDataType dataType)\r
- {\r
- switch (dataType)\r
- {\r
- case DbDataType.Array:\r
- return "ARRAY";\r
-\r
- case DbDataType.Binary:\r
- return "BLOB";\r
-\r
- case DbDataType.Text:\r
- return "BLOB SUB_TYPE 1";\r
-\r
- case DbDataType.Char:\r
- case DbDataType.Guid:\r
- return "CHAR";\r
-\r
- case DbDataType.VarChar:\r
- return "VARCHAR";\r
-\r
- case DbDataType.SmallInt:\r
- return "SMALLINT";\r
-\r
- case DbDataType.Integer:\r
- return "INTEGER";\r
-\r
- case DbDataType.Float:\r
- return "FLOAT";\r
-\r
- case DbDataType.Double:\r
- return "DOUBLE PRECISION";\r
-\r
- case DbDataType.BigInt:\r
- return "BIGINT";\r
-\r
- case DbDataType.Numeric:\r
- return "NUMERIC";\r
-\r
- case DbDataType.Decimal:\r
- return "DECIMAL";\r
-\r
- case DbDataType.Date:\r
- return "DATE";\r
-\r
- case DbDataType.Time:\r
- return "TIME";\r
-\r
- case DbDataType.TimeStamp:\r
- return "TIMESTAMP";\r
-\r
- default:\r
- return null;\r
- }\r
- }\r
-\r
- public static DbType GetDbType(DbDataType type)\r
- {\r
- switch (type)\r
- {\r
- case DbDataType.Array:\r
- case DbDataType.Binary:\r
- return DbType.Binary;\r
-\r
- case DbDataType.Text:\r
- case DbDataType.VarChar:\r
- case DbDataType.Char:\r
- return DbType.String;\r
-\r
- case DbDataType.SmallInt:\r
- return DbType.Int16;\r
-\r
- case DbDataType.Integer:\r
- return DbType.Int32;\r
-\r
- case DbDataType.BigInt:\r
- return DbType.Int64;\r
-\r
- case DbDataType.Date:\r
- return DbType.Date;\r
-\r
- case DbDataType.Time:\r
- return DbType.Time;\r
-\r
- case DbDataType.TimeStamp:\r
- return DbType.DateTime;\r
-\r
- case DbDataType.Numeric:\r
- case DbDataType.Decimal:\r
- return DbType.Decimal;\r
-\r
- case DbDataType.Float:\r
- return DbType.Single;\r
-\r
- case DbDataType.Double:\r
- return DbType.Double;\r
-\r
- case DbDataType.Guid:\r
- return DbType.Guid;\r
-\r
- default:\r
- throw new ArgumentException("Invalid data type");\r
- }\r
- }\r
-\r
- public static DbDataType GetDbDataType(DbType dbType)\r
- {\r
- switch (dbType)\r
- {\r
- case DbType.String:\r
- case DbType.AnsiString:\r
- return DbDataType.VarChar;\r
-\r
- case DbType.StringFixedLength:\r
- case DbType.AnsiStringFixedLength:\r
- return DbDataType.Char;\r
-\r
- case DbType.Boolean:\r
- case DbType.Byte:\r
- case DbType.SByte:\r
- case DbType.Int16:\r
- case DbType.UInt16:\r
- return DbDataType.SmallInt;\r
-\r
- case DbType.Int32:\r
- case DbType.UInt32:\r
- return DbDataType.Integer;\r
-\r
- case DbType.Int64:\r
- case DbType.UInt64:\r
- return DbDataType.BigInt;\r
-\r
- case DbType.Date:\r
- return DbDataType.Date;\r
-\r
- case DbType.Time:\r
- return DbDataType.Time;\r
-\r
- case DbType.DateTime:\r
- return DbDataType.TimeStamp;\r
-\r
- case DbType.Object:\r
- case DbType.Binary:\r
- return DbDataType.Binary;\r
-\r
- case DbType.Decimal:\r
- return DbDataType.Decimal;\r
-\r
- case DbType.Double:\r
- return DbDataType.Double;\r
-\r
- case DbType.Single:\r
- return DbDataType.Float;\r
-\r
- case DbType.Guid:\r
- return DbDataType.Guid;\r
-\r
- default:\r
- throw new ArgumentException("Invalid data type");\r
- }\r
- }\r
-\r
- #endregion\r
- }\r
-}\r
+/*
+ * Firebird ADO.NET Data provider for .NET and Mono
+ *
+ * The contents of this file are subject to the Initial
+ * Developer's Public License Version 1.0 (the "License");
+ * you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ * http://www.firebirdsql.org/index.php?op=doc&id=idpl
+ *
+ * Software distributed under the License is distributed on
+ * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
+ * express or implied. See the License for the specific
+ * language governing rights and limitations under the License.
+ *
+ * Copyright (c) 2002, 2005 Carlos Guzman Alvarez
+ * All Rights Reserved.
+ */
+
+using System;
+using System.Data;
+
+namespace FirebirdSql.Data.Common
+{
+ internal sealed class TypeHelper
+ {
+ #region Constructors
+
+ private TypeHelper()
+ {
+ }
+
+ #endregion
+
+ #region Static Methods
+
+ public static short GetSize(DbDataType dataType)
+ {
+ switch (dataType)
+ {
+ case DbDataType.Array:
+ case DbDataType.Binary:
+ case DbDataType.Text:
+ return 8;
+
+ case DbDataType.SmallInt:
+ return 2;
+
+ case DbDataType.Integer:
+ case DbDataType.Float:
+ case DbDataType.Date:
+ case DbDataType.Time:
+ return 4;
+
+ case DbDataType.BigInt:
+ case DbDataType.Double:
+ case DbDataType.TimeStamp:
+ return 8;
+
+ case DbDataType.Guid:
+ return 16;
+
+ default:
+ return 0;
+ }
+ }
+
+ public static int GetFbType(DbDataType dataType, bool isNullable)
+ {
+ int sqltype = 0;
+
+ switch (dataType)
+ {
+ case DbDataType.Array:
+ sqltype = IscCodes.SQL_ARRAY;
+ break;
+
+ case DbDataType.Binary:
+ case DbDataType.Text:
+ sqltype = IscCodes.SQL_BLOB;
+ break;
+
+ case DbDataType.Char:
+ sqltype = IscCodes.SQL_TEXT;
+ break;
+
+ case DbDataType.VarChar:
+ sqltype = IscCodes.SQL_VARYING;
+ break;
+
+ case DbDataType.SmallInt:
+ sqltype = IscCodes.SQL_SHORT;
+ break;
+
+ case DbDataType.Integer:
+ sqltype = IscCodes.SQL_LONG;
+ break;
+
+ case DbDataType.BigInt:
+ sqltype = IscCodes.SQL_INT64;
+ break;
+
+ case DbDataType.Float:
+ sqltype = IscCodes.SQL_FLOAT;
+ break;
+
+ case DbDataType.Guid:
+ sqltype = IscCodes.SQL_TEXT;
+ break;
+
+ case DbDataType.Double:
+ sqltype = IscCodes.SQL_DOUBLE;
+ break;
+
+ case DbDataType.Date:
+ sqltype = IscCodes.SQL_TYPE_DATE;
+ break;
+
+ case DbDataType.Time:
+ sqltype = IscCodes.SQL_TYPE_TIME;
+ break;
+
+ case DbDataType.TimeStamp:
+ sqltype = IscCodes.SQL_TIMESTAMP;
+ break;
+
+ default:
+ throw new ArgumentException("Invalid data type");
+ }
+
+ if (isNullable)
+ {
+ sqltype++;
+ }
+
+ return sqltype;
+ }
+
+ public static int GetFbType(int blrType)
+ {
+ switch (blrType)
+ {
+ case IscCodes.blr_varying:
+ case IscCodes.blr_varying2:
+ return IscCodes.SQL_VARYING;
+
+ case IscCodes.blr_text:
+ case IscCodes.blr_text2:
+ case IscCodes.blr_cstring:
+ case IscCodes.blr_cstring2:
+ return IscCodes.SQL_TEXT;
+
+ case IscCodes.blr_short:
+ return IscCodes.SQL_SHORT;
+
+ case IscCodes.blr_long:
+ return IscCodes.SQL_LONG;
+
+ case IscCodes.blr_quad:
+ return IscCodes.SQL_QUAD;
+
+ case IscCodes.blr_int64:
+ case IscCodes.blr_blob_id:
+ return IscCodes.SQL_INT64;
+
+ case IscCodes.blr_double:
+ return IscCodes.SQL_DOUBLE;
+
+ case IscCodes.blr_d_float:
+ return IscCodes.SQL_D_FLOAT;
+
+ case IscCodes.blr_float:
+ return IscCodes.SQL_FLOAT;
+
+ case IscCodes.blr_sql_date:
+ return IscCodes.SQL_TYPE_DATE;
+
+ case IscCodes.blr_sql_time:
+ return IscCodes.SQL_TYPE_TIME;
+
+ case IscCodes.blr_timestamp:
+ return IscCodes.SQL_TIMESTAMP;
+
+ case IscCodes.blr_blob:
+ return IscCodes.SQL_BLOB;
+
+ default:
+ throw new ArgumentException("Invalid data type");
+ }
+ }
+
+ public static DbDataType GetDbDataType(int blrType, int subType, int scale)
+ {
+ switch (blrType)
+ {
+ case IscCodes.blr_varying:
+ case IscCodes.blr_varying2:
+ return DbDataType.VarChar;
+
+ case IscCodes.blr_text:
+ case IscCodes.blr_text2:
+ return DbDataType.Char;
+
+ case IscCodes.blr_cstring:
+ case IscCodes.blr_cstring2:
+ return DbDataType.Text;
+
+ case IscCodes.blr_short:
+ if (subType == 2)
+ {
+ return DbDataType.Decimal;
+ }
+ else if (subType == 1)
+ {
+ return DbDataType.Numeric;
+ }
+ else
+ {
+ return DbDataType.SmallInt;
+ }
+
+ case IscCodes.blr_long:
+ if (subType == 2)
+ {
+ return DbDataType.Decimal;
+ }
+ else if (subType == 1)
+ {
+ return DbDataType.Numeric;
+ }
+ else
+ {
+ return DbDataType.Integer;
+ }
+
+ case IscCodes.blr_quad:
+ case IscCodes.blr_int64:
+ case IscCodes.blr_blob_id:
+ if (subType == 2)
+ {
+ return DbDataType.Decimal;
+ }
+ else if (subType == 1)
+ {
+ return DbDataType.Numeric;
+ }
+ else
+ {
+ return DbDataType.BigInt;
+ }
+
+ case IscCodes.blr_double:
+ case IscCodes.blr_d_float:
+ return DbDataType.Double;
+
+ case IscCodes.blr_float:
+ return DbDataType.Float;
+
+ case IscCodes.blr_sql_date:
+ return DbDataType.Date;
+
+ case IscCodes.blr_sql_time:
+ return DbDataType.Time;
+
+ case IscCodes.blr_timestamp:
+ return DbDataType.TimeStamp;
+
+ case IscCodes.blr_blob:
+ if (subType == 1)
+ {
+ return DbDataType.Text;
+ }
+ else
+ {
+ return DbDataType.Binary;
+ }
+
+ default:
+ throw new ArgumentException("Invalid data type");
+ }
+ }
+
+ public static string GetDataTypeName(DbDataType dataType)
+ {
+ switch (dataType)
+ {
+ case DbDataType.Array:
+ return "ARRAY";
+
+ case DbDataType.Binary:
+ return "BLOB";
+
+ case DbDataType.Text:
+ return "BLOB SUB_TYPE 1";
+
+ case DbDataType.Char:
+ case DbDataType.Guid:
+ return "CHAR";
+
+ case DbDataType.VarChar:
+ return "VARCHAR";
+
+ case DbDataType.SmallInt:
+ return "SMALLINT";
+
+ case DbDataType.Integer:
+ return "INTEGER";
+
+ case DbDataType.Float:
+ return "FLOAT";
+
+ case DbDataType.Double:
+ return "DOUBLE PRECISION";
+
+ case DbDataType.BigInt:
+ return "BIGINT";
+
+ case DbDataType.Numeric:
+ return "NUMERIC";
+
+ case DbDataType.Decimal:
+ return "DECIMAL";
+
+ case DbDataType.Date:
+ return "DATE";
+
+ case DbDataType.Time:
+ return "TIME";
+
+ case DbDataType.TimeStamp:
+ return "TIMESTAMP";
+
+ default:
+ return null;
+ }
+ }
+
+ public static DbType GetDbType(DbDataType type)
+ {
+ switch (type)
+ {
+ case DbDataType.Array:
+ case DbDataType.Binary:
+ return DbType.Binary;
+
+ case DbDataType.Text:
+ case DbDataType.VarChar:
+ case DbDataType.Char:
+ return DbType.String;
+
+ case DbDataType.SmallInt:
+ return DbType.Int16;
+
+ case DbDataType.Integer:
+ return DbType.Int32;
+
+ case DbDataType.BigInt:
+ return DbType.Int64;
+
+ case DbDataType.Date:
+ return DbType.Date;
+
+ case DbDataType.Time:
+ return DbType.Time;
+
+ case DbDataType.TimeStamp:
+ return DbType.DateTime;
+
+ case DbDataType.Numeric:
+ case DbDataType.Decimal:
+ return DbType.Decimal;
+
+ case DbDataType.Float:
+ return DbType.Single;
+
+ case DbDataType.Double:
+ return DbType.Double;
+
+ case DbDataType.Guid:
+ return DbType.Guid;
+
+ default:
+ throw new ArgumentException("Invalid data type");
+ }
+ }
+
+ public static DbDataType GetDbDataType(DbType dbType)
+ {
+ switch (dbType)
+ {
+ case DbType.String:
+ case DbType.AnsiString:
+ return DbDataType.VarChar;
+
+ case DbType.StringFixedLength:
+ case DbType.AnsiStringFixedLength:
+ return DbDataType.Char;
+
+ case DbType.Boolean:
+ case DbType.Byte:
+ case DbType.SByte:
+ case DbType.Int16:
+ case DbType.UInt16:
+ return DbDataType.SmallInt;
+
+ case DbType.Int32:
+ case DbType.UInt32:
+ return DbDataType.Integer;
+
+ case DbType.Int64:
+ case DbType.UInt64:
+ return DbDataType.BigInt;
+
+ case DbType.Date:
+ return DbDataType.Date;
+
+ case DbType.Time:
+ return DbDataType.Time;
+
+ case DbType.DateTime:
+ return DbDataType.TimeStamp;
+
+ case DbType.Object:
+ case DbType.Binary:
+ return DbDataType.Binary;
+
+ case DbType.Decimal:
+ return DbDataType.Decimal;
+
+ case DbType.Double:
+ return DbDataType.Double;
+
+ case DbType.Single:
+ return DbDataType.Float;
+
+ case DbType.Guid:
+ return DbDataType.Guid;
+
+ default:
+ throw new ArgumentException("Invalid data type");
+ }
+ }
+
+ #endregion
+ }
+}