File size: 5,098 Bytes
0c77d6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
======
eparen
======

select (f).getAThing()

---

(ql (moduleMember (select (asExprs (asExpr (qualified_expr (par_expr (variable (varName (simpleId)))) (qualifiedRhs (predicateName))))))))

=====
super
=====

select super.foo(), module::Foo.super.foo()

---

(ql (moduleMember
  (select
    (asExprs
      (asExpr (qualified_expr (super_ref (super)) (qualifiedRhs (predicateName))))
      (asExpr (qualified_expr (super_ref (typeExpr (moduleExpr (simpleId)) (className)) (super)) (qualifiedRhs (predicateName))))))))

============
postfix cast
============

select f.(Foo).thing()

---

(ql (moduleMember (select (asExprs (asExpr (qualified_expr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (typeExpr (className)))) (qualifiedRhs (predicateName))))))))

===
any
===

select
  any(Foo f),
  any(Foo f | f = f),
  any(Foo f | | f.thing()),
  any(Foo f | f = f | f.thing())

---

(ql (moduleMember (select (asExprs
  (asExpr (aggregate (aggId) (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId))))))
  (asExpr (aggregate (aggId) (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId)))
    (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId)))))))
  (asExpr (aggregate (aggId)
    (full_aggregate_body
      (varDecl (typeExpr (className)) (varName (simpleId)))
      (asExprs (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))
  (asExpr (aggregate (aggId) (full_aggregate_body
    (varDecl (typeExpr (className))
      (varName (simpleId)))
      (comp_term (variable (varName (simpleId))) (compop) (variable (varName (simpleId))))
      (asExprs (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))))))


=====
range
=====

select [0..10]

---

(ql (moduleMember (select (asExprs (asExpr (range (literal (integer)) (literal (integer))))))))

==========
aggregates
==========

select
  rank[123](Foo f),
  count(f.thing()),
  count(f.thing() as thing order by thing asc, thing desc),
  count(Foo f),
  count(f),
  count (| | f),
  count(),
  count(Foo f | f.thing() ),
  sum(Foo f | | f.x() ),
  sum(Foo f | | f.x() as x),
  sum(Foo f | | f.x() as x order by x),
  sum(Foo f | | f.x() as x order by x asc, f.y()),
  sum(Foo f | f.thing() | f.x() )

---

  (ql (moduleMember (select  (asExprs
    (asExpr (aggregate (aggId) (literal (integer))
      (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId))))))
    (asExpr (aggregate (aggId)
      (expr_aggregate_body (asExprs (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))
    (asExpr (aggregate (aggId)
      (expr_aggregate_body (asExprs
        (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) (varName (simpleId))))
        (orderBys
        (orderBy (variable (varName (simpleId))) (direction))
        (orderBy (variable (varName (simpleId))) (direction))))))
    (asExpr (aggregate (aggId) (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId))))))
    (asExpr (aggregate (aggId) (expr_aggregate_body (asExprs (asExpr (variable (varName (simpleId))))))))
    (asExpr (aggregate (aggId) (full_aggregate_body (asExprs (asExpr (variable (varName (simpleId))))))))
    (asExpr (aggregate (aggId)))
    (asExpr (aggregate (aggId)
      (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId)))
        (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))
    (asExpr (aggregate (aggId)
      (full_aggregate_body
        (varDecl (typeExpr (className))
        (varName (simpleId)))
        (asExprs
        (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))
    (asExpr (aggregate (aggId)
      (full_aggregate_body
        (varDecl (typeExpr (className)) (varName (simpleId)))
        (asExprs
          (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) (varName (simpleId)))))))
    (asExpr (aggregate (aggId) (full_aggregate_body
      (varDecl (typeExpr (className)) (varName (simpleId)))
      (asExprs
        (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) (varName (simpleId))))
        (orderBys  (orderBy (variable (varName (simpleId))))))))
    (asExpr (aggregate (aggId)
      (full_aggregate_body (varDecl (typeExpr (className)) (varName (simpleId)))
        (asExprs (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))) (varName (simpleId))))
        (orderBys
          (orderBy (variable (varName (simpleId))) (direction))
          (orderBy (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))
    (asExpr (aggregate (aggId) (full_aggregate_body
      (varDecl (typeExpr (className)) (varName (simpleId)))
      (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName)))
      (asExprs (asExpr (qualified_expr (variable (varName (simpleId))) (qualifiedRhs (predicateName))))))))))))