Author: cito
Date: Thu Feb  4 07:37:31 2016
New Revision: 816

Log:
Test adaptation of dates, times and intervals

The tests so far checked only the typecasting, not the adaption.
They now make sure that adaptation works as well, independent of
the setting of datestyle and intervalstyle.

Modified:
   trunk/tests/test_classic_dbwrapper.py
   trunk/tests/test_dbapi20.py

Modified: trunk/tests/test_classic_dbwrapper.py
==============================================================================
--- trunk/tests/test_classic_dbwrapper.py       Wed Feb  3 16:11:13 2016        
(r815)
+++ trunk/tests/test_classic_dbwrapper.py       Thu Feb  4 07:37:31 2016        
(r816)
@@ -3527,8 +3527,8 @@
                 'SQL, MDY', 'SQL, DMY', 'German'):
             self.db.set_parameter('datestyle', datestyle)
             d = date(2016, 3, 14)
-            q = "select '2016-03-14'::date"
-            r = query(q).getresult()[0][0]
+            q = "select $1::date"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, date)
             self.assertEqual(r, d)
             q = "select '10000-08-01'::date, '0099-01-08 BC'::date"
@@ -3547,13 +3547,13 @@
     def testTime(self):
         query = self.db.query
         d = time(15, 9, 26)
-        q = "select '15:09:26'::time"
-        r = query(q).getresult()[0][0]
+        q = "select $1::time"
+        r = query(q, (d,)).getresult()[0][0]
         self.assertIsInstance(r, time)
         self.assertEqual(r, d)
         d = time(15, 9, 26, 535897)
-        q = "select '15:09:26.535897'::time"
-        r = query(q).getresult()[0][0]
+        q = "select $1::time"
+        r = query(q, (d,)).getresult()[0][0]
         self.assertIsInstance(r, time)
         self.assertEqual(r, d)
 
@@ -3568,13 +3568,13 @@
                 tzinfo = None
             self.db.set_parameter('timezone', timezone)
             d = time(15, 9, 26, tzinfo=tzinfo)
-            q = "select '15:09:26'::timetz"
-            r = query(q).getresult()[0][0]
+            q = "select $1::timetz"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, time)
             self.assertEqual(r, d)
             d = time(15, 9, 26, 535897, tzinfo)
-            q = "select '15:09:26.535897'::timetz"
-            r = query(q).getresult()[0][0]
+            q = "select $1::timetz"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, time)
             self.assertEqual(r, d)
 
@@ -3584,18 +3584,18 @@
                 'SQL, MDY', 'SQL, DMY', 'German'):
             self.db.set_parameter('datestyle', datestyle)
             d = datetime(2016, 3, 14)
-            q = "select '2016-03-14'::timestamp"
-            r = query(q).getresult()[0][0]
+            q = "select $1::timestamp"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, datetime)
             self.assertEqual(r, d)
             d = datetime(2016, 3, 14, 15, 9, 26)
-            q = "select '2016-03-14 15:09:26'::timestamp"
-            r = query(q).getresult()[0][0]
+            q = "select $1::timestamp"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, datetime)
             self.assertEqual(r, d)
             d = datetime(2016, 3, 14, 15, 9, 26, 535897)
-            q = "select '2016-03-14 15:09:26.535897'::timestamp"
-            r = query(q).getresult()[0][0]
+            q = "select $1::timestamp"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, datetime)
             self.assertEqual(r, d)
             q = ("select '10000-08-01 AD'::timestamp,"
@@ -3626,18 +3626,18 @@
                     'SQL, MDY', 'SQL, DMY', 'German'):
                 self.db.set_parameter('datestyle', datestyle)
                 d = datetime(2016, 3, 14, tzinfo=tzinfo)
-                q = "select '2016-03-14'::timestamptz"
-                r = query(q).getresult()[0][0]
+                q = "select $1::timestamptz"
+                r = query(q, (d,)).getresult()[0][0]
                 self.assertIsInstance(r, datetime)
                 self.assertEqual(r, d)
                 d = datetime(2016, 3, 14, 15, 9, 26, tzinfo=tzinfo)
