ziv@2203: signature SQL = sig ziv@2203: ziv@2203: val debug : bool ref ziv@2203: ziv@2213: val sqlcacheMode : bool ref ziv@2213: ziv@2215: datatype chunk = ziv@2215: String of string ziv@2215: | Exp of Mono.exp ziv@2215: ziv@2215: val chunkify : Mono.exp -> chunk list ziv@2215: ziv@2204: type lvar = int ziv@2203: ziv@2203: datatype func = ziv@2203: DtCon0 of string ziv@2203: | DtCon1 of string ziv@2203: | UnCon of string ziv@2203: | Other of string ziv@2203: ziv@2203: datatype exp = ziv@2203: Const of Prim.t ziv@2203: | Var of int ziv@2203: | Lvar of lvar ziv@2203: | Func of func * exp list ziv@2203: | Recd of (string * exp) list ziv@2203: | Proj of exp * string ziv@2203: ziv@2216: datatype cmp = ziv@2216: Eq ziv@2203: | Ne ziv@2203: | Lt ziv@2203: | Le ziv@2203: | Gt ziv@2203: | Ge ziv@2203: ziv@2216: datatype reln = ziv@2216: Known ziv@2216: | Sql of string ziv@2216: | PCon0 of string ziv@2216: | PCon1 of string ziv@2216: | Cmp of cmp ziv@2216: ziv@2216: datatype lop = ziv@2216: And ziv@2216: | Or ziv@2216: ziv@2203: datatype prop = ziv@2203: True ziv@2203: | False ziv@2203: | Unknown ziv@2216: | Lop of lop * prop * prop ziv@2203: | Reln of reln * exp list ziv@2203: | Cond of exp * prop ziv@2203: ziv@2212: type 'a parser ziv@2204: ziv@2204: val parse : 'a parser -> Mono.exp -> 'a option ziv@2203: ziv@2203: datatype Rel = ziv@2216: RCmp of cmp ziv@2216: | RLop of lop ziv@2203: ziv@2203: datatype sqexp = ziv@2203: SqConst of Prim.t ziv@2203: | SqTrue ziv@2203: | SqFalse ziv@2203: | SqNot of sqexp ziv@2203: | Field of string * string ziv@2203: | Computed of string ziv@2203: | Binop of Rel * sqexp * sqexp ziv@2203: | SqKnown of sqexp ziv@2203: | Inj of Mono.exp ziv@2203: | SqFunc of string * sqexp ziv@2203: | Unmodeled ziv@2203: | Null ziv@2203: ziv@2204: datatype ('a,'b) sum = inl of 'a | inr of 'b ziv@2204: ziv@2203: datatype sitem = ziv@2203: SqField of string * string ziv@2203: | SqExp of sqexp * string ziv@2203: ziv@2204: type query1 = {Select : sitem list, ziv@2204: From : (string * string) list, ziv@2204: Where : sqexp option} ziv@2203: ziv@2203: datatype query = ziv@2203: Query1 of query1 ziv@2203: | Union of query * query ziv@2203: ziv@2204: val query : query parser ziv@2204: ziv@2203: datatype dml = ziv@2203: Insert of string * (string * sqexp) list ziv@2203: | Delete of string * sqexp ziv@2203: | Update of string * (string * sqexp) list * sqexp ziv@2203: ziv@2204: val dml : dml parser ziv@2204: ziv@2203: end