Mercurial > urweb
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 |