Another make dist fix
[mono.git] / mcs / class / Mono.Data.Sqlite / Mono.Data.Sqlite_2.0 / SQLiteDataAdapter.cs
1 /********************************************************\r
2  * ADO.NET 2.0 Data Provider for SQLite Version 3.X\r
3  * Written by Robert Simpson (robert@blackcastlesoft.com)\r
4  * \r
5  * Released to the public domain, use at your own risk!\r
6  ********************************************************/\r
7 \r
8 namespace Mono.Data.Sqlite\r
9 {\r
10   using System;\r
11   using System.Data;\r
12   using System.Data.Common;\r
13   using System.ComponentModel;\r
14 \r
15   /// <summary>\r
16   /// SQLite implementation of DbDataAdapter.\r
17   /// </summary>\r
18 #if !PLATFORM_COMPACTFRAMEWORK\r
19   [DefaultEvent("RowUpdated")]\r
20   [ToolboxItem("SQLite.Designer.SqliteDataAdapterToolboxItem, SQLite.Designer, Version=1.0.36.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139")]\r
21   [Designer("Microsoft.VSDesigner.Data.VS.SqlDataAdapterDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
22 #endif\r
23   public sealed class SqliteDataAdapter : DbDataAdapter\r
24   {\r
25     private static object _updatingEventPH = new object();\r
26     private static object _updatedEventPH = new object();\r
27 \r
28     /// <overloads>\r
29     /// This class is just a shell around the DbDataAdapter.  Nothing from DbDataAdapter is overridden here, just a few constructors are defined.\r
30     /// </overloads>\r
31     /// <summary>\r
32     /// Default constructor.\r
33     /// </summary>\r
34     public SqliteDataAdapter()\r
35     {\r
36     }\r
37 \r
38     /// <summary>\r
39     /// Constructs a data adapter using the specified select command.\r
40     /// </summary>\r
41     /// <param name="cmd">The select command to associate with the adapter.</param>\r
42     public SqliteDataAdapter(SqliteCommand cmd)\r
43     {\r
44       SelectCommand = cmd;\r
45     }\r
46 \r
47     /// <summary>\r
48     /// Constructs a data adapter with the supplied select command text and associated with the specified connection.\r
49     /// </summary>\r
50     /// <param name="commandText">The select command text to associate with the data adapter.</param>\r
51     /// <param name="connection">The connection to associate with the select command.</param>\r
52     public SqliteDataAdapter(string commandText, SqliteConnection connection)\r
53     {\r
54       SelectCommand = new SqliteCommand(commandText, connection);\r
55     }\r
56 \r
57     /// <summary>\r
58     /// Constructs a data adapter with the specified select command text, and using the specified database connection string.\r
59     /// </summary>\r
60     /// <param name="commandText">The select command text to use to construct a select command.</param>\r
61     /// <param name="connectionString">A connection string suitable for passing to a new SqliteConnection, which is associated with the select command.</param>\r
62     public SqliteDataAdapter(string commandText, string connectionString)\r
63     {\r
64       SqliteConnection cnn = new SqliteConnection(connectionString);\r
65       SelectCommand = new SqliteCommand(commandText, cnn);\r
66     }\r
67 \r
68     /// <summary>\r
69     /// Row updating event handler\r
70     /// </summary>\r
71     public event EventHandler<RowUpdatingEventArgs> RowUpdating\r
72     {\r
73       add\r
74       {\r
75 #if !PLATFORM_COMPACTFRAMEWORK\r
76         EventHandler<RowUpdatingEventArgs> previous = (EventHandler<RowUpdatingEventArgs>)base.Events[_updatingEventPH];\r
77         if ((previous != null) && (value.Target is DbCommandBuilder))\r
78         {\r
79           EventHandler<RowUpdatingEventArgs> handler = (EventHandler<RowUpdatingEventArgs>)FindBuilder(previous);\r
80           if (handler != null)\r
81           {\r
82             base.Events.RemoveHandler(_updatingEventPH, handler);\r
83           }\r
84         }\r
85 #endif\r
86         base.Events.AddHandler(_updatingEventPH, value); \r
87       }\r
88       remove { base.Events.RemoveHandler(_updatingEventPH, value); }\r
89     }\r
90 \r
91 #if !PLATFORM_COMPACTFRAMEWORK\r
92     internal static Delegate FindBuilder(MulticastDelegate mcd)\r
93     {\r
94       if (mcd != null)\r
95       {\r
96         Delegate[] invocationList = mcd.GetInvocationList();\r
97         for (int i = 0; i < invocationList.Length; i++)\r
98         {\r
99           if (invocationList[i].Target is DbCommandBuilder)\r
100           {\r
101             return invocationList[i];\r
102           }\r
103         }\r
104       }\r
105       return null;\r
106     }\r
107 #endif\r
108 \r
109     /// <summary>\r
110     /// Row updated event handler\r
111     /// </summary>\r
112     public event EventHandler<RowUpdatedEventArgs> RowUpdated\r
113     {\r
114       add { base.Events.AddHandler(_updatedEventPH, value); }\r
115       remove { base.Events.RemoveHandler(_updatedEventPH, value); }\r
116     }\r
117 \r
118     /// <summary>\r
119     /// Raised by the underlying DbDataAdapter when a row is being updated\r
120     /// </summary>\r
121     /// <param name="value">The event's specifics</param>\r
122     protected override void OnRowUpdating(RowUpdatingEventArgs value)\r
123     {\r
124       EventHandler<RowUpdatingEventArgs> handler = base.Events[_updatingEventPH] as EventHandler<RowUpdatingEventArgs>;\r
125 \r
126       if (handler != null)\r
127         handler(this, value);\r
128     }\r
129 \r
130     /// <summary>\r
131     /// Raised by DbDataAdapter after a row is updated\r
132     /// </summary>\r
133     /// <param name="value">The event's specifics</param>\r
134     protected override void OnRowUpdated(RowUpdatedEventArgs value)\r
135     {\r
136       EventHandler<RowUpdatedEventArgs> handler = base.Events[_updatedEventPH] as EventHandler<RowUpdatedEventArgs>;\r
137 \r
138       if (handler != null)\r
139         handler(this, value);\r
140     }\r
141 \r
142     /// <summary>\r
143     /// Gets/sets the select command for this DataAdapter\r
144     /// </summary>\r
145 #if !PLATFORM_COMPACTFRAMEWORK\r
146     [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
147 #endif\r
148     public new SqliteCommand SelectCommand\r
149     {\r
150       get { return (SqliteCommand)base.SelectCommand; }\r
151       set { base.SelectCommand = value; }\r
152     }\r
153 \r
154     /// <summary>\r
155     /// Gets/sets the insert command for this DataAdapter\r
156     /// </summary>\r
157 #if !PLATFORM_COMPACTFRAMEWORK\r
158     [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
159 #endif\r
160     public new SqliteCommand InsertCommand\r
161     {\r
162       get { return (SqliteCommand)base.InsertCommand; }\r
163       set { base.InsertCommand = value; }\r
164     }\r
165 \r
166     /// <summary>\r
167     /// Gets/sets the update command for this DataAdapter\r
168     /// </summary>\r
169 #if !PLATFORM_COMPACTFRAMEWORK\r
170     [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
171 #endif\r
172     public new SqliteCommand UpdateCommand\r
173     {\r
174       get { return (SqliteCommand)base.UpdateCommand; }\r
175       set { base.UpdateCommand = value; }\r
176     }\r
177 \r
178     /// <summary>\r
179     /// Gets/sets the delete command for this DataAdapter\r
180     /// </summary>\r
181 #if !PLATFORM_COMPACTFRAMEWORK\r
182     [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
183 #endif\r
184     public new SqliteCommand DeleteCommand\r
185     {\r
186       get { return (SqliteCommand)base.DeleteCommand; }\r
187       set { base.DeleteCommand = value; }\r
188     }\r
189   }\r
190 }\r