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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.