Created
May 5, 2023 19:41
-
-
Save lu-zen/4b3d72e8d3f3ae00708245c405236632 to your computer and use it in GitHub Desktop.
edgedb unlessConflict rewrite error
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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