Skip to content

Commit 03b25e7

Browse files
authored
linter: undo foreign key constraint check in create table (#962)
rel: #938 (comment)
1 parent c31acc7 commit 03b25e7

14 files changed

Lines changed: 9 additions & 115 deletions

β€Žcrates/squawk_linter/src/rules/adding_foreign_key_constraint.rsβ€Ž

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -74,42 +74,9 @@ pub(crate) fn adding_foreign_key_constraint(ctx: &mut Linter, parse: &Parse<Sour
7474
}
7575
}
7676
}
77-
ast::Stmt::CreateTable(create_table) => {
78-
if let Some(table_arg_list) = create_table.table_arg_list() {
79-
for arg in table_arg_list.args() {
80-
match arg {
81-
ast::TableArg::TableConstraint(
82-
ast::TableConstraint::ForeignKeyConstraint(fk),
83-
) => {
84-
ctx.report(
85-
Violation::for_node(
86-
Rule::AddingForeignKeyConstraint,
87-
message.into(),
88-
fk.syntax(),
89-
)
90-
.help(help),
91-
);
92-
}
93-
ast::TableArg::Column(column) => {
94-
for constraint in column.constraints() {
95-
if let ast::ColumnConstraint::ReferencesConstraint(refs) =
96-
constraint
97-
{
98-
ctx.report(
99-
Violation::for_node(
100-
Rule::AddingForeignKeyConstraint,
101-
message.into(),
102-
refs.syntax(),
103-
)
104-
.help(help),
105-
);
106-
}
107-
}
108-
}
109-
_ => (),
110-
}
111-
}
112-
}
77+
ast::Stmt::CreateTable(_) => {
78+
// NOTE: we don't consider foreign key constraints in create
79+
// table stmts as there are no rows in the current table.
11380
}
11481
_ => (),
11582
}
@@ -129,6 +96,8 @@ mod test {
12996

13097
#[test]
13198
fn create_table_with_foreign_key_constraint() {
99+
// Okay as there are no rows in the current table. We'll take a share
100+
// row exclusive lock on the related table but won't hold it for long.
132101
let sql = r#"
133102
BEGIN;
134103
CREATE TABLE email (
@@ -143,19 +112,21 @@ CREATE TABLE email (
143112
COMMIT;
144113
"#;
145114

146-
assert_snapshot!(lint_errors(sql, Rule::AddingForeignKeyConstraint));
115+
lint_ok(sql, Rule::AddingForeignKeyConstraint);
147116
}
148117

149118
#[test]
150119
fn create_table_with_column_references() {
120+
// Okay as there are no rows in the current table. We'll take a share
121+
// row exclusive lock on the related table but won't hold it for long.
151122
let sql = r#"
152123
CREATE TABLE table_name (
153124
id BIGSERIAL NOT NULL,
154125
my_fk_id INTEGER NOT NULL REFERENCES other_table (id) ON DELETE CASCADE
155126
);
156127
"#;
157128

158-
assert_snapshot!(lint_errors(sql, Rule::AddingForeignKeyConstraint));
129+
lint_ok(sql, Rule::AddingForeignKeyConstraint);
159130
}
160131

161132
#[test]

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__add_numbers_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_bool_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_empty_array_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_enum_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_func_current_timestamp_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_func_now_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_jsonb_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_str_ok.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

β€Žcrates/squawk_linter/src/rules/snapshots/squawk_linter__rules__adding_field_with_default__test__default_with_const_bin_expr.snapβ€Ž

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
Β (0)