refactor Statement productions
diff --git a/asterix-aql/src/main/javacc/AQL.jj b/asterix-aql/src/main/javacc/AQL.jj
index 68e1497..ede7da6 100644
--- a/asterix-aql/src/main/javacc/AQL.jj
+++ b/asterix-aql/src/main/javacc/AQL.jj
@@ -74,33 +74,41 @@
// data generator hints
private static final String DGEN_HINT = "dgen";
+
+ private static class IndexParams {
+ public IndexType type;
+ public int gramLength;
+
+ public IndexParams(IndexType type, int gramLength) {
+ this.type = type;
+ this.gramLength = gramLength;
+ }
+ };
private static String getHint(Token t) {
- if (t.specialToken == null) {
- return null;
- }
- String s = t.specialToken.image;
- int n = s.length();
- if (n < 2) {
- return null;
- }
- return s.substring(1).trim();
+ if (t.specialToken == null) {
+ return null;
+ }
+ String s = t.specialToken.image;
+ int n = s.length();
+ if (n < 2) {
+ return null;
+ }
+ return s.substring(1).trim();
}
public AQLParser(String s){
- this(new StringReader(s));
- super.setInput(s);
- }
-
- public static void main(String args[]) throws ParseException, TokenMgrError, IOException, FileNotFoundException, AsterixException {
- File file = new File(args[0]);
- Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
- AQLParser parser = new AQLParser(fis);
- List<Statement> st = parser.Statement();
- //st.accept(new AQLPrintVisitor(), 0);
- }
+ this(new StringReader(s));
+ super.setInput(s);
+ }
-
+ public static void main(String args[]) throws ParseException, TokenMgrError, IOException, FileNotFoundException, AsterixException {
+ File file = new File(args[0]);
+ Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
+ AQLParser parser = new AQLParser(fis);
+ List<Statement> st = parser.Statement();
+ //st.accept(new AQLPrintVisitor(), 0);
+ }
}
PARSER_END(AQLParser)
@@ -110,230 +118,566 @@
{
scopeStack.push(RootScopeFactory.createRootScope(this));
List<Statement> decls = new ArrayList<Statement>();
- Query query=null;
+ Statement stmt = null;
}
{
- (
- (
- (
- "use"
- {
- decls.add(DataverseDeclaration());
- }
- | "declare" "function" {
- decls.add(FunctionDeclaration());
- }
- | "create" (
- {
- String hint = getHint(token);
- boolean dgen = false;
- if (hint != null && hint.startsWith(DGEN_HINT)) {
- dgen = true;
- }
- }
- "type"
- {
- decls.add(TypeDeclaration(dgen, hint));
- }
- | "nodegroup"
- {
- decls.add(NodegroupDeclaration());
- }
- | "external" <DATASET>
- {
- decls.add(DatasetDeclaration(DatasetType.EXTERNAL));
- }
- | "feed" <DATASET>
- {
- decls.add(DatasetDeclaration(DatasetType.FEED));
- }
- | <DATASET>
- {
- decls.add(DatasetDeclaration(DatasetType.INTERNAL));
- }
- | "index"
- {
- decls.add(CreateIndexStatement());
- }
- | "dataverse"
- {
- decls.add(CreateDataverseStatement());
- }
- | "function"
- {
- decls.add(FunctionCreation());
- }
- )
- | "load" {
- decls.add(LoadStatement());
- }
-
- | "drop"
- (
- <DATASET>
- {
- decls.add(DropStatement());
- }
- | "index"
- {
- decls.add(IndexDropStatement());
- }
- | "nodegroup"
- {
- decls.add(NodeGroupDropStatement());
- }
- | "type"
- {
- decls.add(TypeDropStatement());
- }
- | "dataverse"
- {
- decls.add(DataverseDropStatement());
- }
- | "function"
- {
- decls.add(FunctionDropStatement());
- }
- )
- | "write" {
- decls.add(WriteStatement());
- }
- | "set" {
- decls.add(SetStatement());
- }
- | "insert" {
- decls.add(InsertStatement());
- }
- | "delete" {
- decls.add(DeleteStatement());
- }
- | "update" {
- decls.add(UpdateStatement());
- }
- | "begin" "feed"
- {
- Pair<Identifier,Identifier> nameComponents = getDotSeparatedPair();
- decls.add(new BeginFeedStatement(nameComponents.first, nameComponents.second, getVarCounter()));
- } ";"
-
- | "suspend" "feed"
- {
- decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.SUSPEND));
- } ";"
- | "resume" "feed" {
- decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.RESUME));
- } ";"
- | "end" "feed" {
- decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.END));
- } ";"
- | "alter" "feed" {
- decls.add(AlterFeedDeclaration());
- } ";"
-
- | (query = Query()) {
- decls.add(query);
- }
- )*
- // (query = Query())?
- )
-
- <EOF>
- )
+ ( stmt = SingleStatement() (";") ?
{
- return decls;
+ decls.add(stmt);
+ }
+ )*
+ <EOF>
+ {
+ return decls;
+ }
+}
+
+Statement SingleStatement() throws ParseException:
+{
+ Statement stmt = null;
+}
+{
+ (
+ stmt = DataverseDeclaration()
+ | stmt = FunctionDeclaration()
+ | stmt = CreateStatement()
+ | stmt = LoadStatement()
+ | stmt = DropStatement()
+ | stmt = WriteStatement()
+ | stmt = SetStatement()
+ | stmt = InsertStatement()
+ | stmt = DeleteStatement()
+ | stmt = UpdateStatement()
+ | stmt = FeedStatement()
+ | stmt = Query()
+ )
+ {
+ return stmt;
+ }
+}
+
+DataverseDecl DataverseDeclaration() throws ParseException:
+{
+}
+{
+ "use" "dataverse" <IDENTIFIER>
+ {
+ defaultDataverse = token.image;
+ return new DataverseDecl(new Identifier(defaultDataverse));
+ }
+}
+
+Statement CreateStatement() throws ParseException:
+{
+ String hint = null;
+ boolean dgen = false;
+ Statement stmt = null;
+}
+{
+ "create"
+ (
+ {
+ hint = getHint(token);
+ if (hint != null && hint.startsWith(DGEN_HINT)) {
+ dgen = true;
+ }
+ }
+ stmt = TypeSpecification(hint, dgen)
+ | stmt = NodegroupSpecification()
+ | stmt = DatasetSpecification()
+ | stmt = IndexSpecification()
+ | stmt = DataverseSpecification()
+ | stmt = FunctionSpecification()
+ )
+ {
+ return stmt;
+ }
+}
+
+TypeDecl TypeSpecification(String hint, boolean dgen) throws ParseException:
+{
+ Pair<Identifier,Identifier> nameComponents = null;
+ boolean ifNotExists = false;
+ TypeExpression typeExpr = null;
+}
+{
+ "type" nameComponents = FunctionOrTypeName() ifNotExists = IfNotExists()
+ "as" typeExpr = TypeExpr()
+ {
+ long numValues = -1;
+ String filename = null;
+ if (dgen) {
+ String splits[] = hint.split(" +");
+ if (splits.length != 3) {
+ throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");
+ }
+ filename = splits[1];
+ numValues = Long.parseLong(splits[2]);
+ }
+ TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues);
+ return new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists);
+ }
+}
+
+
+NodegroupDecl NodegroupSpecification() throws ParseException:
+{
+ Identifier name = null;
+ boolean ifNotExists = false;
+ List<Identifier>ncNames = null;
+}
+{
+ "nodegroup" <IDENTIFIER>
+ {
+ name = new Identifier(token.image);
+ }
+ ifNotExists = IfNotExists() "on" <IDENTIFIER>
+ {
+ ncNames = new ArrayList<Identifier>();
+ ncNames.add(new Identifier(token.image));
+ }
+ ( "," <IDENTIFIER>
+ {
+ ncNames.add(new Identifier(token.image));
+ }
+ )*
+ {
+ return new NodegroupDecl(name, ncNames, ifNotExists);
+ }
+}
+
+DatasetDecl DatasetSpecification() throws ParseException:
+{
+ Pair<Identifier,Identifier> nameComponents = null;
+ boolean ifNotExists = false;
+ Identifier typeName = null;
+ String adapterName = null;
+ Map<String,String> properties = null;
+ FunctionSignature appliedFunction = null;
+ List<String> primaryKeyFields = null;
+ Identifier nodeGroupName = null;
+ Map<String,String> hints = new HashMap<String,String>();
+ DatasetDecl dsetDecl = null;
+}
+{
+ (
+ "external" <DATASET> nameComponents = QualifiedName() <LEFTPAREN> <IDENTIFIER>
+ {
+ typeName = new Identifier(token.image);
+ }
+ <RIGHTPAREN> ifNotExists = IfNotExists()
+ "using" adapterName = AdapterName() properties = Configuration()
+ ( "hints" hints = Properties() )?
+ {
+ ExternalDetailsDecl edd = new ExternalDetailsDecl();
+ edd.setAdapter(adapterName);
+ edd.setProperties(properties);
+ dsetDecl = new DatasetDecl(nameComponents.first, nameComponents.second, typeName, hints, DatasetType.EXTERNAL, edd, ifNotExists);
+ }
+
+ | "feed" <DATASET> nameComponents = QualifiedName() <LEFTPAREN> <IDENTIFIER>
+ {
+ typeName = new Identifier(token.image);
+ }
+ <RIGHTPAREN> ifNotExists = IfNotExists()
+ "using" adapterName = AdapterName() properties = Configuration()
+ (appliedFunction = ApplyFunction())? primaryKeyFields = PrimaryKey()
+ ( "on" <IDENTIFIER>
+ {
+ nodeGroupName = new Identifier(token.image);
+ }
+ )?
+ ( "hints" hints = Properties() )?
+ {
+ FeedDetailsDecl fdd = new FeedDetailsDecl(adapterName, properties, appliedFunction, nodeGroupName, primaryKeyFields);
+ dsetDecl = new DatasetDecl(nameComponents.first, nameComponents.second, typeName, hints, DatasetType.FEED, fdd, ifNotExists);
+ }
+ | <DATASET> nameComponents = QualifiedName() <LEFTPAREN> <IDENTIFIER>
+ {
+ typeName = new Identifier(token.image);
+ }
+ <RIGHTPAREN> ifNotExists = IfNotExists()
+ primaryKeyFields = PrimaryKey() ("on" <IDENTIFIER>
+ {
+ nodeGroupName = new Identifier(token.image);
+ }
+ )?
+ ( "hints" hints = Properties() )?
+ {
+ InternalDetailsDecl idd = new InternalDetailsDecl(nodeGroupName, primaryKeyFields);
+ dsetDecl = new DatasetDecl(nameComponents.first, nameComponents.second, typeName, hints, DatasetType.INTERNAL, idd, ifNotExists);
+ }
+ )
+ {
+ return dsetDecl;
+ }
+}
+
+CreateIndexStatement IndexSpecification() throws ParseException:
+{
+ CreateIndexStatement cis = new CreateIndexStatement();
+ boolean ifNotExists = false;
+ Pair<Identifier,Identifier> nameComponents = null;
+ IndexParams indexType = null;
+}
+{
+ "index" <IDENTIFIER>
+ {
+ cis.setIndexName(new Identifier(token.image));
+ }
+ ifNotExists = IfNotExists()
+ "on" nameComponents = QualifiedName()
+ <LEFTPAREN> ( <IDENTIFIER>
+ {
+ cis.addFieldExpr(token.image);
+ }
+ ) ("," <IDENTIFIER>
+ {
+ cis.addFieldExpr(token.image);
+ }
+ )* <RIGHTPAREN> ( "type" indexType = IndexType() )?
+ {
+ cis.setIfNotExists(ifNotExists);
+ cis.setDataverseName(nameComponents.first);
+ cis.setDatasetName(nameComponents.second);
+ if (indexType != null) {
+ cis.setIndexType(indexType.type);
+ cis.setGramLength(indexType.gramLength);
+ }
+ return cis;
+ }
+}
+
+IndexParams IndexType() throws ParseException:
+{
+ IndexType type = null;
+ int gramLength = 0;
+}
+{
+ ("btree"
+ {
+ type = IndexType.BTREE;
+ }
+ | "rtree"
+ {
+ type = IndexType.RTREE;
+ }
+ | "keyword"
+ {
+ type = IndexType.WORD_INVIX;
+ }
+ | "fuzzy keyword"
+ {
+ type = IndexType.FUZZY_WORD_INVIX;
+ }
+ | "ngram" <LEFTPAREN> <INTEGER_LITERAL>
+ {
+ type = IndexType.NGRAM_INVIX;
+ gramLength = Integer.valueOf(token.image);
+ }
+ <RIGHTPAREN>
+ | "fuzzy ngram" <LEFTPAREN> <INTEGER_LITERAL>
+ {
+ type = IndexType.FUZZY_NGRAM_INVIX;
+ gramLength = Integer.valueOf(token.image);
+ }
+ <RIGHTPAREN>)
+ {
+ return new IndexParams(type, gramLength);
+ }
+}
+
+CreateDataverseStatement DataverseSpecification() throws ParseException :
+{
+ Identifier dvName = null;
+ boolean ifNotExists = false;
+ String format = null;
+}
+{
+ "dataverse" <IDENTIFIER>
+ {
+ dvName = new Identifier(token.image);
+ }
+ ifNotExists = IfNotExists()
+ ( "with format" <STRING_LITERAL>
+ {
+ format = removeQuotesAndEscapes(token.image);
+ }
+ )?
+ {
+ return new CreateDataverseStatement(dvName, format, ifNotExists);
+ }
+}
+
+CreateFunctionStatement FunctionSpecification() throws ParseException:
+{
+ FunctionSignature signature;
+ boolean ifNotExists = false;
+ List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
+ String functionBody;
+ VarIdentifier var = null;
+ Expression functionBodyExpr;
+ Token beginPos;
+ Token endPos;
+ Pair<Identifier,Identifier> nameComponents=null;
+
+ createNewScope();
+}
+{
+ "function" nameComponents = FunctionOrTypeName()
+ ifNotExists = IfNotExists()
+ <LEFTPAREN> (<VARIABLE>
+ {
+ var = new VarIdentifier();
+ var.setValue(getToken(0).toString());
+ paramList.add(var);
+ getCurrentScope().addNewVarSymbolToScope(var);
+ }
+ ("," <VARIABLE>
+ {
+ var = new VarIdentifier();
+ var.setValue(getToken(0).toString());
+ paramList.add(var);
+ getCurrentScope().addNewVarSymbolToScope(var);
+ }
+ )*)? <RIGHTPAREN> "{"
+ {
+ beginPos = getToken(0);
+ }
+ functionBodyExpr = Expression() "}"
+ {
+ endPos = getToken(0);
+ functionBody = extractFragment(beginPos.beginLine, beginPos.beginColumn, endPos.beginLine, endPos.beginColumn);
+ String dataverse = nameComponents.first.getValue();
+ String functionName = nameComponents.second.getValue();
+ signature = new FunctionSignature(dataverse, functionName, paramList.size());
+ getCurrentScope().addFunctionDescriptor(signature, false);
+ return new CreateFunctionStatement(signature, paramList, functionBody, ifNotExists);
+ }
+}
+
+boolean IfNotExists() throws ParseException:
+{
+}
+{
+ ( "if not exists"
+ {
+ return true;
+ }
+ )?
+ {
+ return false;
+ }
+}
+
+FunctionSignature ApplyFunction() throws ParseException:
+{
+ FunctionSignature funcSig = null;
+}
+{
+ "apply" "function" funcSig = FunctionSignature()
+ {
+ return funcSig;
+ }
+}
+
+FunctionSignature FunctionSignature() throws ParseException:
+{
+ Pair<Identifier,Identifier> pairId = null;
+ int arity = 0;
+}
+{
+ pairId = FunctionOrTypeName() "@" <INTEGER_LITERAL>
+ {
+ Token t = getToken(0);
+ arity = new Integer(t.image);
+ if (arity < 0 && arity != FunctionIdentifier.VARARGS) {
+ throw new ParseException(" invalid arity:" + arity);
+ }
+
+ String dataverse = pairId.first.getValue();
+ String functionName = pairId.second.getValue();
+ return new FunctionSignature(dataverse, functionName, arity);
+ }
+}
+
+List<String> PrimaryKey() throws ParseException:
+{
+ List<String> primaryKeyFields = new ArrayList<String>();
+}
+{
+ "primary" "key" <IDENTIFIER>
+ {
+ primaryKeyFields.add(token.image);
+ }
+ ( "," <IDENTIFIER>
+ {
+ primaryKeyFields.add(token.image);
+ }
+ )*
+ {
+ return primaryKeyFields;
+ }
+}
+
+Statement DropStatement() throws ParseException:
+{
+ Identifier id = null;
+ Pair<Identifier,Identifier> pairId = null;
+ Triple<Identifier,Identifier,Identifier> tripleId = null;
+ FunctionSignature funcSig = null;
+ boolean ifExists = false;
+ Statement stmt = null;
+}
+{
+ "drop"
+ (
+ <DATASET> pairId = QualifiedName() ifExists = IfExists()
+ {
+ stmt = new DropStatement(pairId.first, pairId.second, ifExists);
+ }
+ | "index" tripleId = DoubleQualifiedName() ifExists = IfExists()
+ {
+ stmt = new IndexDropStatement(tripleId.first, tripleId.second, tripleId.third, ifExists);
+ }
+ | "nodegroup" < IDENTIFIER >
+ {
+ id = new Identifier(token.image);
+ }
+ ifExists = IfExists()
+ {
+ stmt = new NodeGroupDropStatement(id, ifExists);
+ }
+ | "type" pairId = FunctionOrTypeName() ifExists = IfExists()
+ {
+ stmt = new TypeDropStatement(pairId.first, pairId.second, ifExists);
+ }
+ | "dataverse" < IDENTIFIER >
+ {
+ id = new Identifier(token.image);
+ }
+ ifExists = IfExists()
+ {
+ stmt = new DataverseDropStatement(id, ifExists);
+ }
+ | "function" funcSig = FunctionSignature() ifExists = IfExists()
+ {
+ stmt = new FunctionDropStatement(funcSig, ifExists);
+ }
+ )
+ {
+ return stmt;
+ }
+}
+
+boolean IfExists() throws ParseException :
+{
+}
+{
+ ( "if" "exists"
+ {
+ return true;
+ }
+ )?
+ {
+ return false;
}
}
InsertStatement InsertStatement() throws ParseException:
{
- Identifier dataverseName;
- Identifier datasetName;
- Pair<Identifier,Identifier> nameComponents = null;
- Query query;
+ Pair<Identifier,Identifier> nameComponents = null;
+ Query query;
}
{
- "into" <DATASET>
-
- {
- nameComponents = getDotSeparatedPair();
- dataverseName = nameComponents.first;
- datasetName = nameComponents.second;
- }
-
- query = Query() (";")?
- {return new InsertStatement(dataverseName, datasetName, query, getVarCounter());}
+ "insert" "into" <DATASET> nameComponents = QualifiedName() query = Query()
+ {
+ return new InsertStatement(nameComponents.first, nameComponents.second, query, getVarCounter());
+ }
}
DeleteStatement DeleteStatement() throws ParseException:
{
- VariableExpr var = null;
- Identifier dataverseName;
- Identifier datasetName = null;
- Expression condition = null;
- Pair<Identifier, Identifier> nameComponents;
+ VariableExpr var = null;
+ Expression condition = null;
+ Pair<Identifier, Identifier> nameComponents;
}
{
- var = Variable() { getCurrentScope().addNewVarSymbolToScope(var.getVar()); }
- "from"
- <DATASET>
- {
- nameComponents = getDotSeparatedPair();
- }
- ("where" condition = Expression())? (";")?
- {return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition, getVarCounter()); }
+ "delete" var = Variable()
+ {
+ getCurrentScope().addNewVarSymbolToScope(var.getVar());
+ }
+ "from" <DATASET> nameComponents = QualifiedName()
+ ("where" condition = Expression())?
+ {
+ return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition, getVarCounter());
+ }
}
UpdateStatement UpdateStatement() throws ParseException:
{
- VariableExpr vars;
- Expression target;
- Expression condition;
- UpdateClause uc;
- List<UpdateClause> ucs = new ArrayList<UpdateClause>();
+ VariableExpr vars;
+ Expression target;
+ Expression condition;
+ UpdateClause uc;
+ List<UpdateClause> ucs = new ArrayList<UpdateClause>();
}
{
- vars = Variable() "in" target = Expression()
- "where" condition = Expression()
- <LEFTPAREN> (uc=UpdateClause() {ucs.add(uc); } ("," uc=UpdateClause() {ucs.add(uc); } )*) <RIGHTPAREN> ";"
- {return new UpdateStatement(vars, target, condition, ucs);}
+ "update" vars = Variable() "in" target = Expression()
+ "where" condition = Expression()
+ <LEFTPAREN> (uc = UpdateClause()
+ {
+ ucs.add(uc);
+ }
+ ("," uc = UpdateClause()
+ {
+ ucs.add(uc);
+ }
+ )*) <RIGHTPAREN>
+ {
+ return new UpdateStatement(vars, target, condition, ucs);
+ }
}
-
-
UpdateClause UpdateClause() throws ParseException:
{
- Expression target = null;
- Expression value = null ;
- InsertStatement is = null;
- DeleteStatement ds = null;
- UpdateStatement us = null;
- Expression condition = null;
- UpdateClause ifbranch = null;
- UpdateClause elsebranch = null;
+ Expression target = null;
+ Expression value = null ;
+ InsertStatement is = null;
+ DeleteStatement ds = null;
+ UpdateStatement us = null;
+ Expression condition = null;
+ UpdateClause ifbranch = null;
+ UpdateClause elsebranch = null;
}
{
"set" target = Expression() ":=" value = Expression()
- | "insert" is = InsertStatement()
- | "delete" ds = DeleteStatement()
- | "update" us = UpdateStatement()
- | "if" <LEFTPAREN> condition = Expression() <RIGHTPAREN> "then" ifbranch = UpdateClause() [LOOKAHEAD(1) "else" elsebranch = UpdateClause()]
- {return new UpdateClause(target, value, is, ds, us, condition, ifbranch, elsebranch);}
+ | is = InsertStatement()
+ | ds = DeleteStatement()
+ | us = UpdateStatement()
+ | "if" <LEFTPAREN> condition = Expression() <RIGHTPAREN>
+ "then" ifbranch = UpdateClause()
+ [LOOKAHEAD(1) "else" elsebranch = UpdateClause()]
+ {
+ return new UpdateClause(target, value, is, ds, us, condition, ifbranch, elsebranch);
+ }
}
-
Statement SetStatement() throws ParseException:
{
String pn = null;
- Statement stmt = null;
+ String pv = null;
}
{
- <IDENTIFIER> { pn = token.image; }
+ "set" <IDENTIFIER>
+ {
+ pn = token.image;
+ }
<STRING_LITERAL>
- { String pv = removeQuotesAndEscapes(token.image); }
- ";"
- {
- return new SetStatement(pn, pv);
- }
+ {
+ pv = removeQuotesAndEscapes(token.image);
+ return new SetStatement(pn, pv);
+ }
}
Statement WriteStatement() throws ParseException:
@@ -346,288 +690,38 @@
Pair<Identifier,Identifier> nameComponents = null;
}
{
- (( "output" "to"
- <IDENTIFIER> { nodeName = new Identifier(token.image); }
- ":" <STRING_LITERAL> { fileName = removeQuotesAndEscapes(token.image); }
- ( "using" <STRING_LITERAL> { writerClass = removeQuotesAndEscapes(token.image); } )?
- {
- stmt = new WriteStatement(nodeName, fileName, writerClass);
- } )
- |
- ( "into"
- <DATASET>
-
+ "write" ((
+ "output" "to" <IDENTIFIER>
{
- nameComponents = getDotSeparatedPair();
+ nodeName = new Identifier(token.image);
+ }
+ ":" <STRING_LITERAL>
+ {
+ fileName = removeQuotesAndEscapes(token.image);
}
-
- <LEFTPAREN> query = Query() <RIGHTPAREN>
- {
+ ( "using" <STRING_LITERAL>
+ {
+ writerClass = removeQuotesAndEscapes(token.image);
+ }
+ )?
+ {
+ stmt = new WriteStatement(nodeName, fileName, writerClass);
+ }
+ ) | (
+ "into" <DATASET>
+ {
+ nameComponents = QualifiedName();
+ }
+ <LEFTPAREN> query = Query() <RIGHTPAREN>
+ {
stmt = new WriteFromQueryResultStatement(nameComponents.first, nameComponents.second, query, getVarCounter());
- } ))
-
- ";"
+ }
+ ))
{
return stmt;
}
}
-CreateIndexStatement CreateIndexStatement() throws ParseException:
-{
- CreateIndexStatement cis = new CreateIndexStatement();
- Pair<Identifier,Identifier> nameComponents = null;
-}
-{
- <IDENTIFIER> { cis.setIndexName(new Identifier(token.image)); }
- (
- "if not exists"
- {
- cis.setIfNotExists(true);
- }
- )?
- "on"
-
- {
- nameComponents = getDotSeparatedPair();
- cis.setDataverseName(nameComponents.first);
- cis.setDatasetName(nameComponents.second);
- }
-
- <LEFTPAREN>
- ( <IDENTIFIER> { cis.addFieldExpr(token.image); } )
- ("," <IDENTIFIER> { cis.addFieldExpr(token.image); })*
- <RIGHTPAREN>
- ("type"
- ("btree" { cis.setIndexType(IndexType.BTREE); }
- | "rtree" { cis.setIndexType(IndexType.RTREE); }
- | "keyword" { cis.setIndexType(IndexType.WORD_INVIX); }
- | "fuzzy keyword" { cis.setIndexType(IndexType.FUZZY_WORD_INVIX); }
- | "ngram"
- <LEFTPAREN>
- (<INTEGER_LITERAL>
- {
- cis.setIndexType(IndexType.NGRAM_INVIX);
- cis.setGramLength(Integer.valueOf(token.image));
- }
- )
- <RIGHTPAREN>
- | "fuzzy ngram"
- <LEFTPAREN>
- (<INTEGER_LITERAL>
- {
- cis.setIndexType(IndexType.FUZZY_NGRAM_INVIX);
- cis.setGramLength(Integer.valueOf(token.image));
- }
- )
- <RIGHTPAREN>
- )
- ";"
- | ";"
- )
- {
- return cis;
- }
-}
-
-DataverseDecl DataverseDeclaration() throws ParseException:
-{
- Identifier dvName = null;
-}
-{
- "dataverse" <IDENTIFIER> { defaultDataverse = token.image;}
- ";"
- {
- return new DataverseDecl(new Identifier(defaultDataverse));
- }
-}
-
-DropStatement DropStatement() throws ParseException :
-{
- Identifier dataverseName = null;
- Identifier datasetName = null;
- boolean ifExists = false;
- Pair<Identifier,Identifier> nameComponents=null;
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverseName = nameComponents.first;
- datasetName = nameComponents.second;
- }
-
-
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new DropStatement(dataverseName, datasetName, ifExists);
- }
-}
-
-IndexDropStatement IndexDropStatement() throws ParseException :
-{
- Identifier dataverseName = null;
- Identifier datasetName = null;
- Identifier indexName = null;
- boolean ifExists = false;
- Triple<Identifier,Identifier,Identifier> nameComponents=null;
-}
-{
-
- {
- nameComponents = getDotSeparatedTriple();
- dataverseName = nameComponents.first;
- datasetName = nameComponents.second;
- indexName = nameComponents.third;
- }
-
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new IndexDropStatement(dataverseName, datasetName, indexName, ifExists);
- }
-}
-
-NodeGroupDropStatement NodeGroupDropStatement() throws ParseException :
-{
- Identifier groupName = null;
- boolean ifExists = false;
-}
-{
- < IDENTIFIER >
- {
- groupName = new Identifier(token.image);
- }
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new NodeGroupDropStatement(groupName, ifExists);
- }
-}
-
-TypeDropStatement TypeDropStatement() throws ParseException :
-{
- Identifier dataverseName = null;
- Identifier typeName = null;
- boolean ifExists = false;
- Pair<Identifier,Identifier> nameComponents;
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverseName = nameComponents.first == null ? new Identifier(defaultDataverse) : nameComponents.first;
- typeName = nameComponents.second;
- }
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new TypeDropStatement(dataverseName, typeName, ifExists);
- }
-}
-
-DataverseDropStatement DataverseDropStatement() throws ParseException :
-{
- Identifier dataverseName = null;
- boolean ifExists = false;
-}
-{
- < IDENTIFIER >
- {
- dataverseName = new Identifier(token.image);
- }
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new DataverseDropStatement(dataverseName, ifExists);
- }
-}
-
-CreateDataverseStatement CreateDataverseStatement() throws ParseException :
-{
- Identifier dvName = null;
- boolean ifNotExists = false;
- String format = null;
-}
-{
- < IDENTIFIER >
- {
- dvName = new Identifier(token.image);
- }
- (
- "if not exists"
- {
- ifNotExists = true;
- }
- )?
- (
- "with format" < STRING_LITERAL >
- {
- format = removeQuotesAndEscapes(token.image);
- }
- )?
- ";"
- {
- return new CreateDataverseStatement(dvName, format, ifNotExists);
- }
-}
-
-
-FunctionDropStatement FunctionDropStatement() throws ParseException :
-{
- String dataverse;
- String functionName;
- int arity=0;
- boolean ifExists = false;
- Pair<Identifier, Identifier> nameComponents=null;
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
- functionName = nameComponents.second.getValue();
- }
-
- "@"
- <INTEGER_LITERAL>
- {
- Token t= getToken(0);
- arity = new Integer(t.image);
- if( arity < 0 && arity != FunctionIdentifier.VARARGS){
- throw new ParseException(" invalid arity:" + arity);
- }
- }
-
- (
- "if exists"
- {
- ifExists = true;
- }
- )? ";"
- {
- return new FunctionDropStatement(new FunctionSignature(dataverse, functionName, arity), ifExists);
- }
-}
-
-
LoadFromFileStatement LoadStatement() throws ParseException:
{
Identifier dataverseName = null;
@@ -638,483 +732,162 @@
Pair<Identifier,Identifier> nameComponents = null;
}
{
- <DATASET>
- {
- nameComponents = getDotSeparatedPair();
- dataverseName = nameComponents.first;
- datasetName = nameComponents.second;
- }
-
- "using"
-
+ "load" <DATASET> nameComponents = QualifiedName()
{
- adapterName = getAdapterName();
+ dataverseName = nameComponents.first;
+ datasetName = nameComponents.second;
}
-
+ "using" adapterName = AdapterName() properties = Configuration()
+ ("pre-sorted"
{
- properties = getConfiguration();
- }
-
- ("pre-sorted"
- { alreadySorted = true; }
- )?
-
- ";"
- {
- return new LoadFromFileStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
- }
-}
-
-
-String getAdapterName() throws ParseException :
-{
- String adapterName = null;
-}
-{
- (
- <IDENTIFIER> {
- adapterName = (new Identifier(token.image)).getValue();;
- }
- |
- <STRING_LITERAL>
- {
- adapterName = removeQuotesAndEscapes(token.image);
- }
- )
- {
- return adapterName;
- }
-}
-
-
-DatasetDecl DatasetDeclaration(DatasetType datasetType) throws ParseException :
-{
- DatasetDecl dd = null;
- Identifier datasetName = null;
- Identifier dataverseName = null;
- Identifier itemDataverseName = null;
- Identifier itemTypeName = null;
- String nameComponentFirst = null;
- String nameComponentSecond = null;
- boolean ifNotExists = false;
- IDatasetDetailsDecl datasetDetails = null;
- Pair<Identifier,Identifier> nameComponents = null;
- Map<String,String> hints = new HashMap<String,String>();
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverseName = nameComponents.first;
- datasetName = nameComponents.second;
- }
-
- (
- "if not exists"
- {
- ifNotExists = true;
+ alreadySorted = true;
}
)?
- (
- < LEFTPAREN > <IDENTIFIER>
- {
- itemTypeName = new Identifier(token.image);
- }
- < RIGHTPAREN >
- )
- {
- if(datasetType == DatasetType.INTERNAL) {
- datasetDetails = InternalDatasetDeclaration();
- }
- else if(datasetType == DatasetType.EXTERNAL) {
- datasetDetails = ExternalDatasetDeclaration();
- }
- else if(datasetType == DatasetType.FEED) {
- datasetDetails = FeedDatasetDeclaration();
- }
- }
-
- (
- "hints"
- {
- initProperties(hints);
- }
- )?
- ";"
-
- {
- dd = new DatasetDecl(dataverseName, datasetName, itemTypeName, hints, datasetType, datasetDetails,ifNotExists);
- return dd;
- }
+ {
+ return new LoadFromFileStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
+ }
}
-InternalDetailsDecl InternalDatasetDeclaration() throws ParseException :
-{
- InternalDetailsDecl idd = null;
- List<String> primaryKeyFields = new ArrayList<String>();
- Identifier nodeGroupName=null;
-}
-{
- (
- {
- primaryKeyFields = getPrimaryKeyFields();
- }
- )
-
- (
- "on" < IDENTIFIER >
- {
- nodeGroupName = new Identifier(token.image);
- }
- )?
-
- {
- idd = new InternalDetailsDecl(nodeGroupName, primaryKeyFields);
- return idd;
- }
-}
-ExternalDetailsDecl ExternalDatasetDeclaration() throws ParseException :
+String AdapterName() throws ParseException :
{
- ExternalDetailsDecl edd = null;
String adapterName = null;
- Map < String, String > properties;
}
{
- {
- edd = new ExternalDetailsDecl();
- }
-
- "using"
+ (<IDENTIFIER>
{
- adapterName = getAdapterName();
+ adapterName = (new Identifier(token.image)).getValue();
}
-
+ | <STRING_LITERAL>
{
- properties = getConfiguration();
- }
-
- {
- edd = new ExternalDetailsDecl();
- edd.setAdapter(adapterName);
- edd.setProperties(properties);
- }
-
- {
- return edd;
- }
-}
-
-FeedDetailsDecl FeedDatasetDeclaration() throws ParseException :
-{
- FeedDetailsDecl fdd = null;
- String adapterName = null;
- Map < String, String > properties;
- Pair<Identifier,Identifier> nameComponents;
- List<String> primaryKeyFields = new ArrayList<String>();
- Identifier nodeGroupName=null;
- FunctionSignature appliedFunction=null;
- String dataverse;
- String functionName;
- int arity;
-}
-{
- "using"
- {
- adapterName = getAdapterName();
- }
-
- {
- properties = getConfiguration();
- }
-
- ("apply" "function"
- {
- nameComponents = getDotSeparatedPair();
- dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
- functionName = nameComponents.second.getValue();
- }
- ("@" <INTEGER_LITERAL>
- {
- arity = Integer.parseInt(token.image);
- }
- )
-
- {
- appliedFunction = new FunctionSignature(dataverse, functionName, arity);
- }
- )?
-
- (
- {
- primaryKeyFields = getPrimaryKeyFields();
+ adapterName = removeQuotesAndEscapes(token.image);
}
)
-
- (
- "on" < IDENTIFIER >
{
- nodeGroupName = new Identifier(token.image);
- }
- )?
-
- {
- fdd = new FeedDetailsDecl(adapterName, properties, appliedFunction, nodeGroupName, primaryKeyFields);
- return fdd;
+ return adapterName;
}
}
-List<String> getPrimaryKeyFields() throws ParseException :
-{
- List<String> primaryKeyFields = new ArrayList<String>();
-}
-{
-
- "primary" "key"
- < IDENTIFIER >
- {
- primaryKeyFields.add(token.image);
- }
- (
- "," < IDENTIFIER >
- {
- primaryKeyFields.add(token.image);
- }
- )*
- {
- return primaryKeyFields;
- }
-
-}
-
-
-
-
-
-ControlFeedStatement ControlFeedDeclaration(ControlFeedStatement.OperationType operationType) throws ParseException :
+Statement FeedStatement() throws ParseException:
{
Pair<Identifier,Identifier> nameComponents = null;
+ Map<String,String> configuration = null;
+ Statement stmt = null;
}
{
+ (
+ "begin" "feed" nameComponents = QualifiedName()
+ {
+ stmt = new BeginFeedStatement(nameComponents.first, nameComponents.second, getVarCounter());
+ }
+ | "suspend" "feed" nameComponents = QualifiedName()
+ {
+ stmt = new ControlFeedStatement(ControlFeedStatement.OperationType.SUSPEND, nameComponents.first, nameComponents.second);
+ }
+ | "resume" "feed" nameComponents = QualifiedName()
+ {
+ stmt = new ControlFeedStatement(ControlFeedStatement.OperationType.RESUME, nameComponents.first, nameComponents.second);
+ }
+ | "end" "feed" nameComponents = QualifiedName()
+ {
+ stmt = new ControlFeedStatement(ControlFeedStatement.OperationType.END, nameComponents.first, nameComponents.second);
+ }
+ | "alter" "feed" nameComponents = QualifiedName() "set" configuration = Configuration()
+ {
+ stmt = new ControlFeedStatement(ControlFeedStatement.OperationType.ALTER, nameComponents.first, nameComponents.second, configuration);
+ }
+ )
{
- nameComponents = getDotSeparatedPair();
- return new ControlFeedStatement(operationType, nameComponents.first, nameComponents.second);
+ return stmt;
}
}
-
-ControlFeedStatement AlterFeedDeclaration() throws ParseException :
-{
- Pair<Identifier,Identifier> nameComponents = null;
- Map < String, String > configuration = new HashMap < String, String > ();
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- }
-
- "set"
- {
- configuration = getConfiguration();
- }
-
- {
- return new ControlFeedStatement(ControlFeedStatement.OperationType.ALTER, nameComponents.first, nameComponents.second, configuration);
- }
-}
-
-Map<String,String> getConfiguration() throws ParseException :
+Map<String,String> Configuration() throws ParseException :
{
Map<String,String> configuration = new LinkedHashMap<String,String>();
- String key;
- String value;
+ Pair<String, String> keyValuePair = null;
}
{
-
-<LEFTPAREN>
- (
- (
- <LEFTPAREN>
- (
- <STRING_LITERAL>
- {
- key = removeQuotesAndEscapes(token.image);
- }
- "=" <STRING_LITERAL>
- {
- value = removeQuotesAndEscapes(token.image);
- }
- )
- <RIGHTPAREN>
- {
- configuration.put(key, value);
- }
- )
- (
- "," <LEFTPAREN>
- (
- <STRING_LITERAL>
- {
- key = removeQuotesAndEscapes(token.image);
- }
- "=" <STRING_LITERAL>
- {
- value = removeQuotesAndEscapes(token.image);
- }
- )
- <RIGHTPAREN>
- {
- configuration.put(key, value);
- }
- )*
- )?
- <RIGHTPAREN>
- {
- return configuration;
- }
-}
-
-void initProperties(Map<String,String> properties) throws ParseException :
-{
- String key;
- String value;
-}
-{
- (
- <LEFTPAREN>
- (
- <IDENTIFIER>
- {
- key = (new Identifier(token.image)).getValue();
- }
- "="
- (
- (<STRING_LITERAL>
- {
- value = removeQuotesAndEscapes(token.image);
- }
- ) |
- (<INTEGER_LITERAL>
- {
- try{
- value = "" + Long.valueOf(token.image);
- } catch (NumberFormatException nfe){
- throw new ParseException("inapproriate value: " + token.image);
- }
- }
- )
- )
- {
- properties.put(key.toUpperCase(), value);
- }
- (
- ","
- (
- <IDENTIFIER>
- {
- key = (new Identifier(token.image)).getValue();
- }
- "="
- (
- (<STRING_LITERAL>
- {
- value = removeQuotesAndEscapes(token.image);
- }
- ) |
- (<INTEGER_LITERAL>
- {
- try{
- value = "" + Long.valueOf(token.image);
- } catch (NumberFormatException nfe){
- throw new ParseException("inapproriate value: " + token.image);
- }
- }
- )
- )
- )
- {
- properties.put(key.toUpperCase(), value);
- }
-
- )*
- )
- <RIGHTPAREN>
- )?
-}
-
-
-
-NodegroupDecl NodegroupDeclaration() throws ParseException :
-{
- Identifier name = null;
- List < Identifier > ncNames = new ArrayList < Identifier > ();
- boolean ifNotExists = false;
-}
-{
- < IDENTIFIER >
- {
- name = new Identifier(token.image);
- }
- (
- "if not exists"
- {
- ifNotExists = true;
- }
- )?
- "on" < IDENTIFIER >
- {
- ncNames.add(new Identifier(token.image));
- }
- (
- "," < IDENTIFIER >
+ <LEFTPAREN> ( keyValuePair = KeyValuePair()
{
- ncNames.add(new Identifier(token.image));
+ configuration.put(keyValuePair.first, keyValuePair.second);
}
- )*
- ";"
- {
- return new NodegroupDecl(name, ncNames, ifNotExists);
- }
-}
-
-
-TypeDecl TypeDeclaration(boolean dgen, String hint) throws ParseException:
-{
- Identifier dataverse;
- Identifier ident;
- TypeExpression typeExpr;
- boolean ifNotExists = false;
- Pair<Identifier,Identifier> nameComponents=null;
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverse = nameComponents.first;
- ident = nameComponents.second;
- }
-
- (
- "if not exists"
+ ( "," keyValuePair = KeyValuePair()
{
- ifNotExists = true;
+ configuration.put(keyValuePair.first, keyValuePair.second);
}
- )?
- "as"
- ( typeExpr = TypeExpr() )
- (";")?
- {
- long numValues = -1;
- String filename = null;
- if (dgen) {
- String splits[] = hint.split(" +");
- if (splits.length != 3) {
- throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");
- }
- filename = splits[1];
- numValues = Long.parseLong(splits[2]);
+ )* )? <RIGHTPAREN>
+ {
+ return configuration;
+ }
+}
+
+Pair<String, String> KeyValuePair() throws ParseException:
+{
+ String key;
+ String value;
+}
+{
+ <LEFTPAREN> <STRING_LITERAL>
+ {
+ key = removeQuotesAndEscapes(token.image);
+ }
+ "=" <STRING_LITERAL>
+ {
+ value = removeQuotesAndEscapes(token.image);
+ }
+ <RIGHTPAREN>
+ {
+ return new Pair<String, String>(key, value);
}
- TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues);
- return new TypeDecl(dataverse, ident, typeExpr, tddg, ifNotExists);
- }
+}
+
+Map<String,String> Properties() throws ParseException:
+{
+ Map<String,String> properties = new HashMap<String,String>();
+ Pair<String, String> property;
+}
+{
+ ( <LEFTPAREN> property = Property()
+ {
+ properties.put(property.first, property.second);
+ }
+ ( "," property = Property()
+ {
+ properties.put(property.first, property.second);
+ }
+ )* <RIGHTPAREN> )?
+ {
+ return properties;
+ }
+}
+
+Pair<String, String> Property() throws ParseException:
+{
+ String key;
+ String value;
+}
+{
+ <IDENTIFIER>
+ {
+ key = (new Identifier(token.image)).getValue();
+ }
+ "=" ( <STRING_LITERAL>
+ {
+ value = removeQuotesAndEscapes(token.image);
+ }
+ | <INTEGER_LITERAL>
+ {
+ try {
+ value = "" + Long.valueOf(token.image);
+ } catch (NumberFormatException nfe) {
+ throw new ParseException("inapproriate value: " + token.image);
+ }
+ }
+ )
+ {
+ return new Pair<String, String>(key.toUpperCase(), value);
+ }
}
TypeExpression TypeExpr() throws ParseException:
@@ -1274,62 +1047,72 @@
}
}
-Pair<Identifier,Identifier> getDotSeparatedPair() throws ParseException:
+
+Pair<Identifier,Identifier> FunctionOrTypeName() throws ParseException:
{
- Identifier first = null;
- Identifier second = null;
+ Pair<Identifier,Identifier> name = null;
+}
+{
+ name = QualifiedName()
+ {
+ if (name.first == null) {
+ name.first = new Identifier(defaultDataverse);
+ }
+ return name;
+ }
+}
+
+Pair<Identifier,Identifier> QualifiedName() throws ParseException:
+{
+ Identifier first = null;
+ Identifier second = null;
}
{
< IDENTIFIER >
- {
- first = new Identifier(token.image);
- }
+ {
+ first = new Identifier(token.image);
+ }
("." <IDENTIFIER>
- {
- second = new Identifier(token.image);
- }
+ {
+ second = new Identifier(token.image);
+ }
)?
-
{
- if(second == null){
- second = first;
- first = null;
- }
-
- return new Pair<Identifier,Identifier>(first,second);
+ if (second == null) {
+ second = first;
+ first = null;
+ }
+ return new Pair<Identifier,Identifier>(first,second);
}
}
-Triple<Identifier,Identifier,Identifier> getDotSeparatedTriple() throws ParseException:
+Triple<Identifier,Identifier,Identifier> DoubleQualifiedName() throws ParseException:
{
- Identifier first = null;
- Identifier second = null;
- Identifier third = null;
+ Identifier first = null;
+ Identifier second = null;
+ Identifier third = null;
}
{
< IDENTIFIER >
- {
- first = new Identifier(token.image);
- }
+ {
+ first = new Identifier(token.image);
+ }
"." <IDENTIFIER>
- {
- second = new Identifier(token.image);
- }
- (
- "." <IDENTIFIER>
- {
- third = new Identifier(token.image);
- }
+ {
+ second = new Identifier(token.image);
+ }
+ ("." <IDENTIFIER>
+ {
+ third = new Identifier(token.image);
+ }
)?
-
{
- if(third == null){
- third = second;
- second = first;
- first = null;
- }
-
- return new Triple<Identifier,Identifier,Identifier>(first,second,third);
+ if (third == null) {
+ third = second;
+ second = first;
+ first = null;
+ }
+ return new Triple<Identifier,Identifier,Identifier>(first,second,third);
}
}
@@ -1348,13 +1131,12 @@
createNewScope();
}
{
-
- <IDENTIFIER>
- {
- Token t = getToken(0);
- functionName = t.toString();
- }
- <LEFTPAREN> (<VARIABLE>
+ "declare" "function" <IDENTIFIER>
+ {
+ Token t = getToken(0);
+ functionName = t.toString();
+ }
+ <LEFTPAREN> (<VARIABLE>
{
var = new VarIdentifier();
var.setValue(getToken(0).toString());
@@ -1362,15 +1144,15 @@
getCurrentScope().addNewVarSymbolToScope(var);
arity++;
}
- ("," <VARIABLE>
+ ("," <VARIABLE>
{
var = new VarIdentifier();
var.setValue(getToken(0).toString());
paramList.add(var);
getCurrentScope().addNewVarSymbolToScope(var);
arity++;
- })*)? <RIGHTPAREN> "{" funcBody = Expression() "}"
- (";")?
+ }
+ )*)? <RIGHTPAREN> "{" funcBody = Expression() "}"
{
signature = new FunctionSignature(defaultDataverse, functionName, arity);
getCurrentScope().addFunctionDescriptor(signature, false);
@@ -1379,78 +1161,14 @@
}
}
-CreateFunctionStatement FunctionCreation() throws ParseException:
-{
- CreateFunctionStatement cfs = null;
- FunctionSignature signature;
- String dataverse;
- String functionName;
- boolean ifNotExists = false;
- List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
- String functionBody;
- VarIdentifier var = null;
- createNewScope();
- Expression functionBodyExpr;
- Token beginPos;
- Token endPos;
- Pair<Identifier,Identifier> nameComponents=null;
-}
-{
- {
- nameComponents = getDotSeparatedPair();
- dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
- functionName= nameComponents.second.getValue();
- }
-
- (
- "if not exists"
- {
- ifNotExists = true;
- }
- )?
-
- <LEFTPAREN> (<VARIABLE>
- {
- var = new VarIdentifier();
- var.setValue(getToken(0).toString());
- paramList.add(var);
- getCurrentScope().addNewVarSymbolToScope(var);
- }
- ("," <VARIABLE>
- {
- var = new VarIdentifier();
- var.setValue(getToken(0).toString());
- paramList.add(var);
- getCurrentScope().addNewVarSymbolToScope(var);
- })*)? <RIGHTPAREN> "{"
- {
- beginPos = getToken(0);
- }
- functionBodyExpr = Expression()
- "}"
- {
- endPos = getToken(0);
- functionBody = extractFragment(beginPos.beginLine, beginPos.beginColumn, endPos.beginLine, endPos.beginColumn);
- }
- (";")?
- {
- signature = new FunctionSignature(dataverse, functionName, paramList.size());
- getCurrentScope().addFunctionDescriptor(signature, false);
- cfs = new CreateFunctionStatement(signature, paramList, functionBody, ifNotExists);
- return cfs;
- }
-}
-
-
-Query Query()throws ParseException:
+Query Query() throws ParseException:
{
Query query = new Query();
Expression expr;
}
{
- expr = Expression()
- (";")?
+ expr = Expression()
{
query.setBody(expr);
query.setVarCounter(getVarCounter());
@@ -2050,36 +1768,42 @@
List<Expression> argList = new ArrayList<Expression>();
Expression tmp;
int arity = 0;
+ Pair<Identifier,Identifier> funcId = null;
String funcName;
String dataverse;
- String hint=null;
- String id1=null;
- String id2=null;
+ String hint = null;
+ String id1 = null;
+ String id2 = null;
}
{
-
- <IDENTIFIER> { dataverse = defaultDataverse; funcName = token.image;} ("." <IDENTIFIER> { dataverse = funcName; funcName = token.image;})?
+ funcId = FunctionOrTypeName()
{
- hint = getHint(token);
+ dataverse = funcId.first.getValue();
+ funcName = funcId.second.getValue();
+ hint = getHint(token);
}
- <LEFTPAREN> (tmp = Expression()
- {
- argList.add(tmp);
- arity ++;
- } ("," tmp = Expression() { argList.add(tmp); arity++; })*)? <RIGHTPAREN>
-
- {
- FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
- if(signature == null)
- {
- signature = new FunctionSignature(dataverse, funcName.toString(), arity);
- }
- callExpr = new CallExpr(signature,argList);
- if (hint != null && hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
- callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
- }
- return callExpr;
- }
+ <LEFTPAREN> (tmp = Expression()
+ {
+ argList.add(tmp);
+ arity ++;
+ }
+ ("," tmp = Expression()
+ {
+ argList.add(tmp);
+ arity++;
+ }
+ )*)? <RIGHTPAREN>
+ {
+ FunctionSignature signature = lookupFunctionSignature(dataverse, funcName, arity);
+ if (signature == null) {
+ signature = new FunctionSignature(dataverse, funcName, arity);
+ }
+ callExpr = new CallExpr(signature,argList);
+ if (hint != null && hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
+ callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
+ }
+ return callExpr;
+ }
}
Expression DatasetAccessExpression() throws ParseException: