From fc13a196294b401aa2bf347a52652adb6c9d3768 Mon Sep 17 00:00:00 2001
From: Grigi <nagrigoriadis@gmail.com>
Date: Tue, 24 Mar 2020 19:31:16 +0200
Subject: [PATCH] Correctness fix of previous hotfix

---
 tests/fields/test_time.py             |  6 +++---
 tortoise/backends/asyncpg/executor.py | 20 +-------------------
 tortoise/filters.py                   | 10 +++++-----
 3 files changed, 9 insertions(+), 27 deletions(-)

diff --git a/tests/fields/test_time.py b/tests/fields/test_time.py
index 7bb78d72f..23ceb0b64 100644
--- a/tests/fields/test_time.py
+++ b/tests/fields/test_time.py
@@ -24,10 +24,10 @@ async def test_create(self):
         obj = await testmodels.DatetimeFields.get(id=obj0.id)
         self.assertEqual(obj.datetime, now)
         self.assertEqual(obj.datetime_null, None)
-        self.assertLess(obj.datetime_auto - now, timedelta(microseconds=10000))
-        self.assertLess(obj.datetime_add - now, timedelta(microseconds=10000))
+        self.assertLess(obj.datetime_auto - now, timedelta(microseconds=20000))
+        self.assertLess(obj.datetime_add - now, timedelta(microseconds=20000))
         datetime_auto = obj.datetime_auto
-        sleep(0.011)
+        sleep(0.012)
         await obj.save()
         obj2 = await testmodels.DatetimeFields.get(id=obj.id)
         self.assertEqual(obj2.datetime, now)
diff --git a/tortoise/backends/asyncpg/executor.py b/tortoise/backends/asyncpg/executor.py
index d4c6ccde6..8bfebcfa5 100644
--- a/tortoise/backends/asyncpg/executor.py
+++ b/tortoise/backends/asyncpg/executor.py
@@ -1,32 +1,14 @@
 import uuid
-from typing import Any, List, Optional
+from typing import List, Optional
 
 import asyncpg
 from pypika import Parameter
-from pypika.terms import Term, ValueWrapper
 
 from tortoise import Model
 from tortoise.backends.base.executor import BaseExecutor
-from tortoise.filters import is_in, not_in
-
-
-def postgres_is_in(field: Term, value: Any) -> Term:
-    if value:
-        return field.isin(value)
-    return ValueWrapper(False)
-
-
-def post_gres_not_in(field: Term, value: Any) -> Term:
-    if value:
-        return field.notin(value) | field.isnull()
-    return ValueWrapper(True)
 
 
 class AsyncpgExecutor(BaseExecutor):
-    FILTER_FUNC_OVERRIDE = {
-        is_in: postgres_is_in,
-        not_in: post_gres_not_in,
-    }
     EXPLAIN_PREFIX = "EXPLAIN (FORMAT JSON, VERBOSE)"
     DB_NATIVE = BaseExecutor.DB_NATIVE | {bool, uuid.UUID}
 
diff --git a/tortoise/filters.py b/tortoise/filters.py
index 15d6edafb..9a7c19a48 100644
--- a/tortoise/filters.py
+++ b/tortoise/filters.py
@@ -5,7 +5,7 @@
 from pypika import Table
 from pypika.enums import SqlTypes
 from pypika.functions import Cast, Upper
-from pypika.terms import Criterion, Term, ValueWrapper
+from pypika.terms import BasicCriterion, Criterion, Equality, Term, ValueWrapper
 
 from tortoise.fields import Field
 from tortoise.fields.relational import BackwardFKRelation, ManyToManyFieldInstance
@@ -45,16 +45,16 @@ def string_encoder(value: Any, instance: "Model", field: Field) -> str:
 ##############################################################################
 
 
-def is_in(field: Term, value: Any) -> Term:
+def is_in(field: Term, value: Any) -> Criterion:
     if value:
         return field.isin(value)
-    return ValueWrapper(0)
+    return BasicCriterion(Equality.eq, ValueWrapper(1), ValueWrapper(0))
 
 
-def not_in(field: Term, value: Any) -> Term:
+def not_in(field: Term, value: Any) -> Criterion:
     if value:
         return field.notin(value) | field.isnull()
-    return ValueWrapper(1)
+    return BasicCriterion(Equality.eq, ValueWrapper(1), ValueWrapper(1))
 
 
 def between_and(field: Term, value: Tuple[Any, Any]) -> Criterion: