2 // OdbcDataReaderTest.cs - NUnit Test Cases for testing the
3 // OdbcDataReader class
6 // Sureshkumar T (TSureshkumar@novell.com)
8 // Copyright (c) 2004 Novell Inc., and the individuals listed
9 // on the ChangeLog entries.
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Data.Common;
36 using System.Data.Odbc;
37 using System.Globalization;
39 using NUnit.Framework;
42 namespace MonoTests.System.Data.Connected.Odbc
46 public class OdbcDataReaderTest
48 static byte [] long_bytes = new byte [] {
49 0x00, 0x66, 0x06, 0x66, 0x97, 0x00, 0x66, 0x06, 0x66,
50 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
51 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
52 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
53 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
54 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
55 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
56 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
57 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
58 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
59 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
60 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
61 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
62 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
63 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
64 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
65 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
66 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
67 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
68 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
69 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
70 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
71 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
72 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
73 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
74 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66,
75 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06,
76 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06, 0x66,
77 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97, 0x06,
78 0x66, 0x06, 0x66, 0x97, 0x06, 0x66, 0x06, 0x66, 0x97,
79 0x06, 0x66, 0x06, 0x66, 0x98};
87 conn = ConnectionManager.Instance.Odbc.Connection;
88 cmd = conn.CreateCommand ();
92 public void TearDown ()
96 ConnectionManager.Instance.Close ();
100 public void GetBytes ()
102 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1";
103 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) {
104 Assert.IsTrue (reader.Read (), "#C1");
106 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
108 byte [] val = new byte [totalsize];
109 long ret = reader.GetBytes (0, 0L, val, 0, (int) (totalsize * 2));
110 Assert.AreEqual (totalsize, ret, "#C2");
111 Assert.AreEqual (new byte [] { 0x32, 0x56, 0x00, 0x44, 0x22 }, val, "#C3");
114 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 2";
116 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) {
117 Assert.IsTrue (reader.Read (), "#G1");
119 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
121 byte [] val = new byte [totalsize];
126 ret = reader.GetBytes (0, offset, val, offset, 50);
129 } while (count < totalsize);
131 Assert.AreEqual (long_bytes.Length, count, "#G2");
132 Assert.AreEqual (long_bytes, val, "#G3");
135 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult)) {
136 Assert.IsTrue (reader.Read (), "#H1");
138 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
140 byte [] val = new byte [totalsize];
145 ret = reader.GetBytes (0, offset, val, offset, 50);
148 } while (count < totalsize);
150 Assert.AreEqual (long_bytes.Length, count, "#H2");
151 Assert.AreEqual (long_bytes, val, "#H3");
156 public void GetBytes_Buffer_TooSmall ()
158 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 2";
160 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) {
161 Assert.IsTrue (reader.Read ());
163 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
164 byte [] val = new byte [totalsize - 1];
166 long ret = reader.GetBytes (0, 0, val, 0, (int) totalsize);
167 Assert.AreEqual (274, ret, "#A1");
168 for (int i = 0; i < ret; i++)
169 Assert.AreEqual (long_bytes [i], val [i], "#A2:" + i);
170 for (long i = ret; i < val.Length; i++)
171 Assert.AreEqual (0x00, val [i], "#A3:" + i);
174 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) {
175 Assert.IsTrue (reader.Read ());
177 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
178 byte [] val = new byte [totalsize];
179 int buffer_offset = 1;
181 long ret = reader.GetBytes (0, 0, val, buffer_offset, (int) totalsize);
182 Assert.AreEqual (274, ret, "#B1");
183 Assert.AreEqual (0x00, val [0], "#B2");
184 for (int i = 0; i < ret; i++)
185 Assert.AreEqual (long_bytes [i], val [i + buffer_offset], "#B2:" + i);
186 for (long i = (ret + buffer_offset); i < val.Length; i++)
187 Assert.AreEqual (0x00, val [i], "#B3:" + i);
190 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult | CommandBehavior.SequentialAccess)) {
191 Assert.IsTrue (reader.Read ());
193 long totalsize = reader.GetBytes (0, 0, null, 0, 0);
194 byte [] val = new byte [totalsize];
196 long ret = reader.GetBytes (0, 0, val, 0, (int) (totalsize + 1));
197 Assert.AreEqual (totalsize, ret, "#C1");
200 ConnectionManager.Instance.Odbc.CloseConnection ();
204 public void GetBytes_BufferIndex_Negative ()
206 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1";
208 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) {
209 Assert.IsTrue (reader.Read (), "#1");
212 reader.GetBytes (0, 0, null, -1, 0);
214 } catch (ArgumentOutOfRangeException ex) {
215 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#3");
216 Assert.IsNull (ex.InnerException, "#4");
217 Assert.IsNotNull (ex.Message, "#5");
218 Assert.AreEqual ("bufferIndex", ex.ParamName, "#6");
224 public void GetBytes_DataIndex_Negative ()
226 IDbCommand cmd = conn.CreateCommand ();
227 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1";
229 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) {
230 Assert.IsTrue (reader.Read (), "#A1");
233 reader.GetBytes (0, -1L, null, 0, 0);
235 } catch (ArgumentOutOfRangeException ex) {
236 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A3");
237 Assert.IsNull (ex.InnerException, "#A4");
238 Assert.IsNotNull (ex.Message, "#A5");
239 Assert.AreEqual ("dataIndex", ex.ParamName, "#A6");
243 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SingleResult)) {
244 Assert.IsTrue (reader.Read (), "#B1");
247 reader.GetBytes (0, -1L, null, 0, 0);
249 } catch (ArgumentOutOfRangeException ex) {
250 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B3");
251 Assert.IsNull (ex.InnerException, "#B4");
252 Assert.IsNotNull (ex.Message, "#B5");
253 Assert.AreEqual ("dataIndex", ex.ParamName, "#B6");
259 public void GetBytes_Length_Negative ()
261 cmd.CommandText = "SELECT type_blob FROM binary_family where id = 1";
263 using (IDataReader reader = cmd.ExecuteReader (CommandBehavior.SequentialAccess)) {
264 Assert.IsTrue (reader.Read (), "#1");
267 reader.GetBytes (0, 0, null, 0, -1);
269 } catch (ArgumentOutOfRangeException ex) {
270 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#3");
271 Assert.IsNull (ex.InnerException, "#4");
272 Assert.IsNotNull (ex.Message, "#5");
273 Assert.AreEqual ("length", ex.ParamName, "#6");
279 public void GetSchemaTable ()
281 IDataReader reader = null;
286 cmd.CommandText = "select id, fname, id + 20 as plustwenty from employee";
287 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo);
288 schema = reader.GetSchemaTable ();
291 AssertSchemaTableStructure (schema, "#A:");
292 Assert.AreEqual (3, schema.Rows.Count, "#A:RowCount");
293 pkRow = schema.Select ("ColumnName = 'id'") [0];
294 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#A:ColumnName_IsNull");
295 Assert.AreEqual ("id", pkRow ["ColumnName"], "#A:ColumnName_Value");
296 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#A:ColumnOrdinal_IsNull");
297 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#A:ColumnOrdinal_Value");
298 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#A:ColumnSize_IsNull");
299 Assert.AreEqual (4, pkRow ["ColumnSize"], "#A:ColumnSize_Value");
300 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#A:NumericPrecision_IsNull");
301 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#A:NumericPrecision_Value");
302 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#A:NumericScale_IsNull");
303 Assert.AreEqual (0, pkRow ["NumericScale"], "#A:NumericScale_Value");
304 Assert.IsFalse (pkRow.IsNull ("DataType"), "#A:DataType_IsNull");
305 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#A:DataType_Value");
306 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#A:ProviderType_IsNull");
307 Assert.AreEqual (10, pkRow ["ProviderType"], "#A:ProviderType_Value");
308 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#A:IsLong_IsNull");
309 Assert.AreEqual (false, pkRow ["IsLong"], "#A:IsLong_Value");
310 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#A:AllowDBNull_IsNull");
311 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#A:AllowDBNull_Value");
312 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#A:IsReadOnly_IsNull");
313 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#A:IsReadOnly_Value");
314 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#A:IsRowVersion_IsNull");
315 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#A:IsRowVersion_Value");
316 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#A:IsUnique_IsNull");
317 Assert.AreEqual (true, pkRow ["IsUnique"], "#A:IsUnique_Value");
318 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#A:IsKey_IsNull");
319 Assert.AreEqual (true, pkRow ["IsKey"], "#A:IsKey_Value");
320 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#A:IsAutoIncrement_IsNull");
321 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#A:IsAutoIncrement_Value");
322 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#A:BaseSchemaName_IsNull");
323 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#A:BaseSchemaName_Value");
324 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#A:BaseCatalogName_IsNull");
325 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#A:BaseCatalogName_Value");
326 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#A:BaseTableName_IsNull");
327 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#A:BaseTableName_Value");
328 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#A:BaseColumnName_IsNull");
329 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#A:BaseColumnName_Value");
331 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly);
332 schema = reader.GetSchemaTable ();
335 AssertSchemaTableStructure (schema, "#B:");
336 Assert.AreEqual (3, schema.Rows.Count, "#B:RowCount");
337 pkRow = schema.Select ("ColumnName = 'id'") [0];
338 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#B:ColumnName_IsNull");
339 Assert.AreEqual ("id", pkRow ["ColumnName"], "#B:ColumnName_Value");
340 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#B:ColumnOrdinal_IsNull");
341 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#B:ColumnOrdinal_Value");
342 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#B:ColumnSize_IsNull");
343 Assert.AreEqual (4, pkRow ["ColumnSize"], "#B:ColumnSize_Value");
344 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#B:NumericPrecision_IsNull");
345 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#B:NumericPrecision_Value");
346 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#B:NumericScale_IsNull");
347 Assert.AreEqual (0, pkRow ["NumericScale"], "#B:NumericScale_Value");
348 Assert.IsFalse (pkRow.IsNull ("DataType"), "#B:DataType_IsNull");
349 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#B:DataType_Value");
350 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#B:ProviderType_IsNull");
351 Assert.AreEqual (10, pkRow ["ProviderType"], "#B:ProviderType_Value");
352 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#B:IsLong_IsNull");
353 Assert.AreEqual (false, pkRow ["IsLong"], "#B:IsLong_Value");
354 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#B:AllowDBNull_IsNull");
355 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#B:AllowDBNull_Value");
356 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#B:IsReadOnly_IsNull");
357 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#B:IsReadOnly_Value");
358 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#B:IsRowVersion_IsNull");
359 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#B:IsRowVersion_Value");
360 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#B:IsUnique_IsNull");
361 Assert.AreEqual (false, pkRow ["IsUnique"], "#B:IsUnique_Value");
362 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#B:IsKey_IsNull");
363 Assert.AreEqual (false, pkRow ["IsKey"], "#B:IsKey_Value");
364 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#B:IsAutoIncrement_IsNull");
365 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#B:IsAutoIncrement_Value");
366 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#B:BaseSchemaName_IsNull");
367 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#B:BaseSchemaName_Value");
368 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#B:BaseCatalogName_IsNull");
369 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#B:BaseCatalogName_Value");
370 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#B:BaseTableName_IsNull");
371 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#B:BaseTableName_Value");
372 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#B:BaseColumnName_IsNull");
373 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#B:BaseColumnName_Value");
375 reader = cmd.ExecuteReader (CommandBehavior.KeyInfo);
376 schema = reader.GetSchemaTable ();
379 AssertSchemaTableStructure (schema, "#C:");
380 Assert.AreEqual (3, schema.Rows.Count, "#C:RowCount");
381 pkRow = schema.Select ("ColumnName = 'id'") [0];
382 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#C:ColumnName_IsNull");
383 Assert.AreEqual ("id", pkRow ["ColumnName"], "#C:ColumnName_Value");
384 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#C:ColumnOrdinal_IsNull");
385 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#C:ColumnOrdinal_Value");
386 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#C:ColumnSize_IsNull");
387 Assert.AreEqual (4, pkRow ["ColumnSize"], "#C:ColumnSize_Value");
388 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#C:NumericPrecision_IsNull");
389 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#C:NumericPrecision_Value");
390 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#C:NumericScale_IsNull");
391 Assert.AreEqual (0, pkRow ["NumericScale"], "#C:NumericScale_Value");
392 Assert.IsFalse (pkRow.IsNull ("DataType"), "#C:DataType_IsNull");
393 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#C:DataType_Value");
394 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#C:ProviderType_IsNull");
395 Assert.AreEqual (10, pkRow ["ProviderType"], "#C:ProviderType_Value");
396 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#C:IsLong_IsNull");
397 Assert.AreEqual (false, pkRow ["IsLong"], "#C:IsLong_Value");
398 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#C:AllowDBNull_IsNull");
399 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#C:AllowDBNull_Value");
400 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#C:IsReadOnly_IsNull");
401 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#C:IsReadOnly_Value");
402 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#C:IsRowVersion_IsNull");
403 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#C:IsRowVersion_Value");
404 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#C:IsUnique_IsNull");
405 Assert.AreEqual (true, pkRow ["IsUnique"], "#C:IsUnique_Value");
406 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#C:IsKey_IsNull");
407 Assert.AreEqual (true, pkRow ["IsKey"], "#C:IsKey_Value");
408 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#C:IsAutoIncrement_IsNull");
409 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#C:IsAutoIncrement_Value");
410 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#C:BaseSchemaName_IsNull");
411 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#C:BaseSchemaName_Value");
412 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#C:BaseCatalogName_IsNull");
413 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#C:BaseCatalogName_Value");
414 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#C:BaseTableName_IsNull");
415 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#C:BaseTableName_Value");
416 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#C:BaseColumnName_IsNull");
417 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#C:BaseColumnName_Value");
419 reader = cmd.ExecuteReader ();
420 schema = reader.GetSchemaTable ();
423 AssertSchemaTableStructure (schema, "#D:");
424 Assert.AreEqual (3, schema.Rows.Count, "#D:RowCount");
425 pkRow = schema.Select ("ColumnName = 'id'") [0];
426 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#D:ColumnName_IsNull");
427 Assert.AreEqual ("id", pkRow ["ColumnName"], "#D:ColumnName_Value");
428 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#D:ColumnOrdinal_IsNull");
429 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#D:ColumnOrdinal_Value");
430 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#D:ColumnSize_IsNull");
431 Assert.AreEqual (4, pkRow ["ColumnSize"], "#D:ColumnSize_Value");
432 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#D:NumericPrecision_IsNull");
433 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#D:NumericPrecision_Value");
434 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#D:NumericScale_IsNull");
435 Assert.AreEqual (0, pkRow ["NumericScale"], "#D:NumericScale_Value");
436 Assert.IsFalse (pkRow.IsNull ("DataType"), "#D:DataType_IsNull");
437 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#D:DataType_Value");
438 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#D:ProviderType_IsNull");
439 Assert.AreEqual (10, pkRow ["ProviderType"], "#D:ProviderType_Value");
440 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#D:IsLong_IsNull");
441 Assert.AreEqual (false, pkRow ["IsLong"], "#D:IsLong_Value");
442 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#D:AllowDBNull_IsNull");
443 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#D:AllowDBNull_Value");
444 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#D:IsReadOnly_IsNull");
445 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#D:IsReadOnly_Value");
446 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#D:IsRowVersion_IsNull");
447 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#D:IsRowVersion_Value");
448 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#D:IsUnique_IsNull");
449 Assert.AreEqual (false, pkRow ["IsUnique"], "#D:IsUnique_Value");
450 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#D:IsKey_IsNull");
451 Assert.AreEqual (false, pkRow ["IsKey"], "#D:IsKey_Value");
452 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#D:IsAutoIncrement_IsNull");
453 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#D:IsAutoIncrement_Value");
454 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#D:BaseSchemaName_IsNull");
455 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#D:BaseSchemaName_Value");
456 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#D:BaseCatalogName_IsNull");
457 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#D:BaseCatalogName_Value");
458 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#D:BaseTableName_IsNull");
459 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#D:BaseTableName_Value");
460 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#D:BaseColumnName_IsNull");
461 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#D:BaseColumnName_Value");
463 cmd = conn.CreateCommand ();
464 cmd.CommandText = "select id, fname, id + 20 as plustwenty from employee";
466 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo);
467 schema = reader.GetSchemaTable ();
470 AssertSchemaTableStructure (schema, "#E:");
471 Assert.AreEqual (3, schema.Rows.Count, "#E:RowCount");
472 pkRow = schema.Select ("ColumnName = 'id'") [0];
473 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#E:ColumnName_IsNull");
474 Assert.AreEqual ("id", pkRow ["ColumnName"], "#E:ColumnName_Value");
475 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#E:ColumnOrdinal_IsNull");
476 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#E:ColumnOrdinal_Value");
477 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#E:ColumnSize_IsNull");
478 Assert.AreEqual (4, pkRow ["ColumnSize"], "#E:ColumnSize_Value");
479 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#E:NumericPrecision_IsNull");
480 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#E:NumericPrecision_Value");
481 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#E:NumericScale_IsNull");
482 Assert.AreEqual (0, pkRow ["NumericScale"], "#E:NumericScale_Value");
483 Assert.IsFalse (pkRow.IsNull ("DataType"), "#E:DataType_IsNull");
484 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#E:DataType_Value");
485 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#E:ProviderType_IsNull");
486 Assert.AreEqual (10, pkRow ["ProviderType"], "#E:ProviderType_Value");
487 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#E:IsLong_IsNull");
488 Assert.AreEqual (false, pkRow ["IsLong"], "#E:IsLong_Value");
489 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#E:AllowDBNull_IsNull");
490 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#E:AllowDBNull_Value");
491 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#E:IsReadOnly_IsNull");
492 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#E:IsReadOnly_Value");
493 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#E:IsRowVersion_IsNull");
494 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#E:IsRowVersion_Value");
495 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#E:IsUnique_IsNull");
496 Assert.AreEqual (true, pkRow ["IsUnique"], "#E:IsUnique_Value");
497 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#E:IsKey_IsNull");
498 Assert.AreEqual (true, pkRow ["IsKey"], "#E:IsKey_Value");
499 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#E:IsAutoIncrement_IsNull");
500 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#E:IsAutoIncrement_Value");
501 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#E:BaseSchemaName_IsNull");
502 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#E:BaseSchemaName_Value");
503 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#E:BaseCatalogName_IsNull");
504 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#E:BaseCatalogName_Value");
505 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#E:BaseTableName_IsNull");
506 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#E:BaseTableName_Value");
507 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#E:BaseColumnName_IsNull");
508 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#E:BaseColumnName_Value");
510 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly);
511 schema = reader.GetSchemaTable ();
514 AssertSchemaTableStructure (schema, "#F:");
515 Assert.AreEqual (3, schema.Rows.Count, "#F:RowCount");
516 pkRow = schema.Select ("ColumnName = 'id'") [0];
517 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#F:ColumnName_IsNull");
518 Assert.AreEqual ("id", pkRow ["ColumnName"], "#F:ColumnName_Value");
519 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#F:ColumnOrdinal_IsNull");
520 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#F:ColumnOrdinal_Value");
521 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#F:ColumnSize_IsNull");
522 Assert.AreEqual (4, pkRow ["ColumnSize"], "#F:ColumnSize_Value");
523 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#F:NumericPrecision_IsNull");
524 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#F:NumericPrecision_Value");
525 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#F:NumericScale_IsNull");
526 Assert.AreEqual (0, pkRow ["NumericScale"], "#F:NumericScale_Value");
527 Assert.IsFalse (pkRow.IsNull ("DataType"), "#F:DataType_IsNull");
528 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#F:DataType_Value");
529 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#F:ProviderType_IsNull");
530 Assert.AreEqual (10, pkRow ["ProviderType"], "#F:ProviderType_Value");
531 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#F:IsLong_IsNull");
532 Assert.AreEqual (false, pkRow ["IsLong"], "#F:IsLong_Value");
533 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#F:AllowDBNull_IsNull");
534 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#F:AllowDBNull_Value");
535 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#F:IsReadOnly_IsNull");
536 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#F:IsReadOnly_Value");
537 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#F:IsRowVersion_IsNull");
538 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#F:IsRowVersion_Value");
539 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#F:IsUnique_IsNull");
540 Assert.AreEqual (false, pkRow ["IsUnique"], "#F:IsUnique_Value");
541 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#F:IsKey_IsNull");
542 Assert.AreEqual (false, pkRow ["IsKey"], "#F:IsKey_Value");
543 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#F:IsAutoIncrement_IsNull");
544 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#F:IsAutoIncrement_Value");
545 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#F:BaseSchemaName_IsNull");
546 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#F:BaseSchemaName_Value");
547 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#F:BaseCatalogName_IsNull");
548 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#F:BaseCatalogName_Value");
549 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#F:BaseTableName_IsNull");
550 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#F:BaseTableName_Value");
551 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#F:BaseColumnName_IsNull");
552 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#F:BaseColumnName_Value");
554 reader = cmd.ExecuteReader (CommandBehavior.KeyInfo);
555 schema = reader.GetSchemaTable ();
558 AssertSchemaTableStructure (schema, "#G:");
559 Assert.AreEqual (3, schema.Rows.Count, "#G:RowCount");
560 pkRow = schema.Select ("ColumnName = 'id'") [0];
561 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#G:ColumnName_IsNull");
562 Assert.AreEqual ("id", pkRow ["ColumnName"], "#G:ColumnName_Value");
563 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#G:ColumnOrdinal_IsNull");
564 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#G:ColumnOrdinal_Value");
565 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#G:ColumnSize_IsNull");
566 Assert.AreEqual (4, pkRow ["ColumnSize"], "#G:ColumnSize_Value");
567 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#G:NumericPrecision_IsNull");
568 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#G:NumericPrecision_Value");
569 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#G:NumericScale_IsNull");
570 Assert.AreEqual (0, pkRow ["NumericScale"], "#G:NumericScale_Value");
571 Assert.IsFalse (pkRow.IsNull ("DataType"), "#G:DataType_IsNull");
572 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#G:DataType_Value");
573 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#G:ProviderType_IsNull");
574 Assert.AreEqual (10, pkRow ["ProviderType"], "#G:ProviderType_Value");
575 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#G:IsLong_IsNull");
576 Assert.AreEqual (false, pkRow ["IsLong"], "#G:IsLong_Value");
577 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#G:AllowDBNull_IsNull");
578 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#G:AllowDBNull_Value");
579 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#G:IsReadOnly_IsNull");
580 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#G:IsReadOnly_Value");
581 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#G:IsRowVersion_IsNull");
582 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#G:IsRowVersion_Value");
583 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#G:IsUnique_IsNull");
584 Assert.AreEqual (true, pkRow ["IsUnique"], "#G:IsUnique_Value");
585 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#G:IsKey_IsNull");
586 Assert.AreEqual (true, pkRow ["IsKey"], "#G:IsKey_Value");
587 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#G:IsAutoIncrement_IsNull");
588 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#G:IsAutoIncrement_Value");
589 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#G:BaseSchemaName_IsNull");
590 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#G:BaseSchemaName_Value");
591 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#G:BaseCatalogName_IsNull");
592 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#G:BaseCatalogName_Value");
593 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#G:BaseTableName_IsNull");
594 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#G:BaseTableName_Value");
595 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#G:BaseColumnName_IsNull");
596 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#G:BaseColumnName_Value");
598 reader = cmd.ExecuteReader ();
599 schema = reader.GetSchemaTable ();
602 AssertSchemaTableStructure (schema, "#H:");
603 Assert.AreEqual (3, schema.Rows.Count, "#H:RowCount");
604 pkRow = schema.Select ("ColumnName = 'id'") [0];
605 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#H:ColumnName_IsNull");
606 Assert.AreEqual ("id", pkRow ["ColumnName"], "#H:ColumnName_Value");
607 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#H:ColumnOrdinal_IsNull");
608 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#H:ColumnOrdinal_Value");
609 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#H:ColumnSize_IsNull");
610 Assert.AreEqual (4, pkRow ["ColumnSize"], "#H:ColumnSize_Value");
611 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#H:NumericPrecision_IsNull");
612 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#H:NumericPrecision_Value");
613 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#H:NumericScale_IsNull");
614 Assert.AreEqual (0, pkRow ["NumericScale"], "#H:NumericScale_Value");
615 Assert.IsFalse (pkRow.IsNull ("DataType"), "#H:DataType_IsNull");
616 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#H:DataType_Value");
617 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#H:ProviderType_IsNull");
618 Assert.AreEqual (10, pkRow ["ProviderType"], "#H:ProviderType_Value");
619 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#H:IsLong_IsNull");
620 Assert.AreEqual (false, pkRow ["IsLong"], "#H:IsLong_Value");
621 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#H:AllowDBNull_IsNull");
622 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#H:AllowDBNull_Value");
623 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#H:IsReadOnly_IsNull");
624 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#H:IsReadOnly_Value");
625 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#H:IsRowVersion_IsNull");
626 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#H:IsRowVersion_Value");
627 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#H:IsUnique_IsNull");
628 Assert.AreEqual (false, pkRow ["IsUnique"], "#H:IsUnique_Value");
629 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#H:IsKey_IsNull");
630 Assert.AreEqual (false, pkRow ["IsKey"], "#H:IsKey_Value");
631 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#H:IsAutoIncrement_IsNull");
632 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#H:IsAutoIncrement_Value");
633 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#H:BaseSchemaName_IsNull");
634 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#H:BaseSchemaName_Value");
635 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#H:BaseCatalogName_IsNull");
636 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#H:BaseCatalogName_Value");
637 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#H:BaseTableName_IsNull");
638 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#H:BaseTableName_Value");
639 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#H:BaseColumnName_IsNull");
640 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#H:BaseColumnName_Value");
642 cmd.CommandText = "select id, fname, id + 20 as plustwenty from employee where id = ?";
643 IDbDataParameter param = cmd.CreateParameter ();
644 cmd.Parameters.Add (param);
645 param.DbType = DbType.Int32;
647 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo);
648 schema = reader.GetSchemaTable ();
651 AssertSchemaTableStructure (schema, "#I:");
652 Assert.AreEqual (3, schema.Rows.Count, "#I:RowCount");
653 pkRow = schema.Select ("ColumnName = 'id'") [0];
654 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#I:ColumnName_IsNull");
655 Assert.AreEqual ("id", pkRow ["ColumnName"], "#I:ColumnName_Value");
656 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#I:ColumnOrdinal_IsNull");
657 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#I:ColumnOrdinal_Value");
658 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#I:ColumnSize_IsNull");
659 Assert.AreEqual (4, pkRow ["ColumnSize"], "#I:ColumnSize_Value");
660 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#I:NumericPrecision_IsNull");
661 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#I:NumericPrecision_Value");
662 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#I:NumericScale_IsNull");
663 Assert.AreEqual (0, pkRow ["NumericScale"], "#I:NumericScale_Value");
664 Assert.IsFalse (pkRow.IsNull ("DataType"), "#I:DataType_IsNull");
665 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#I:DataType_Value");
666 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#I:ProviderType_IsNull");
667 Assert.AreEqual (10, pkRow ["ProviderType"], "#I:ProviderType_Value");
668 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#I:IsLong_IsNull");
669 Assert.AreEqual (false, pkRow ["IsLong"], "#I:IsLong_Value");
670 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#I:AllowDBNull_IsNull");
671 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#I:AllowDBNull_Value");
672 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#I:IsReadOnly_IsNull");
673 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#I:IsReadOnly_Value");
674 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#I:IsRowVersion_IsNull");
675 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#I:IsRowVersion_Value");
676 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#I:IsUnique_IsNull");
677 Assert.AreEqual (true, pkRow ["IsUnique"], "#I:IsUnique_Value");
678 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#I:IsKey_IsNull");
679 Assert.AreEqual (true, pkRow ["IsKey"], "#I:IsKey_Value");
680 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#I:IsAutoIncrement_IsNull");
681 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#I:IsAutoIncrement_Value");
682 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#I:BaseSchemaName_IsNull");
683 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#I:BaseSchemaName_Value");
684 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#I:BaseCatalogName_IsNull");
685 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#I:BaseCatalogName_Value");
686 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#I:BaseTableName_IsNull");
687 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#I:BaseTableName_Value");
688 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#I:BaseColumnName_IsNull");
689 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#I:BaseColumnName_Value");
691 reader = cmd.ExecuteReader (CommandBehavior.SchemaOnly);
692 schema = reader.GetSchemaTable ();
695 AssertSchemaTableStructure (schema, "#J:");
696 Assert.AreEqual (3, schema.Rows.Count, "#J:RowCount");
697 pkRow = schema.Select ("ColumnName = 'id'") [0];
698 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#J:ColumnName_IsNull");
699 Assert.AreEqual ("id", pkRow ["ColumnName"], "#J:ColumnName_Value");
700 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#J:ColumnOrdinal_IsNull");
701 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#J:ColumnOrdinal_Value");
702 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#J:ColumnSize_IsNull");
703 Assert.AreEqual (4, pkRow ["ColumnSize"], "#J:ColumnSize_Value");
704 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#J:NumericPrecision_IsNull");
705 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#J:NumericPrecision_Value");
706 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#J:NumericScale_IsNull");
707 Assert.AreEqual (0, pkRow ["NumericScale"], "#J:NumericScale_Value");
708 Assert.IsFalse (pkRow.IsNull ("DataType"), "#J:DataType_IsNull");
709 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#J:DataType_Value");
710 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#J:ProviderType_IsNull");
711 Assert.AreEqual (10, pkRow ["ProviderType"], "#J:ProviderType_Value");
712 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#J:IsLong_IsNull");
713 Assert.AreEqual (false, pkRow ["IsLong"], "#J:IsLong_Value");
714 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#J:AllowDBNull_IsNull");
715 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#J:AllowDBNull_Value");
716 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#J:IsReadOnly_IsNull");
717 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#J:IsReadOnly_Value");
718 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#J:IsRowVersion_IsNull");
719 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#J:IsRowVersion_Value");
720 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#J:IsUnique_IsNull");
721 Assert.AreEqual (false, pkRow ["IsUnique"], "#J:IsUnique_Value");
722 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#J:IsKey_IsNull");
723 Assert.AreEqual (false, pkRow ["IsKey"], "#J:IsKey_Value");
724 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#J:IsAutoIncrement_IsNull");
725 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#J:IsAutoIncrement_Value");
726 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#J:BaseSchemaName_IsNull");
727 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#J:BaseSchemaName_Value");
728 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#J:BaseCatalogName_IsNull");
729 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#J:BaseCatalogName_Value");
730 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#J:BaseTableName_IsNull");
731 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#J:BaseTableName_Value");
732 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#J:BaseColumnName_IsNull");
733 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#J:BaseColumnName_Value");
735 reader = cmd.ExecuteReader (CommandBehavior.KeyInfo);
736 schema = reader.GetSchemaTable ();
739 AssertSchemaTableStructure (schema, "#K:");
740 Assert.AreEqual (3, schema.Rows.Count, "#K:RowCount");
741 pkRow = schema.Select ("ColumnName = 'id'") [0];
742 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#K:ColumnName_IsNull");
743 Assert.AreEqual ("id", pkRow ["ColumnName"], "#K:ColumnName_Value");
744 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#K:ColumnOrdinal_IsNull");
745 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#K:ColumnOrdinal_Value");
746 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#K:ColumnSize_IsNull");
747 Assert.AreEqual (4, pkRow ["ColumnSize"], "#K:ColumnSize_Value");
748 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#K:NumericPrecision_IsNull");
749 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#K:NumericPrecision_Value");
750 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#K:NumericScale_IsNull");
751 Assert.AreEqual (0, pkRow ["NumericScale"], "#K:NumericScale_Value");
752 Assert.IsFalse (pkRow.IsNull ("DataType"), "#K:DataType_IsNull");
753 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#K:DataType_Value");
754 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#K:ProviderType_IsNull");
755 Assert.AreEqual (10, pkRow ["ProviderType"], "#K:ProviderType_Value");
756 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#K:IsLong_IsNull");
757 Assert.AreEqual (false, pkRow ["IsLong"], "#K:IsLong_Value");
758 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#K:AllowDBNull_IsNull");
759 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#K:AllowDBNull_Value");
760 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#K:IsReadOnly_IsNull");
761 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#K:IsReadOnly_Value");
762 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#K:IsRowVersion_IsNull");
763 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#K:IsRowVersion_Value");
764 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#K:IsUnique_IsNull");
765 Assert.AreEqual (true, pkRow ["IsUnique"], "#K:IsUnique_Value");
766 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#K:IsKey_IsNull");
767 Assert.AreEqual (true, pkRow ["IsKey"], "#K:IsKey_Value");
768 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#K:IsAutoIncrement_IsNull");
769 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#K:IsAutoIncrement_Value");
770 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#K:BaseSchemaName_IsNull");
771 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#K:BaseSchemaName_Value");
772 Assert.IsFalse (pkRow.IsNull ("BaseCatalogName"), "#K:BaseCatalogName_IsNull");
773 Assert.AreEqual (ConnectionManager.Instance.DatabaseName, pkRow ["BaseCatalogName"], "#K:BaseCatalogName_Value");
774 Assert.IsFalse (pkRow.IsNull ("BaseTableName"), "#K:BaseTableName_IsNull");
775 Assert.AreEqual ("employee", pkRow ["BaseTableName"], "#K:BaseTableName_Value");
776 Assert.IsFalse (pkRow.IsNull ("BaseColumnName"), "#K:BaseColumnName_IsNull");
777 Assert.AreEqual ("id", pkRow ["BaseColumnName"], "#K:BaseColumnName_Value");
779 reader = cmd.ExecuteReader ();
780 schema = reader.GetSchemaTable ();
783 AssertSchemaTableStructure (schema, "#L:");
784 Assert.AreEqual (3, schema.Rows.Count, "#L:RowCount");
785 pkRow = schema.Select ("ColumnName = 'id'") [0];
786 Assert.IsFalse (pkRow.IsNull ("ColumnName"), "#L:ColumnName_IsNull");
787 Assert.AreEqual ("id", pkRow ["ColumnName"], "#L:ColumnName_Value");
788 Assert.IsFalse (pkRow.IsNull ("ColumnOrdinal"), "#L:ColumnOrdinal_IsNull");
789 Assert.AreEqual (0, pkRow ["ColumnOrdinal"], "#L:ColumnOrdinal_Value");
790 Assert.IsFalse (pkRow.IsNull ("ColumnSize"), "#L:ColumnSize_IsNull");
791 Assert.AreEqual (4, pkRow ["ColumnSize"], "#L:ColumnSize_Value");
792 Assert.IsFalse (pkRow.IsNull ("NumericPrecision"), "#L:NumericPrecision_IsNull");
793 Assert.AreEqual (10, pkRow ["NumericPrecision"], "#L:NumericPrecision_Value");
794 Assert.IsFalse (pkRow.IsNull ("NumericScale"), "#L:NumericScale_IsNull");
795 Assert.AreEqual (0, pkRow ["NumericScale"], "#L:NumericScale_Value");
796 Assert.IsFalse (pkRow.IsNull ("DataType"), "#L:DataType_IsNull");
797 Assert.AreEqual (typeof (int), pkRow ["DataType"], "#L:DataType_Value");
798 Assert.IsFalse (pkRow.IsNull ("ProviderType"), "#L:ProviderType_IsNull");
799 Assert.AreEqual (10, pkRow ["ProviderType"], "#L:ProviderType_Value");
800 Assert.IsFalse (pkRow.IsNull ("IsLong"), "#L:IsLong_IsNull");
801 Assert.AreEqual (false, pkRow ["IsLong"], "#L:IsLong_Value");
802 Assert.IsFalse (pkRow.IsNull ("AllowDBNull"), "#L:AllowDBNull_IsNull");
803 Assert.AreEqual (false, pkRow ["AllowDBNull"], "#L:AllowDBNull_Value");
804 Assert.IsFalse (pkRow.IsNull ("IsReadOnly"), "#L:IsReadOnly_IsNull");
805 Assert.AreEqual (false, pkRow ["IsReadOnly"], "#L:IsReadOnly_Value");
806 Assert.IsFalse (pkRow.IsNull ("IsRowVersion"), "#L:IsRowVersion_IsNull");
807 Assert.AreEqual (false, pkRow ["IsRowVersion"], "#L:IsRowVersion_Value");
808 Assert.IsFalse (pkRow.IsNull ("IsUnique"), "#L:IsUnique_IsNull");
809 Assert.AreEqual (false, pkRow ["IsUnique"], "#L:IsUnique_Value");
810 Assert.IsFalse (pkRow.IsNull ("IsKey"), "#L:IsKey_IsNull");
811 Assert.AreEqual (false, pkRow ["IsKey"], "#L:IsKey_Value");
812 Assert.IsFalse (pkRow.IsNull ("IsAutoIncrement"), "#L:IsAutoIncrement_IsNull");
813 Assert.AreEqual (false, pkRow ["IsAutoIncrement"], "#L:IsAutoIncrement_Value");
814 Assert.IsTrue (pkRow.IsNull ("BaseSchemaName"), "#L:BaseSchemaName_IsNull");
815 Assert.AreEqual (DBNull.Value, pkRow ["BaseSchemaName"], "#L:BaseSchemaName_Value");
816 Assert.IsTrue (pkRow.IsNull ("BaseCatalogName"), "#L:BaseCatalogName_IsNull");
817 Assert.AreEqual (DBNull.Value, pkRow ["BaseCatalogName"], "#L:BaseCatalogName_Value");
818 Assert.IsTrue (pkRow.IsNull ("BaseTableName"), "#L:BaseTableName_IsNull");
819 Assert.AreEqual (DBNull.Value, pkRow ["BaseTableName"], "#L:BaseTableName_Value");
820 Assert.IsTrue (pkRow.IsNull ("BaseColumnName"), "#L:BaseColumnName_IsNull");
821 Assert.AreEqual (DBNull.Value, pkRow ["BaseColumnName"], "#L:BaseColumnName_Value");
829 public void OutputParametersTest ()
831 // MySQL currently does not support output parameters
832 // in its ODBC connector:
833 // http://www.paragon-cs.com/mag/issue3.pdf
834 if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.SQLServer)
835 Assert.Ignore ("MySQL does not (yet) support output parameters using ODBC.");
837 IDataReader reader = null;
840 cmd.CommandText = "{? = CALL sp_get_age (?, ?)}";
842 OdbcParameter ret = new OdbcParameter ("ret", OdbcType.Int);
843 cmd.Parameters.Add (ret);
844 ret.Direction = ParameterDirection.ReturnValue;
846 OdbcParameter name = new OdbcParameter ("fname", OdbcType.VarChar);
847 cmd.Parameters.Add (name);
848 name.Direction = ParameterDirection.Input;
849 name.Value = "suresh";
851 OdbcParameter age = new OdbcParameter ("age", OdbcType.Int);
852 cmd.Parameters.Add (age);
853 age.Direction = ParameterDirection.Output;
855 reader = cmd.ExecuteReader ();
858 /* FIXME: we don't support output/return parameters */
859 if (!RunningOnMono) {
860 Assert.IsTrue (((int) (age.Value)) > 0, "#1");
861 Assert.IsTrue (((int) ret.Value) > 0, "#2");
870 public void LongTextTest ()
872 IDataReader reader = null;
875 cmd.CommandText = "Select type_text from string_family where id=2";
877 reader = cmd.ExecuteReader ();
887 public void Bug82135Test ()
889 const string drop_table = "drop table odbcnodatatest";
891 // cleanup in case of previously failed test
892 DBHelper.ExecuteNonQuery (conn, drop_table);
894 cmd = new OdbcCommand ("create table odbcnodatatest (ID int not null, Val1 text)",
896 cmd.ExecuteNonQuery ();
897 cmd = new OdbcCommand ("delete from odbcnodatatest", conn);
898 Assert.AreEqual (0, cmd.ExecuteNonQuery ());
901 cmd = new OdbcCommand (drop_table, conn);
902 cmd.ExecuteNonQuery ();
906 public void Bug82560Test ()
908 string drop_table = "DROP TABLE odbc_alias_test";
910 // cleanup in case of previously failed test
911 DBHelper.ExecuteNonQuery (conn, drop_table);
913 DoExecuteNonQuery (conn, "CREATE TABLE odbc_alias_test" +
914 "(ifld INT NOT NULL PRIMARY KEY, sfld VARCHAR(20))");
915 DoExecuteNonQuery (conn, "INSERT INTO odbc_alias_test" +
916 "(ifld, sfld) VALUES (1, '1111')");
917 DoExecuteScalar (conn, "SELECT A.ifld FROM odbc_alias_test " +
918 "A WHERE A.ifld = 1");
919 DoExecuteNonQuery (conn, drop_table);
923 public void FindZeroInToStringTest ()
925 if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
926 Assert.Ignore ("Only applies to MySQL.");
928 IDataReader reader = null;
932 cmd.CommandText = "Create table foo ( bar long varchar )";
933 cmd.ExecuteNonQuery();
936 // Insert a record into foo
937 cmd = conn.CreateCommand ();
938 cmd.CommandText = "Insert into foo (bar) values ( '"
939 + "This string has more than 255 characters"
940 + "This string has more than 255 characters"
941 + "This string has more than 255 characters"
942 + "This string has more than 255 characters"
943 + "This string has more than 255 characters"
944 + "This string has more than 255 characters"
945 + "This string has more than 255 characters"
946 + "This string has more than 255 characters"
947 + "This string has more than 255 characters"
948 + "This string has more than 255 characters"
949 + "This string has more than 255 characters"
950 + "This string has more than 255 characters"
951 + "This string has more than 255 characters"
952 + "This string has more than 255 characters"
953 + "This string has more than 255 characters"
954 + "This string has more than 255 characters"
955 + "This string has more than 255 characters"
956 + "This string has more than 255 characters"
957 + "This string has more than 255 characters"
958 + "This string has more than 255 characters"
959 + "This string has more than 255 characters"
960 + "This string has more than 255 characters"
961 + "This string has more than 255 characters"
962 + "This string has more than 255 characters"
964 cmd.ExecuteNonQuery();
967 // Now, get the record back - try and read it two different ways.
968 cmd = conn.CreateCommand ();
969 cmd.CommandText = "SELECT bar FROM foo" ;
970 reader = cmd.ExecuteReader ();
971 string readAsString = "";
972 while (reader.Read ()) {
973 readAsString = reader[0].ToString();
978 // Now, read it using GetBytes
979 cmd = conn.CreateCommand ();
980 cmd.CommandText = "SELECT bar FROM foo";
981 reader = cmd.ExecuteReader ();
982 byte[] buffer = new byte [2048];
984 while (reader.Read ()) {
985 total = reader.GetBytes (0, 0, buffer, 0, 2048);
988 // Convert bytes read to string - look for binary zero - there is none (OK)
989 string readAsBytes = Encoding.Default.GetString (buffer, 0, (int) total);
990 Assert.AreEqual (readAsBytes, readAsString, "#1 ReadAsString is not same as ReadAsBytes");
994 DBHelper.ExecuteNonQuery (conn, "Drop table foo");
999 public void Bug332404Test ()
1001 if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
1002 Assert.Ignore ("Only applies to MySQL.");
1004 cmd = new OdbcCommand ("DROP TABLE IF EXISTS odbc_test");
1005 cmd.Connection = conn;
1006 cmd.ExecuteNonQuery ();
1008 cmd = new OdbcCommand ("CREATE TABLE odbc_test (id_test INTEGER NOT NULL, payload DECIMAL (14,4) NOT NULL)");
1009 cmd.Connection = conn;
1010 cmd.ExecuteNonQuery ();
1012 cmd = new OdbcCommand ("INSERT INTO odbc_test (id_test, payload) VALUES (1, 1.23456789)");
1013 cmd.Connection = conn;
1014 cmd.ExecuteNonQuery ();
1016 OdbcDataAdapter Adaptador = new OdbcDataAdapter ();
1018 DataSet Lector = new DataSet ();
1020 Adaptador.SelectCommand = new OdbcCommand ("SELECT * FROM odbc_test WHERE id_test=1", (OdbcConnection) conn);
1021 Adaptador.Fill (Lector);
1022 Assert.AreEqual (Lector.Tables[0].Rows[0]["payload"], 1.2346);
1026 public void Bug332400Test ()
1028 if (ConnectionManager.Instance.Odbc.EngineConfig.Type != EngineType.MySQL)
1029 Assert.Ignore ("Only applies to MySQL.");
1031 cmd = new OdbcCommand ("DROP TABLE IF EXISTS blob_test");
1032 cmd.Connection = conn;
1033 cmd.ExecuteNonQuery ();
1035 cmd = new OdbcCommand ("CREATE TABLE blob_test (id_test INTEGER NOT NULL, payload LONGBLOB NOT NULL)");
1036 cmd.Connection = conn;
1037 cmd.ExecuteNonQuery ();
1039 cmd = new OdbcCommand ("INSERT INTO blob_test (id_test, payload) VALUES (1, 'test')");
1040 cmd.Connection = conn;
1041 cmd.ExecuteNonQuery ();
1043 OdbcDataAdapter Adaptador = new OdbcDataAdapter();
1044 DataSet Lector = new DataSet();
1046 Adaptador.SelectCommand = new OdbcCommand("SELECT * FROM blob_test WHERE id_test=1", (OdbcConnection) conn);
1047 Adaptador.Fill(Lector);
1051 public void Bug419224Test ()
1053 cmd = new OdbcCommand ("DROP TABLE IF EXISTS odbc_test");
1054 cmd.Connection = conn;
1055 cmd.ExecuteNonQuery ();
1057 cmd = new OdbcCommand ("CREATE TABLE odbc_test (id_test INTEGER NOT NULL, payload TINYBLOB NOT NULL)");
1058 cmd.Connection = conn;
1059 cmd.ExecuteNonQuery ();
1061 cmd = new OdbcCommand ("INSERT INTO odbc_test (id_test, payload) VALUES (1, 'test for bug419224')");
1062 cmd.Connection = conn;
1063 cmd.ExecuteNonQuery ();
1065 OdbcDataAdapter adaptador = new OdbcDataAdapter ();
1066 DataSet lector = new DataSet ();
1068 adaptador.SelectCommand = new OdbcCommand ("SELECT * FROM odbc_test WHERE id_test=1", (OdbcConnection) conn);
1069 adaptador.Fill (lector);
1070 var payload = (byte[])lector.Tables[0].Rows[0]["payload"];
1071 Assert.AreEqual ("test for bug419224", Encoding.UTF8.GetString(payload));
1073 OdbcDataReader newRdr = cmd.ExecuteReader();
1075 // tinyblob column index:
1076 int TinyblobIdx = 1;
1078 bool read = newRdr.Read();
1082 bool ret = newRdr.IsDBNull(TinyblobIdx);
1083 Assert.AreEqual (ret, false);
1087 static void DoExecuteNonQuery (OdbcConnection conn, string sql)
1089 IDbCommand cmd = new OdbcCommand (sql, conn);
1090 cmd.ExecuteNonQuery ();
1093 static void DoExecuteScalar (OdbcConnection conn, string sql)
1095 IDbCommand cmd = new OdbcCommand (sql, conn);
1096 cmd.ExecuteScalar ();
1099 static void AssertSchemaTableStructure (DataTable schemaTable, string prefix)
1101 object [] [] columns = {
1102 new object [] { "ColumnName", typeof (string) },
1103 new object [] { "ColumnOrdinal", typeof (int) },
1104 new object [] { "ColumnSize", typeof (int) },
1105 new object [] { "NumericPrecision", typeof (short) },
1106 new object [] { "NumericScale", typeof (short) },
1107 new object [] { "DataType", typeof (object) },
1108 new object [] { "ProviderType", typeof (int) },
1109 new object [] { "IsLong", typeof (bool) },
1110 new object [] { "AllowDBNull", typeof (bool) },
1111 new object [] { "IsReadOnly", typeof (bool) },
1112 new object [] { "IsRowVersion", typeof (bool) },
1113 new object [] { "IsUnique", typeof (bool) },
1114 new object [] { "IsKey", typeof (bool) },
1115 new object [] { "IsAutoIncrement", typeof (bool) },
1116 new object [] { "BaseSchemaName", typeof (string) },
1117 new object [] { "BaseCatalogName", typeof (string) },
1118 new object [] { "BaseTableName", typeof (string) },
1119 new object [] { "BaseColumnName", typeof (string) }
1122 Assert.AreEqual (columns.Length, schemaTable.Columns.Count, prefix);
1124 for (int i = 0; i < columns.Length; i++) {
1125 DataColumn col = schemaTable.Columns [i];
1126 Assert.IsTrue (col.AllowDBNull, prefix + "AllowDBNull (" + i + ")");
1127 Assert.AreEqual (columns [i] [0], col.ColumnName, prefix + "ColumnName (" + i + ")");
1128 Assert.AreEqual (columns [i] [1], col.DataType, prefix + "DataType (" + i + ")");
1132 static bool RunningOnMono {
1134 return (Type.GetType ("System.MonoType", false) != null);