2 // Mono.Data.PostgreSqlClient.PgSqlParameterCollection.cs
5 // Rodrigo Moya (rodrigo@ximian.com)
6 // Daniel Morgan (danmorg@sc.rr.com)
8 // (C) Ximian, Inc 2002
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:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
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.
33 using System
.ComponentModel
;
35 using System
.Data
.Common
;
36 using System
.Collections
;
38 namespace Mono
.Data
.PostgreSqlClient
41 /// Collects all parameters relevant to a Command object
42 /// and their mappings to DataSet columns.
44 // public sealed class PgSqlParameterCollection : MarshalByRefObject,
45 // IDataParameterCollection, IList, ICollection, IEnumerable
46 public sealed class PgSqlParameterCollection
: IDataParameterCollection
,
49 private ArrayList parameterList
= new ArrayList();
52 public IEnumerator
GetEnumerator()
54 throw new NotImplementedException ();
58 public int Add( object value)
60 // Call the add version that receives a SqlParameter
62 // Check if value is a PgSqlParameter.
64 Add((PgSqlParameter
) value);
66 return IndexOf (value);
70 public PgSqlParameter
Add(PgSqlParameter
value)
72 parameterList
.Add(value);
77 public PgSqlParameter
Add(string parameterName
, object value)
79 PgSqlParameter sqlparam
= new PgSqlParameter();
80 sqlparam
.Value
= value;
81 // TODO: Get the dbtype and Sqldbtype from system type of value.
87 public PgSqlParameter
Add(string parameterName
, SqlDbType sqlDbType
)
89 PgSqlParameter sqlparam
= new PgSqlParameter();
90 sqlparam
.ParameterName
= parameterName
;
91 sqlparam
.SqlDbType
= sqlDbType
;
96 public PgSqlParameter
Add(string parameterName
,
97 SqlDbType sqlDbType
, int size
)
99 PgSqlParameter sqlparam
= new PgSqlParameter();
100 sqlparam
.ParameterName
= parameterName
;
101 sqlparam
.SqlDbType
= sqlDbType
;
102 sqlparam
.Size
= size
;
103 return Add(sqlparam
);
107 public PgSqlParameter
Add(string parameterName
,
108 SqlDbType sqlDbType
, int size
, string sourceColumn
)
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
);
121 throw new NotImplementedException ();
125 public bool Contains(object value)
127 // Check if value is a SqlParameter
129 return Contains(((PgSqlParameter
)value).ParameterName
);
134 public bool Contains(string value)
136 for(int p
= 0; p
< parameterList
.Count
; p
++) {
137 if(((PgSqlParameter
)parameterList
[p
]).ParameterName
.Equals(value))
144 public void CopyTo(Array array
, int index
)
146 throw new NotImplementedException ();
150 public int IndexOf(object value)
152 // Check if value is a SqlParameter
154 return IndexOf(((PgSqlParameter
)value).ParameterName
);
158 public int IndexOf(string parameterName
)
162 for(p
= 0; p
< parameterList
.Count
; p
++) {
163 if(((PgSqlParameter
)parameterList
[p
]).ParameterName
.Equals(parameterName
))
170 public void Insert(int index
, object value)
172 throw new NotImplementedException ();
176 public void Remove(object value)
178 throw new NotImplementedException ();
182 public void RemoveAt(int index
)
184 throw new NotImplementedException ();
188 public void RemoveAt(string parameterName
)
190 throw new NotImplementedException ();
196 return parameterList
.Count
;
200 object IList
.this[int index
] {
203 return (PgSqlParameter
) this[index
];
208 this[index
] = (PgSqlParameter
) value;
212 public PgSqlParameter
this[int index
] {
214 return (PgSqlParameter
) parameterList
[index
];
218 parameterList
[index
] = (PgSqlParameter
) value;
222 object IDataParameterCollection
.this[string parameterName
] {
225 return this[parameterName
];
231 this[parameterName
] = (PgSqlParameter
) value;
235 public PgSqlParameter
this[string parameterName
] {
237 for(int p
= 0; p
< parameterList
.Count
; p
++) {
238 if(parameterName
.Equals(((PgSqlParameter
)parameterList
[p
]).ParameterName
))
239 return (PgSqlParameter
) parameterList
[p
];
241 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName
);
245 for(int p
= 0; p
< parameterList
.Count
; p
++) {
246 if(parameterName
.Equals(((PgSqlParameter
)parameterList
[p
]).ParameterName
))
247 parameterList
[p
] = value;
249 throw new IndexOutOfRangeException("The specified name does not exist: " + parameterName
);
253 bool IList
.IsFixedSize
{
255 throw new NotImplementedException ();
259 bool IList
.IsReadOnly
{
261 throw new NotImplementedException ();
265 bool ICollection
.IsSynchronized
{
267 throw new NotImplementedException ();
271 object ICollection
.SyncRoot
{
273 throw new NotImplementedException ();
278 /// This method checks if the parameter value is of
279 /// PgSqlParameter type. If it doesn't, throws an InvalidCastException.
281 private void CheckType(object value)
283 if(!(value is PgSqlParameter
))
284 throw new InvalidCastException("Only PgSqlParameter objects can be used.");