comparison lib/basis.lig @ 233:c466678af854

SELECTing arbitrary expressions
author Adam Chlipala <adamc@hcoop.net>
date Thu, 28 Aug 2008 11:17:14 -0400
parents a338da9d82f3
children 82409ef72019
comparison
equal deleted inserted replaced
232:a338da9d82f3 233:c466678af854
11 11
12 con sql_table :: {Type} -> Type 12 con sql_table :: {Type} -> Type
13 13
14 (*** Queries *) 14 (*** Queries *)
15 15
16 con sql_query :: {{Type}} -> Type 16 con sql_query :: {{Type}} -> {Type} -> Type
17 con sql_query1 :: {{Type}} -> {{Type}} -> Type 17 con sql_query1 :: {{Type}} -> {{Type}} -> {Type} -> Type
18 con sql_exp :: {{Type}} -> {{Type}} -> Type -> Type 18 con sql_exp :: {{Type}} -> {{Type}} -> Type -> Type
19 19
20 con sql_subset :: {{Type}} -> {{Type}} -> Type 20 con sql_subset :: {{Type}} -> {{Type}} -> Type
21 val sql_subset : keep_drop :: {({Type} * {Type})} 21 val sql_subset : keep_drop :: {({Type} * {Type})}
22 -> sql_subset 22 -> sql_subset
29 val sql_subset_all : tables :: {{Type}} 29 val sql_subset_all : tables :: {{Type}}
30 -> sql_subset tables tables 30 -> sql_subset tables tables
31 31
32 val sql_query1 : tables ::: {{Type}} 32 val sql_query1 : tables ::: {{Type}}
33 -> grouped ::: {{Type}} 33 -> grouped ::: {{Type}}
34 -> selected ::: {{Type}} 34 -> selectedFields ::: {{Type}}
35 -> selectedExps ::: {Type}
35 -> {From : $(fold (fn nm => fn fields :: {Type} => fn acc => 36 -> {From : $(fold (fn nm => fn fields :: {Type} => fn acc =>
36 [nm] ~ acc => [nm = sql_table fields] ++ acc) [] tables), 37 [nm] ~ acc => [nm = sql_table fields] ++ acc) [] tables),
37 Where : sql_exp tables [] bool, 38 Where : sql_exp tables [] bool,
38 GroupBy : sql_subset tables grouped, 39 GroupBy : sql_subset tables grouped,
39 Having : sql_exp grouped tables bool, 40 Having : sql_exp grouped tables bool,
40 SelectFields : sql_subset grouped selected} 41 SelectFields : sql_subset grouped selectedFields,
41 -> sql_query1 tables selected 42 SelectExps : $(fold (fn nm => fn t :: Type => fn acc =>
43 [nm] ~ acc => [nm = sql_exp grouped tables t] ++ acc) [] selectedExps) }
44 -> sql_query1 tables selectedFields selectedExps
42 45
43 type sql_relop 46 type sql_relop
44 val sql_union : sql_relop 47 val sql_union : sql_relop
45 val sql_intersect : sql_relop 48 val sql_intersect : sql_relop
46 val sql_except : sql_relop 49 val sql_except : sql_relop
47 val sql_relop : sql_relop 50 val sql_relop : sql_relop
48 -> tables1 ::: {{Type}} 51 -> tables1 ::: {{Type}}
49 -> tables2 ::: {{Type}} 52 -> tables2 ::: {{Type}}
50 -> selected ::: {{Type}} 53 -> selectedFields ::: {{Type}}
51 -> sql_query1 tables1 selected -> sql_query1 tables2 selected -> sql_query1 selected selected 54 -> selectedExps ::: {Type}
55 -> sql_query1 tables1 selectedFields selectedExps
56 -> sql_query1 tables2 selectedFields selectedExps
57 -> sql_query1 selectedFields selectedFields selectedExps
52 58
53 type sql_direction 59 type sql_direction
54 val sql_asc : sql_direction 60 val sql_asc : sql_direction
55 val sql_desc : sql_direction 61 val sql_desc : sql_direction
56 62
67 type sql_offset 73 type sql_offset
68 val sql_no_offset : sql_offset 74 val sql_no_offset : sql_offset
69 val sql_offset : int -> sql_offset 75 val sql_offset : int -> sql_offset
70 76
71 val sql_query : tables ::: {{Type}} 77 val sql_query : tables ::: {{Type}}
72 -> selected ::: {{Type}} 78 -> selectedFields ::: {{Type}}
73 -> {Rows : sql_query1 tables selected, 79 -> selectedExps ::: {Type}
80 -> {Rows : sql_query1 tables selectedFields selectedExps,
74 OrderBy : sql_order_by tables, 81 OrderBy : sql_order_by tables,
75 Limit : sql_limit, 82 Limit : sql_limit,
76 Offset : sql_offset} 83 Offset : sql_offset}
77 -> sql_query selected 84 -> sql_query selectedFields selectedExps
78 85
79 val sql_field : otherTabs ::: {{Type}} -> otherFields ::: {Type} -> fieldType ::: Type -> agg ::: {{Type}} 86 val sql_field : otherTabs ::: {{Type}} -> otherFields ::: {Type} -> fieldType ::: Type -> agg ::: {{Type}}
80 -> tab :: Name -> field :: Name 87 -> tab :: Name -> field :: Name
81 -> sql_exp ([tab = [field = fieldType] ++ otherFields] ++ otherTabs) agg fieldType 88 -> sql_exp ([tab = [field = fieldType] ++ otherFields] ++ otherTabs) agg fieldType
82 89