-                q = "select '2016-03-14 15:09:26'::timestamptz"
-                r = query(q).getresult()[0][0]
+                q = "select $1::timestamptz"
+                r = query(q, (d,)).getresult()[0][0]
                 self.assertIsInstance(r, datetime)
                 self.assertEqual(r, d)
                 d = datetime(2016, 3, 14, 15, 9, 26, 535897, tzinfo)
-                q = "select '2016-03-14 15:09:26.535897'::timestamptz"
-                r = query(q).getresult()[0][0]
+                q = "select $1::timestamptz"
+                r = query(q, (d,)).getresult()[0][0]
                 self.assertIsInstance(r, datetime)
                 self.assertEqual(r, d)
                 q = ("select '10000-08-01 AD'::timestamptz,"
@@ -3659,36 +3659,29 @@
         for intervalstyle in (
                 'sql_standard', 'postgres', 'postgres_verbose', 'iso_8601'):
             self.db.set_parameter('intervalstyle', intervalstyle)
-            q = "select '2016-03-14'::timestamp - '2016-03-11'::timestamp"
-            r = query(q).getresult()[0][0]
-            self.assertIsInstance(r, timedelta)
             d = timedelta(3)
-            self.assertEqual(r, d)
-            q = "select '2016-03-14'::timestamp - '2016-04-13'::timestamp"
-            r = query(q).getresult()[0][0]
+            q = "select $1::interval"
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, timedelta)
-            d = timedelta(-30)
             self.assertEqual(r, d)
-            q = ("select '2016-03-14 15:31:42.5678'::timestamp"
-                 " - '2016-03-14 12:00:00'::timestamp")
-            r = query(q).getresult()[0][0]
+            d = timedelta(-30)
+            r = query(q, (d,)).getresult()[0][0]
             self.assertIsInstance(r, timedelta)
+            self.assertEqual(r, d)
             d = timedelta(hours=3, minutes=31, seconds=42, microseconds=5678)
+            q = "select $1::interval"
+            r = query(q, (d,)).getresult()[0][0]
+            self.assertIsInstance(r, timedelta)
             self.assertEqual(r, d)
 
     def testDateAndTimeArrays(self):
-        q = "select ARRAY['2016-03-14'::date], ARRAY['15:09:26'::time]"
-        r = self.db.query(q).getresult()[0]
-        d = r[0]
-        self.assertIsInstance(d, list)
-        d = d[0]
-        self.assertIsInstance(d, date)
-        self.assertEqual(d, date(2016, 3, 14))
-        d = r[1]
-        self.assertIsInstance(d, list)
-        d = d[0]
-        self.assertIsInstance(d, time)
-        self.assertEqual(d, time(15, 9, 26))
+        dt = (date(2016, 3, 14), time(15, 9, 26))
+        q = "select ARRAY[$1::date], ARRAY[$2::time]"
+        r = self.db.query(q, dt).getresult()[0]
+        self.assertIsInstance(r[0], list)
+        self.assertEqual(r[0][0], dt[0])
+        self.assertIsInstance(r[1], list)
+        self.assertEqual(r[1][0], dt[1])
 
     def testDbTypesInfo(self):
         dbtypes = self.db.dbtypes

Modified: trunk/tests/test_dbapi20.py
==============================================================================
--- trunk/tests/test_dbapi20.py Wed Feb  3 16:11:13 2016        (r815)
+++ trunk/tests/test_dbapi20.py Thu Feb  4 07:37:31 2016        (r816)
@@ -510,43 +510,37 @@
 
     def test_datetime(self):
         dt = datetime(2011, 7, 17, 15, 47, 42, 317509)
-        td = dt - datetime(1970, 1, 1)
         table = self.table_prefix + 'booze'
         con = self._connect()
         try:
             cur = con.cursor()
-            cur.execute("set datestyle to iso")
-            cur.execute("set datestyle to iso")
             cur.execute("create table %s ("
                 "d date, t time,  ts timestamp,"
-                "tz timetz, tsz timestamptz, i interval)" % table)
+                "tz timetz, tsz timestamptz)" % table)
             for n in range(3):
                 values = [dt.date(), dt.time(), dt,
-                    dt.time(), dt, td]
+                    dt.time(), dt]
                 if timezone:
                     values[3] = values[3].replace(tzinfo=timezone.utc)
                     values[4] = values[4].replace(tzinfo=timezone.utc)
                 if n == 0:  # input as objects
                     params = values
                 if n == 1:  # input as text
