Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 1 | Expr ::= OperatorExpr | QuantifiedExpr |
| 2 | |
| 3 | OperatorExpr ::= PathExpr |
| 4 | | Operator OperatorExpr |
| 5 | | OperatorExpr Operator OperatorExpr? |
| 6 | | OperatorExpr "BETWEEN" OperatorExpr "AND" OperatorExpr |
| 7 | |
ggalvizo | 21e5282 | 2021-07-27 10:26:31 -1000 | [diff] [blame] | 8 | QuantifiedExpr::= ( "SOME" | "EVERY" | ( "SOME" "AND" "EVERY" ) ) Variable "IN" Expr ( "," Variable "IN" Expr )* "SATISFIES" Expr ("END")? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 9 | |
| 10 | PathExpr ::= PrimaryExpr ("." Identifier | "[" Expr (":" (Expr)? )? "]")* |
| 11 | |
| 12 | PrimaryExpr ::= Literal |
| 13 | |VariableRef |
| 14 | |ParameterRef |
| 15 | |ParenthesizedExpr |
| 16 | |FunctionCall |
| 17 | |CaseExpr |
| 18 | |Constructor |
| 19 | |
| 20 | Literal ::= StringLiteral |
| 21 | |IntegerLiteral |
| 22 | |FloatLiteral |
| 23 | |DoubleLiteral |
| 24 | |"NULL" |
| 25 | |"MISSING" |
| 26 | |"TRUE" |
| 27 | |"FALSE" |
| 28 | |
| 29 | ParenthesizedExpr ::= ("(" Expr ")") | Subquery |
| 30 | |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 31 | FunctionCall ::= OrdinaryFunctionCall | AggregateFunctionCall | WindowFunctionCall |
| 32 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 33 | OrdinaryFunctionCall ::= (DataverseName ".")? Identifier "(" Expr ("," Expr)* ")" |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 34 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 35 | AggregateFunctionCall ::= Identifier "(" ("DISTINCT")? Expr ")" ("FILTER" "(" "WHERE" Expr ")")? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 36 | |
| 37 | CaseExpr ::= SimpleCaseExpr | SearchedCaseExpr |
| 38 | |
| 39 | SimpleCaseExpr ::= "CASE" Expr ("WHEN" Expr "THEN" Expr)+ ("ELSE" Expr)? "END" |
| 40 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 41 | SearchedCaseExpr ::= "CASE" ("WHEN" Expr "THEN" Expr)+ ("ELSE" Expr)? "END" |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 42 | |
Dmitry Lychagin | e963059 | 2021-08-30 15:29:30 -0700 | [diff] [blame] | 43 | Constructor ::= ObjectConstructor | ArrayConstructor | ParenthesizedArrayConstructor | MultisetConstructor |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 44 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 45 | ObjectConstructor ::= "{" ( Expr ( ":" Expr )? ( "," Expr ( ":" Expr )? )* )? "}" |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 46 | |
| 47 | ArrayConstructor ::= "[" Expr ("," Expr)* "]" |
| 48 | |
Dmitry Lychagin | e963059 | 2021-08-30 15:29:30 -0700 | [diff] [blame] | 49 | ParenthesizedArrayConstructor ::= "(" Expr ("," Expr)+ ")" |
| 50 | |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 51 | MultisetConstructor ::= "{{" Expr ("," Expr)* "}}" |
| 52 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 53 | Query ::= (Expr | Selection) |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 54 | |
Dmitry Lychagin | 214ff55 | 2021-07-22 18:55:41 -0700 | [diff] [blame] | 55 | Selection ::= (WithClause | LetClause)? QueryBlock UnionOption* OrderByClause? ( LimitClause | OffsetClause )? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 56 | |
Dmitry Lychagin | 214ff55 | 2021-07-22 18:55:41 -0700 | [diff] [blame] | 57 | QueryBlock ::= SelectClause ( ( LetClause WhereClause? ) | StreamGenerator )? |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 58 | | StreamGenerator SelectClause |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 59 | |
| 60 | StreamGenerator::= FromClause LetClause? WhereClause? (GroupByClause LetClause? HavingClause?)? |
| 61 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 62 | SelectClause ::= "SELECT" ("DISTINCT" | "ALL")? ( "VALUE" Expr | Projection ("," Projection)*) |
| 63 | |
| 64 | Projection ::= (Expr ("AS"? Identifier)?) | (VariableRef "." "*") | "*" |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 65 | |
| 66 | FromClause ::= "FROM" FromTerm ("," FromTerm)* |
| 67 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 68 | FromTerm ::= NamedExpr (JoinStep | UnnestStep)* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 69 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 70 | NamedExpr ::= Expr ("AS"? Variable)? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 71 | |
Dmitry Lychagin | d3eccd4 | 2021-08-19 12:18:17 -0700 | [diff] [blame] | 72 | JoinStep ::= ( ("INNER" | ( ( "LEFT" | "RIGHT" ) "OUTER"?))? "JOIN" NamedExpr "ON" Expr ) | |
| 73 | ( "CROSS" "JOIN" NamedExpr ) |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 74 | |
| 75 | UnnestStep ::= ("INNER" | ( "LEFT" "OUTER"?))? "UNNEST" NamedExpr |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 76 | |
| 77 | LetClause ::= "LET" Variable "=" Expr ("," Variable "=" Expr)* |
| 78 | |
| 79 | WhereClause ::= "WHERE" Expr |
| 80 | |
Dmitry Lychagin | 8bcc6d2 | 2021-01-25 16:39:18 -0800 | [diff] [blame] | 81 | GroupByClause ::= "GROUP BY" GroupingElement ("," GroupingElement)* GroupAsClause? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 82 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 83 | GroupingElement ::= OrdinaryGroupingSet |
Dmitry Lychagin | 8bcc6d2 | 2021-01-25 16:39:18 -0800 | [diff] [blame] | 84 | | ( "GROUPING" "SETS" "(" GroupingElement ("," GroupingElement)* ")" ) |
| 85 | | ( ( "ROLLUP" | "CUBE" ) "(" OrdinaryGroupingSet ( "," OrdinaryGroupingSet )* ")" ) |
| 86 | | ( "(" ")" ) |
| 87 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 88 | OrdinaryGroupingSet ::= NamedExpr | ( "(" NamedExpr ( "," NamedExpr )* ")") |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 89 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 90 | GroupAsClause ::= "GROUP AS" Variable |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 91 | |
Dmitry Lychagin | 8bcc6d2 | 2021-01-25 16:39:18 -0800 | [diff] [blame] | 92 | HavingClause ::= "HAVING" Expr |
| 93 | |
Dmitry Lychagin | 6fd8ab3 | 2020-12-03 09:04:14 -0800 | [diff] [blame] | 94 | Selection ::= WithClause? QueryBlock UnionOption* OrderByClause? ( LimitClause | OffsetClause )? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 95 | |
| 96 | UnionOption ::= "UNION ALL" (QueryBlock | Subquery) |
| 97 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 98 | WithClause ::= "WITH" Variable "AS" Expr ("," Variable "AS" Expr)* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 99 | |
Dmitry Lychagin | e5e3ad9 | 2021-07-15 12:44:47 -0700 | [diff] [blame] | 100 | OrderbyClause ::= "ORDER BY" Expr ( "ASC" | "DESC" )? ( "NULLS" ( "FIRST" | "LAST" ) )? ( "," Expr ( "ASC" | "DESC" )? ( "NULLS" ( "FIRST" | "LAST" ) )? )* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 101 | |
Dmitry Lychagin | 761c9a6 | 2020-11-19 10:22:11 -0800 | [diff] [blame] | 102 | LimitClause ::= "LIMIT" Expr OffsetClause? |
| 103 | |
| 104 | OffsetClause ::= "OFFSET" Expr |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 105 | |
| 106 | Subquery ::= "(" Selection ")" |
| 107 | |
| 108 | WindowFunctionCall ::= WindowFunctionType "(" WindowFunctionArguments ")" WindowFunctionOptions? "OVER" (Variable "AS")? "(" WindowDefinition")" |
| 109 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 110 | WindowFunctionType ::= AggregateFunction | WindowFunction |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 111 | |
| 112 | WindowFunctionArguments ::= ( ("DISTINCT")? Expr | (Expr ("," Expr ("," Expr)? )? )? ) |
| 113 | |
| 114 | WindowFunctionOptions ::= ("FROM" ( "FIRST" | "LAST" ))? (( "RESPECT" | "IGNORE" ) "NULLS")? |
| 115 | |
| 116 | WindowDefinition ::= WindowPartitionClause? (WindowOrderClause (WindowFrameClause WindowFrameExclusion?)?)? |
| 117 | |
| 118 | WindowPartitionClause ::= "PARTITION" "BY" Expr ("," Expr)* |
| 119 | |
Dmitry Lychagin | e5e3ad9 | 2021-07-15 12:44:47 -0700 | [diff] [blame] | 120 | WindowOrderClause ::= "ORDER" "BY" Expr ("ASC" | "DESC")? ( "NULLS" ( "FIRST" | "LAST" ) )? ("," Expr ("ASC" | "DESC")? ( "NULLS" ( "FIRST" | "LAST" ) )? )* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 121 | |
| 122 | WindowFrameClause ::= ("ROWS" | "RANGE" | "GROUPS") WindowFrameExtent |
| 123 | |
| 124 | WindowFrameExtent ::= ( ( "UNBOUNDED" | Expr ) "PRECEDING" | "CURRENT" "ROW" ) | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 125 | "BETWEEN" ( "UNBOUNDED" "PRECEDING" | "CURRENT" "ROW" | Expr ( "PRECEDING" | "FOLLOWING" ) ) |
| 126 | "AND" ( "UNBOUNDED" "FOLLOWING" | "CURRENT" "ROW" | Expr ( "PRECEDING" | "FOLLOWING" ) ) |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 127 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 128 | WindowFrameExclusion ::= "EXCLUDE" ( "CURRENT" "ROW" | "GROUP" | "TIES" | "NO" "OTHERS" ) |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 129 | |
| 130 | Stmnt::= (SingleStmnt ";")+ "EOF" |
| 131 | |
| 132 | SingleStmnt ::= UseStmnt |
| 133 | |SetStmnt |
| 134 | |FunctionDeclaration |
| 135 | |Query |
| 136 | |CreateStmnt |
| 137 | |DropStmnt |
| 138 | |LoadStmnt |
| 139 | |InsertStmnt |
| 140 | |UpsertStmnt |
| 141 | |DeleteStmnt |
| 142 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 143 | UseStmnt ::= "USE" DataverseName |
| 144 | |
| 145 | SetStmnt ::= "SET" Identifier StringLiteral |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 146 | |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 147 | CreateStmnt ::= CreateDataverse |
| 148 | | CreateType |
| 149 | | CreateDataset |
| 150 | | CreateIndex |
| 151 | | CreateSynonym |
| 152 | | CreateFunction |
Dmitry Lychagin | 793c39e | 2021-04-21 16:52:10 -0700 | [diff] [blame] | 153 | | CreateView |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 154 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 155 | DataverseName ::= Identifier ("." Identifier)* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 156 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 157 | QualifiedName ::= (DataverseName ".")? Identifier |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 158 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 159 | DoubleQualifiedName ::= (DataverseName ".")? Identifier "." Identifier |
| 160 | |
| 161 | CreateDataverse ::= "CREATE" "DATAVERSE" DataverseName ("IF" "NOT" "EXISTS")? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 162 | |
| 163 | CreateType ::= "CREATE" "TYPE" QualifiedName ("IF" "NOT" "EXISTS")? "AS" ObjectTypeDef |
| 164 | |
| 165 | ObjectTypeDef ::= ("CLOSED" | "OPEN")? "{" ObjectField ("," ObjectField)* "}" |
| 166 | |
| 167 | ObjectField ::= Identifier ":" Identifier "?"? |
| 168 | |
| 169 | TypeExpr ::= ObjectTypeDef |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 170 | | ArrayTypeDef |
| 171 | | MultisetTypeDef |
| 172 | | TypeReference |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 173 | |
| 174 | ArrayTypeDef ::= "[" TypeExpr "]" |
| 175 | |
| 176 | MultisetTypeDef ::= "{{" TypeExpr "}}" |
| 177 | |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 178 | TypeReference ::= QualifiedName |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 179 | |
| 180 | CreateDataset ::= CreateInternalDataset | CreateExternalDataset |
| 181 | |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 182 | CreateInternalDataset ::= ( "INTERNAL" )? "DATASET" QualifiedName DatasetTypeDef ( "WITH" "META" DatasetTypeDef )? |
| 183 | ("IF" "NOT" "EXISTS")? |
| 184 | PrimaryKey |
| 185 | ( "HINTS" Properties )? |
| 186 | ( "WITH" "FILTER" "ON" NestedField )? |
| 187 | ( "WITH" ObjectConstructor )? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 188 | |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 189 | CreateExternalDataset ::= "EXTERNAL" "DATASET" QualifiedName DatasetTypeDef |
| 190 | ("IF" "NOT" "EXISTS")? |
| 191 | "USING" AdapterName Configuration |
| 192 | ( "HINTS" Properties )? |
| 193 | ( "WITH" ObjectConstructor )? |
| 194 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 195 | DatasetTypeDef ::= ( "(" TypeReference ")" ) |
| 196 | | ( "(" DatasetFieldDef ("," DatasetFieldDef )* ")" ( ("CLOSED" | "OPEN") "TYPE" )? ) |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 197 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 198 | DatasetFieldDef ::= Identifier TypeReference ("NOT" "UNKNOWN")? |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 199 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 200 | PrimaryKey ::= "PRIMARY" "KEY" NestedField ( "," NestedField )* ("AUTOGENERATED")? |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 201 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 202 | NestedField ::= Identifier ( "." Identifier )* |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 203 | |
| 204 | AdapterName ::= Identifier |
| 205 | |
| 206 | Configuration::= "(" (KeyValuePair ("," KeyValuePair)*)? ")" |
| 207 | |
| 208 | KeyValuePair ::= "(" StringLiteral "=" StringLiteral ")" |
| 209 | |
| 210 | Properties ::= ( "(" Identifier "=" ( StringLiteral | IntegerLiteral ) ( "," Identifier "=" ( StringLiteral | IntegerLiteral ) )* ")" )? |
| 211 | |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 212 | CreateIndex ::= CreateSecondaryIndex | CreatePrimaryKeyIndex |
| 213 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 214 | CreateSecondaryIndex ::= "CREATE" "INDEX" Identifier ("IF" "NOT" "EXISTS")? "ON" QualifiedName |
Glenn | 67fd1f3 | 2021-02-25 16:04:49 -0800 | [diff] [blame] | 215 | "(" IndexedElement ( "," IndexedElement )* ")" ("TYPE" IndexType)? ("ENFORCED")? |
ggalvizo | db2d0e7 | 2021-09-22 10:55:05 -0700 | [diff] [blame] | 216 | (( "EXCLUDE" | "INCLUDE" ) "UNKNOWN" "KEY")? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 217 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 218 | CreatePrimaryKeyIndex ::= "CREATE" "PRIMARY" "INDEX" Identifier? ("IF" "NOT" "EXISTS")? "ON" QualifiedName ("TYPE" "BTREE")? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 219 | |
Glenn | 67fd1f3 | 2021-02-25 16:04:49 -0800 | [diff] [blame] | 220 | IndexedElement ::= ArrayIndexElement |
| 221 | | IndexField |
| 222 | | "(" ( ArrayIndexElement | IndexField ) ")" |
| 223 | |
Glenn | 5832920 | 2021-04-09 12:03:46 -0700 | [diff] [blame] | 224 | ArrayIndexElement ::= "UNNEST" NestedField ( "UNNEST" NestedField )* |
| 225 | ( ( ":" TypeReference ) | ( "SELECT" NestedField ( ":" TypeReference )? ( "," NestedField ( ":" TypeReference )? )* ) )? |
Glenn | 67fd1f3 | 2021-02-25 16:04:49 -0800 | [diff] [blame] | 226 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 227 | IndexField ::= NestedField ( ":" TypeReference "?"? )? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 228 | |
| 229 | IndexType ::= "BTREE" |
| 230 | |"RTREE" |
| 231 | |"KEYWORD" |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 232 | |"FULLTEXT" |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 233 | |"NGRAM" "(" IntegerLiteral ")" |
| 234 | |
| 235 | CreateSynonym ::= "CREATE" "SYNONYM" QualifiedName "FOR" QualifiedName ("IF" "NOT" "EXISTS")? |
| 236 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 237 | FunctionDeclaration ::= "DECLARE" "FUNCTION" Identifier "(" ( (Identifier ("," Identifier)*) | "..." )? ")" "{" Expr "}" |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 238 | |
Dmitry Lychagin | 265e3ce | 2021-03-02 12:22:38 -0800 | [diff] [blame] | 239 | CreateFunction ::= "CREATE" ("OR" "REPLACE")? "FUNCTION" QualifiedName "(" FunctionParameters? ")" ("IF" "NOT" "EXISTS")? |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 240 | ( ("{" Expr "}") | ExternalFunctionDef ) |
| 241 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 242 | FunctionParameters ::= ( Identifier ((":")? TypeExpr)? ("," Identifier ((":")? TypeExpr)? )* ) | "..." |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 243 | |
Dmitry Lychagin | 0ebc420 | 2021-01-25 13:12:41 -0800 | [diff] [blame] | 244 | ExternalFunctionDef ::= ("RETURNS" TypeExpr)? "AS" StringLiteral ("," StringLiteral )* "AT" QualifiedName ("WITH" ObjectConstructor)? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 245 | |
Dmitry Lychagin | 793c39e | 2021-04-21 16:52:10 -0700 | [diff] [blame] | 246 | CreateView ::= "CREATE" ("OR" "REPLACE")? "VIEW" QualifiedName ("IF" "NOT" "EXISTS")? "AS" Selection |
| 247 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 248 | DropStmnt ::= "DROP" ("DATAVERSE" DataverseName |
Dmitry Lychagin | 793c39e | 2021-04-21 16:52:10 -0700 | [diff] [blame] | 249 | | ("TYPE" |"DATASET" |"SYNONYM" |"VIEW") QualifiedName |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 250 | | "INDEX" DoubleQualifiedName |
| 251 | | "FUNCTION" FunctionSignature ) ("IF" "EXISTS")? |
| 252 | |
Dmitry Lychagin | 13828a1 | 2021-01-25 21:04:46 -0800 | [diff] [blame] | 253 | FunctionSignature ::= QualifiedName ( ( "(" ( FunctionParameters? | IntegerLiteral ) ")" ) | ("@" IntegerLiteral) ) |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 254 | |
| 255 | LoadStmnt ::= "LOAD" "DATASET" QualifiedName "USING" AdapterName Configuration ("PRE-SORTED")? |
| 256 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 257 | InsertStmnt ::= "INSERT" "INTO" QualifiedName ("AS" Variable)? Query ("RETURNING" Expr)? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 258 | |
Dmitry Lychagin | ef1479a | 2021-01-26 12:33:54 -0800 | [diff] [blame] | 259 | UpsertStmnt ::= "UPSERT" "INTO" QualifiedName ("AS" Variable)? Query ("RETURNING" Expr)? |
Ian Maxon | 32f4269c | 2020-11-05 11:05:09 -0800 | [diff] [blame] | 260 | |
| 261 | DeleteStmnt ::= "DELETE" "FROM" QualifiedName (("AS")? Variable)? ("WHERE" Expr)? |