[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