Merge pull request #2417 from razzfazz/guard_substr
[mono.git] / mcs / class / System.Data.OracleClient / System.Data.OracleClient.Oci / OciParameterDescriptor.cs
1 //
2 // OciParameterDescriptor.cs
3 //
4 // Part of managed C#/.NET library System.Data.OracleClient.dll
5 //
6 // Part of the Mono class libraries at
7 // mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci
8 //
9 // Assembly: System.Data.OracleClient.dll
10 // Namespace: System.Data.OracleClient.Oci
11 //
12 // Author:
13 //     Tim Coleman <tim@timcoleman.com>
14 //     Daniel Morgan <danielmorgan@verizon.net>
15 //
16 // Copyright (C) Tim Coleman, 2003
17 // Copyright (C) Daniel Morgan, 2005
18 //
19
20 using System;
21 using System.Data.OracleClient;
22 using System.Runtime.InteropServices;
23
24 namespace System.Data.OracleClient.Oci {
25         internal sealed class OciParameterDescriptor : OciDescriptorHandle
26         {
27                 #region Fields
28
29                 OciErrorHandle errorHandle;
30                 //OciServiceHandle service;
31                 //OciDataType type;
32
33                 #endregion // Fields
34
35                 #region Constructors
36
37                 public OciParameterDescriptor (OciHandle parent, IntPtr handle)
38                         : base (OciHandleType.Parameter, parent, handle)
39                 {
40                 }
41
42                 #endregion // Constructors
43
44                 #region Properties
45
46                 public OciErrorHandle ErrorHandle {
47                         get { return errorHandle; }
48                         set { errorHandle = value; }
49                 }
50
51                 #endregion // Properties
52
53                 #region Methods
54
55                 public string GetName ()
56                 {
57                         return GetAttributeString (OciAttributeType.Name, ErrorHandle);
58                 }
59
60                 public int GetDataSize ()
61                 {
62                         return (int) GetAttributeUInt16 (OciAttributeType.DataSize, ErrorHandle);
63                 }
64
65                 public OciDataType GetDataType ()
66                 {
67                         return (OciDataType) GetAttributeUInt16 (OciAttributeType.DataType, ErrorHandle);
68                 }
69
70                 public static OracleType OciDataTypeToOracleType (OciDataType ociType)
71                 {
72                         switch (ociType) {
73                         case OciDataType.VarChar2:
74                                 return OracleType.VarChar;
75                         case OciDataType.Number:
76                                 return OracleType.Number;
77                         case OciDataType.Integer:
78                                 return OracleType.UInt32;
79                         case OciDataType.Float:
80                                 return OracleType.Float;
81                         case OciDataType.String:
82                                 return OracleType.VarChar;
83                         case OciDataType.VarNum:
84                                 return OracleType.Number;
85                         case OciDataType.Long:
86                                 return OracleType.LongVarChar;
87                         case OciDataType.VarChar:
88                                 return OracleType.VarChar;
89                         case OciDataType.RowId:
90                                 return OracleType.RowId;
91                         case OciDataType.Date:
92                                 return OracleType.DateTime;
93                         case OciDataType.VarRaw:
94                                 return OracleType.Raw;
95                         case OciDataType.Raw:
96                                 return OracleType.Raw;
97                         case OciDataType.LongRaw:
98                                 return OracleType.Raw;
99                         case OciDataType.UnsignedInt:
100                                 return OracleType.UInt32;
101                         case OciDataType.LongVarChar:
102                                 return OracleType.LongVarChar;
103                         case OciDataType.LongVarRaw:
104                                 return OracleType.Raw;
105                         case OciDataType.Char:
106                                 return OracleType.Char;
107                         case OciDataType.CharZ:
108                                 return OracleType.Char;
109                         case OciDataType.RowIdDescriptor:
110                                 return OracleType.RowId;
111                         //case OciDataType.NamedDataType:
112                         //      return ???
113                         //case OciDataType.Ref:
114                         //      return ???
115                         case OciDataType.Clob:
116                                 return OracleType.Clob;
117                         case OciDataType.Blob:
118                                 return OracleType.Blob;
119                         case OciDataType.BFile:
120                                 return OracleType.BFile;
121                         case OciDataType.OciString:
122                                 return OracleType.VarChar;
123                         case OciDataType.OciDate:
124                                 return OracleType.DateTime;
125                         case OciDataType.TimeStamp:
126                                 return OracleType.Timestamp;
127                         case OciDataType.IntervalDayToSecond:
128                                 return OracleType.IntervalDayToSecond;
129                         case OciDataType.IntervalYearToMonth:
130                                 return OracleType.IntervalYearToMonth;
131                         default:
132                                 throw new NotImplementedException ();
133                         }
134                 }
135
136                 public Type GetFieldType (string sDataTypeName)
137                 {
138                         switch (sDataTypeName) {
139                         case "VarChar2":
140                                 return typeof (System.String);
141                         case "Number":
142                                 return typeof (System.Decimal);
143                         case "Integer":
144                                 return typeof (System.Int32);
145                         case "Float":
146                                 return typeof (System.Decimal);
147                         case "String":
148                                 return typeof (System.String);
149                         case "VarNum":
150                                 return typeof (System.Decimal);
151                         case "Long":
152                                 return typeof (System.String);
153                         case "VarChar":
154                                 return typeof (System.String);
155                         case "RowId":
156                                 return typeof (System.String);
157                         case "Date":
158                                 return typeof (System.DateTime);
159                         case "VarRaw":
160                                 return typeof (byte[]);
161                         case "Raw":
162                                 return typeof (byte[]);
163                         case "LongRaw":
164                                 return typeof (byte[]);
165                         case "UnsignedInt":
166                                 return typeof (System.UInt32);
167                         case "LongVarChar":
168                                 return typeof (System.String);
169                         case "LongVarRaw":
170                                 return typeof (byte[]);
171                         case "Char":
172                                 return typeof (System.String);
173                         case "CharZ":
174                                 return typeof (System.String);
175                         case "RowIdDescriptor":
176                                 return typeof (System.String);
177                         case "NamedDataType":
178                                 return typeof (System.String);
179                         case "Ref":
180                                 return typeof (System.String);
181                         case "Clob":
182                                 return typeof (System.String);
183                         case "Blob":
184                                 return typeof (byte[]);
185                         case "BFile":
186                                 return typeof (byte[]);
187                         case "OciString":
188                                 return typeof (System.String);
189                         case "OciDate":
190                                 return typeof (System.DateTime);
191                         case "TimeStamp":
192                                 return typeof (System.DateTime);
193                         case "IntervalDayToSecond":
194                                 return typeof (System.TimeSpan);
195                         case "IntervalYearToMonth":
196                                 return typeof (System.Int32);
197                         default:
198                                 // FIXME: are these types correct?
199                                 return typeof(System.String);
200                         }
201                 }
202
203                 public string GetDataTypeName ()
204                 {
205                         switch(GetDataType())
206                         {
207                                 case OciDataType.VarChar2:
208                                         return "VarChar2";
209                                 case OciDataType.Number:
210                                         return "Number";
211                                 case OciDataType.Integer:
212                                         return "Integer";
213                                 case OciDataType.Float:
214                                         return "Float";
215                                 case OciDataType.String:
216                                         return "String";
217                                 case OciDataType.VarNum:
218                                         return "VarNum";
219                                 case OciDataType.Long:
220                                         return "Long";
221                                 case OciDataType.VarChar:
222                                         return "VarChar";
223                                 case OciDataType.RowId:
224                                         return "RowId";
225                                 case OciDataType.Date:
226                                         return "Date";
227                                 case OciDataType.VarRaw:
228                                         return "VarRaw";
229                                 case OciDataType.Raw:
230                                         return "Raw";
231                                 case OciDataType.LongRaw:
232                                         return "LongRaw";
233                                 case OciDataType.UnsignedInt:
234                                         return "UnsignedInt";
235                                 case OciDataType.LongVarChar:
236                                         return "LongVarChar";
237                                 case OciDataType.LongVarRaw:
238                                         return "LongVarRaw";
239                                 case OciDataType.Char:
240                                         return "Char";
241                                 case OciDataType.CharZ:
242                                         return "CharZ";
243                                 case OciDataType.RowIdDescriptor:
244                                         return "RowIdDescriptor";
245                                 case OciDataType.NamedDataType:
246                                         return "NamedDataType";
247                                 case OciDataType.Ref:
248                                         return "Ref";
249                                 case OciDataType.Clob:
250                                         return "Clob";
251                                 case OciDataType.Blob:
252                                         return "Blob";
253                                 case OciDataType.BFile:
254                                         return "BFile";
255                                 case OciDataType.OciString:
256                                         return "OciString";
257                                 case OciDataType.OciDate:
258                                         return "OciDate";
259                                 case OciDataType.TimeStamp:
260                                         return "TimeStamp";
261                                 case OciDataType.IntervalDayToSecond:
262                                         return "IntervalDayToSecond";
263                                 case OciDataType.IntervalYearToMonth:
264                                         return "IntervalYearToMonth";
265                                 default:
266                                         return "Unknown";
267                         }
268                 }
269
270                 public short GetPrecision ()
271                 {
272                         return (short) GetAttributeByte (OciAttributeType.Precision, ErrorHandle);
273                 }
274
275                 public short GetScale ()
276                 {
277                         return (short) GetAttributeSByte (OciAttributeType.Scale, ErrorHandle);
278                 }
279
280                 public bool GetIsNull ()
281                 {
282                         return GetAttributeBool (OciAttributeType.IsNull, ErrorHandle);
283                 }
284
285                 #endregion // Methods
286         }
287 }