{-# Language QuasiQuotes #-} module SQL where import Language.LBNF compile [$cf| antiquote "[" ":" ":]" ; entrypoints SqlStatement,BoolExpression,Value,TableName ; -- Statements DeleteStatement. SqlStatement ::= "DELETE" "FROM" TableName WhereClause ; WhereClause. WhereClause ::= "WHERE" BoolExpression; NoWhereClause. WhereClause ::= ; -- Names TableName. TableName ::= LocalOrSchemaQualifiedName ; ColumnName. ColumnName ::= LocalOrSchemaQualifiedName ; -- Expressions BoolOr. BoolExpression ::= BoolExpression "OR" BoolExpression1 ; BoolAnd. BoolExpression1 ::= BoolExpression1 "AND" BoolExpression2 ; BoolNeg. BoolExpression2 ::= "NOT" BoolExpression3 ; BoolIsNot. BoolExpression3 ::= BoolExpression4 "IS" "NOT" TruthValue ; BoolIs. BoolExpression3 ::= BoolExpression4 "IS" TruthValue ; BoolVal. BoolExpression4 ::= RowValuePredicand CompOp RowValuePredicand ; _. BoolExpression4 ::= "(" BoolExpression ")" ; -- | -- Lots of other predicates go here... _. BoolExpression ::= BoolExpression1 ; _. BoolExpression1 ::= BoolExpression2 ; _. BoolExpression2 ::= BoolExpression3 ; _. BoolExpression3 ::= BoolExpression4 ; ValuePredicand . RowValuePredicand ::= Value ; ColumnReferencePredicand . RowValuePredicand ::= ColumnName ; -- -- -- TRUE. TruthValue ::= "TRUE" ; FALSE. TruthValue ::= "FALSE" ; UNKNOWN. TruthValue ::= "UNKNOWN" ; -- Comparison operators EqualsOp. CompOp ::= "=" ; NotEqualsOp. CompOp ::= "><" ; LessThanOperator. CompOp ::= "<" ; GreaterThanOp. CompOp ::= ">" ; LessThanOrEqualsOp. CompOp ::= "<=" ; GreaterThanOrEqualsOp. CompOp ::= ">=" ; -- Data StringValue. Value ::= String ; IntValue. Value ::= Integer ; DoubleValue. Value ::= Double ; -- -- -- -- -- -- Tokens token LocalOrSchemaQualifiedName (letter (letter | digit)* '.')* letter (letter | digit)* ; |]