From 6bd9dcdb814b2f03f053ff5f5bf9a20ffe092582 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Mon, 27 Feb 2017 01:18:09 +0100 Subject: Inserting Documents --- archivist/peewee_ext.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'archivist/peewee_ext.py') 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' -- cgit v1.2.3-54-g00ecf