From d6adf919c95021a3808846aa2373bf9ceac5e27b Mon Sep 17 00:00:00 2001 From: AarDG10 Date: Thu, 30 Apr 2026 10:17:26 +0530 Subject: [PATCH] fix(query): use default limit when offset is used in MariaDB and SQLite MariaDB and SQLite don't allow use of offset as a standalone, limit is a must, enforcing that in QB. PostgreSQL allows use of offset w/o limit clause. --- frappe/database/query.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frappe/database/query.py b/frappe/database/query.py index 08f3bce309..4d3f2ddd0b 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -172,6 +172,9 @@ BACKTICK_FIELD_PARSE_REGEX = re.compile(r"^`tab([\w\s-]+)`\.(`?)(\w+)\2$") # Group 3: Fieldname CHILD_TABLE_FIELD_PATTERN = re.compile(r'^[`"]?tab([\w\s]+)[`"]?\.([`"]?)(\w+)\2$') +# Maximum value of an unsigned 64-bit integer +MAX_LIMIT = 18446744073709551615 + # Direct mapping from uppercase function names to pypika function classes FUNCTION_MAPPING = { "COUNT": functions.Count, @@ -299,6 +302,11 @@ class Engine: if offset: if not isinstance(offset, int) or offset < 0: frappe.throw(_("Offset must be a non-negative integer"), TypeError) + + # In MariaDB and SQLite, offset requires limit + if not self.is_postgres and not limit: + self.query = self.query.limit(MAX_LIMIT) + self.query = self.query.offset(offset) if distinct: