Skip to content

Commit e4bc199

Browse files
author
James William Pye
committed
Dump compose() for date I/O.
Gives better performance. Probably most of those should be written without compose.
1 parent ca204ea commit e4bc199

1 file changed

Lines changed: 17 additions & 14 deletions

File tree

postgresql/types/io/stdlib_datetime.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
INTERVALOID: datetime.timedelta,
3434
}
3535

36+
seconds_in_day = 24 * 60 * 60
37+
seconds_in_hour = 60 * 60
38+
3639
pg_epoch_datetime = datetime.datetime(2000, 1, 1)
3740
pg_epoch_date = pg_epoch_datetime.date()
3841
pg_date_offset = pg_epoch_date.toordinal()
@@ -79,15 +82,19 @@
7982
lib.date_negative_infinity: negative_infinity_date,
8083
}
8184

82-
date_pack = compose((
83-
methodcaller("toordinal"), partial(add, pg_minus_date_offset), lib.date_pack,
84-
))
85-
date_unpack = compose((
86-
lib.date_unpack, partial(add, pg_date_offset), datetime.date.fromordinal
87-
))
88-
89-
seconds_in_day = 24 * 60 * 60
90-
seconds_in_hour = 60 * 60
85+
def date_pack(x,
86+
pack = lib.date_pack,
87+
offset = pg_date_offset,
88+
get = date_pack_constants.get,
89+
):
90+
return get(x) or pack(x.toordinal() - offset)
91+
def date_unpack(x,
92+
unpack = lib.date_unpack,
93+
offset = pg_date_offset,
94+
from_ord = datetime.date.fromordinal,
95+
get = date_unpack_constants.get,
96+
):
97+
return get(x) or from_ord(unpack(x) + pg_date_offset)
9198

9299
def timestamp_pack(x):
93100
"""
@@ -264,11 +271,7 @@ def select_day_format(oid, typio, get = id_to_io.__getitem__):
264271
return get((time_type(typio), typio.database.version_info[:2] <= (8,0), oid))
265272

266273
oid_to_io = {
267-
DATEOID : (
268-
proc_when_not_in(date_pack, date_pack_constants),
269-
proc_when_not_in(date_unpack, date_unpack_constants),
270-
datetime.date,
271-
),
274+
DATEOID : (date_pack, date_unpack, datetime.date,),
272275
TIMEOID : select_format,
273276
TIMETZOID : select_format,
274277
TIMESTAMPOID : select_format,

0 commit comments

Comments
 (0)