1 // -*- c-basic-offset: 8; inent-tabs-mode: nil -*-
3 // SqliteParameterCollection.cs
5 // Author(s): Vladimir Vukicevic <vladimir@pobox.com>
7 // Copyright (C) 2002 Vladimir Vukicevic
12 using System.Collections;
14 namespace Mono.Data.SqliteClient
16 public class SqliteParameterCollection : IDataParameterCollection,
19 ArrayList numeric_param_list = new ArrayList ();
20 Hashtable named_param_hash = new Hashtable ();
22 public IEnumerator GetEnumerator ()
24 throw new NotImplementedException ();
27 public void RemoveAt (string parameterName)
29 if (!named_param_hash.Contains (parameterName))
30 throw new ApplicationException ("Parameter " + parameterName + " not found");
32 numeric_param_list.RemoveAt ((int) named_param_hash[parameterName]);
33 named_param_hash.Remove (parameterName);
38 public void RemoveAt (SqliteParameter param)
40 RemoveAt (param.ParameterName);
43 public void RemoveAt (int index)
45 RemoveAt (((SqliteParameter) numeric_param_list[index]).ParameterName);
48 int IList.IndexOf (object o)
50 return IndexOf ((SqliteParameter) o);
53 public int IndexOf (string parameterName)
55 return (int) named_param_hash[parameterName];
58 public int IndexOf (SqliteParameter param)
60 return IndexOf (param.ParameterName);
63 bool IList.Contains (object value)
65 return Contains ((SqliteParameter) value);
68 public bool Contains (string parameterName)
70 return named_param_hash.Contains (parameterName);
73 public bool Contains (SqliteParameter param)
75 return Contains (param.ParameterName);
78 object IList.this[int index] {
83 CheckSqliteParam (value);
84 this[index] = (SqliteParameter) value;
88 object IDataParameterCollection.this[string parameterName] {
90 return this[parameterName];
93 CheckSqliteParam (value);
94 this[parameterName] = (SqliteParameter) value;
98 public SqliteParameter this[string parameterName] {
100 return this[(int) named_param_hash[parameterName]];
103 if (this.Contains (parameterName))
104 numeric_param_list[(int) named_param_hash[parameterName]] = value;
105 else // uhm, do we add it if it doesn't exist? what does ms do?
110 public SqliteParameter this[int parameterIndex] {
112 return (SqliteParameter) numeric_param_list[parameterIndex];
115 numeric_param_list[parameterIndex] = value;
119 public int Add (object value)
121 CheckSqliteParam (value);
122 SqliteParameter sqlp = (SqliteParameter) value;
123 if (named_param_hash.Contains (sqlp.ParameterName))
124 throw new DuplicateNameException ("Parameter collection already contains given value.");
126 named_param_hash[value] = numeric_param_list.Add (value);
128 return (int) named_param_hash[value];
133 public SqliteParameter Add (SqliteParameter param)
139 public SqliteParameter Add (string name, object value)
141 return Add (new SqliteParameter (name, value));
144 public SqliteParameter Add (string name, DbType type)
146 return Add (new SqliteParameter (name, type));
149 public bool IsFixedSize {
155 public bool IsReadOnly {
163 numeric_param_list.Clear ();
164 named_param_hash.Clear ();
167 public void Insert (int index, object value)
169 CheckSqliteParam (value);
170 if (numeric_param_list.Count == index) {
175 numeric_param_list.Insert (index, value);
176 RecreateNamedHash ();
179 public void Remove (object value)
181 CheckSqliteParam (value);
182 RemoveAt ((SqliteParameter) value);
189 return numeric_param_list.Count;
193 public bool IsSynchronized {
199 public object SyncRoot {
205 public void CopyTo (Array array, int index)
207 throw new NotImplementedException ();
210 private void CheckSqliteParam (object value)
212 if (!(value is SqliteParameter))
213 throw new InvalidCastException ("Can only use SqliteParameter objects");
216 private void RecreateNamedHash ()
218 for (int i = 0; i < numeric_param_list.Count; i++) {
219 named_param_hash[((SqliteParameter) numeric_param_list[i]).ParameterName] = i;