From 449a3cbaf7dcd1940560cde4cf69d3625556cc57 Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Sat, 20 Dec 2025 17:42:48 +0000 Subject: [PATCH] Fix for IS NOT NULL --- internal-packages/tsql/src/query/parser.ts | 2 +- internal-packages/tsql/src/query/printer.test.ts | 14 +++++++++++++- internal-packages/tsql/src/query/printer.ts | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/internal-packages/tsql/src/query/parser.ts b/internal-packages/tsql/src/query/parser.ts index 28330e81f..05b1df052 100644 --- a/internal-packages/tsql/src/query/parser.ts +++ b/internal-packages/tsql/src/query/parser.ts @@ -1233,7 +1233,7 @@ export class TSQLParseTreeConverter implements TSQLParserVisitor { return { expression_type: "compare_operation", left: this.visitAsExpr(ctx.columnExpr()), - right: { value: null } as Constant, + right: { expression_type: "constant", value: null } as Constant, op: ctx.NOT() ? CompareOperationOp.NotEq : CompareOperationOp.Eq, }; } diff --git a/internal-packages/tsql/src/query/printer.test.ts b/internal-packages/tsql/src/query/printer.test.ts index d8b1f1f99..e96fee5c2 100644 --- a/internal-packages/tsql/src/query/printer.test.ts +++ b/internal-packages/tsql/src/query/printer.test.ts @@ -320,11 +320,23 @@ describe("ClickHousePrinter", () => { expect(sql).toContain("isNull("); }); - it("should handle IS NOT NULL comparisons", () => { + it("should handle != NULL comparisons", () => { const { sql } = printQuery("SELECT * FROM task_runs WHERE started_at != NULL"); expect(sql).toContain("isNotNull("); }); + + it("should handle IS NULL syntax", () => { + const { sql } = printQuery("SELECT * FROM task_runs WHERE error IS NULL"); + + expect(sql).toContain("isNull(error)"); + }); + + it("should handle IS NOT NULL syntax", () => { + const { sql } = printQuery("SELECT * FROM task_runs WHERE error IS NOT NULL"); + + expect(sql).toContain("isNotNull(error)"); + }); }); describe("ORDER BY clauses", () => { diff --git a/internal-packages/tsql/src/query/printer.ts b/internal-packages/tsql/src/query/printer.ts index 0c27bb1d8..2de1c6d08 100644 --- a/internal-packages/tsql/src/query/printer.ts +++ b/internal-packages/tsql/src/query/printer.ts @@ -238,7 +238,9 @@ export class ClickHousePrinter { response = this.visitSampleExpr(node as SampleExpr); break; default: - throw new NotImplementedError(`Unknown expression type: ${nodeType}`); + throw new NotImplementedError( + `Unknown expression type: ${nodeType}. Node: ${JSON.stringify(node, null, 2).slice(0, 200)}` + ); } this.indentLevel--;