-                    params = [v.isoformat() for v in values[:5]]  # as text
-                    params.append('%d days %d seconds %d microseconds '
-                        % (td.days, td.seconds, td.microseconds))
+                    params = [v.isoformat() for v in values]  # as text
                 elif n == 2:  # input using type helpers
                     d = (dt.year, dt.month, dt.day)
                     t = (dt.hour, dt.minute, dt.second, dt.microsecond)
-                    i = (td.days, 0, 0, td.seconds, td.microseconds)
                     params = [pgdb.Date(*d), pgdb.Time(*t),
                             pgdb.Timestamp(*(d + t)), pgdb.Time(*t),
-                            pgdb.Timestamp(*(d + t)), pgdb.Interval(*i)]
-                cur.execute("insert into %s"
-                    " values (%%s,%%s,%%s,%%s,%%s,%%s)" % table, params)
+                            pgdb.Timestamp(*(d + t))]
                 for datestyle in ('iso', 'postgres, mdy', 'postgres, dmy',
                         'sql, mdy', 'sql, dmy', 'german'):
                     cur.execute("set datestyle to %s" % datestyle)
+                    cur.execute("insert into %s"
+                        " values (%%s,%%s,%%s,%%s,%%s)" % table, params)
                     cur.execute("select * from %s" % table)
                     d = cur.description
-                    for i in range(6):
+                    for i in range(5):
                         self.assertEqual(d[i].type_code, pgdb.DATETIME)
                         self.assertNotEqual(d[i].type_code, pgdb.STRING)
                         self.assertNotEqual(d[i].type_code, pgdb.ARRAY)
@@ -556,10 +550,43 @@
                     self.assertEqual(d[2].type_code, pgdb.TIMESTAMP)
                     self.assertEqual(d[3].type_code, pgdb.TIME)
                     self.assertEqual(d[4].type_code, pgdb.TIMESTAMP)
-                    self.assertEqual(d[5].type_code, pgdb.INTERVAL)
                     row = cur.fetchone()
                     self.assertEqual(row, tuple(values))
-                cur.execute("delete from %s" % table)
+                    cur.execute("delete from %s" % table)
+        finally:
+            con.close()
+
+    def test_interval(self):
+        td = datetime(2011, 7, 17, 15, 47, 42, 317509) - datetime(1970, 1, 1)
+        table = self.table_prefix + 'booze'
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            cur.execute("create table %s (i interval)" % table)
+            for n in range(3):
+                if n == 0:  # input as objects
+                    param = td
+                if n == 1:  # input as text
+                    param = '%d days %d seconds %d microseconds ' % (
+                        td.days, td.seconds, td.microseconds)
+                elif n == 2:  # input using type helpers
+                    param = pgdb.Interval(
+                        td.days, 0, 0, td.seconds, td.microseconds)
+                for intervalstyle in ('sql_standard ', 'postgres',
+                        'postgres_verbose', 'iso_8601'):
+                    cur.execute("set intervalstyle to %s" % intervalstyle)
+                    cur.execute("insert into %s"
+                        " values (%%s)" % table, [param])
+                    cur.execute("select * from %s" % table)
+                    tc = cur.description[0].type_code
+                    self.assertEqual(tc, pgdb.DATETIME)
+                    self.assertNotEqual(tc, pgdb.STRING)
+                    self.assertNotEqual(tc, pgdb.ARRAY)
+                    self.assertNotEqual(tc, pgdb.RECORD)
+                    self.assertEqual(tc, pgdb.INTERVAL)
+                    row = cur.fetchone()
+                    self.assertEqual(row, (td,))
+                    cur.execute("delete from %s" % table)
         finally:
             con.close()
 
_______________________________________________
PyGreSQL mailing list
[email protected]
https://mail.vex.net/mailman/listinfo.cgi/pygresql

Reply via email to