Author: Dirk Olbertz, Fraunhofer ISST; modified by Leonidas Fegaras.
program ::= { C++code }
C++code ::= % oql ;
C++code ::= '{' program '}'
C++code ::= { C++token }
C++token ::= 'any token other than {, }, or %'
ODL_type ::= Id
ODL_type ::= set < ODL_type >
ODL_type ::= bag < ODL_type >
ODL_type ::= list < ODL_type >
oql ::= DEFINE Id [ ( [ Id {, Id } ] ) ] AS query
oql ::= DEFINE [ Id :: ] Id ( [ Id : ODL_type {, Id : ODL_type } ] ) : ODL_type as query
oql ::= MODULE Id
oql ::= destination := query
oql ::= destination += query
oql ::= destination -= query
oql ::= Id -= query
oql ::= Id : ODL_type
oql ::= FOR EACH Id IN query DO C++code
oql ::= PRINT query [ integer_literal ]
oql ::= CREATE INDEX Id ON Id ( Id {, Id } )
oql ::= DROP INDEX Id
oql ::= PRINT STATISTICS
oql ::= COLLECT STATISTICS
oql ::= OPTIONS Id = integer_literal {, Id = integer_literal }
oql ::= BEGIN
oql ::= COMMIT
oql ::= ABORT
oql ::= INITIALIZE
oql ::= CLEANUP
destination ::= query DOT Id
query ::= NIL
query ::= TRUE
query ::= FALSE
query ::= integer_literal
query ::= float_literal
query ::= string_literal
query ::= Id
query ::= ( query )
query ::= query + query
query ::= query - query
query ::= query * query
query ::= query / query
query ::= - query
query ::= query MOD query
query ::= ABS ( query )
query ::= query || query
query ::= query = query
query ::= query != query
query ::= query > query
query ::= query < query
query ::= query >= query
query ::= query <= query
query ::= query LIKE string_literal
query ::= IF query THEN query ELSE query
query ::= NOT query
query ::= query AND query
query ::= query OR query
query ::= Id ( [ query ] )
query ::= Id ( Id : query {, Id : query } )
query ::= PERSISTENT Id ( Id : query {, Id : query } )
query ::= STRUCT ( Id : query {, Id : query } )
query ::= SET ( [ query {, query } ] )
query ::= BAG ( [ query {, query } ] )
query ::= LIST ( [ query {, query} ] )
query ::= ( query , query {, query } )
query ::= [ LIST ] ( query .. query )
query ::= ARRAY ( [ query {, query } ] )
query ::= UNION ( Id : query )
query ::= query DOT Id
query ::= query DOT Id ( query {, query } )
query ::= * query
query ::= query [ query ]
query ::= query [ query : query ]
query ::= FIRST ( query )
query ::= LAST ( query )
query ::= Id ( [ query {, query } ] )
query ::= CASE query OF { Id : } query {, { Id : } query } [, DEFAULT : query ] END
query ::= FOR ALL Id IN query : query
query ::= EXISTS Id IN query : query
query ::= EXISTS ( query )
query ::= UNIQUE ( query )
query ::= query IN query
query ::= query comparison_operator quantifier query
query ::= COUNT ( query )
query ::= COUNT ( * )
query ::= SUM ( query )
query ::= MIN ( query )
query ::= MAX ( query )
query ::= AVG ( query )
query ::= SELECT [ DISTINCT ] projection_attributes
FROM variable_declaration {, variable_declaration }
[ WHERE query ]
[ GROUP BY partition_attributes ]
[ HAVING query ]
[ ORDER BY sort_criterion {, sort_criterion } ]
projection_attributes ::= projection {, projection }
projection_attributes ::= *
projection ::= query
projection ::= Id : query
projection ::= query AS Id
variable_declaration ::= query [ [ AS ] Id ]
variable_declaration ::= Id IN query
partition_attributes ::= projection {, projection }
sort_criterion ::= query [ ordering ]
ordering ::= ASC
ordering ::= DESC
query ::= query INTERSECT query
query ::= query UNION query
query ::= query EXCEPT query
query ::= LISTTOSET ( query )
query ::= ELEMENT ( query )
query ::= DISTINCT ( query )
query ::= FLATTEN ( query )
query ::= ( Id ) query
Last modified: 3/22/01 by Leonidas Fegaras