[Cleanup] Removed JavaEE csproj and sln files
[mono.git] / mcs / class / System.Data / System.Data.SqlClient.jvm / SqlConvert.cs
1 //\r
2 // System.Data.SqlClient.SqlConvert\r
3 //\r
4 //\r
5 // Authors:\r
6 //      Konstantin Triger <kostat@mainsoft.com>\r
7 //      Boris Kirzner <borisk@mainsoft.com>\r
8 //      \r
9 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
10 //\r
11 \r
12 //\r
13 // Permission is hereby granted, free of charge, to any person obtaining\r
14 // a copy of this software and associated documentation files (the\r
15 // "Software"), to deal in the Software without restriction, including\r
16 // without limitation the rights to use, copy, modify, merge, publish,\r
17 // distribute, sublicense, and/or sell copies of the Software, and to\r
18 // permit persons to whom the Software is furnished to do so, subject to\r
19 // the following conditions:\r
20 // \r
21 // The above copyright notice and this permission notice shall be\r
22 // included in all copies or substantial portions of the Software.\r
23 // \r
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
31 //\r
32 \r
33 using System;\r
34 using System.Data.Common;\r
35 using System.Data.ProviderBase;\r
36 \r
37 using java.sql;\r
38 \r
39 namespace System.Data.SqlClient\r
40 {\r
41         internal sealed class SqlConvert : DbConvert\r
42         {\r
43                 #region Methods\r
44 \r
45                 internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)\r
46                 {\r
47                         return jdbcTypeName.Trim();\r
48                 }\r
49 \r
50                 internal static SqlDbType JdbcTypeToSqlDbType(int jdbcType)\r
51                 {\r
52                         // FIXME : other java.sql.Type\r
53                         // Types.ARRAY\r
54                         if(Types.BIGINT == jdbcType) return SqlDbType.BigInt;\r
55                         if(Types.BINARY == jdbcType) return SqlDbType.Binary;\r
56                         if(Types.BIT == jdbcType) return SqlDbType.Bit;\r
57                         if(Types.BLOB == jdbcType) return SqlDbType.Binary;\r
58                         // Types.BOOLEAN\r
59                         if(Types.CHAR == jdbcType) return SqlDbType.Char;\r
60                         if(Types.CLOB == jdbcType) return SqlDbType.Binary;\r
61                         if(Types.DATE == jdbcType) return SqlDbType.DateTime;\r
62                         if(Types.DECIMAL == jdbcType) return SqlDbType.Decimal;\r
63                         // Types.DISTINCT\r
64                         if(Types.DOUBLE == jdbcType) return SqlDbType.Float;\r
65                         if(Types.FLOAT == jdbcType) return SqlDbType.Float;\r
66                         if(Types.INTEGER == jdbcType) return SqlDbType.Int;\r
67                         // Types.JAVA_OBJECT\r
68                         if(Types.LONGVARBINARY == jdbcType) return SqlDbType.Image;\r
69                         if(Types.LONGVARCHAR == jdbcType) return SqlDbType.Text;\r
70                         // Types.NULL\r
71                         if(Types.NUMERIC == jdbcType) return SqlDbType.Decimal;\r
72                         if(Types.REAL == jdbcType) return SqlDbType.Real;\r
73                         // Types.REF\r
74                         if(Types.SMALLINT == jdbcType) return SqlDbType.SmallInt;\r
75                         // Types.STRUCT\r
76                         if(Types.TIME == jdbcType) return SqlDbType.DateTime;\r
77                         if(Types.TIMESTAMP == jdbcType) return SqlDbType.DateTime;\r
78                         if(Types.TINYINT == jdbcType) return SqlDbType.TinyInt;\r
79                         if(Types.VARBINARY == jdbcType) return SqlDbType.VarBinary;\r
80                         if(Types.VARCHAR == jdbcType) return SqlDbType.NVarChar;\r
81                         return SqlDbType.Variant;\r
82                 }\r
83 \r
84                 internal static SqlDbType ValueTypeToSqlDbType(Type type)\r
85                 {\r
86                         switch (Type.GetTypeCode(type)) {\r
87                                 case TypeCode.Boolean: return SqlDbType.Bit;\r
88                                 case TypeCode.Byte: return SqlDbType.TinyInt;\r
89                                 case TypeCode.Char: return SqlDbType.Char;\r
90                                 case TypeCode.DateTime: return SqlDbType.DateTime;\r
91                                 case TypeCode.DBNull: return SqlDbType.Variant;\r
92                                 case TypeCode.Decimal: return SqlDbType.Decimal;\r
93                                 case TypeCode.Double: return SqlDbType.Float;\r
94                                 case TypeCode.Empty: return SqlDbType.Variant;\r
95                                 case TypeCode.Int16: return SqlDbType.SmallInt;\r
96                                 case TypeCode.Int32: return SqlDbType.Int;\r
97                                 case TypeCode.Int64: return SqlDbType.BigInt;\r
98                                 default:\r
99                                 case TypeCode.Object: {\r
100                                         if (type.Equals(DbTypes.TypeOfByteArray)) return  SqlDbType.VarBinary;\r
101                                         //if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;\r
102                                         if (type.Equals(DbTypes.TypeOfGuid)) return SqlDbType.UniqueIdentifier;\r
103 \r
104                                         if (type.IsEnum)\r
105                                                 return ValueTypeToSqlDbType (Enum.GetUnderlyingType (type));\r
106 \r
107                                         return SqlDbType.Variant;\r
108                                 }\r
109                                 case TypeCode.SByte: return SqlDbType.TinyInt;\r
110                                 case TypeCode.Single: return SqlDbType.Float;\r
111                                 case TypeCode.String: return SqlDbType.NVarChar;\r
112                                 case TypeCode.UInt16: return SqlDbType.SmallInt;\r
113                                 case TypeCode.UInt32: return SqlDbType.Int;\r
114                                 case TypeCode.UInt64: return SqlDbType.BigInt;\r
115                         }\r
116                 }\r
117 \r
118                 internal static Type SqlDbTypeToValueType(SqlDbType sqlDbType)\r
119                 {\r
120                         switch (sqlDbType) {\r
121                                 case SqlDbType.BigInt : return typeof(long);\r
122                                 case SqlDbType.Binary : return typeof(byte[]);\r
123                                 case SqlDbType.Bit : return typeof(bool);\r
124                                 case SqlDbType.Char : return typeof(string);\r
125                                 case SqlDbType.DateTime : return typeof(DateTime);\r
126                                 case SqlDbType.Decimal : return typeof(decimal);\r
127                                 case SqlDbType.Float : return typeof(double);\r
128                                 case SqlDbType.Image : return typeof(byte[]);\r
129                                 case SqlDbType.Int : return typeof(int);\r
130                                 case SqlDbType.Money : return typeof(decimal);\r
131                                 case SqlDbType.NChar : return typeof(string);\r
132                                 case SqlDbType.NText : return typeof(string);\r
133                                 case SqlDbType.NVarChar : return typeof(string);\r
134                                 case SqlDbType.Real : return typeof(Single);\r
135                                 case SqlDbType.UniqueIdentifier : return typeof(Guid);\r
136                                 case SqlDbType.SmallDateTime : return typeof(DateTime);\r
137                                 case SqlDbType.SmallInt : return typeof(Int16);\r
138                                 case SqlDbType.SmallMoney : return typeof(decimal);\r
139                                 case SqlDbType.Text : return typeof(string);\r
140                                 case SqlDbType.Timestamp : return typeof(byte[]);\r
141                                 case SqlDbType.TinyInt : return typeof(byte);\r
142                                 case SqlDbType.VarBinary : return typeof(byte[]);\r
143                                 case SqlDbType.VarChar : return typeof(string);\r
144                                 case SqlDbType.Variant : return typeof(object);\r
145                                 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
146                         }\r
147                 }\r
148 \r
149                 internal static SqlDbType DbTypeToSqlDbType(DbType dbType)\r
150                 {\r
151                         switch (dbType) {\r
152                                 case DbType.AnsiString : return SqlDbType.VarChar;\r
153                                 case DbType.Binary : return SqlDbType.VarBinary;\r
154                                 case DbType.Byte : return SqlDbType.TinyInt;\r
155                                 case DbType.Boolean : return SqlDbType.Bit;\r
156                                 case DbType.Currency : return SqlDbType.Money;\r
157                                 case DbType.Date : return SqlDbType.DateTime;\r
158                                 case DbType.DateTime : return SqlDbType.DateTime;\r
159                                 case DbType.Decimal : return SqlDbType.Decimal;\r
160                                 case DbType.Double : return SqlDbType.Float;\r
161                                 case DbType.Guid : return SqlDbType.UniqueIdentifier;\r
162                                 case DbType.Int16 : return SqlDbType.SmallInt;\r
163                                 case DbType.Int32 : return SqlDbType.Int;\r
164                                 case DbType.Int64 : return SqlDbType.BigInt;\r
165                                 case DbType.Object : return SqlDbType.Variant;\r
166                                 case DbType.SByte : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
167                                 case DbType.Single : return SqlDbType.Real;\r
168                                 case DbType.String : return SqlDbType.NVarChar;\r
169                                 case DbType.UInt16 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
170                                 case DbType.UInt32 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
171                                 case DbType.UInt64 : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
172                                 case DbType.VarNumeric : throw ExceptionHelper.UnknownDataType(dbType.ToString(),"SqlDbType");\r
173                                 case DbType.AnsiStringFixedLength : return SqlDbType.Char;\r
174                                 case DbType.StringFixedLength : return SqlDbType.NChar;\r
175                                 default : throw ExceptionHelper.InvalidDbType((int)dbType);\r
176                         }\r
177                 }\r
178 \r
179                 internal static DbType SqlDbTypeToDbType(SqlDbType sqlDbType)\r
180                 {\r
181                         switch (sqlDbType) {\r
182                                 case SqlDbType.BigInt : return DbType.Int64;\r
183                                 case SqlDbType.Binary : return DbType.Binary;\r
184                                 case SqlDbType.Bit : return DbType.Boolean;\r
185                                 case SqlDbType.Char : return DbType.AnsiStringFixedLength;\r
186                                 case SqlDbType.DateTime : return DbType.DateTime;\r
187                                 case SqlDbType.Decimal : return DbType.Decimal;\r
188                                 case SqlDbType.Float : return DbType.Double;\r
189                                 case SqlDbType.Image : return DbType.Binary;\r
190                                 case SqlDbType.Int : return DbType.Int32;\r
191                                 case SqlDbType.Money : return DbType.Currency;\r
192                                 case SqlDbType.NChar : return DbType.StringFixedLength;\r
193                                 case SqlDbType.NText : return DbType.String;\r
194                                 case SqlDbType.NVarChar : return DbType.String;\r
195                                 case SqlDbType.Real : return DbType.Single;\r
196                                 case SqlDbType.UniqueIdentifier : return DbType.Guid;\r
197                                 case SqlDbType.SmallDateTime : return DbType.DateTime;\r
198                                 case SqlDbType.SmallInt : return DbType.Int16;\r
199                                 case SqlDbType.SmallMoney : return DbType.Currency;\r
200                                 case SqlDbType.Text : return DbType.AnsiString;\r
201                                 case SqlDbType.Timestamp : return DbType.Binary;\r
202                                 case SqlDbType.TinyInt : return DbType.Byte;\r
203                                 case SqlDbType.VarBinary : return DbType.Binary;\r
204                                 case SqlDbType.VarChar : return DbType.AnsiString;\r
205                                 case SqlDbType.Variant : return DbType.Object;\r
206                                 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
207                         }\r
208                 }\r
209 \r
210                 internal static int     SqlDbTypeToJdbcType(SqlDbType sqlDbType)\r
211                 {\r
212                         switch(sqlDbType) {\r
213                                 case SqlDbType.BigInt : return Types.BIGINT;\r
214                                 case SqlDbType.Binary : return Types.BINARY;\r
215                                 case SqlDbType.Bit : return Types.BIT;\r
216                                 case SqlDbType.Char : return Types.CHAR;\r
217                                 case SqlDbType.DateTime : return Types.TIMESTAMP;\r
218                                 case SqlDbType.Decimal : return Types.DECIMAL;\r
219                                 case SqlDbType.Float : return Types.FLOAT;\r
220                                 case SqlDbType.Image : return Types.LONGVARBINARY;\r
221                                 case SqlDbType.Int : return Types.INTEGER;\r
222                                 case SqlDbType.Money : return Types.DECIMAL;\r
223                                 case SqlDbType.NChar : return Types.CHAR;\r
224                                 case SqlDbType.NText : return Types.LONGVARCHAR;\r
225                                 case SqlDbType.NVarChar : return Types.VARCHAR;\r
226                                 case SqlDbType.Real : return Types.REAL;\r
227                                 case SqlDbType.UniqueIdentifier : return Types.CHAR;\r
228                                 case SqlDbType.SmallDateTime : return Types.DATE;\r
229                                 case SqlDbType.SmallInt : return Types.SMALLINT;\r
230                                 case SqlDbType.SmallMoney : return Types.DECIMAL;\r
231                                 case SqlDbType.Text : return Types.LONGVARCHAR;\r
232                                 case SqlDbType.Timestamp : return Types.TIMESTAMP;\r
233                                 case SqlDbType.TinyInt : return Types.TINYINT;\r
234                                 case SqlDbType.VarBinary : return Types.VARBINARY;\r
235                                 case SqlDbType.VarChar : return Types.VARCHAR;\r
236                                 case SqlDbType.Variant : return Types.VARCHAR; // note : ms jdbc driver recognize this sqlserver as varchar\r
237                                 default : throw ExceptionHelper.InvalidSqlDbType((int)sqlDbType);\r
238                         }\r
239                 }\r
240 \r
241                 #endregion // Methods\r
242         }\r
243 }\r