2002-11-09 Tim Coleman <tim@timcoleman.com>
[mono.git] / mcs / class / Mono.Data.SybaseClient / Mono.Data.SybaseClient / SybaseParameterCollection.cs
1 //
2 // Mono.Data.SybaseClient.SybaseParameterCollection.cs
3 //
4 // Author:
5 //   Tim Coleman (tim@timcoleman.com)
6 //
7 // Copyright (C) Tim Coleman, 2002
8 //
9
10 using System;
11 using System.ComponentModel;
12 using System.Data;
13 using System.Data.Common;
14 using System.Collections;
15
16 namespace Mono.Data.SybaseClient {
17         public sealed class SybaseParameterCollection : MarshalByRefObject, IDataParameterCollection, IList, ICollection, IEnumerable
18         {
19                 private ArrayList parameterList = new ArrayList();
20
21                 public IEnumerator GetEnumerator()
22                 {
23                         return parameterList.GetEnumerator ();
24                 }
25
26                 
27                 public int Add (object value)
28                 {
29                         // Call the add version that receives a SybaseParameter 
30                         
31                         // Check if value is a SybaseParameter.
32                         CheckType(value);
33                         Add((SybaseParameter) value);
34
35                         return IndexOf (value);
36                 }
37
38                 
39                 public SybaseParameter Add (SybaseParameter value)
40                 {
41                         parameterList.Add (value);
42                         return value;
43                 }
44
45                 
46                 public SybaseParameter Add (string parameterName, object value)
47                 {
48                         SybaseParameter sqlparam = new SybaseParameter();
49                         sqlparam.Value = value;
50                         // TODO: Get the dbtype and SybaseType from system type of value.
51                         
52                         return Add(sqlparam);
53                 }
54                 
55                 public SybaseParameter Add(string parameterName, SybaseType sqlDbType)
56                 {
57                         SybaseParameter sqlparam = new SybaseParameter();
58                         sqlparam.ParameterName = parameterName;
59                         sqlparam.SybaseType = sqlDbType;
60                         return Add(sqlparam);                   
61                 }
62
63                 public SybaseParameter Add(string parameterName,
64                         SybaseType sqlDbType, int size)
65                 {
66                         SybaseParameter sqlparam = new SybaseParameter();
67                         sqlparam.ParameterName = parameterName;
68                         sqlparam.SybaseType = sqlDbType;
69                         sqlparam.Size = size;
70                         return Add(sqlparam);                   
71                 }
72
73                 
74                 public SybaseParameter Add(string parameterName,
75                         SybaseType sqlDbType, int size, string sourceColumn)
76                 {
77                         SybaseParameter sqlparam = new SybaseParameter();
78                         sqlparam.ParameterName = parameterName;
79                         sqlparam.SybaseType = sqlDbType;
80                         sqlparam.Size = size;
81                         sqlparam.SourceColumn = sourceColumn;
82                         return Add(sqlparam);                   
83                 }
84
85                 [MonoTODO]
86                 public void Clear()
87                 {
88                         throw new NotImplementedException ();
89                 }
90
91                 
92                 public bool Contains(object value)
93                 {
94                         // Check if value is a SybaseParameter
95                         CheckType(value);
96                         return Contains(((SybaseParameter)value).ParameterName);
97                 }
98
99
100                 [MonoTODO]
101                 public bool Contains(string value)
102                 {
103                         for(int p = 0; p < parameterList.Count; p++) {
104                                 if(((SybaseParameter)parameterList[p]).ParameterName.Equals(value))
105                                         return true;
106                         }
107                         return false;
108                 }
109
110                 [MonoTODO]
111                 public void CopyTo(Array array, int index)
112                 {
113                         throw new NotImplementedException ();
114                 }
115
116                 
117                 public int IndexOf(object value)
118                 {
119                         // Check if value is a SybaseParameter
120                         CheckType(value);
121                         return IndexOf(((SybaseParameter)value).ParameterName);
122                 }
123
124                 
125                 public int IndexOf(string parameterName)
126                 {
127                         int p = -1;
128
129                         for(p = 0; p < parameterList.Count; p++) {
130                                 if(((SybaseParameter)parameterList[p]).ParameterName.Equals(parameterName))
131                                         return p;
132                         }
133                         return p;
134                 }
135
136                 [MonoTODO]
137                 public void Insert(int index, object value)
138                 {
139                         throw new NotImplementedException ();
140                 }
141
142                 [MonoTODO]
143                 public void Remove(object value)
144                 {
145                         throw new NotImplementedException ();
146                 }
147
148                 [MonoTODO]
149                 public void RemoveAt(int index)
150                 {
151                         throw new NotImplementedException ();
152                 }
153
154                 [MonoTODO]
155                 public void RemoveAt(string parameterName)
156                 {
157                         throw new NotImplementedException ();
158                 }
159         
160                 [MonoTODO]
161                 public int Count {
162                         get {   
163                                 return parameterList.Count;
164                         }                         
165                 }
166
167                 object IList.this[int index] {
168                         [MonoTODO]
169                         get { 
170                                 return (SybaseParameter) this[index];
171                         }
172                         
173                         [MonoTODO]
174                         set { 
175                                 this[index] = (SybaseParameter) value;
176                         }
177                 }
178
179                 public SybaseParameter this[int index] {
180                         get {   
181                                 return (SybaseParameter) parameterList[index];
182                         }                         
183                         
184                         set {   
185                                 parameterList[index] = (SybaseParameter) value;
186                         }                         
187                 }
188
189                 object IDataParameterCollection.this[string parameterName] {
190                         [MonoTODO]
191                         get { 
192                                 return this[parameterName];
193                         }
194                         
195                         [MonoTODO]
196                         set { 
197                                 CheckType(value);
198                                 this[parameterName] = (SybaseParameter) value;
199                         }
200                 }
201
202                 public SybaseParameter this[string parameterName] {
203                         get {   
204                                 for(int p = 0; p < parameterList.Count; p++) {
205                                         if(parameterName.Equals(((SybaseParameter)parameterList[p]).ParameterName))
206                                                 return (SybaseParameter) parameterList[p];
207                                 }
208                                 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
209                         }         
210                         
211                         set {   
212                                 for(int p = 0; p < parameterList.Count; p++) {
213                                         if(parameterName.Equals(((SybaseParameter)parameterList[p]).ParameterName))
214                                                 parameterList[p] = value;
215                                 }
216                                 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName);
217                         }                         
218                 }
219
220                 bool IList.IsFixedSize {
221                         get {   
222                                 throw new NotImplementedException ();
223                         }                         
224                 }
225
226                 bool IList.IsReadOnly {
227                         get {   
228                                 throw new NotImplementedException ();
229                         }                         
230                 }
231
232                 bool ICollection.IsSynchronized {
233                         get {   
234                                 throw new NotImplementedException ();
235                         }                         
236                 }
237
238                 object ICollection.SyncRoot {
239                         get {   
240                                 throw new NotImplementedException ();
241                         }                         
242                 }
243                 
244                 /// <summary>
245                 /// This method checks if the parameter value is of 
246                 /// SybaseParameter type. If it doesn't, throws an InvalidCastException.
247                 /// </summary>
248                 private void CheckType(object value)
249                 {
250                         if(!(value is SybaseParameter))
251                                 throw new InvalidCastException("Only SQLParameter objects can be used.");
252                 }
253                 
254         }
255 }