storage: handle datetime in criterias (#5931)
This commit is contained in:
parent
251be76550
commit
2257f08193
|
@ -499,3 +499,29 @@ def test_sql_table_select():
|
|||
assert len(data_class.select([st.Less('id', 26)])) == 25
|
||||
assert len(data_class.select([st.Less('id', 25), st.GreaterOrEqual('id', 10)])) == 15
|
||||
assert len(data_class.select([st.Less('id', 25), st.GreaterOrEqual('id', 10), lambda x: x.id >= 15])) == 10
|
||||
|
||||
|
||||
@postgresql
|
||||
def test_sql_table_select_datetime():
|
||||
test_formdef = FormDef()
|
||||
test_formdef.name = 'table select datetime'
|
||||
test_formdef.fields = []
|
||||
test_formdef.store()
|
||||
data_class = test_formdef.data_class(mode='sql')
|
||||
assert data_class.count() == 0
|
||||
|
||||
d = datetime.datetime(2014, 1, 1)
|
||||
for i in range(50):
|
||||
t = data_class()
|
||||
t.receipt_time = (d + datetime.timedelta(days=i)).timetuple()
|
||||
t.store()
|
||||
|
||||
assert data_class.count() == 50
|
||||
assert len(data_class.select()) == 50
|
||||
|
||||
assert len(data_class.select(lambda x: x.receipt_time == d.timetuple())) == 1
|
||||
assert len(data_class.select([st.Equal('receipt_time', d.timetuple())])) == 1
|
||||
assert len(data_class.select([
|
||||
st.Less('receipt_time', (d + datetime.timedelta(days=20)).timetuple())])) == 20
|
||||
assert len(data_class.select([
|
||||
st.Greater('receipt_time', (d + datetime.timedelta(days=20)).timetuple())])) == 29
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import datetime
|
||||
import sys
|
||||
import shutil
|
||||
import tempfile
|
||||
|
@ -203,3 +204,22 @@ def test_select():
|
|||
assert len(Foobar.select(lambda x: x.unique_value < 26)) == 25
|
||||
assert len(Foobar.select([st.Less('unique_value', 26)])) == 25
|
||||
assert len(Foobar.select([st.Less('unique_value', 25), st.GreaterOrEqual('unique_value', 10)])) == 15
|
||||
|
||||
|
||||
def test_select_datetime():
|
||||
Foobar.wipe()
|
||||
|
||||
d = datetime.datetime(2014, 1, 1)
|
||||
for i in range(50):
|
||||
test = Foobar()
|
||||
test.receipt_time = (d + datetime.timedelta(days=i)).timetuple()
|
||||
test.store()
|
||||
|
||||
assert len(Foobar.select()) == 50
|
||||
|
||||
assert len(Foobar.select(lambda x: x.receipt_time == d.timetuple())) == 1
|
||||
assert len(Foobar.select([st.Equal('receipt_time', d.timetuple())])) == 1
|
||||
assert len(Foobar.select([
|
||||
st.Less('receipt_time', (d + datetime.timedelta(days=20)).timetuple())])) == 20
|
||||
assert len(Foobar.select([
|
||||
st.Greater('receipt_time', (d + datetime.timedelta(days=20)).timetuple())])) == 29
|
||||
|
|
|
@ -55,7 +55,11 @@ class Criteria(qommon.storage.Criteria):
|
|||
return '%s %s %%(c%s)s' % (self.attribute, self.sql_op, id(self.value))
|
||||
|
||||
def as_sql_param(self):
|
||||
return {'c%s' % id(self.value): self.value}
|
||||
if isinstance(self.value, time.struct_time):
|
||||
value = datetime.datetime.fromtimestamp(time.mktime(self.value))
|
||||
else:
|
||||
value = self.value
|
||||
return {'c%s' % id(self.value): value}
|
||||
|
||||
class Less(Criteria):
|
||||
sql_op = '<'
|
||||
|
|
Loading…
Reference in New Issue