2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / Mono.Data.PostgreSqlClient / Mono.Data.PostgreSqlClient / PgSqlParameterCollection.cs
1 //
2 // Mono.Data.PostgreSqlClient.PgSqlParameterCollection.cs
3 //
4 // Author:
5 //   Rodrigo Moya (rodrigo@ximian.com)
6 //   Daniel Morgan (danmorg@sc.rr.com)
7 //
8 // (C) Ximian, Inc 2002
9 //
10
11 //
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 //
31
32 using System;
33 using System.ComponentModel;
34 using System.Data;
35 using System.Data.Common;
36 using System.Collections;
37
38 namespace Mono.Data.PostgreSqlClient
39 {
40         /// <summary>
41         /// Collects all parameters relevant to a Command object 
42         /// and their mappings to DataSet columns.
43         /// </summary>
44         // public sealed class PgSqlParameterCollection : MarshalByRefObject,
45         // IDataParameterCollection, IList, ICollection, IEnumerable
46         public sealed class PgSqlParameterCollection : IDataParameterCollection,
47                 IList
48         {
49                 private ArrayList parameterList = new ArrayList();
50
51                 [MonoTODO]
52                 public IEnumerator GetEnumerator()
53                 {
54                         throw new NotImplementedException ();
55                 }
56
57                 
58                 public int Add( object value)
59                 {
60                         // Call the add version that receives a SqlParameter 
61                         
62                         // Check if value is a PgSqlParameter.
63                         CheckType(value);
64                         Add((PgSqlParameter) value);
65
66                         return IndexOf (value);
67                 }
68
69                 
70                 public PgSqlParameter Add(PgSqlParameter value)
71                 {
72                         parameterList.Add(value);
73                         return value;
74                 }
75
76                 
77                 public PgSqlParameter Add(string parameterName, object value)
78                 {
79                         PgSqlParameter sqlparam = new PgSqlParameter();
80                         sqlparam.Value = value;
81                         // TODO: Get the dbtype and Sqldbtype from system type of value.
82                         
83                         return Add(sqlparam);
84                 }
85
86                 
87                 public PgSqlParameter Add(string parameterName, SqlDbType sqlDbType)
88                 {
89                         PgSqlParameter sqlparam = new PgSqlParameter();
90                         sqlparam.ParameterName = parameterName;
91                         sqlparam.SqlDbType = sqlDbType;
92                         return Add(sqlparam);                   
93                 }
94
95                 
96                 public PgSqlParameter Add(string parameterName,
97                         SqlDbType sqlDbType, int size)
98                 {
99                         PgSqlParameter sqlparam = new PgSqlParameter();
100                         sqlparam.ParameterName = parameterName;
101                         sqlparam.SqlDbType = sqlDbType;
102                         sqlparam.Size = size;
103                         return Add(sqlparam);                   
104                 }
105
106                 
107                 public PgSqlParameter Add(string parameterName,
108                         SqlDbType sqlDbType, int size, string sourceColumn)
109                 {
110                         PgSqlParameter sqlparam = new PgSqlParameter();
111                         sqlparam.ParameterName = parameterName;
112                         sqlparam.SqlDbType = sqlDbType;
113                         sqlparam.Size = size;
114                         sqlparam.SourceColumn = sourceColumn;
115                         return Add(sqlparam);                   
116                 }
117
118                 [MonoTODO]
119                 public void Clear()
120                 {
121                         throw new NotImplementedException ();
122                 }
123
124                 
125                 public bool Contains(object value)
126                 {
127                         // Check if value is a SqlParameter
128                         CheckType(value);
129                         return Contains(((PgSqlParameter)value).ParameterName);
130                 }
131
132
133                 [MonoTODO]
134                 public bool Contains(string value)
135                 {
136                         for(int p = 0; p < parameterList.Count; p++) {
137                                 if(((PgSqlParameter)parameterList[p]).ParameterName.Equals(value))
138                                         return true;
139                         }
140                         return false;
141                 }
142
143                 [MonoTODO]
144                 public void CopyTo(Array array, int index)
145                 {
146                         throw new NotImplementedException ();
147                 }
148
149                 
150                 public int IndexOf(object value)
151                 {
152                         // Check if value is a SqlParameter
153                         CheckType(value);
154                         return IndexOf(((PgSqlParameter)value).ParameterName);
155                 }
156
157                 
158                 public int IndexOf(string parameterName)
159                 {
160                         int p = -1;
161
162                         for(p = 0; p < parameterList.Count; p++) {
163                                 if(((PgSqlParameter)parameterList[p]).ParameterName.Equals(parameterName))
164                                         return p;
165                         }
166                         return p;
167                 }
168
169                 [MonoTODO]
170                 public void Insert(int index, object value)
171                 {
172                         throw new NotImplementedException ();
173                 }
174
175                 [MonoTODO]
176                 public void Remove(object value)
177                 {
178                         throw new NotImplementedException ();
179                 }
180
181                 [MonoTODO]
182                 public void RemoveAt(int index)
183                 {
184                         throw new NotImplementedException ();
185                 }
186
187                 [MonoTODO]
188                 public void RemoveAt(string parameterName)
189                 {
190                         throw new NotImplementedException ();
191                 }
192         
193                 [MonoTODO]
194                 public int Count {
195                         get {   
196                                 return parameterList.Count;
197                         }                         
198                 }
199
200                 object IList.this[int index] {
201                         [MonoTODO]
202                         get { 
203                                 return (PgSqlParameter) this[index];
204                         }
205                         
206                         [MonoTODO]
207                         set { 
208                                 this[index] = (PgSqlParameter) value;
209                         }
210                 }
211
212                 public PgSqlParameter this[int index] {
213                         get {   
214                                 return (PgSqlParameter) parameterList[index];
215                         }                         
216                         
217                         set {   
218                                 parameterList[index] = (PgSqlParameter) value;
219                         }                         
220                 }
221
222                 object IDataParameterCollection.this[string parameterName] {
223                         [MonoTODO]
224                         get { 
225                                 return this[parameterName];
226                         }
227                         
228                         [MonoTODO]
229                         set { 
230                                 CheckType(value);
231                                 this[parameterName] = (PgSqlParameter) value;
232                         }
233                 }
234
235                 public PgSqlParameter this[string parameterName] {
236                         get {   
237                                 for(int p = 0; p < parameterList.Count; p++) {
238                                         if(parameterName.Equals(((PgSqlParameter)parameterList[p]).ParameterName))
239                                                 return (PgSqlParameter) parameterList[p];
240                                 }
241                                 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
242                         }         
243                         
244                         set {   
245                                 for(int p = 0; p < parameterList.Count; p++) {
246                                         if(parameterName.Equals(((PgSqlParameter)parameterList[p]).ParameterName))
247                                                 parameterList[p] = value;
248                                 }
249                                 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
250                         }                         
251                 }
252
253                 bool IList.IsFixedSize {
254                         get {   
255                                 throw new NotImplementedException ();
256                         }                         
257                 }
258
259                 bool IList.IsReadOnly {
260                         get {   
261                                 throw new NotImplementedException ();
262                         }                         
263                 }
264
265                 bool ICollection.IsSynchronized {
266                         get {   
267                                 throw new NotImplementedException ();
268                         }                         
269                 }
270
271                 object ICollection.SyncRoot {
272                         get {   
273                                 throw new NotImplementedException ();
274                         }                         
275                 }
276                 
277                 /// <summary>
278                 /// This method checks if the parameter value is of 
279                 /// PgSqlParameter type. If it doesn't, throws an InvalidCastException.
280                 /// </summary>
281                 private void CheckType(object value)
282                 {
283                         if(!(value is PgSqlParameter))
284                                 throw new InvalidCastException("Only PgSqlParameter objects can be used.");
285                 }
286                 
287         }
288 }