From d79ccd0a8282c89d15a4f72ec9fd6535e929fa2a Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 5 Feb 2026 19:18:47 -0800 Subject: [PATCH 1/4] add formatting support --- core/query_formatter.py | 7 +++++++ tests/test_query_formatter.py | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/core/query_formatter.py b/core/query_formatter.py index 437f316..b592324 100644 --- a/core/query_formatter.py +++ b/core/query_formatter.py @@ -222,6 +222,9 @@ def format_expression(node: Node): return node.name elif node.type == NodeType.LITERAL: + if isinstance(node.value, str): + return {'literal': node.value} + return node.value elif node.type == NodeType.FUNCTION: @@ -230,6 +233,10 @@ def format_expression(node: Node): args = [format_expression(arg) for arg in node.children] return {func_name: args[0] if len(args) == 1 else args} + elif node.type == NodeType.SUBQUERY: + subquery_node = list(node.children)[0] + return ast_to_json(subquery_node) + elif node.type == NodeType.OPERATOR: # format: {'operator': [left, right]} op_map = { diff --git a/tests/test_query_formatter.py b/tests/test_query_formatter.py index 2fe2c56..d07e076 100644 --- a/tests/test_query_formatter.py +++ b/tests/test_query_formatter.py @@ -11,8 +11,12 @@ def normalize_sql(s): """Remove extra whitespace and normalize SQL string to be used in comparisons""" + # Remove leading/trailing whitespace and collapse multiple spaces into one s = s.strip() s = sub(r'\s+', ' ', s) + # Remove spaces after opening parentheses and before closing parentheses + s = sub(r'\(\s+', '(', s) + s = sub(r'\s+\)', ')', s) return s @@ -142,9 +146,9 @@ def test_subquery_format(): ) AND 1 = 1 """ - # expected_sql = expected_sql.strip() + expected_sql = expected_sql.strip() - # sql = formatter.format(ast) - # sql = sql.strip() + sql = formatter.format(ast) + sql = sql.strip() - # assert normalize_sql(sql) == normalize_sql(expected_sql) \ No newline at end of file + assert normalize_sql(sql) == normalize_sql(expected_sql) \ No newline at end of file From 93f30c992b5327e27b8efbff0582f5a056746bff Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 5 Feb 2026 19:19:14 -0800 Subject: [PATCH 2/4] replace regex comparison with mosqlparse comparison --- tests/test_query_formatter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_query_formatter.py b/tests/test_query_formatter.py index d07e076..b67f0de 100644 --- a/tests/test_query_formatter.py +++ b/tests/test_query_formatter.py @@ -6,6 +6,7 @@ ) from core.ast.enums import JoinType, SortOrder from re import sub +from mo_sql_parsing import parse formatter = QueryFormatter() @@ -86,7 +87,7 @@ def test_basic_format(): sql = formatter.format(ast) sql = sql.strip() - assert normalize_sql(sql) == normalize_sql(expected_sql) + assert parse(sql) == parse(expected_sql) def test_subquery_format(): @@ -151,4 +152,4 @@ def test_subquery_format(): sql = formatter.format(ast) sql = sql.strip() - assert normalize_sql(sql) == normalize_sql(expected_sql) \ No newline at end of file + assert parse(sql) == parse(expected_sql) \ No newline at end of file From fbaab632ec0e5f5880cfec2292e35eb9ecee7853 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 5 Feb 2026 19:20:17 -0800 Subject: [PATCH 3/4] remove unused function --- tests/test_query_formatter.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/tests/test_query_formatter.py b/tests/test_query_formatter.py index b67f0de..9a72607 100644 --- a/tests/test_query_formatter.py +++ b/tests/test_query_formatter.py @@ -10,17 +10,6 @@ formatter = QueryFormatter() -def normalize_sql(s): - """Remove extra whitespace and normalize SQL string to be used in comparisons""" - # Remove leading/trailing whitespace and collapse multiple spaces into one - s = s.strip() - s = sub(r'\s+', ' ', s) - # Remove spaces after opening parentheses and before closing parentheses - s = sub(r'\(\s+', '(', s) - s = sub(r'\s+\)', ')', s) - - return s - def test_basic_format(): # Construct expected AST # Tables From 1a6bff5443cdce3156b7cdb7ff220a06edae7313 Mon Sep 17 00:00:00 2001 From: colinthebomb1 Date: Fri, 6 Feb 2026 16:34:31 -0800 Subject: [PATCH 4/4] Update tests/test_query_formatter.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tests/test_query_formatter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_query_formatter.py b/tests/test_query_formatter.py index 9a72607..f3f3dae 100644 --- a/tests/test_query_formatter.py +++ b/tests/test_query_formatter.py @@ -5,7 +5,6 @@ OrderByNode, LimitNode, OffsetNode, SubqueryNode, VarNode, VarSetNode, JoinNode ) from core.ast.enums import JoinType, SortOrder -from re import sub from mo_sql_parsing import parse formatter = QueryFormatter()