Skip to content

Commit

Permalink
Fix relation_fields validation to accept primary key indexes
Browse files Browse the repository at this point in the history
  • Loading branch information
yubrot committed Oct 23, 2023
1 parent cdd7f4c commit 70b2cbc
Showing 1 changed file with 20 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -267,23 +267,27 @@ pub(super) fn validate_missing_relation_indexes(relation_field: RelationFieldWal
// Considers all groups of indexes explicitly declared in the given model.
// An index group can be:
// - a singleton (@unique or @id)
// - an ordered set (@@unique or @@index)
let index_field_groups = model.indexes();

let referencing_fields_appear_in_index = index_field_groups
.map(|index_walker| index_walker.fields().map(|index| index.field_id()))
.any(|index_fields_it| {
let fields_it = referencing_fields_it.clone();
is_leftwise_included_it(fields_it, index_fields_it)
});

if !referencing_fields_appear_in_index {
let ast_field = relation_field.ast_field();
let span = ast_field
.span_for_attribute("relation")
.unwrap_or_else(|| ast_field.span());
ctx.push_warning(DatamodelWarning::new_missing_index_on_emulated_relation(span));
// - an ordered set (@@unique, @@index, or @@id)
for index_walker in model.indexes() {
let index_fields_it = index_walker.fields().map(|col| col.field_id());
let referencing_fields_it = referencing_fields_it.clone();
if is_leftwise_included_it(referencing_fields_it, index_fields_it) {
return;
}
}

if let Some(primary_key_walker) = model.primary_key() {
let primary_key_fields_it = primary_key_walker.fields().map(|col| col.field_id());
if is_leftwise_included_it(referencing_fields_it, primary_key_fields_it) {
return;
}
}

let ast_field = relation_field.ast_field();
let span = ast_field
.span_for_attribute("relation")
.unwrap_or_else(|| ast_field.span());
ctx.push_warning(DatamodelWarning::new_missing_index_on_emulated_relation(span));
}
}

Expand Down

0 comments on commit 70b2cbc

Please sign in to comment.