Copy from 72246 to trunk
[mono.git] / mcs / class / System.Data / System.Data.Odbc / OdbcColumn.cs
1
2 //
3 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining
6 // a copy of this software and associated documentation files (the
7 // "Software"), to deal in the Software without restriction, including
8 // without limitation the rights to use, copy, modify, merge, publish,
9 // distribute, sublicense, and/or sell copies of the Software, and to
10 // permit persons to whom the Software is furnished to do so, subject to
11 // the following conditions:
12 // 
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
15 // 
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 using System;
25
26 namespace System.Data.Odbc
27 {
28         /// <summary>
29         /// Summary description for OdbcColumn.
30         /// </summary>
31         internal class OdbcColumn
32         {
33                 internal string ColumnName;
34                 internal OdbcType OdbcType;
35                 private SQL_TYPE _sqlType = SQL_TYPE.UNASSIGNED;
36                 private SQL_C_TYPE _sqlCType = SQL_C_TYPE.UNASSIGNED;
37                 internal bool AllowDBNull;
38                 internal int MaxLength;
39                 internal int Digits;
40                 internal object Value;
41
42                 internal OdbcColumn (string Name, OdbcType Type)
43                 {
44                         this.ColumnName = Name;
45                         this.OdbcType = Type;           
46                         AllowDBNull = false;
47                         MaxLength = 0;
48                         Digits = 0;
49                         Value = null;
50                 }
51
52                 internal OdbcColumn (string Name, SQL_TYPE type)
53                 {
54                         this.ColumnName = Name;
55                         AllowDBNull = false;
56                         MaxLength = 0;
57                         Digits = 0;
58                         Value = null;
59                         UpdateTypes (type);
60
61                 }
62
63
64                 internal Type DataType
65                 {
66                         get
67                         {
68                                 switch (OdbcType)
69                                 {
70                                         case OdbcType.TinyInt:
71                                                 return typeof (System.Byte);
72                                         case OdbcType.BigInt: 
73                                                 return typeof (System.Int64);
74                                         case OdbcType.Image:
75                                         case OdbcType.VarBinary:
76                                         case OdbcType.Binary:
77                                                 return typeof (byte[]);
78                                         case OdbcType.Bit:
79                                                 return typeof (bool);
80                                         case OdbcType.NChar:
81                                         case OdbcType.Char:
82                                                 return typeof (string);
83                                         case OdbcType.Time:
84                                         case OdbcType.Timestamp:
85                                         case OdbcType.DateTime:
86                                         case OdbcType.Date:
87                                         case OdbcType.SmallDateTime:
88                                                 return typeof (DateTime);
89                                         case OdbcType.Decimal:
90                                                 return typeof (Decimal);
91                                         case OdbcType.Numeric:
92                                         case OdbcType.Double:
93                                                 return typeof (Double);
94                                         case OdbcType.Int:
95                                                 return typeof (System.Int32);
96                                         case OdbcType.Text:
97                                         case OdbcType.NText:
98                                         case OdbcType.NVarChar:
99                                         case OdbcType.VarChar:
100                                                 return typeof (string);
101                                         case OdbcType.Real:
102                                                 return typeof (float);
103                                         case OdbcType.SmallInt:
104                                                 return typeof (System.Int16);
105                                         case OdbcType.UniqueIdentifier:
106                                                 return typeof (Guid);
107                                 }
108                                 throw new InvalidCastException();
109                         }
110                 }
111
112                 internal bool IsDateType
113                 {
114                         get
115                         {
116                                 switch (OdbcType)
117                                 {
118                                         case OdbcType.Time:
119                                         case OdbcType.Timestamp:
120                                         case OdbcType.DateTime:
121                                         case OdbcType.Date:
122                                         case OdbcType.SmallDateTime:
123                                                 return true;
124                                         default:
125                                                 return false;
126                                 }
127                         }
128                 }
129
130                 internal bool IsStringType
131                 {
132                         get
133                         {
134                                 switch (OdbcType)
135                                 {
136                                         case OdbcType.Char:
137                                         case OdbcType.Text:
138                                         case OdbcType.NText:
139                                         case OdbcType.NVarChar:
140                                         case OdbcType.VarChar:
141                                                 return true;
142                                         default:
143                                                 return false;
144                                 }
145                         }
146                 }
147
148                 internal bool IsVariableSizeType {
149                         get {
150                                 if (IsStringType)
151                                         return true;
152                                 switch (OdbcType) {
153                                 case OdbcType.Binary :
154                                 case OdbcType.VarBinary :
155                                 case OdbcType.Image :
156                                         return true;
157                                 default : 
158                                         return false;
159                                 }
160                         }
161                 }
162
163                 internal SQL_TYPE SqlType
164                 {
165                         get {
166                                 if ( _sqlType == SQL_TYPE.UNASSIGNED)
167                                         _sqlType = OdbcTypeConverter.GetTypeMap (OdbcType).SqlType;
168                                 return _sqlType;
169                         }
170
171                         set {_sqlType = value;}
172                 }
173
174                 internal SQL_C_TYPE SqlCType
175                 {
176                         get {
177                                 
178                                 if ( _sqlCType == SQL_C_TYPE.UNASSIGNED)
179                                         _sqlCType = OdbcTypeConverter.GetTypeMap (OdbcType).NativeType;
180                                 return _sqlCType;
181                         }
182                         set {_sqlCType = value;}
183                 }
184
185                 internal void UpdateTypes (SQL_TYPE sqlType)
186                 {
187                         SqlType = sqlType;
188                         OdbcTypeMap map = OdbcTypeConverter.GetTypeMap (SqlType);
189                         OdbcType = map.OdbcType;
190                         SqlCType = map.NativeType;
191                 }
192         }
193 }