[NO ISSUE][DOC] Document multi-part dataverse name in SQL++ EBNF
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Add multi-part dataverse name to SQL++ EBNF documentation
- Add other missing elements to documentation
Change-Id: Iff45873ead4a94db655f32e9c9d8e0128ce03a73
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/9743
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
diff --git a/asterixdb/asterix-doc/src/main/grammar/sqlpp.ebnf b/asterixdb/asterix-doc/src/main/grammar/sqlpp.ebnf
index d338068..aae81ec 100644
--- a/asterixdb/asterix-doc/src/main/grammar/sqlpp.ebnf
+++ b/asterixdb/asterix-doc/src/main/grammar/sqlpp.ebnf
@@ -32,7 +32,7 @@
FunctionCall ::= OrdinaryFunctionCall | AggregateFunctionCall | WindowFunctionCall
-OrdinaryFunctionCall ::= Identifier "(" Expr ("," Expr)* ")"
+OrdinaryFunctionCall ::= (DataverseName ".")? Identifier "(" Expr ("," Expr)* ")"
AggregateFunctionCall ::= Identifier "(" ("DISTINCT")? Expr ")" ("FILTER" "(" "WHERE" Expr ")")?
@@ -44,13 +44,13 @@
Constructor ::= ObjectConstructor | ArrayConstructor | MultisetConstructor
-ObjectConstructor ::= "{" ( Expr ( ":" Expr )?( ","Expr ( ":" Expr )? )* )? "}"
+ObjectConstructor ::= "{" ( Expr ( ":" Expr )? ( "," Expr ( ":" Expr )? )* )? "}"
ArrayConstructor ::= "[" Expr ("," Expr)* "]"
MultisetConstructor ::= "{{" Expr ("," Expr)* "}}"
-Query ::= (Expr | Selection) ";"
+Query ::= (Expr | Selection)
Selection ::= WithClause? QueryBlock UnionOption* OrderByClause? ( LimitClause | OffsetClause )?
@@ -79,15 +79,12 @@
GroupByClause ::= "GROUP BY" GroupingElement ("," GroupingElement)* GroupAsClause?
-GroupingElement ::= GroupByExprPair
- | ( "(" GroupByExprPair ( "," GroupByExprPair )* ")")
+GroupingElement ::= OrdinaryGroupingSet
| ( "GROUPING" "SETS" "(" GroupingElement ("," GroupingElement)* ")" )
| ( ( "ROLLUP" | "CUBE" ) "(" OrdinaryGroupingSet ( "," OrdinaryGroupingSet )* ")" )
| ( "(" ")" )
-OrdinaryGroupingSet ::= GroupByExprPair | ( "(" GroupByExprPair ( "," GroupByExprPair )* ")")
-
-GroupByExprPair ::= Expr ("AS"? Variable)?
+OrdinaryGroupingSet ::= NamedExpr | ( "(" NamedExpr ( "," NamedExpr )* ")")
GroupAsClause ::= "GROUP AS" Variable
@@ -142,7 +139,9 @@
|UpsertStmnt
|DeleteStmnt
-UseStmnt ::= "USE" Identifier
+UseStmnt ::= "USE" DataverseName
+
+SetStmnt ::= "SET" Identifier StringLiteral
CreateStmnt ::= CreateDataverse
| CreateType
@@ -151,11 +150,13 @@
| CreateSynonym
| CreateFunction
-QualifiedName ::= Identifier ("." Identifier)?
+DataverseName ::= Identifier ("." Identifier)*
-DoubleQualifiedName ::= Identifier "." Identifier ("." Identifier)?
+QualifiedName ::= (DataverseName ".")? Identifier
-CreateDataverse ::= "CREATE" "DATAVERSE" Identifier ("IF" "NOT" "EXISTS")?
+DoubleQualifiedName ::= (DataverseName ".")? Identifier "." Identifier
+
+CreateDataverse ::= "CREATE" "DATAVERSE" DataverseName ("IF" "NOT" "EXISTS")?
CreateType ::= "CREATE" "TYPE" QualifiedName ("IF" "NOT" "EXISTS")? "AS" ObjectTypeDef
@@ -189,13 +190,14 @@
( "HINTS" Properties )?
( "WITH" ObjectConstructor )?
-DatasetTypeDef ::= DatasetReferenceTypeDef | DatasetObjectTypeDef
+DatasetTypeDef ::= ( "(" TypeReference ")" )
+ | ( "(" DatasetFieldDef ("," DatasetFieldDef )* ")" ( ("CLOSED" | "OPEN") "TYPE" )? )
-DatasetReferenceTypeDef ::= "(" TypeReference ")"
+DatasetFieldDef ::= Identifier TypeReference ("NOT" "UNKNOWN")?
-DatasetObjectTypeDef ::= "(" DatasetObjectField ("," DatasetObjectField )* ")" ( ("CLOSED" | "OPEN") "TYPE" )?
+PrimaryKey ::= "PRIMARY" "KEY" NestedField ( "," NestedField )* ("AUTOGENERATED")?
-DatasetObjectField ::= Identifier TypeReference ("NOT" "UNKNOWN")?
+NestedField ::= Identifier ( "." Identifier )*
AdapterName ::= Identifier
@@ -205,36 +207,33 @@
Properties ::= ( "(" Identifier "=" ( StringLiteral | IntegerLiteral ) ( "," Identifier "=" ( StringLiteral | IntegerLiteral ) )* ")" )?
-PrimaryKey ::= "PRIMARY" "KEY" NestedField ( "," NestedField )* ("AUTOGENERATED")?
-
-NestedField ::= Identifier ( "." Identifier )*
-
CreateIndex ::= CreateSecondaryIndex | CreatePrimaryKeyIndex
-CreateSecondaryIndex ::= "CREATE" ("INDEX" Identifier ("IF" "NOT" "EXISTS")? "ON" QualifiedName
- "(" ( IndexField ) ( "," IndexField )* ")" ("TYPE" IndexType)? ("ENFORCED")?)
+CreateSecondaryIndex ::= "CREATE" "INDEX" Identifier ("IF" "NOT" "EXISTS")? "ON" QualifiedName
+ "(" IndexField ( "," IndexField )* ")" ("TYPE" IndexType)? ("ENFORCED")?
-CreatePrimaryKeyIndex ::= "CREATE" "PRIMARY" "INDEX" Identifier? ("IF" "NOT" "EXISTS")? "ON" QualifiedName ("TYPE" "BTREE")?
+CreatePrimaryKeyIndex ::= "CREATE" "PRIMARY" "INDEX" Identifier? ("IF" "NOT" "EXISTS")? "ON" QualifiedName ("TYPE" "BTREE")?
-IndexField ::= NestedField (":" TypeReference)?
+IndexField ::= NestedField ( ":" TypeReference "?"? )?
IndexType ::= "BTREE"
|"RTREE"
|"KEYWORD"
+ |"FULLTEXT"
|"NGRAM" "(" IntegerLiteral ")"
CreateSynonym ::= "CREATE" "SYNONYM" QualifiedName "FOR" QualifiedName ("IF" "NOT" "EXISTS")?
-FunctionDeclaration ::= "DECLARE" "FUNCTION" Identifier "(" ( (Variable ("," Variable)*) | "..." )? ")" "{" Expr "}"
+FunctionDeclaration ::= "DECLARE" "FUNCTION" Identifier "(" ( (Identifier ("," Identifier)*) | "..." )? ")" "{" Expr "}"
CreateFunction ::= "CREATE" ("OR" "REPLACE")? "FUNCTION" QualifiedName ("IF" "NOT" "EXISTS")? "(" FunctionParameters? ")"
( ("{" Expr "}") | ExternalFunctionDef )
-FunctionParameters ::= ( Variable ((":")? TypeExpr)? ("," Variable ((":")? TypeExpr)? )* ) | "..."
+FunctionParameters ::= ( Identifier ((":")? TypeExpr)? ("," Identifier ((":")? TypeExpr)? )* ) | "..."
ExternalFunctionDef ::= ("RETURNS" TypeExpr)? "AS" StringLiteral ("," StringLiteral )* "AT" QualifiedName ("WITH" ObjectConstructor)?
-DropStmnt ::= "DROP" ("DATAVERSE" Identifier
+DropStmnt ::= "DROP" ("DATAVERSE" DataverseName
| ("TYPE" |"DATASET" | "SYNONYM") QualifiedName
| "INDEX" DoubleQualifiedName
| "FUNCTION" FunctionSignature ) ("IF" "EXISTS")?
@@ -243,10 +242,8 @@
LoadStmnt ::= "LOAD" "DATASET" QualifiedName "USING" AdapterName Configuration ("PRE-SORTED")?
-InsertStmnt ::= "INSERT" "INTO" QualifiedName Query
+InsertStmnt ::= "INSERT" "INTO" QualifiedName ("AS" Variable)? Query ("RETURNING" Expr)?
-UpsertStmnt ::= "UPSERT" "INTO" QualifiedName Query
+UpsertStmnt ::= "UPSERT" "INTO" QualifiedName ("AS" Variable)? Query ("RETURNING" Expr)?
DeleteStmnt ::= "DELETE" "FROM" QualifiedName (("AS")? Variable)? ("WHERE" Expr)?
-
-SetStmnt ::= "SET" Identifier StringLiteral