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: