diff --git a/__fixtures__/generated/generated.json b/__fixtures__/generated/generated.json index a9ad75702..06597c23a 100644 --- a/__fixtures__/generated/generated.json +++ b/__fixtures__/generated/generated.json @@ -96,6 +96,8 @@ "pretty/misc-15.sql": "ALTER DEFAULT PRIVILEGES IN SCHEMA dashboard_jobs \n GRANT EXECUTE ON FUNCTIONS TO administrator", "pretty/misc-16.sql": "GRANT EXECUTE ON FUNCTION dashboard_private.uuid_generate_seeded_uuid TO PUBLIC", "pretty/misc-17.sql": "SELECT CAST(t.date AT TIME ZONE $$America/New_York$$ AS text)::date FROM tbl t", + "pretty/misc-18.sql": "FETCH ALL FROM c", + "pretty/misc-19.sql": "MOVE BACKWARD ALL IN c", "pretty/formatting-1.sql": "EXPLAIN (COSTS OFF) SELECT * FROM onek2 WHERE unique2 = 11 AND stringu1 = 'ATAAAA'", "pretty/formatting-2.sql": "EXPLAIN SELECT * FROM onek2 WHERE unique2 = 11 AND stringu1 = 'ATAAAA'", "pretty/formatting-3.sql": "INSERT INTO objects.object (name, val, active, hash)\nVALUES ('name', 'val', 't'::boolean, 'abcdefg'),\n ('name', 'val', 't'::boolean, 'abcdefg'),\n ('name', 'val', 't'::boolean, 'abcdefg')", diff --git a/__fixtures__/kitchen-sink/pretty/misc.sql b/__fixtures__/kitchen-sink/pretty/misc.sql index de3896a0c..7dbc6e1e2 100644 --- a/__fixtures__/kitchen-sink/pretty/misc.sql +++ b/__fixtures__/kitchen-sink/pretty/misc.sql @@ -232,4 +232,9 @@ GRANT EXECUTE ON FUNCTION dashboard_private.uuid_generate_seeded_uuid TO PUBLIC; -- https://github.com/constructive-io/pgsql-parser/issues/217 -SELECT CAST(t.date AT TIME ZONE $$America/New_York$$ AS text)::date FROM tbl t; \ No newline at end of file +SELECT CAST(t.date AT TIME ZONE $$America/New_York$$ AS text)::date FROM tbl t; + +-- FETCH/MOVE ALL (FETCH_ALL is 2147483647 in the WASM AST) +FETCH ALL FROM c; + +MOVE BACKWARD ALL IN c; diff --git a/packages/deparser/__tests__/kitchen-sink/pretty-misc.test.ts b/packages/deparser/__tests__/kitchen-sink/pretty-misc.test.ts index 4ea3778e4..95ed6103d 100644 --- a/packages/deparser/__tests__/kitchen-sink/pretty-misc.test.ts +++ b/packages/deparser/__tests__/kitchen-sink/pretty-misc.test.ts @@ -20,6 +20,8 @@ it('pretty-misc', async () => { "pretty/misc-14.sql", "pretty/misc-15.sql", "pretty/misc-16.sql", - "pretty/misc-17.sql" + "pretty/misc-17.sql", + "pretty/misc-18.sql", + "pretty/misc-19.sql" ]); }); diff --git a/packages/deparser/__tests__/pretty/__snapshots__/misc-pretty.test.ts.snap b/packages/deparser/__tests__/pretty/__snapshots__/misc-pretty.test.ts.snap index 88f227f33..968434a51 100644 --- a/packages/deparser/__tests__/pretty/__snapshots__/misc-pretty.test.ts.snap +++ b/packages/deparser/__tests__/pretty/__snapshots__/misc-pretty.test.ts.snap @@ -34,6 +34,10 @@ exports[`non-pretty: pretty/misc-16.sql 1`] = `"GRANT EXECUTE ON FUNCTION dashbo exports[`non-pretty: pretty/misc-17.sql 1`] = `"SELECT CAST((t.date AT TIME ZONE 'America/New_York')::text AS date) FROM tbl AS t"`; +exports[`non-pretty: pretty/misc-18.sql 1`] = `"FETCH FORWARD ALL c"`; + +exports[`non-pretty: pretty/misc-19.sql 1`] = `"MOVE BACKWARD ALL c"`; + exports[`pretty: pretty/misc-1.sql 1`] = ` "WITH recent_orders AS (SELECT @@ -302,3 +306,7 @@ exports[`pretty: pretty/misc-17.sql 1`] = ` "SELECT CAST((t.date AT TIME ZONE 'America/New_York')::text AS date) FROM tbl AS t" `; + +exports[`pretty: pretty/misc-18.sql 1`] = `"FETCH FORWARD ALL c"`; + +exports[`pretty: pretty/misc-19.sql 1`] = `"MOVE BACKWARD ALL c"`; diff --git a/packages/deparser/__tests__/pretty/misc-pretty.test.ts b/packages/deparser/__tests__/pretty/misc-pretty.test.ts index 33d717cd7..ca2426747 100644 --- a/packages/deparser/__tests__/pretty/misc-pretty.test.ts +++ b/packages/deparser/__tests__/pretty/misc-pretty.test.ts @@ -18,6 +18,8 @@ const testCases = [ 'pretty/misc-15.sql', 'pretty/misc-16.sql', 'pretty/misc-17.sql', + 'pretty/misc-18.sql', + 'pretty/misc-19.sql', ]; const prettyTest = new PrettyTest(testCases); diff --git a/packages/deparser/src/deparser.ts b/packages/deparser/src/deparser.ts index 94c7f6256..63fbb074b 100644 --- a/packages/deparser/src/deparser.ts +++ b/packages/deparser/src/deparser.ts @@ -7904,8 +7904,9 @@ export class Deparser implements DeparserVisitor { FetchStmt(node: t.FetchStmt, context: DeparserContext): string { const output: string[] = [node.ismove ? 'MOVE' : 'FETCH']; - // Check if howMany represents "ALL" (PostgreSQL uses LONG_MAX as sentinel) - const isAll = (node.howMany as any) === 9223372036854776000; + // FETCH_ALL is LONG_MAX: 2^63-1 from a 64-bit libpg_query, 2^31-1 from the 32-bit WASM build + const howMany = node.howMany as any; + const isAll = howMany === 9223372036854776000 || howMany === 2147483647; // Handle direction first, then check for ALL within each direction if (node.direction) {