I'm not familiar with a standard database feature to allow that mode, but it sounds like you are referencing an extra annotation on constraints. Somehow this situation has only come up once in the 10+ years of Ur/Web's existence, and it's never been an issue for my own Ur/Web apps.

On 04/02/2017 10:10 AM, Marko Schütz Schmuck wrote:
On Sun, 02 Apr 2017 09:02:15 -0400,
Adam Chlipala wrote:
Actually, Ur/Web won't even accept those table definitions: no mutually 
recursive
definitions yet, w.r.t. constraints.  And I haven't thought before about 
allowing
temporary breaking of constraints.
"Constraints hold after every statement" -> "Constraints hold after
every transaction"?

On 04/02/2017 08:35 AM, Marko Schütz Schmuck wrote:
If I have tables

table chicken : { Id : int, Egg : int }
        PRIMARY KEY (Id),
        CONSTRAINT egg FOREIGN KEY Egg REFERENCES egg(Id)

table egg : { Id : int, Chicken : int }
        PRIMARY KEY (Id),
        CONSTRAINT chicken FOREIGN KEY Chicken REFERENCES chicken(Id)

Outside of Ur/Web this would be solved by setting the constraints
DEFERRABLE INITIALLY DEFERRED and do the INSERTs pairwise inside a
single transaction.

I doubt that there currently is a way to do this in Ur/Web since there
is neither a way to specify DEFERRABLE INITIALLY DEFERRED nor a way to
explicitly form transactions.

Would it be enough to introduce an operator

dml_sequence : dml -> dml -> dml

allowing two dml statements to be composed and run in a single
transaction together with exposing DEFERRABLE INITIALLY DEFERRED at
the Ur/Web language level?

Best regards,

Marko
_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur


_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to