[System.Net] Add support for .pac proxy config scripts on mac
[mono.git] / mcs / class / System.Data / System.Data.OleDb.jvm / OleDbConvert.cs
1 //\r
2 // System.Data.OleDb.OleDbConvert\r
3 //\r
4 // Authors:\r
5 //      Konstantin Triger <kostat@mainsoft.com>\r
6 //      Boris Kirzner <borisk@mainsoft.com>\r
7 //      \r
8 // (C) 2005 Mainsoft Corporation (http://www.mainsoft.com)\r
9 //\r
10 \r
11 //\r
12 // Permission is hereby granted, free of charge, to any person obtaining\r
13 // a copy of this software and associated documentation files (the\r
14 // "Software"), to deal in the Software without restriction, including\r
15 // without limitation the rights to use, copy, modify, merge, publish,\r
16 // distribute, sublicense, and/or sell copies of the Software, and to\r
17 // permit persons to whom the Software is furnished to do so, subject to\r
18 // the following conditions:\r
19 // \r
20 // The above copyright notice and this permission notice shall be\r
21 // included in all copies or substantial portions of the Software.\r
22 // \r
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
30 //\r
31 \r
32 \r
33 using System;\r
34 using System.Collections;\r
35 using System.Data.Common;\r
36 using System.Data.ProviderBase;\r
37 \r
38 using java.sql;\r
39 \r
40 namespace System.Data.OleDb\r
41 {\r
42         internal sealed class OleDbConvert : DbConvert\r
43         {\r
44                 #region Fields\r
45 \r
46                 private static Hashtable _typeNamesMap;\r
47 \r
48                 #endregion // Fields\r
49 \r
50                 #region Constructors\r
51 \r
52                 static OleDbConvert()\r
53                 {\r
54                         _typeNamesMap = new Hashtable(30,CaseInsensitiveHashCodeProvider.DefaultInvariant, CaseInsensitiveComparer.DefaultInvariant);\r
55                         \r
56                         // SqlServer types mapping\r
57 //                      _typeNamesMap.Add("numeric(3, 0)1","DBTYPE_I1");\r
58                         _typeNamesMap.Add("smallint","DBTYPE_I2");\r
59                         _typeNamesMap.Add("Int","DBTYPE_I4");\r
60                         _typeNamesMap.Add("bigint","DBTYPE_I8");\r
61                         _typeNamesMap.Add("tinyint","DBTYPE_UI1");\r
62 //                      _typeNamesMap.Add("numeric(5,0)","DBTYPE_UI2");\r
63 //                      _typeNamesMap.Add("numeric(10,0)","DBTYPE_UI4");\r
64 //                      _typeNamesMap.Add("numeric(20,0)","DBTYPE_UI8");\r
65                         _typeNamesMap.Add("Float","DBTYPE_R8");\r
66                         _typeNamesMap.Add("Real","DBTYPE_R4");\r
67                         _typeNamesMap.Add("numeric","DBTYPE_NUMERIC");\r
68                         _typeNamesMap.Add("decimal","DBTYPE_NUMERIC");\r
69                         _typeNamesMap.Add("money","DBTYPE_CY");\r
70                         _typeNamesMap.Add("smallmoney","DBTYPE_CY");\r
71                         _typeNamesMap.Add("ntext","DBTYPE_WLONGVARCHAR");\r
72                         _typeNamesMap.Add("nchar","DBTYPE_WCHAR");\r
73                         _typeNamesMap.Add("nvarchar","DBTYPE_WVARCHAR");\r
74                         _typeNamesMap.Add("Bit","DBTYPE_BOOL");\r
75 //                      _typeNamesMap.Add("nvarchar(4000)","DBTYPE_VARIANT");\r
76                         _typeNamesMap.Add("sql_variant","DBTYPE_VARIANT");\r
77                         _typeNamesMap.Add("uniqueidentifier","DBTYPE_GUID");\r
78                         _typeNamesMap.Add("image","DBTYPE_LONGVARBINARY");\r
79                         _typeNamesMap.Add("timestamp","DBTYPE_BINARY");\r
80                         _typeNamesMap.Add("binary","DBTYPE_BINARY");\r
81                         _typeNamesMap.Add("varbinary","DBTYPE_VARBINARY");\r
82                         _typeNamesMap.Add("char","DBTYPE_CHAR");\r
83                         _typeNamesMap.Add("varchar","DBTYPE_VARCHAR");\r
84                         _typeNamesMap.Add("text","DBTYPE_LONGVARCHAR");\r
85 //                      _typeNamesMap.Add("nchar","DBTYPE_WSTR");\r
86 //                      _typeNamesMap.Add("nvarchar","DBTYPE_WSTR");\r
87 //                      _typeNamesMap.Add("ntext","DBTYPE_WSTR");\r
88 //                      _typeNamesMap.Add("datetime","DBTYPE_DATE");\r
89                         _typeNamesMap.Add("datetime","DBTYPE_DBTIMESTAMP");\r
90                         _typeNamesMap.Add("smalldatetime","DBTYPE_DBTIMESTAMP");\r
91                         _typeNamesMap.Add("Ignored","DBTYPE_BYREF");\r
92                 }\r
93 \r
94                 #endregion //Constructors\r
95 \r
96                 #region Methods\r
97 \r
98                 internal static String JdbcTypeNameToDbTypeName(string jdbcTypeName)\r
99                 {\r
100                         jdbcTypeName = jdbcTypeName.Trim();\r
101                         string dbTypeName = (string)_typeNamesMap[jdbcTypeName];\r
102 \r
103                         return (dbTypeName != null) ? dbTypeName : jdbcTypeName;\r
104                 }\r
105 \r
106                 internal static OleDbType JdbcTypeToOleDbType(int jdbcType)\r
107                 {\r
108                         switch ((JavaSqlTypes)jdbcType) {\r
109                                 case JavaSqlTypes.ARRAY: return OleDbType.Binary;\r
110                                 case JavaSqlTypes.BIGINT: return OleDbType.BigInt;\r
111                                 case JavaSqlTypes.BINARY: return OleDbType.Binary;\r
112                                 case JavaSqlTypes.BIT: return OleDbType.Boolean;\r
113                                 case JavaSqlTypes.BLOB: return OleDbType.Binary;\r
114                                 case JavaSqlTypes.BOOLEAN: return OleDbType.Boolean;\r
115                                 case JavaSqlTypes.CHAR: return OleDbType.Char;\r
116                                 case JavaSqlTypes.CLOB: return OleDbType.LongVarWChar;\r
117                                 case JavaSqlTypes.DATALINK: return OleDbType.IUnknown;\r
118                                 case JavaSqlTypes.DATE: return OleDbType.DBDate;\r
119                                 case JavaSqlTypes.DECIMAL: return OleDbType.Decimal;\r
120                                 case JavaSqlTypes.DISTINCT: return OleDbType.IUnknown; \r
121                                 case JavaSqlTypes.DOUBLE: return OleDbType.Double;\r
122                                 case JavaSqlTypes.FLOAT: return OleDbType.Double;\r
123                                 case JavaSqlTypes.INTEGER: return OleDbType.Integer;\r
124                                 case JavaSqlTypes.JAVA_OBJECT: return OleDbType.IUnknown;\r
125                                 case JavaSqlTypes.LONGVARBINARY: return OleDbType.LongVarBinary;\r
126                                 case JavaSqlTypes.LONGVARCHAR: return OleDbType.LongVarWChar;\r
127                                 case JavaSqlTypes.NULL: return OleDbType.Empty;\r
128                                 case JavaSqlTypes.NUMERIC: return OleDbType.Numeric;\r
129                                 default:\r
130                                 case JavaSqlTypes.OTHER: return OleDbType.IUnknown;\r
131                                 case JavaSqlTypes.REAL: return OleDbType.Single;\r
132                                 case JavaSqlTypes.REF: return OleDbType.IUnknown;\r
133                                 case JavaSqlTypes.SMALLINT: return OleDbType.SmallInt;\r
134                                 case JavaSqlTypes.STRUCT: return OleDbType.IUnknown;\r
135                                 case JavaSqlTypes.TIME: return OleDbType.DBTime;\r
136                                 case JavaSqlTypes.TIMESTAMP: return OleDbType.DBTimeStamp;\r
137                                 case JavaSqlTypes.TINYINT: return OleDbType.TinyInt;\r
138                                 case JavaSqlTypes.VARBINARY: return OleDbType.VarBinary;\r
139                                 case JavaSqlTypes.VARCHAR: return OleDbType.VarChar;\r
140                         }\r
141                 }\r
142 \r
143                 internal static OleDbType ValueTypeToOleDbType(Type type)\r
144                 {\r
145                         switch (Type.GetTypeCode(type)) {\r
146                                 case TypeCode.Boolean: return OleDbType.Boolean;\r
147                                 case TypeCode.Byte: return OleDbType.UnsignedTinyInt;\r
148                                 case TypeCode.Char: return OleDbType.Char;\r
149                                 case TypeCode.DateTime: return OleDbType.Date;\r
150                                 case TypeCode.DBNull: return OleDbType.Empty;\r
151                                 case TypeCode.Decimal: return OleDbType.Decimal;\r
152                                 case TypeCode.Double: return OleDbType.Double;\r
153                                 case TypeCode.Empty: return OleDbType.Empty;\r
154                                 case TypeCode.Int16: return OleDbType.SmallInt;\r
155                                 case TypeCode.Int32: return OleDbType.Integer;\r
156                                 case TypeCode.Int64: return OleDbType.BigInt;\r
157                                 default:\r
158                                 case TypeCode.Object: {\r
159                                         if (type.Equals(DbTypes.TypeOfByteArray)) return  OleDbType.Binary;\r
160                                         if (type.Equals(DbTypes.TypeOfTimespan)) return OleDbType.DBTime;\r
161                                         if (type.Equals(DbTypes.TypeOfGuid)) return OleDbType.Guid;\r
162 \r
163                                         if (type.IsEnum)\r
164                                                 return ValueTypeToOleDbType (Enum.GetUnderlyingType (type));\r
165 \r
166                                         return OleDbType.IUnknown;\r
167                                 }\r
168                                 case TypeCode.SByte: return OleDbType.TinyInt;\r
169                                 case TypeCode.Single: return OleDbType.Single;\r
170                                 case TypeCode.String: return OleDbType.VarWChar;\r
171                                 case TypeCode.UInt16: return OleDbType.UnsignedSmallInt;\r
172                                 case TypeCode.UInt32: return OleDbType.UnsignedInt;\r
173                                 case TypeCode.UInt64: return OleDbType.UnsignedBigInt;\r
174                         }\r
175                 }\r
176 \r
177                 internal static Type OleDbTypeToValueType(OleDbType oleDbType)\r
178                 {\r
179                         switch (oleDbType) {\r
180                                 case OleDbType.BigInt : return DbTypes.TypeOfInt64;// typeof(long);\r
181                                 case OleDbType.Binary : return DbTypes.TypeOfByteArray;\r
182                                 case OleDbType.Boolean : return DbTypes.TypeOfBoolean;\r
183                                 case OleDbType.BSTR : return DbTypes.TypeOfString;\r
184                                 case OleDbType.Char : return DbTypes.TypeOfString;\r
185                                 case OleDbType.Currency : return DbTypes.TypeOfDecimal;\r
186                                 case OleDbType.Date : return DbTypes.TypeOfDateTime;\r
187                                 case OleDbType.DBDate : return DbTypes.TypeOfDateTime;\r
188                                 case OleDbType.DBTime : return DbTypes.TypeOfTimespan;\r
189                                 case OleDbType.DBTimeStamp : return DbTypes.TypeOfDateTime;\r
190                                 case OleDbType.Decimal : return DbTypes.TypeOfDecimal;\r
191                                 case OleDbType.Double : return DbTypes.TypeOfDouble;\r
192                                 case OleDbType.Empty : return null; //typeof(DBNull);\r
193                                 case OleDbType.Error : return typeof(Exception);\r
194                                 case OleDbType.Filetime : return DbTypes.TypeOfDateTime;\r
195                                 case OleDbType.Guid : return DbTypes.TypeOfGuid;\r
196                                 case OleDbType.IDispatch : return DbTypes.TypeOfObject;\r
197                                 case OleDbType.Integer : return DbTypes.TypeOfInt32;\r
198                                 case OleDbType.IUnknown : return DbTypes.TypeOfObject;\r
199                                 case OleDbType.LongVarBinary : return DbTypes.TypeOfByteArray;\r
200                                 case OleDbType.LongVarChar : return DbTypes.TypeOfString;\r
201                                 case OleDbType.LongVarWChar : return DbTypes.TypeOfString;\r
202                                 case OleDbType.Numeric : return DbTypes.TypeOfDecimal;\r
203                                 case OleDbType.PropVariant : return DbTypes.TypeOfObject;\r
204                                 case OleDbType.Single : return DbTypes.TypeOfFloat;\r
205                                 case OleDbType.SmallInt : return DbTypes.TypeOfInt16;\r
206                                 case OleDbType.TinyInt : return DbTypes.TypeOfSByte;\r
207                                 case OleDbType.UnsignedBigInt : return DbTypes.TypeOfUInt64;\r
208                                 case OleDbType.UnsignedInt : return DbTypes.TypeOfUInt32;\r
209                                 case OleDbType.UnsignedSmallInt : return DbTypes.TypeOfUInt16;\r
210                                 case OleDbType.UnsignedTinyInt : return DbTypes.TypeOfByte;\r
211                                 case OleDbType.VarBinary : return DbTypes.TypeOfByteArray;\r
212                                 case OleDbType.VarChar : return DbTypes.TypeOfString;\r
213                                 case OleDbType.Variant : return DbTypes.TypeOfObject;\r
214                                 case OleDbType.VarNumeric : return DbTypes.TypeOfDecimal;\r
215                                 case OleDbType.VarWChar : return DbTypes.TypeOfString;\r
216                                 case OleDbType.WChar : return DbTypes.TypeOfString;\r
217                                 default : return DbTypes.TypeOfObject;\r
218                         }\r
219                 }\r
220 \r
221                 internal static OleDbType DbTypeToOleDbType(DbType dbType)\r
222                 {\r
223                         switch (dbType) {\r
224                                 case DbType.AnsiString : return OleDbType.VarChar;\r
225                                 case DbType.Binary : return OleDbType.VarBinary;\r
226                                 case DbType.Byte : return OleDbType.UnsignedTinyInt;\r
227                                 case DbType.Boolean : return OleDbType.Boolean;\r
228                                 case DbType.Currency : return OleDbType.Currency;\r
229                                 case DbType.Date : return OleDbType.DBDate;\r
230                                 case DbType.DateTime : return OleDbType.DBTimeStamp;\r
231                                 case DbType.Decimal : return OleDbType.Decimal;\r
232                                 case DbType.Double : return OleDbType.Double;\r
233                                 case DbType.Guid : return OleDbType.Guid;\r
234                                 case DbType.Int16 : return OleDbType.SmallInt;\r
235                                 case DbType.Int32 : return OleDbType.Integer;\r
236                                 case DbType.Int64 : return OleDbType.BigInt;\r
237                                 case DbType.Object : return OleDbType.Variant;\r
238                                 case DbType.SByte : return OleDbType.TinyInt;\r
239                                 case DbType.Single : return OleDbType.Single;\r
240                                 case DbType.String : return OleDbType.VarWChar;\r
241                                 case DbType.Time : return OleDbType.DBTime;\r
242                                 case DbType.UInt16 : return OleDbType.UnsignedSmallInt;\r
243                                 case DbType.UInt32 : return OleDbType.UnsignedInt;\r
244                                 case DbType.UInt64 : return OleDbType.UnsignedBigInt;\r
245                                 case DbType.VarNumeric : return OleDbType.VarNumeric;\r
246                                 case DbType.AnsiStringFixedLength : return OleDbType.Char;\r
247                                 case DbType.StringFixedLength : return OleDbType.WChar;\r
248                                 default : throw ExceptionHelper.InvalidDbType((int)dbType);\r
249                         }\r
250                 }\r
251 \r
252                 internal static DbType OleDbTypeToDbType(OleDbType oleDbType)\r
253                 {\r
254                         switch (oleDbType) {\r
255                                 case OleDbType.Empty : return DbType.Object;\r
256                                 case OleDbType.SmallInt : return DbType.Int16;\r
257                                 case OleDbType.Integer : return DbType.Int32;\r
258                                 case OleDbType.Single : return DbType.Single;\r
259                                 case OleDbType.Double : return DbType.Double;\r
260                                 case OleDbType.Currency : return DbType.Currency;\r
261                                 case OleDbType.Date : return DbType.DateTime;\r
262                                 case OleDbType.BSTR : return DbType.String;\r
263                                 case OleDbType.IDispatch : return DbType.Object;\r
264                                 case OleDbType.Error : return DbType.Object;\r
265                                 case OleDbType.Boolean : return DbType.Boolean;\r
266                                 case OleDbType.Variant : return DbType.Object;\r
267                                 case OleDbType.IUnknown : return DbType.Object;\r
268                                 case OleDbType.Decimal : return DbType.Decimal;\r
269                                 case OleDbType.TinyInt : return DbType.SByte;\r
270                                 case OleDbType.UnsignedTinyInt : return DbType.Byte;\r
271                                 case OleDbType.UnsignedSmallInt : return DbType.UInt16;\r
272                                 case OleDbType.UnsignedInt : return DbType.UInt32;\r
273                                 case OleDbType.BigInt : return DbType.Int64;\r
274                                 case OleDbType.UnsignedBigInt : return DbType.UInt64;\r
275                                 case OleDbType.Filetime : return DbType.DateTime;\r
276                                 case OleDbType.Guid : return DbType.Guid;\r
277                                 case OleDbType.Binary : return DbType.Binary;\r
278                                 case OleDbType.Char : return DbType.AnsiStringFixedLength;\r
279                                 case OleDbType.WChar : return DbType.StringFixedLength;\r
280                                 case OleDbType.Numeric : return DbType.Decimal;\r
281                                 case OleDbType.DBDate : return DbType.Date;\r
282                                 case OleDbType.DBTime : return DbType.Time;\r
283                                 case OleDbType.DBTimeStamp : return DbType.DateTime;\r
284                                 case OleDbType.PropVariant : return DbType.Object;\r
285                                 case OleDbType.VarNumeric : return DbType.VarNumeric;\r
286                                 case OleDbType.VarChar : return DbType.AnsiString;\r
287                                 case OleDbType.LongVarChar : return DbType.AnsiString;\r
288                                 case OleDbType.VarWChar : return DbType.String;\r
289                                 case OleDbType.LongVarWChar : return DbType.String;\r
290                                 case OleDbType.VarBinary : return DbType.Binary;\r
291                                 case OleDbType.LongVarBinary : return DbType.Binary;\r
292                                 default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
293                         }\r
294                 }\r
295 \r
296                 internal static int     OleDbTypeToJdbcType(OleDbType oleDbType)\r
297                 {\r
298                         switch(oleDbType) {\r
299                                 case OleDbType.BigInt : return Types.BIGINT;\r
300                                 case OleDbType.Binary : return Types.BINARY;\r
301                                 case OleDbType.Boolean : return Types.BIT;\r
302                                 case OleDbType.BSTR : return Types.VARCHAR;\r
303                                 case OleDbType.Char : return Types.CHAR;\r
304                                 case OleDbType.Currency : return Types.DECIMAL;\r
305                                 case OleDbType.Date : return Types.TIMESTAMP;\r
306                                 case OleDbType.DBDate : return Types.DATE;\r
307                                 case OleDbType.DBTime : return Types.TIME;\r
308                                 case OleDbType.DBTimeStamp : return Types.TIMESTAMP;\r
309                                 case OleDbType.Decimal : return Types.DECIMAL;\r
310                                 case OleDbType.Double : return Types.DOUBLE;\r
311                                 case OleDbType.Empty : return Types.NULL;\r
312                                 case OleDbType.Error : return Types.OTHER;\r
313                                 case OleDbType.Filetime : return Types.TIMESTAMP;\r
314                                 case OleDbType.Guid : return Types.CHAR;\r
315                                 case OleDbType.IDispatch : return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OleDbType value is not supported.");\r
316                                 case OleDbType.Integer : return Types.INTEGER;\r
317                                 case OleDbType.IUnknown :  return Types.OTHER; //throw new ArgumentException("The " + oleDbType + " OleDbType value is not supported.");\r
318                                 case OleDbType.LongVarBinary : return Types.LONGVARBINARY;\r
319                                 case OleDbType.LongVarChar : return Types.LONGVARCHAR;\r
320                                 case OleDbType.LongVarWChar : return Types.LONGVARCHAR;\r
321                                 case OleDbType.Numeric : return Types.NUMERIC;\r
322                                 case OleDbType.PropVariant : return Types.OTHER;\r
323                                 case OleDbType.Single : return Types.FLOAT;\r
324                                 case OleDbType.SmallInt : return Types.SMALLINT;\r
325                                 case OleDbType.TinyInt : return Types.TINYINT;\r
326                                 case OleDbType.UnsignedBigInt : return Types.BIGINT;\r
327                                 case OleDbType.UnsignedInt : return Types.INTEGER;\r
328                                 case OleDbType.UnsignedSmallInt : return Types.SMALLINT;\r
329                                 case OleDbType.UnsignedTinyInt : return Types.TINYINT;\r
330                                 case OleDbType.VarBinary : return Types.VARBINARY;\r
331                                 case OleDbType.VarChar : return Types.VARCHAR;\r
332                                 case OleDbType.Variant : return Types.VARCHAR;\r
333                                 case OleDbType.VarNumeric : return Types.DECIMAL;\r
334                                 case OleDbType.VarWChar : return Types.VARCHAR;\r
335                                 case OleDbType.WChar : return Types.VARCHAR;\r
336                                 default : throw ExceptionHelper.InvalidOleDbType((int)oleDbType);\r
337                         }\r
338 \r
339                         #endregion // Methods\r
340                 }\r
341         }\r
342 }\r