Changeset 816 for trunk


Ignore:
Timestamp:
Feb 4, 2016, 7:37:31 AM (4 years ago)
Author:
cito
Message:

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.

Location:
trunk/tests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/test_classic_dbwrapper.py

    r814 r816  
    35283528            self.db.set_parameter('datestyle', datestyle)
    35293529            d = date(2016, 3, 14)
    3530             q = "select '2016-03-14'::date"
    3531             r = query(q).getresult()[0][0]
     3530            q = "select $1::date"
     3531            r = query(q, (d,)).getresult()[0][0]
    35323532            self.assertIsInstance(r, date)
    35333533            self.assertEqual(r, d)
     
    35483548        query = self.db.query
    35493549        d = time(15, 9, 26)
    3550         q = "select '15:09:26'::time"
    3551         r = query(q).getresult()[0][0]
     3550        q = "select $1::time"
     3551        r = query(q, (d,)).getresult()[0][0]
    35523552        self.assertIsInstance(r, time)
    35533553        self.assertEqual(r, d)
    35543554        d = time(15, 9, 26, 535897)
    3555         q = "select '15:09:26.535897'::time"
    3556         r = query(q).getresult()[0][0]
     3555        q = "select $1::time"
     3556        r = query(q, (d,)).getresult()[0][0]
    35573557        self.assertIsInstance(r, time)
    35583558        self.assertEqual(r, d)
     
    35693569            self.db.set_parameter('timezone', timezone)
    35703570            d = time(15, 9, 26, tzinfo=tzinfo)
    3571             q = "select '15:09:26'::timetz"
    3572             r = query(q).getresult()[0][0]
     3571            q = "select $1::timetz"
     3572            r = query(q, (d,)).getresult()[0][0]
    35733573            self.assertIsInstance(r, time)
    35743574            self.assertEqual(r, d)
    35753575            d = time(15, 9, 26, 535897, tzinfo)
    3576             q = "select '15:09:26.535897'::timetz"
    3577             r = query(q).getresult()[0][0]
     3576            q = "select $1::timetz"
     3577            r = query(q, (d,)).getresult()[0][0]
    35783578            self.assertIsInstance(r, time)
    35793579            self.assertEqual(r, d)
     
    35853585            self.db.set_parameter('datestyle', datestyle)
    35863586            d = datetime(2016, 3, 14)
    3587             q = "select '2016-03-14'::timestamp"
    3588             r = query(q).getresult()[0][0]
     3587            q = "select $1::timestamp"
     3588            r = query(q, (d,)).getresult()[0][0]
    35893589            self.assertIsInstance(r, datetime)
    35903590            self.assertEqual(r, d)
    35913591            d = datetime(2016, 3, 14, 15, 9, 26)
    3592             q = "select '2016-03-14 15:09:26'::timestamp"
    3593             r = query(q).getresult()[0][0]
     3592            q = "select $1::timestamp"
     3593            r = query(q, (d,)).getresult()[0][0]
    35943594            self.assertIsInstance(r, datetime)
    35953595            self.assertEqual(r, d)
    35963596            d = datetime(2016, 3, 14, 15, 9, 26, 535897)
    3597             q = "select '2016-03-14 15:09:26.535897'::timestamp"
    3598             r = query(q).getresult()[0][0]
     3597            q = "select $1::timestamp"
     3598            r = query(q, (d,)).getresult()[0][0]
    35993599            self.assertIsInstance(r, datetime)
    36003600            self.assertEqual(r, d)
     
    36273627                self.db.set_parameter('datestyle', datestyle)
    36283628                d = datetime(2016, 3, 14, tzinfo=tzinfo)
    3629                 q = "select '2016-03-14'::timestamptz"
    3630                 r = query(q).getresult()[0][0]
     3629                q = "select $1::timestamptz"
     3630                r = query(q, (d,)).getresult()[0][0]
    36313631                self.assertIsInstance(r, datetime)
    36323632                self.assertEqual(r, d)
    36333633                d = datetime(2016, 3, 14, 15, 9, 26, tzinfo=tzinfo)
    3634                 q = "select '2016-03-14 15:09:26'::timestamptz"
    3635                 r = query(q).getresult()[0][0]
     3634                q = "select $1::timestamptz"
     3635                r = query(q, (d,)).getresult()[0][0]
    36363636                self.assertIsInstance(r, datetime)
    36373637                self.assertEqual(r, d)
    36383638                d = datetime(2016, 3, 14, 15, 9, 26, 535897, tzinfo)
    3639                 q = "select '2016-03-14 15:09:26.535897'::timestamptz"
    3640                 r = query(q).getresult()[0][0]
     3639                q = "select $1::timestamptz"
     3640                r = query(q, (d,)).getresult()[0][0]
    36413641                self.assertIsInstance(r, datetime)
    36423642                self.assertEqual(r, d)
     
    36603660                'sql_standard', 'postgres', 'postgres_verbose', 'iso_8601'):
    36613661            self.db.set_parameter('intervalstyle', intervalstyle)
    3662             q = "select '2016-03-14'::timestamp - '2016-03-11'::timestamp"
    3663             r = query(q).getresult()[0][0]
     3662            d = timedelta(3)
     3663            q = "select $1::interval"
     3664            r = query(q, (d,)).getresult()[0][0]
    36643665            self.assertIsInstance(r, timedelta)
    3665             d = timedelta(3)
    36663666            self.assertEqual(r, d)
    3667             q = "select '2016-03-14'::timestamp - '2016-04-13'::timestamp"
    3668             r = query(q).getresult()[0][0]
     3667            d = timedelta(-30)
     3668            r = query(q, (d,)).getresult()[0][0]
    36693669            self.assertIsInstance(r, timedelta)
    3670             d = timedelta(-30)
    36713670            self.assertEqual(r, d)
    3672             q = ("select '2016-03-14 15:31:42.5678'::timestamp"
    3673                  " - '2016-03-14 12:00:00'::timestamp")
    3674             r = query(q).getresult()[0][0]
     3671            d = timedelta(hours=3, minutes=31, seconds=42, microseconds=5678)
     3672            q = "select $1::interval"
     3673            r = query(q, (d,)).getresult()[0][0]
    36753674            self.assertIsInstance(r, timedelta)
    3676             d = timedelta(hours=3, minutes=31, seconds=42, microseconds=5678)
    36773675            self.assertEqual(r, d)
    36783676
    36793677    def testDateAndTimeArrays(self):
    3680         q = "select ARRAY['2016-03-14'::date], ARRAY['15:09:26'::time]"
    3681         r = self.db.query(q).getresult()[0]
    3682         d = r[0]
    3683         self.assertIsInstance(d, list)
    3684         d = d[0]
    3685         self.assertIsInstance(d, date)
    3686         self.assertEqual(d, date(2016, 3, 14))
    3687         d = r[1]
    3688         self.assertIsInstance(d, list)
    3689         d = d[0]
    3690         self.assertIsInstance(d, time)
    3691         self.assertEqual(d, time(15, 9, 26))
     3678        dt = (date(2016, 3, 14), time(15, 9, 26))
     3679        q = "select ARRAY[$1::date], ARRAY[$2::time]"
     3680        r = self.db.query(q, dt).getresult()[0]
     3681        self.assertIsInstance(r[0], list)
     3682        self.assertEqual(r[0][0], dt[0])
     3683        self.assertIsInstance(r[1], list)
     3684        self.assertEqual(r[1][0], dt[1])
    36923685
    36933686    def testDbTypesInfo(self):
  • trunk/tests/test_dbapi20.py

    r814 r816  
    511511    def test_datetime(self):
    512512        dt = datetime(2011, 7, 17, 15, 47, 42, 317509)
    513         td = dt - datetime(1970, 1, 1)
    514         table = self.table_prefix + 'booze'
    515         con = self._connect()
    516         try:
    517             cur = con.cursor()
    518             cur.execute("set datestyle to iso")
    519             cur.execute("set datestyle to iso")
     513        table = self.table_prefix + 'booze'
     514        con = self._connect()
     515        try:
     516            cur = con.cursor()
    520517            cur.execute("create table %s ("
    521518                "d date, t time,  ts timestamp,"
    522                 "tz timetz, tsz timestamptz, i interval)" % table)
     519                "tz timetz, tsz timestamptz)" % table)
    523520            for n in range(3):
    524521                values = [dt.date(), dt.time(), dt,
    525                     dt.time(), dt, td]
     522                    dt.time(), dt]
    526523                if timezone:
    527524                    values[3] = values[3].replace(tzinfo=timezone.utc)
     
    530527                    params = values
    531528                if n == 1:  # input as text
    532                     params = [v.isoformat() for v in values[:5]]  # as text
    533                     params.append('%d days %d seconds %d microseconds '
    534                         % (td.days, td.seconds, td.microseconds))
     529                    params = [v.isoformat() for v in values]  # as text
    535530                elif n == 2:  # input using type helpers
    536531                    d = (dt.year, dt.month, dt.day)
    537532                    t = (dt.hour, dt.minute, dt.second, dt.microsecond)
    538                     i = (td.days, 0, 0, td.seconds, td.microseconds)
    539533                    params = [pgdb.Date(*d), pgdb.Time(*t),
    540534                            pgdb.Timestamp(*(d + t)), pgdb.Time(*t),
    541                             pgdb.Timestamp(*(d + t)), pgdb.Interval(*i)]
    542                 cur.execute("insert into %s"
    543                     " values (%%s,%%s,%%s,%%s,%%s,%%s)" % table, params)
     535                            pgdb.Timestamp(*(d + t))]
    544536                for datestyle in ('iso', 'postgres, mdy', 'postgres, dmy',
    545537                        'sql, mdy', 'sql, dmy', 'german'):
    546538                    cur.execute("set datestyle to %s" % datestyle)
     539                    cur.execute("insert into %s"
     540                        " values (%%s,%%s,%%s,%%s,%%s)" % table, params)
    547541                    cur.execute("select * from %s" % table)
    548542                    d = cur.description
    549                     for i in range(6):
     543                    for i in range(5):
    550544                        self.assertEqual(d[i].type_code, pgdb.DATETIME)
    551545                        self.assertNotEqual(d[i].type_code, pgdb.STRING)
     
    557551                    self.assertEqual(d[3].type_code, pgdb.TIME)
    558552                    self.assertEqual(d[4].type_code, pgdb.TIMESTAMP)
    559                     self.assertEqual(d[5].type_code, pgdb.INTERVAL)
    560553                    row = cur.fetchone()
    561554                    self.assertEqual(row, tuple(values))
    562                 cur.execute("delete from %s" % table)
     555                    cur.execute("delete from %s" % table)
     556        finally:
     557            con.close()
     558
     559    def test_interval(self):
     560        td = datetime(2011, 7, 17, 15, 47, 42, 317509) - datetime(1970, 1, 1)
     561        table = self.table_prefix + 'booze'
     562        con = self._connect()
     563        try:
     564            cur = con.cursor()
     565            cur.execute("create table %s (i interval)" % table)
     566            for n in range(3):
     567                if n == 0:  # input as objects
     568                    param = td
     569                if n == 1:  # input as text
     570                    param = '%d days %d seconds %d microseconds ' % (
     571                        td.days, td.seconds, td.microseconds)
     572                elif n == 2:  # input using type helpers
     573                    param = pgdb.Interval(
     574                        td.days, 0, 0, td.seconds, td.microseconds)
     575                for intervalstyle in ('sql_standard ', 'postgres',
     576                        'postgres_verbose', 'iso_8601'):
     577                    cur.execute("set intervalstyle to %s" % intervalstyle)
     578                    cur.execute("insert into %s"
     579                        " values (%%s)" % table, [param])
     580                    cur.execute("select * from %s" % table)
     581                    tc = cur.description[0].type_code
     582                    self.assertEqual(tc, pgdb.DATETIME)
     583                    self.assertNotEqual(tc, pgdb.STRING)
     584                    self.assertNotEqual(tc, pgdb.ARRAY)
     585                    self.assertNotEqual(tc, pgdb.RECORD)
     586                    self.assertEqual(tc, pgdb.INTERVAL)
     587                    row = cur.fetchone()
     588                    self.assertEqual(row, (td,))
     589                    cur.execute("delete from %s" % table)
    563590        finally:
    564591            con.close()
Note: See TracChangeset for help on using the changeset viewer.