diff --git a/__fixtures__/generated/generated.json b/__fixtures__/generated/generated.json index 22d5b189..15500320 100644 --- a/__fixtures__/generated/generated.json +++ b/__fixtures__/generated/generated.json @@ -96,6 +96,11 @@ "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/joins-1.sql": "SELECT *\nFROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id", + "pretty/joins-2.sql": "SELECT *\nFROM public.posts AS t0 LEFT OUTER JOIN public.comments ON t0.id = comments.post_id", + "pretty/joins-3.sql": "SELECT *\nFROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id LEFT OUTER JOIN public.categories ON t0.category_id = categories.id", + "pretty/joins-4.sql": "SELECT\n t0.id,\n t0.title,\n users.name\nFROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id", + "pretty/joins-5.sql": "SELECT id\nFROM public.users", "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/joins.sql b/__fixtures__/kitchen-sink/pretty/joins.sql new file mode 100644 index 00000000..d4d224d6 --- /dev/null +++ b/__fixtures__/kitchen-sink/pretty/joins.sql @@ -0,0 +1,22 @@ +-- 1. Simple inner join +SELECT * +FROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id; + +-- 2. Left outer join +SELECT * +FROM public.posts AS t0 LEFT OUTER JOIN public.comments ON t0.id = comments.post_id; + +-- 3. Multiple joins +SELECT * +FROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id LEFT OUTER JOIN public.categories ON t0.category_id = categories.id; + +-- 4. Joined tables with specific columns +SELECT + t0.id, + t0.title, + users.name +FROM public.posts AS t0 INNER JOIN public.users ON t0.author_id = users.id; + +-- 5. Raw ast passthrough +SELECT id +FROM public.users; diff --git a/packages/deparser/__tests__/pretty/__snapshots__/joins-pretty.test.ts.snap b/packages/deparser/__tests__/pretty/__snapshots__/joins-pretty.test.ts.snap new file mode 100644 index 00000000..1df51c17 --- /dev/null +++ b/packages/deparser/__tests__/pretty/__snapshots__/joins-pretty.test.ts.snap @@ -0,0 +1,44 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`non-pretty: pretty/joins-1.sql 1`] = `"SELECT * FROM public.posts AS t0 JOIN public.users ON t0.author_id = users.id"`; + +exports[`non-pretty: pretty/joins-2.sql 1`] = `"SELECT * FROM public.posts AS t0 LEFT JOIN public.comments ON t0.id = comments.post_id"`; + +exports[`non-pretty: pretty/joins-3.sql 1`] = `"SELECT * FROM public.posts AS t0 JOIN public.users ON t0.author_id = users.id LEFT JOIN public.categories ON t0.category_id = categories.id"`; + +exports[`non-pretty: pretty/joins-4.sql 1`] = `"SELECT t0.id, t0.title, users.name FROM public.posts AS t0 JOIN public.users ON t0.author_id = users.id"`; + +exports[`non-pretty: pretty/joins-5.sql 1`] = `"SELECT id FROM public.users"`; + +exports[`pretty: pretty/joins-1.sql 1`] = ` +"SELECT * +FROM public.posts AS t0 +JOIN public.users ON t0.author_id = users.id" +`; + +exports[`pretty: pretty/joins-2.sql 1`] = ` +"SELECT * +FROM public.posts AS t0 +LEFT JOIN public.comments ON t0.id = comments.post_id" +`; + +exports[`pretty: pretty/joins-3.sql 1`] = ` +"SELECT * +FROM public.posts AS t0 +JOIN public.users ON t0.author_id = users.id +LEFT JOIN public.categories ON t0.category_id = categories.id" +`; + +exports[`pretty: pretty/joins-4.sql 1`] = ` +"SELECT + t0.id, + t0.title, + users.name +FROM public.posts AS t0 +JOIN public.users ON t0.author_id = users.id" +`; + +exports[`pretty: pretty/joins-5.sql 1`] = ` +"SELECT id +FROM public.users" +`; diff --git a/packages/deparser/__tests__/pretty/joins-pretty.test.ts b/packages/deparser/__tests__/pretty/joins-pretty.test.ts new file mode 100644 index 00000000..056c668c --- /dev/null +++ b/packages/deparser/__tests__/pretty/joins-pretty.test.ts @@ -0,0 +1,11 @@ +import { PrettyTest } from '../../test-utils/PrettyTest'; + +const prettyTest = new PrettyTest([ + 'pretty/joins-1.sql', + 'pretty/joins-2.sql', + 'pretty/joins-3.sql', + 'pretty/joins-4.sql', + 'pretty/joins-5.sql', +]); + +prettyTest.generateTests();