summaryrefslogtreecommitdiff
path: root/archivist/peewee_ext.py
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2017-02-27 01:18:09 +0100
committerRené 'Necoro' Neumann <necoro@necoro.net>2017-02-27 01:18:09 +0100
commit6bd9dcdb814b2f03f053ff5f5bf9a20ffe092582 (patch)
tree5813bc7f73c637757662cece27d388547c1bea1d /archivist/peewee_ext.py
parentef3cda14736df8b8a9f7ff4f022b9a8250713bd9 (diff)
downloadarchivist-6bd9dcdb814b2f03f053ff5f5bf9a20ffe092582.tar.gz
archivist-6bd9dcdb814b2f03f053ff5f5bf9a20ffe092582.tar.bz2
archivist-6bd9dcdb814b2f03f053ff5f5bf9a20ffe092582.zip
Inserting Documents
Diffstat (limited to 'archivist/peewee_ext.py')
-rw-r--r--archivist/peewee_ext.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/archivist/peewee_ext.py b/archivist/peewee_ext.py
index 9fda66e..80bb6f4 100644
--- a/archivist/peewee_ext.py
+++ b/archivist/peewee_ext.py
@@ -1,6 +1,16 @@
from playhouse.sqlite_ext import VirtualModel, VirtualIntegerField, VirtualCharField
from peewee import Field
+from itertools import starmap
+from functools import reduce
+import operator as op
+
+def sqlite_tuple_in(fields, values):
+ """SQLite does not support (foo, bar) IN ((1,2),(3,4)).
+ So we construct a '(foo = 1 AND bar = 2) OR (foo = 3 AND bar = 4)' monstrum."""
+ subqueries = (reduce(op.and_, starmap(op.eq, zip(fields, value_tuple))) for value_tuple in values)
+ return reduce(op.or_, subqueries)
+
class EnumField(Field):
db_field = 'enum'