1 // SqliteDataReaderTest.cs - NUnit Test Cases for SqliteDataReader
4 // Sureshkumar T <tsureshkumar@novell.com>
8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34 using Mono.Data.Sqlite;
36 using NUnit.Framework;
38 namespace MonoTests.Mono.Data.Sqlite
41 public class SqliteDataReaderTest
43 readonly static string _uri = "./test.db";
44 readonly static string _connectionString = "URI=file://" + _uri + ", version=3";
45 SqliteConnection _conn = new SqliteConnection ();
48 public void FixtureSetUp ()
50 if (! File.Exists (_uri) || new FileInfo (_uri).Length == 0) {
52 Assert.Ignore ("#000 ignoring all fixtures. No database present");
58 [Category ("NotWorking")]
59 public void GetSchemaTableTest ()
61 _conn.ConnectionString = _connectionString;
62 SqliteDataReader reader = null;
65 SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand ();
66 cmd.CommandText = "select * from test";
67 reader = cmd.ExecuteReader ();
69 DataTable dt = reader.GetSchemaTable ();
70 Assert.IsNotNull (dt, "#GS1 should return valid table");
71 Assert.IsTrue (dt.Rows.Count > 0, "#GS2 should return with rows ;-)");
73 if (reader != null && !reader.IsClosed)
81 public void TypeOfNullInResultTest ()
83 _conn.ConnectionString = _connectionString;
84 SqliteDataReader reader = null;
87 SqliteCommand cmd = (SqliteCommand) _conn.CreateCommand ();
88 cmd.CommandText = "select null from test";
89 reader = cmd.ExecuteReader ();
91 Assert.IsTrue (reader.Read());
92 Assert.IsNotNull (reader.GetFieldType (0));
94 if (reader != null && !reader.IsClosed)
102 public void TimestampTest ()
104 _conn.ConnectionString = _connectionString;
107 var cmd = (SqliteCommand) _conn.CreateCommand ();
108 cmd.CommandText = @"CREATE TABLE IF NOT EXISTS TestNullableDateTime (nullable TIMESTAMP NULL, dummy int); INSERT INTO TestNullableDateTime (nullable, dummy) VALUES (124123, 2);";
109 cmd.ExecuteNonQuery ();
111 var query = "SELECT * FROM TestNullableDateTime;";
112 cmd = (SqliteCommand) _conn.CreateCommand ();
113 cmd.CommandText = query;
114 cmd.CommandType = CommandType.Text;
116 using (var reader = cmd.ExecuteReader ()) {
118 var dt = reader ["nullable"];
119 Assert.Fail ("Expected: FormatException");
120 } catch (FormatException ex) {
126 _conn.ConnectionString = _connectionString + ",DateTimeFormat=UnixEpoch";
129 var cmd = (SqliteCommand) _conn.CreateCommand ();
130 cmd.CommandText = @"CREATE TABLE IF NOT EXISTS TestNullableDateTime (nullable TIMESTAMP NULL, dummy int); INSERT INTO TestNullableDateTime (nullable, dummy) VALUES (124123, 2);";
131 cmd.ExecuteNonQuery ();
133 var query = "SELECT * FROM TestNullableDateTime;";
134 cmd = (SqliteCommand) _conn.CreateCommand ();
135 cmd.CommandText = query;
136 cmd.CommandType = CommandType.Text;
138 using (var reader = cmd.ExecuteReader ()) {
139 // this should succeed now
140 var dt = reader ["nullable"];
146 public void CloseConnectionTest ()
148 // When this test fails it may confuse nunit a bit, causing it to show strange
149 // exceptions, since it leaks file handles (and nunit tries to open files,
150 // which it doesn't expect to fail).
152 // For the same reason a lot of other tests will fail when this one fails.
154 _conn.ConnectionString = _connectionString;
157 using (var cmd = (SqliteCommand) _conn.CreateCommand ()) {
158 cmd.CommandText = @"CREATE TABLE IF NOT EXISTS TestNullableDateTime (nullable TIMESTAMP NULL, dummy int); INSERT INTO TestNullableDateTime (nullable, dummy) VALUES (124123, 2);";
159 cmd.ExecuteNonQuery ();
163 for (int i = 0; i < 1000; i++) {
164 _conn.ConnectionString = _connectionString;
167 using (var cmd = (SqliteCommand) _conn.CreateCommand ()) {
168 cmd.CommandText = "SELECT * FROM TestNullableDateTime;";
169 cmd.CommandType = CommandType.Text;
171 using (var reader = cmd.ExecuteReader (CommandBehavior.CloseConnection)) {
180 public void TestDataTypes ()
182 SqliteParameter param;
184 _conn.ConnectionString = _connectionString;
188 using (var cm = _conn.CreateCommand ()) {
191 CREATE TABLE TEST (F1 DATETIME, F2 GUIDBLOB NOT NULL, F3 BOOLEAN);
192 INSERT INTO TEST (F1, F2, F3) VALUES (:F1, :F2, :F3)";
194 param = cm.CreateParameter ();
195 param.ParameterName = ":F1";
196 param.Value = DateTime.Now;
197 cm.Parameters.Add (param);
198 param = cm.CreateParameter ();
199 param.ParameterName = ":F2";
200 param.Value = new byte [] { 3, 14, 15 };
201 cm.Parameters.Add (param);
202 param = cm.CreateParameter ();
203 param.ParameterName = ":F3";
205 cm.Parameters.Add (param);
207 cm.ExecuteNonQuery ();
210 using (var cm = _conn.CreateCommand ()) {
211 cm.CommandText = "SELECT * FROM TEST";
212 using (var dr = cm.ExecuteReader ()) {
215 Assert.AreEqual ("System.DateTime", dr.GetFieldType (dr.GetOrdinal ("F1")).ToString (), "F1");
216 Assert.AreEqual ("GUIDBLOB", dr.GetDataTypeName (dr.GetOrdinal ("F2")), "F2");
217 Assert.AreEqual ("System.Guid", dr.GetFieldType (dr.GetOrdinal ("F2")).ToString (), "F2-#2");
218 Assert.AreEqual ("System.Boolean", dr.GetFieldType (dr.GetOrdinal ("F3")).ToString (), "F3");
219 Assert.AreEqual ("BOOLEAN", dr.GetDataTypeName (dr.GetOrdinal ("F3")), "F3-#2");