2 // Copyright (c) 2006 Mainsoft Co.
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 using System.Data.OracleClient ;
28 using MonoTests.System.Data.Utils;
31 using NUnit.Framework;
33 namespace MonoTests.System.Data.OracleClient
36 public class OracleType_Date : GHTBase
38 private string dateColumnName;
39 private string dateTableName;
41 private OracleConnection con;
42 private OracleDataReader dr = null;
44 private DateTime TestedDate1;
45 private DateTime RetDate;
54 dateTableName = ConnectedDataProvider.EXTENDED_TYPES_TABLE_NAME;
56 dateColumnName = "T_DATE";
58 con = new OracleConnection(ConnectedDataProvider.ConnectionString);
60 Compare("Setup", "Setup");
62 catch(Exception ex) {exp = ex;}
63 finally {EndCase(exp); exp = null;}
67 public void TearDown()
71 if (con.State == ConnectionState.Open) con.Close();
75 public static void Main()
77 OracleType_Date tc = new OracleType_Date();
81 tc.BeginTest("OracleType_Date");
86 catch(Exception ex){exp = ex;}
87 finally {tc.EndTest(exp);}
94 OracleCommand cmd = new OracleCommand();
95 string rowId = "54416_";
99 // clean the test table
100 cmd = new OracleCommand(string.Format("DELETE FROM {0} WHERE ID like '54416_%'", dateTableName));
101 cmd.Connection = con;
102 cmd.ExecuteNonQuery();
109 #region ---- testing parameterized query with a simple date ----
112 BeginCase("testing parameterized query with a simple date");
113 rowId = "54416_" + TestCaseNumber.ToString();
115 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values ('{2}', :date1)", dateTableName, dateColumnName, rowId));
116 cmd.Connection = con;
117 TestedDate1 = new DateTime(2001, 1, 13);
118 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
119 cmd.ExecuteNonQuery();
120 // checking that value returned correctly;
121 cmd.CommandText = string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
122 cmd.Parameters.Clear();
123 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
125 Compare(TestedDate1,RetDate);
133 if (dr != null)dr.Close();
134 if ( (con != null) && (con.State == ConnectionState.Open) )
146 #region ---- testing parameterized query with a 1753 date min ----
149 BeginCase("testing parameterized query with a 1753 date min");
150 rowId = "54416_" + TestCaseNumber.ToString();
153 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId));
154 cmd.Connection = con;
155 TestedDate1 = new DateTime(1753, 1, 1);
156 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
157 this.Log(cmd.CommandText);
158 cmd.ExecuteNonQuery();
160 //' checking that value returned correctly
161 cmd.CommandText = string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
162 this.Log(cmd.CommandText);
163 cmd.Parameters.Clear();
164 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
165 Compare(TestedDate1.Date, RetDate.Date);
173 if (dr != null)dr.Close();
174 if ( (con != null) && (con.State == ConnectionState.Open) )
186 #region ---- testing parameterized query with a future date ----
189 BeginCase("testing parameterized query with a future date");
191 rowId = "54416_" + TestCaseNumber.ToString();
193 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
194 cmd.Connection = con;
195 TestedDate1 = new DateTime(2500, 1, 13);
196 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
197 cmd.ExecuteNonQuery();
198 //' checking that value returned correctly
199 cmd.CommandText = string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
200 cmd.Parameters.Clear();
201 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
202 Compare(TestedDate1, RetDate);
210 if (dr != null)dr.Close();
211 if ( (con != null) && (con.State == ConnectionState.Open) )
223 #region ---- testing parameterized query with a future date ----
226 BeginCase("testing parameterized query with a future date");
228 rowId = "54416_" + TestCaseNumber.ToString();
230 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
231 cmd.Connection = con;
232 TestedDate1 = new DateTime(2500, 1, 13);
233 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
234 cmd.ExecuteNonQuery();
235 //' checking that value returned correctly
236 cmd.CommandText = string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
237 cmd.Parameters.Clear();
238 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
239 Compare(TestedDate1, RetDate);
247 if (dr != null)dr.Close();
248 if ( (con != null) && (con.State == ConnectionState.Open) )
260 #region ---- testing parameterized query with a time part ----
263 BeginCase("testing parameterized query with a time part");
265 rowId = "54416_" + TestCaseNumber.ToString();
267 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
268 cmd.Connection = con;
269 TestedDate1 = new DateTime(2500, 1, 13, 12, 13, 14);
270 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
271 cmd.ExecuteNonQuery();
272 //' checking that value returned correctly
273 cmd.CommandText = string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
274 cmd.Parameters.Clear();
275 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
276 Compare(TestedDate1, RetDate);
284 if (dr != null)dr.Close();
285 if ( (con != null) && (con.State == ConnectionState.Open) )
297 #region ---- testing parameterized query with a time part of 00:00 ----
300 BeginCase("testing parameterized query with a time part of 00:00");
302 rowId = "54416_" + TestCaseNumber.ToString();
304 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
305 cmd.Connection = con;
306 TestedDate1 = new DateTime(2500, 1, 13, 0, 0, 0);
307 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
308 cmd.ExecuteNonQuery();
309 //' checking that value returned correctly
310 cmd.CommandText =string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
311 cmd.Parameters.Clear();
312 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
313 Compare(TestedDate1, RetDate);
321 if (dr != null)dr.Close();
322 if ( (con != null) && (con.State == ConnectionState.Open) )
334 #region ---- testing parameterized query with a time part of 23:59:59 ----
337 BeginCase("testing parameterized query with a time part of 23:59:59");
339 rowId = "54416_" + TestCaseNumber.ToString();
341 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
342 cmd.Connection = con;
343 TestedDate1 = new DateTime(2500, 1, 13, 23, 59, 59);
344 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
345 cmd.ExecuteNonQuery();
346 //' checking that value returned correctly
347 cmd.CommandText =string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
348 cmd.Parameters.Clear();
349 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
350 Compare(TestedDate1, RetDate);
358 if (dr != null)dr.Close();
359 if ( (con != null) && (con.State == ConnectionState.Open) )
370 #region ---- testing parameterized query with a time part of AM ----
373 BeginCase("testing parameterized query with a time part of AM");
374 string str = string.Empty; //This is an addional test ,passing GH mechnizim
375 rowId = "54416_" + TestCaseNumber.ToString();
377 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
378 cmd.Connection = con;
379 //TestedDate1 = new DateTime(2500, 1, 13, 11, 0, 0);
380 TestedDate1 = new DateTime(1988,5,31,15,33,44,00);
381 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
382 cmd.ExecuteNonQuery();
383 cmd.Parameters.Clear();
385 //TODO:add also treat for other db
386 if (ConnectedDataProvider.GetDbType(con) == MonoTests.System.Data.Utils.DataBaseServer.SQLServer || ConnectedDataProvider.GetDbType(con) == MonoTests.System.Data.Utils.DataBaseServer.Sybase)
388 cmd.CommandText = string.Format("select CONVERT(varchar,{0},120) from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
389 str = cmd.ExecuteScalar().ToString();
390 Compare(TestedDate1, Convert.ToDateTime(str));
392 //' checking that value returned correctly
393 cmd.CommandText =string.Format("select {0} from {1} where ID='{2}'", dateColumnName, dateTableName, rowId);
394 RetDate = Convert.ToDateTime(cmd.ExecuteScalar().ToString());
395 Compare(TestedDate1, RetDate);
403 if (dr != null)dr.Close();
404 if ( (con != null) && (con.State == ConnectionState.Open) )
416 #region ---- testing a where clause using a date ----
419 BeginCase("testing a where clause using a date");
421 rowId = "54416_" + TestCaseNumber.ToString();
423 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
424 cmd.Connection = con;
425 TestedDate1 = new DateTime(2500, 1, 13, 11, 0, 0);
426 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
427 cmd.ExecuteNonQuery();
428 //' checking that value returned correctly
429 cmd = new OracleCommand(string.Format("select {0} from {1} where ID='{2}' and {0}= :date1", dateColumnName, dateTableName, rowId));
430 cmd.Connection = con;
431 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
432 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
433 Compare(TestedDate1, RetDate);
441 if (dr != null)dr.Close();
442 if ( (con != null) && (con.State == ConnectionState.Open) )
454 #region ---- testing a where clause using a rage of dates ----
457 BeginCase("testing a where clause using a rage of dates");
459 rowId = "54416_" + TestCaseNumber.ToString();
461 cmd = new OracleCommand(string.Format("insert into {0} (ID, {1}) values('{2}', :date1)", dateTableName, dateColumnName, rowId ));
462 cmd.Connection = con;
463 TestedDate1 = new DateTime(2007, 12, 31, 11, 59, 59);
464 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
465 cmd.ExecuteNonQuery();
466 //' checking that value returned correctly
467 cmd = new OracleCommand(string.Format("select {0} from {1} where ID='{2}' and {0} >:date1 and {0} <:date2", dateColumnName, dateTableName, rowId));
468 cmd.Connection = con;
469 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1.AddSeconds(-1);
470 cmd.Parameters.Add(new OracleParameter("date2", OracleType.DateTime)).Value = TestedDate1.AddSeconds(+1);
471 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
472 Compare(TestedDate1, RetDate);
480 if (dr != null)dr.Close();
481 if ( (con != null) && (con.State == ConnectionState.Open) )
492 #region ---- testing a set statement ----
495 BeginCase("testing a set statement");
497 rowId = "54416_" + TestCaseNumber.ToString();
499 cmd = new OracleCommand(string.Format("insert into {0} (ID) values('{1}')", dateTableName, rowId));
500 cmd.Connection = con;
501 cmd.ExecuteNonQuery();
502 cmd = new OracleCommand(string.Format("update {0} set {1} = :date1 where ID='{2}'", dateTableName, dateColumnName, rowId));
503 cmd.Connection = con;
504 TestedDate1 = new DateTime(2500, 1, 13, 1, 2, 3);
505 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
506 cmd.ExecuteNonQuery();
508 //' checking that value returned correctly
509 cmd = new OracleCommand(string.Format("select {0} from {1} where ID='{2}' and {0}= :date1", dateColumnName, dateTableName, rowId));
510 cmd.Connection = con;
511 cmd.Parameters.Add(new OracleParameter("date1", OracleType.DateTime)).Value = TestedDate1;
512 RetDate = Convert.ToDateTime(cmd.ExecuteScalar());
513 Compare(TestedDate1, RetDate);
521 if (dr != null)dr.Close();
522 if ( (con != null) && (con.State == ConnectionState.Open) )
536 /// Deletes a row from the date table, according to its ID.
538 /// <param name="rowId">Id of the row to delete.</param>
539 private void CleanTestRow(string rowId)
541 OracleCommand deleteCmd = new OracleCommand(string.Format("DELETE FROM {0} WHERE ID = '{1}'", dateTableName, rowId), con);
542 deleteCmd.ExecuteNonQuery();