[Ur] (minor) hidden table constraints
Adam Chlipala
adamc at csail.mit.edu
Mon Nov 4 16:03:28 EST 2013
On 10/17/2013 09:26 AM, Adam Chlipala wrote:
> With (1), you can do (in Template.urs):
> con product_constraints :: {{Unit}}
> constraint [Pkey] ~ product_constraints
> val product : sql_table [Id = int, Caption = string, Slogan =
> string, Logo = string, PageId = int]
> ([Pkey = [Id]] ++ product_constraints)
>
> It might be worth extending the [table] syntactic sugar to do
> something like the above automatically; maybe I'll try it later.
OK, I've now pushed that extension, and it seems to work well! Here's
an example, demonstrating a kind of subtyping over the constraints of
tables. That is, a table may be considered to implement a signature
item that only declares a subset (possibly empty) of the full constraint
set.
functor F(M : sig
table t : { A : int, B : int }
PRIMARY KEY A
end) = struct
open M
fun getByA a = oneRow1 (SELECT * FROM t WHERE t.A = {[a]})
end
table u : { A : int, B : int }
PRIMARY KEY A,
CONSTRAINT B UNIQUE B
open F(struct
val t = u
end)
More information about the Ur
mailing list