Skip to content

SchemaError when squashing migrations with alias including nested backlink expansions #9106

@Yperidis

Description

@Yperidis

Possibly related to #8979 when using Gel version 6.1 (a similar stack trace is generated at the second migration step described below)

Gel version: 6.11+66a1377
Gel CLI version: 7.9.0+070b371
OS Version: Ubuntu 22.04.5 LTS

Steps to Reproduce:

File structure:

alias_err_mwe/
----dbschema/
      ----aliases.gel
      ----config/
      ----default.gel
      ----futures.gel
  1. Create a schema and an alias file as indicated below.
  2. Comment out the "Veterinary" and "Supplier" objects in the default.gel file, as well as the expanded (wildcard block) contents of the alias file and migrate. Then uncomment and migrate again. Squash as gel migration create --squash -I alias_err_mwe. Migrate some changes and squash the two migration files. A gel error: SchemaError: link 'veterinaries' of object type 'aliases::DogActive' already exists is generated.

Schema:

module default{
    type Dog{
        required dog_id: str;
        dog_name: str;
        deleted: bool {
            default := false;
        }

        link owner: Owner{
            on source delete delete target if orphan
        }
        multi veterinaries := .<dogs[is default::Veterinary];
    }

    type Owner{
        required owner_id: str;
        ent_name: str;

        multi link entity := .<owner[is Dog];
    }

    type Veterinary{
        required multi dogs: default::Dog {
            on target delete delete source;
        }
        required vet_id: str;
        vet_name: str;
        deleted: bool {
            default := false;
        }

        multi supplier := .<veterinary[is default::Supplier];
    }

    type Supplier{
        required link veterinary: default::Veterinary {
           on target delete delete source;
        }
        required supplier_id: str;
        supplier_name: str;
        deleted: bool {
            default := false;
        }
    }
};

Alias:

module aliases {
    alias DogActive := (
        select default::Dog {*,
                                veterinaries: {*,
                                supplier: {*} filter .deleted = false,
                                }
                                filter .deleted = False
        }
        filter .deleted = False
        );
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions