Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,195 changes: 3,657 additions & 538 deletions crates/squawk_fmt/src/fmt.rs

Large diffs are not rendered by default.

51 changes: 29 additions & 22 deletions crates/squawk_fmt/tests/after/create_table.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
source: crates/squawk_fmt/tests/tests.rs
input_file: crates/squawk_fmt/tests/before/create_table.sql
---
create table u();
create table u ();

create table t(
create table t (
a int,
b text
);

-- users table
create table users(id int);
create table users (id int);

-- columns that have various quoting requirements
create table cols(
create table cols (
"left" int,
"select" text,
data int,
Expand All @@ -23,48 +23,55 @@ create table cols(
);

-- table names
create table public.accounts(id int);
create table "Public"."Users"(id int);
create table foo.quoted_names(
create table public.accounts (id int);
create table "Public"."Users" (id int);
create table foo.quoted_names (
data int,
value text
);
create table "left"(id int);
create table "table"(id int);
create table U&"d\0061t\+000061"(id int);
create table U&"d!0061tum" uescape '!'(id int);
create table /* foo */ foo /* bar */./* buzz */ bar(id int);
create table "left" (id int);
create table "table" (id int);
create table U&"d\0061t\+000061" (id int);
create table U&"d!0061tum" uescape '!' (id int);
create table /* foo */ foo /* bar */./* buzz */ bar (id int);

-- comments inside a name node
create table U&"d!0061tum" /* mid */ uescape '!'(id int);
create table t(U&"c!006fl" /* c */ uescape '!' int);
create table t(U&"c!006fl" uescape /* c */ '!' int);
create table U&"d!0061tum" /* mid */ uescape '!' (id int);
create table t (U&"c!006fl" /* c */ uescape '!' int);
create table t (U&"c!006fl" uescape /* c */ '!' int);

-- comments inside a path
create table foo /*a*/ /*b*/.bar(id int);
create table foo /*a*/ /*b*/.bar (id int);
create table foo -- a line comment
.bar(id int);
.bar (id int);

-- comments between table args
create table t(
create table t (
a int /*x*/,
b int
);
create table t(
create table t (
/*a*/ a int,
/*b*/ b int /*c*/
);
create table t(
create table t (
a int -- one
,
b int
);
create table t(
create table t (
a int,
b int -- two

);

-- line comment before the semicolon
create table t(a int)-- one
create table t (a int)-- one
;

create table a_very_long_schema_name.a_very_long_table_name (
a_very_long_integer_column_name int,
a_very_long_text_column_name text,
a_very_long_qualified_type_column_name a_very_long_type_schema_name.a_very_long_type_name,
U&"c!006fl" uescape '!' a_very_long_type_schema_name.a_very_long_type_name
);
41 changes: 27 additions & 14 deletions crates/squawk_fmt/tests/after/create_table_like.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@
source: crates/squawk_fmt/tests/tests.rs
input_file: crates/squawk_fmt/tests/before/create_table_like.sql
---
create table t(like foo);
create table t(
create table t (like foo);
create table t (
like foo,
id int
);
create table t(
create table t (
id int,
like foo,
like bar
);

-- like options
create table t(like foo including all);
create table t(like foo excluding indexes);
create table t(
create table t (like foo including all);
create table t (like foo excluding indexes);
create table t (
like foo including defaults excluding constraints including identity
);
create table t(
create table t (
like foo
including comments
including compression
Expand All @@ -29,16 +29,29 @@ create table t(
);

-- table names
create table t(like public.accounts);
create table t(like "Public"."Users" including all);
create table t(like foo.bar);
create table t(like "select");
create table t(like U&"d!0061tum" uescape '!' including all);
create table t (like public.accounts);
create table t (like "Public"."Users" including all);
create table t (like foo.bar);
create table t (like "select");
create table t (like U&"d!0061tum" uescape '!' including all);

-- comments
create table t(like /* a */ foo /* b */ including /* c */ all);
create table t(
create table t (like /* a */ foo /* b */ including /* c */ all);
create table t (
like foo
-- a line comment
including all
);

create table a_very_long_destination_table_name (
like a_very_long_source_schema_name.a_very_long_source_table_name
including comments
including compression
including constraints
including defaults
including generated
including identity
including indexes
including statistics
including storage
);
4 changes: 4 additions & 0 deletions crates/squawk_fmt/tests/after/custom_operator.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,7 @@ input_file: crates/squawk_fmt/tests/before/custom_operator.sql
---
select 1 /*before*/ <<<< /*after*/ 1;
select ##### /*after*/ 1;
select
a_very_long_left_operand_name <<<< a_very_long_right_operand_name,
a_second_very_long_left_operand_name
##### a_second_very_long_right_operand_name;
31 changes: 28 additions & 3 deletions crates/squawk_fmt/tests/after/from.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,33 @@ input_file: crates/squawk_fmt/tests/before/from.sql
---
select * from foo;
select * from public.foo as f, bar b;
select * from users tablesample bernoulli(10) repeatable(42);
select
*
select * from foo as f (id, display_name);
select * from foo f (id int, display_name text collate "C");
select *
from foo /* before alias */ as /* before alias name */ f /* before open paren */ (
/* after open paren */ id /* before comma */,
/* after comma */ display_name /* before close paren */
);
select * from users tablesample bernoulli (10) repeatable (42);
select *
/* before from */ from /* before item */ only /* before relation */ public /* before dot */./* before table */ foo /* before star */ * /* before alias */ as /* before alias name */ f /* before item comma */,
/* before second item */ other /* before second alias */ o;

select *
from a_very_long_schema_name.a_very_long_relation_name as a_very_long_relation_alias (
a_very_long_first_column_alias,
a_very_long_second_column_alias,
a_very_long_third_column_alias
);
select *
from a_very_long_relation_name a_very_long_relation_alias (
a_very_long_first_column_name a_very_long_type_schema.a_very_long_first_type_name,
a_very_long_second_column_name a_very_long_type_schema.a_very_long_second_type_name collate a_very_long_collation_name
);
select *
from a_very_long_relation_name tablesample bernoulli (
a_very_long_sampling_percentage_expression
) repeatable (a_very_long_repeatable_seed_expression);
select *
from only a_very_long_schema_name.a_very_long_first_relation_name * as a_very_long_first_alias,
a_very_long_schema_name.a_very_long_second_relation_name as a_very_long_second_alias;
77 changes: 77 additions & 0 deletions crates/squawk_fmt/tests/after/graph_table.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
source: crates/squawk_fmt/tests/tests.rs
input_file: crates/squawk_fmt/tests/before/graph_table.sql
---
select * from graph_table(g match (a) columns (a));

select *
from lateral graph_table(
public.g
match
(a is person)-[e is knows where e.weight > 1]->(b)
where a.active
columns (a.name as person_name, b.name)
) as matches;

select *
from graph_table(
g
match
(a)<-[left_edge]-(b),
(c)-[any_edge]-(d),
(e)<-(f),
(h)->(i),
(j)-(k),
((x)->(y) where x.active)
columns (a)
);

select *
from graph_table(g match (a)->{1}(b), (c)-{, 3}(d), (e)-{2, 4}(f) columns (a));

select *
from graph_table(
a_very_long_property_graph_name
match
(a_very_long_vertex_variable
is a_very_long_vertex_label
where a_very_long_vertex_filter_expression)
-[a_very_long_edge_variable
is a_very_long_edge_label
where a_very_long_edge_filter_expression]->
(a_second_very_long_vertex_variable is a_second_very_long_vertex_label),
(a_third_very_long_vertex_variable)
-[a_second_very_long_edge_variable]-
(a_fourth_very_long_vertex_variable)
where a_very_long_graph_filter_expression
columns (
a_very_long_vertex_variable.long_property_name as first_long_output_column_name,
a_second_very_long_vertex_variable.other_long_property_name as second_output_column_name
)
);

select *
from /* before graph table */ graph_table /* before outer opening paren */(
/* before graph */ public /* before graph dot */./* before graph name */ g
/* before match */ match
/* before first vertex opening paren */ (/* before first variable */ a
/* before is */ is /* before first label */ person
/* before vertex where */ where /* before vertex expression */ a.active /* before first vertex closing paren */)
/* before first edge minus */ - /* before edge opening bracket */[/* before edge variable */ e
/* before edge is */ is /* before edge label */ knows
/* before edge where */ where /* before edge expression */ e.active /* before edge closing bracket */] /* before edge ending minus */- /* before right angle */>
/* before second vertex */ (b)/* before qualifier opening curly */ {/* before qualifier min */ 1 /* before qualifier comma */, /* before qualifier max */ 3 /* before qualifier closing curly */} /* before pattern comma */,
/* before second pattern */ /* before left angle */ < /* before left minus */- /* before left opening bracket */[left_edge /* before left closing bracket */] /* before left ending minus */-
(c),
(d)
/* before any edge */ - /* before any opening bracket */[any_edge /* before any closing bracket */] /* before any ending minus */-
(e),
/* before nested opening paren */ (/* before nested pattern */ (x)
/* before simple edge */ - /* before simple right angle */>
(y) /* before nested where */ where /* before nested expression */ x.active /* before nested closing paren */)
/* before graph where */ where /* before graph expression */ b.active
/* before columns */ columns /* before columns opening paren */(
/* before first column */ a.name /* before column as */ as /* before column name */ source /* before column comma */,
/* before second column */ b.name /* before columns closing paren */
) /* before outer closing paren */
) /* after graph table */ as /* before alias */ result;
38 changes: 31 additions & 7 deletions crates/squawk_fmt/tests/after/group_by.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,37 @@ source: crates/squawk_fmt/tests/tests.rs
input_file: crates/squawk_fmt/tests/before/group_by.sql
---
select 1 group by 1, foo + 2;
select 1 group by all rollup(1, 2), cube(3, 4);
select 1 group by distinct grouping sets((), (1, 2), rollup(3), cube(4));
select 1 group by all rollup (1, 2), cube (3, 4);
select 1 group by distinct grouping sets ((), (1, 2), rollup (3), cube (4));
select
1
group by grouping sets (
(first_very_long_grouping_expression, second_very_long_grouping_expression),
rollup (
third_very_long_grouping_expression,
fourth_very_long_grouping_expression
),
cube (
fifth_very_long_grouping_expression,
sixth_very_long_grouping_expression
)
);

select
1
group /* before by */ by /* before distinct */ distinct /* before grouping */ grouping /* before sets */ sets /* before outer paren */(/* before rollup */ rollup /* before rollup paren */(/* before first expression */ 1 /* before expression comma */,
/* before second expression */ 2 /* before rollup close */) /* before group-by comma */,
/* before cube */ cube /* before cube paren */(/* before cube expression */ 3 /* before cube close */) /* before second group-by comma */,
/* before nested grouping */ grouping /* before nested sets */ sets /* before nested paren */(/* before empty tuple */ () /* before nested comma */,
/* before grouping expression */ (4 /* before tuple comma */, /* before tuple expression */ 5 /* before tuple close */) /* before nested close */) /* before outer close */)/* before semicolon */;
group /* before by */ by /* before distinct */ distinct /* before grouping */ grouping /* before sets */ sets /* before outer paren */(
/* before rollup */ rollup /* before rollup paren */(
/* before first expression */ 1 /* before expression comma */,
/* before second expression */ 2 /* before rollup close */
) /* before group-by comma */,
/* before cube */ cube /* before cube paren */(
/* before cube expression */ 3 /* before cube close */
) /* before second group-by comma */,
/* before nested grouping */ grouping /* before nested sets */ sets /* before nested paren */(
/* before empty tuple */ () /* before nested comma */,
/* before grouping expression */ (
4 /* before tuple comma */,
/* before tuple expression */ 5 /* before tuple close */
) /* before nested close */
) /* before outer close */
)/* before semicolon */;
9 changes: 9 additions & 0 deletions crates/squawk_fmt/tests/after/select.snap
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,12 @@ select 1 foo, 2 "filter", 3 "day", 4 "array", 5 "Mixed";
select 1 as foo, 2 as filter, 3 as day, 4 as array;

select 1 /*a*/ group /* b */ by /*c */ 1;

select
a_very_long_first_target_expression as a_very_long_first_column_alias,
a_very_long_second_target_expression a_very_long_second_column_alias,
a_very_long_third_target_expression as "A Very Long Quoted Third Column Alias"
from a_very_long_schema_name.a_very_long_table_name as a_very_long_table_alias
group by a_very_long_first_target_expression,
a_very_long_second_target_expression,
a_very_long_third_target_expression;
Loading
Loading