Skip to content

Instantly share code, notes, and snippets.

@lu-zen
Created May 5, 2023 19:41
Show Gist options
  • Save lu-zen/4b3d72e8d3f3ae00708245c405236632 to your computer and use it in GitHub Desktop.
Save lu-zen/4b3d72e8d3f3ae00708245c405236632 to your computer and use it in GitHub Desktop.
edgedb unlessConflict rewrite error
module default {
abstract type Auditable {
required property created_at -> datetime {
readonly := true;
default := datetime_of_statement();
};
property updated_at -> datetime {
rewrite update using (
datetime_of_statement()
)
};
property deleted_at -> datetime;
# Constraints
delegated constraint expression on (
.deleted_at > .created_at
) except (not exists .deleted_at)
{
errmessage := "deleted_at can't occur before created_at"
};
delegated constraint expression on (
.updated_at >= .created_at
) except (not exists .updated_at)
{
errmessage := "updated_at can't occur before created_at"
};
}
type User extending Auditable {
required my_id -> int32 {
readonly := true;
constraint exclusive;
};
json_data -> json;
single link data -> UserData {
constraint exclusive;
};
constraint expression on (exists .data);
}
type UserData extending Auditable {
single link user := .<data[is User];
private_data -> str;
}
}
CREATE MIGRATION m1plwaggy3dihp3fcs6ad3ejpttbiwxfvr73audkpcsvzangoretsa
ONTO initial
{
CREATE FUTURE nonrecursive_access_policies;
CREATE ABSTRACT TYPE default::Auditable {
CREATE REQUIRED PROPERTY created_at: std::datetime {
SET default := (std::datetime_of_statement());
SET readonly := true;
};
CREATE PROPERTY updated_at: std::datetime {
CREATE REWRITE
UPDATE
USING (std::datetime_of_statement());
};
CREATE DELEGATED CONSTRAINT std::expression ON ((.updated_at >= .created_at)) EXCEPT (NOT (EXISTS (.updated_at))) {
SET errmessage := "updated_at can't occur before created_at";
};
CREATE PROPERTY deleted_at: std::datetime;
CREATE DELEGATED CONSTRAINT std::expression ON ((.deleted_at > .created_at)) EXCEPT (NOT (EXISTS (.deleted_at))) {
SET errmessage := "deleted_at can't occur before created_at";
};
};
CREATE TYPE default::User EXTENDING default::Auditable {
CREATE PROPERTY json_data: std::json;
CREATE REQUIRED PROPERTY my_id: std::int32 {
SET readonly := true;
CREATE CONSTRAINT std::exclusive;
};
};
CREATE TYPE default::UserData EXTENDING default::Auditable {
CREATE PROPERTY private_data: std::str;
};
ALTER TYPE default::User {
CREATE SINGLE LINK data: default::UserData {
CREATE CONSTRAINT std::exclusive;
};
CREATE CONSTRAINT std::expression ON (EXISTS (.data));
};
ALTER TYPE default::UserData {
CREATE SINGLE LINK user := (.<data[IS default::User]);
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment