From 5d372bb91afa7308e5186a7b5f9dbb521f7fd8ae Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Wed, 29 Jul 2026 17:05:21 +0200 Subject: [PATCH] Add dry run to check query syntax --- django_ormql/engine.py | 9 +++++++-- django_ormql/query.py | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/django_ormql/engine.py b/django_ormql/engine.py index d4eb9cd..d5807c6 100644 --- a/django_ormql/engine.py +++ b/django_ormql/engine.py @@ -16,11 +16,16 @@ def query( placeholders=None, timezone=datetime.timezone.utc, default_limit=None, + dry_run=False, ): - return Query( + query = Query( query, self.tables, placeholders, timezone, default_limit, - ).evaluate() + ) + if dry_run: + return query.parse() + else: + return query.evaluate() diff --git a/django_ormql/query.py b/django_ormql/query.py index 3bcb9db..ad009c3 100644 --- a/django_ormql/query.py +++ b/django_ormql/query.py @@ -838,7 +838,7 @@ def _select_to_qs(self, root, parent_table_stack): return qs, values_names - def evaluate(self): + def parse(self): try: ast = parse_one(self.sql, dialect=OrmqlDialect) except ParseError as e: @@ -860,6 +860,11 @@ def evaluate(self): except Exception as e: raise QueryError("Query parsing failed") from e + return qs, values_names + + def evaluate(self): + qs, values_names = self.parse() + if isinstance(qs, dict): yield {values_names[k]: v for k, v in qs.items()} else: