From 9aa53d8a61b7ef4584392b2628a88b26a0a20fd1 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Sun, 25 Oct 2026 03:48:19 +0000 Subject: [PATCH] fix(transform): normalize nodes under a "constructor" key in normalizeTree --- .../__fixtures__/input/json-constructors.sql | 7 +++++++ .../__fixtures__/output/json-constructors.sql | 11 +++++++++++ packages/transform/src/round-trip-core.ts | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 packages/transform/__fixtures__/input/json-constructors.sql create mode 100644 packages/transform/__fixtures__/output/json-constructors.sql diff --git a/packages/transform/__fixtures__/input/json-constructors.sql b/packages/transform/__fixtures__/input/json-constructors.sql new file mode 100644 index 000000000..14791ed2e --- /dev/null +++ b/packages/transform/__fixtures__/input/json-constructors.sql @@ -0,0 +1,7 @@ +-- SQL/JSON aggregate constructors carry their own location under a +-- "constructor" key; extra whitespace shifts it on deparse. +SELECT JSON_ARRAYAGG( t.name ORDER BY t.name ) FROM "my-schema".items t; + +SELECT JSON_OBJECTAGG( t.id : t.name ) FROM "my-schema".items t; + +SELECT JSON_ARRAY( "my-schema".label(1), 2 ), JSON_OBJECT( 'k' : 1 ); diff --git a/packages/transform/__fixtures__/output/json-constructors.sql b/packages/transform/__fixtures__/output/json-constructors.sql new file mode 100644 index 000000000..a89f6c69f --- /dev/null +++ b/packages/transform/__fixtures__/output/json-constructors.sql @@ -0,0 +1,11 @@ +-- SQL/JSON aggregate constructors carry their own location under a +-- "constructor" key; extra whitespace shifts it on deparse. +SELECT JSON_ARRAYAGG(t.name ORDER BY t.name ABSENT ON NULL) +FROM my_schema.items AS t; + +SELECT JSON_OBJECTAGG(t.id : t.name NULL ON NULL) +FROM my_schema.items AS t; + +SELECT + JSON_ARRAY(my_schema.label(1), 2 ABSENT ON NULL), + JSON_OBJECT('k' : 1 NULL ON NULL); \ No newline at end of file diff --git a/packages/transform/src/round-trip-core.ts b/packages/transform/src/round-trip-core.ts index 88360043c..33fa825f3 100644 --- a/packages/transform/src/round-trip-core.ts +++ b/packages/transform/src/round-trip-core.ts @@ -59,7 +59,8 @@ export function normalizeTree(node: any, options: NormalizeTreeOptions = {}): an const keys = sortKeys ? Object.keys(node).sort() : Object.keys(node); for (const key of keys) { if (volatileKeys?.has(key)) continue; - const handler = keyHandlers?.[key]; + const handler = + keyHandlers && Object.prototype.hasOwnProperty.call(keyHandlers, key) ? keyHandlers[key] : undefined; out[key] = handler ? handler(node[key], recurse) : recurse(node[key]); } return out;