From e0729b7456b97b3759e754bfcf831b89d4d48ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Grazina?= Date: Tue, 8 Apr 2025 20:38:08 +0100 Subject: [PATCH 1/2] Include already existing JSON operators in other dialects that were already supporting JSON/JSONB columns --- pydal/dialects/postgre.py | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/pydal/dialects/postgre.py b/pydal/dialects/postgre.py index 3b2d2ce9e..24290ee5f 100644 --- a/pydal/dialects/postgre.py +++ b/pydal/dialects/postgre.py @@ -379,14 +379,8 @@ def eq(self, first, second=None, query_env={}): return super(PostgreDialectArrays, self).eq(first, second, query_env) -class PostgreDialectArraysJSON(PostgreDialectArrays): - @sqltype_for("json") - def type_json(self): - return "JSON" - - @sqltype_for("jsonb") - def type_jsonb(self): - return "JSONB" +class PostgreDialectArraysJSON(PostgreDialectArrays, PostgreDialectJSON): + pass @dialects.register_for(PostgreBoolean) @@ -396,11 +390,5 @@ def type_boolean(self): return "BOOLEAN" -class PostgreDialectBooleanJSON(PostgreDialectBoolean): - @sqltype_for("json") - def type_json(self): - return "JSON" - - @sqltype_for("jsonb") - def type_jsonb(self): - return "JSONB" +class PostgreDialectBooleanJSON(PostgreDialectBoolean, PostgreDialectJSON): + pass \ No newline at end of file From aeb12032a372f2017864ad513cfd49c8a2a0e16a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Grazina?= Date: Fri, 11 Apr 2025 16:19:45 +0100 Subject: [PATCH 2/2] FIX: ilike any only works for strings, not for bigints (list:integer and list:reference) --- pydal/dialects/postgre.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pydal/dialects/postgre.py b/pydal/dialects/postgre.py index 24290ee5f..4a4e1e175 100644 --- a/pydal/dialects/postgre.py +++ b/pydal/dialects/postgre.py @@ -356,11 +356,11 @@ def any(self, val, query_env={}): def contains(self, first, second, case_sensitive=True, query_env={}): if first.type.startswith("list:"): - f = self.expand(second, "string", query_env=query_env) + f = self.expand(second, "string" if first.type == 'list:string' else "integer", query_env=query_env) s = self.any(first, query_env) - if case_sensitive is True: - return self.eq(f, s) - return self.ilike(f, s, escape="\\", query_env=query_env) + if not case_sensitive and first.type == 'list:string': + return self.ilike(f, s, escape="\\", query_env=query_env) + return self.eq(f, s) return super(PostgreDialectArrays, self).contains( first, second, case_sensitive=case_sensitive, query_env=query_env )