From f333016241010d32224e671006dfcd47c9e4be9e Mon Sep 17 00:00:00 2001
From: Constantin Michael <constantin@codesynthesis.com>
Date: Sun, 4 Dec 2011 23:33:23 +0200
Subject: Test updated PostgreSQL date-time mappings which handle microsecond
 resolutions

---
 qt/pgsql/date-time/driver.cxx | 103 +++++++++++++++++++-----------------------
 1 file changed, 47 insertions(+), 56 deletions(-)

(limited to 'qt')

diff --git a/qt/pgsql/date-time/driver.cxx b/qt/pgsql/date-time/driver.cxx
index fde15a6..c1f41f0 100644
--- a/qt/pgsql/date-time/driver.cxx
+++ b/qt/pgsql/date-time/driver.cxx
@@ -38,59 +38,68 @@ main (int argc, char* argv[])
 
     // Check persistence of null values.
     //
-    object o1;
     {
-      transaction t (db->begin ());
-      db->persist (o1);
-      t.commit ();
-    }
+      object o;
 
-    {
-      transaction t (db->begin ());
-      auto_ptr<object> ol1 (db->load<object> (o1.id));
-      t.commit ();
+      {
+        transaction t (db->begin ());
+        db->persist (o);
+        t.commit ();
+      }
 
-      assert (ol1->is_null ());
-    }
+      {
+        transaction t (db->begin ());
+        auto_ptr<object> ol (db->load<object> (o.id));
+        t.commit ();
 
-    QDateTime ct (QDateTime::currentDateTime ());
-    QDateTime ct_no_ms = QDateTime (QDate (ct.date ().year (),
-                                           ct.date ().month (),
-                                           ct.date ().day ()),
-                                    QTime (ct.time ().hour (),
-                                           ct.time ().minute (),
-                                           ct.time ().second ()));
+        assert (ol->is_null ());
+      }
+    }
 
     // Check persistence of valid dates and times.
     //
-    object o2;
-    {
-      o2.date = ct.date ();
-      o2.time = ct_no_ms.time ();
-      o2.date_time = ct_no_ms;
-
-      transaction t (db->begin ());
-      db->persist (o2);
-      t.commit ();
-    }
-
     {
-      transaction t (db->begin ());
-      auto_ptr<object> ol2 (db->load<object> (o2.id));
-      t.commit ();
+      QDateTime ct (QDateTime::currentDateTime ());
 
-      assert (*ol2 == o2);
+      object o;
+      o.date = ct.date ();
+      o.time = ct.time ();
+      o.date_time = ct;
+
+      {
+        transaction t (db->begin ());
+        db->persist (o);
+        t.commit ();
+      }
+
+      {
+        transaction t (db->begin ());
+        auto_ptr<object> ol (db->load<object> (o.id));
+        t.commit ();
+
+        assert (*ol == o);
+      }
     }
 
-    // Test out of range values for QDateTime traits.
+    // Test a QDateTime value before PG epoch.
     //
     {
       object o;
-      o.date_time = QDateTime (QDate (1969, 12, 31),
-                               QTime (23, 59, 59),
-                               Qt::UTC);
+      o.date_time = QDateTime (QDate (1969, 12, 31), QTime (23, 59, 59, 123));
+
+      {
+        transaction t (db->begin ());
+        db->persist (o);
+        t.commit ();
+      }
+
+      {
+        transaction t (db->begin ());
+        auto_ptr<object> ol (db->load<object> (o.id));
+        t.commit ();
 
-      assert (test_out_of_range_value (o, *db));
+        assert (*ol == o);
+      }
     }
   }
   catch (const odb::exception& e)
@@ -99,21 +108,3 @@ main (int argc, char* argv[])
     return 1;
   }
 }
-
-bool
-test_out_of_range_value (object& x, database& db)
-{
-  try
-  {
-    transaction t (db.begin ());
-    db.persist (x);
-    t.rollback ();
-
-    return false;
-  }
-  catch (const odb::qt::date_time::value_out_of_range&)
-  {
-  }
-
-  return true;
-}
-- 
cgit v1.1