﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24959	date_interval_sql Implementations for Database Backends Do Not Handle Negative timedelta Objects Properly	Fred Palmer	nobody	"If I have a `timedelta` object in python that represents a negative difference, e.g.:

{{{
delta = timedelta(seconds=-3600)
print delta2
 -1 day, 23:00:00
}}}  

The resultant SQL generated by `date_interval_sql` for the MySQL backend would be something like:

{{{
UPDATE `scheduling_event`
SET ...
        `my_datetime` = (`my_table`.`my_datetime` + INTERVAL '-1 0:0:82800:0' DAY_MICROSECOND),
WHERE (...)
}}}


**AND** what we want is the following:

{{{
UPDATE `scheduling_event`
SET  ...
`my_datetime` = (`my_table`.`my_datetime` + INTERVAL '-0 0:0:3600:0' DAY_MICROSECOND),
WHERE (...)
}}}

In layman's terms - the two layers are not convertible in a one-to-one sense.  A `timedelta` in for the example above in Python means: '''go back one day and *add* 23 hours'''.  So some `datetime + delta` would just subtract one hour. 

In MySQL, however, ""INTERVAL '-1 0:0:82800:0' DAY_MICROSECOND)"" means: '''add a negative one day and 23 hours'''. "	Uncategorized	new	Database layer (models, ORM)	1.8	Normal		date_interval_sql, timedelta, F, orm		Unreviewed	0	0	0	0	0	0
