Skip to content

Commit

Permalink
new sql parser - impemented rewrite of UPDATE command
Browse files Browse the repository at this point in the history
  • Loading branch information
luigidellaquila committed Feb 19, 2015
1 parent 8bbaaca commit bc0c9d4
Show file tree
Hide file tree
Showing 18 changed files with 2,386 additions and 1,936 deletions.
259 changes: 162 additions & 97 deletions core/src/main/grammar/OrientSQL.jjt
Expand Up @@ -616,113 +616,151 @@ ODeleteVertexStatement DeleteVertexStatement():
}

OUpdateStatement UpdateStatement():
{}
{ OUpdateOperations lastOperations; }
{
(
<UPDATE>
(
Rid()
|
Identifier()
|
Cluster()
|
IndexIdentifier()
)
( UpdateOperations() )+
[ <UPSERT> ]
[ <RETURN> ( <BEFORE> | <AFTER> ) [ Projection() ] ]
[ <WHERE> WhereClause() ]
[ <LOCK> <RECORD> ]
[ Limit() ]
[ Timeout() ]
) {return jjtThis;}
(
<UPDATE>
(
jjtThis.targetRid = Rid()
|
jjtThis.targetClass = Identifier()
|
jjtThis.targetCluster = Cluster()
|
jjtThis.targetIndex = IndexIdentifier()
)
( lastOperations = UpdateOperations() { jjtThis.operations.add(lastOperations); } )+
[ <UPSERT> { jjtThis.upsert = true; } ]
[
<RETURN>
( <BEFORE> { jjtThis.returnBefore = true; } | <AFTER> { jjtThis.returnAfter = true; } )
[
jjtThis.returnProjection = Projection()
]
]
[ <WHERE> jjtThis.whereClause = WhereClause() ]
[ <LOCK> <RECORD> { jjtThis.lockRecord = true; } ]
[ jjtThis.limit = Limit() ]
[ jjtThis.timeout = Timeout() ]
)
{return jjtThis;}
}

void UpdateOperations():
{}
OUpdateOperations UpdateOperations():
{
OUpdateItem lastItem;
OUpdatePutItem lastPutItem;
OUpdateIncrementItem lastIncrementItem;
OUpdateRemoveItem lastRemoveItem;
}
{
( <SET> UpdateItem() ( <COMMA> UpdateItem() )* )
|
( <PUT> UpdatePutItem() ( <COMMA> UpdatePutItem() )* )
|
(
( <MERGE> | <CONTENT> )
Json()
)
|
(
(
<INCREMENT>
|
<ADD>
<SET> { jjtThis.type = OUpdateOperations.TYPE_SET; }
lastItem = UpdateItem() { jjtThis.updateItems.add(lastItem); }
(
<COMMA> lastItem = UpdateItem() { jjtThis.updateItems.add(lastItem); }
)*
)
|
(
<PUT> { jjtThis.type = OUpdateOperations.TYPE_PUT; }
lastPutItem = UpdatePutItem() { jjtThis.updatePutItems.add(lastPutItem); }
(
<COMMA> lastPutItem = UpdatePutItem() { jjtThis.updatePutItems.add(lastPutItem); }
)*
)
UpdateIncrementItem() ( <COMMA> UpdateIncrementItem() )*
)
|
( <REMOVE> UpdateRemoveItem() ( <COMMA> UpdateRemoveItem() )* )
|
(
(
<MERGE> { jjtThis.type = OUpdateOperations.TYPE_MERGE; }
|
<CONTENT> { jjtThis.type = OUpdateOperations.TYPE_CONTENT; }
)
jjtThis.json = Json()
)
|
(
(
<INCREMENT> { jjtThis.type = OUpdateOperations.TYPE_INCREMENT; }
|
<ADD> { jjtThis.type = OUpdateOperations.TYPE_ADD; }
)
lastIncrementItem = UpdateIncrementItem() { jjtThis.updateIncrementItems.add(lastIncrementItem); }
(
<COMMA> lastIncrementItem = UpdateIncrementItem() { jjtThis.updateIncrementItems.add(lastIncrementItem); }
)*
)
|
(
<REMOVE> { jjtThis.type = OUpdateOperations.TYPE_REMOVE; }
lastRemoveItem = UpdateRemoveItem() { jjtThis.updateRemoveItems.add(lastRemoveItem); }
(
<COMMA>
lastRemoveItem = UpdateRemoveItem() { jjtThis.updateRemoveItems.add(lastRemoveItem); }
)*
)
)
{ return jjtThis; }
}


OUpdateItem UpdateItem():
{}
{
(
Identifier()
jjtThis.left = Identifier()
(
<EQ>
<EQ> { jjtThis.operator = OUpdateItem.OPERATOR_EQ; }
|
<PLUSASSIGN>
<PLUSASSIGN> { jjtThis.operator = OUpdateItem.OPERATOR_PLUSASSIGN; }
|
<MINUSASSIGN>
<MINUSASSIGN> { jjtThis.operator = OUpdateItem.OPERATOR_MINUSASSIGN; }
|
<STARASSIGN>
<STARASSIGN> { jjtThis.operator = OUpdateItem.OPERATOR_STARASSIGN; }
|
<SLASHASSIGN>
<SLASHASSIGN> { jjtThis.operator = OUpdateItem.OPERATOR_SLASHASSIGN; }
)
Expression()
jjtThis.right = Expression()
) { return jjtThis; }
}

void UpdateIncrementItem():
OUpdateIncrementItem UpdateIncrementItem():
{}
{
Identifier() <EQ> Expression()
(
jjtThis.left = Identifier() <EQ> jjtThis.right = Expression()
)
{ return jjtThis; }
}

void UpdateRemoveItem():
OUpdateRemoveItem UpdateRemoveItem():
{}
{
Identifier() [ <EQ> Expression() ]
(
jjtThis.left = Identifier() [ <EQ> jjtThis.right = Expression() ]
)
{ return jjtThis; }
}

void UpdatePutItem():
OUpdatePutItem UpdatePutItem():
{}
{
Identifier() <EQ> Expression() <COMMA> Expression()
(
jjtThis.left = Identifier() <EQ> jjtThis.key = Expression() <COMMA> jjtThis.value = Expression()
)
{ return jjtThis; }
}


void UpdateAddItem():
OUpdateAddItem UpdateAddItem():
{}
{
Identifier() <EQ>
(
<STRING_LITERAL>
|
LOOKAHEAD(Rid())
Rid()
|
LOOKAHEAD(3)
Integer()
|
<FLOATING_POINT_LITERAL>
|
<CHARACTER_LITERAL>
|
<LBRACKET> Rid() ("," Rid())* <RBRACKET>
)

(
jjtThis.left = Identifier() <EQ>
jjtThis.right = Expression()
)
{ return jjtThis; }
}


Expand All @@ -746,40 +784,43 @@ OInsertStatement InsertStatement():
}


void InsertBody():
OInsertBody InsertBody():
{}
{
(
LOOKAHEAD(3)
(
<LPAREN> Identifier() (<COMMA> Identifier())* <RPAREN>
<VALUES>
<LPAREN> Expression() (<COMMA> Expression())* <RPAREN>
( <COMMA> <LPAREN> Expression() (<COMMA> Expression())* <RPAREN> )*
)
|
LOOKAHEAD(3)
(
<SET>
Identifier() <EQ> Expression()
( <COMMA> Identifier() <EQ> Expression() )*
)
|
(
[ <FROM> ]
LOOKAHEAD(3)
(
SelectStatement()
|
LOOKAHEAD(2)
<LPAREN> Identifier() (<COMMA> Identifier())* <RPAREN>
<VALUES>
<LPAREN> Expression() (<COMMA> Expression())* <RPAREN>
( <COMMA> <LPAREN> Expression() (<COMMA> Expression())* <RPAREN> )*
)
|
LOOKAHEAD(3)
(
<SET>
Identifier() <EQ> Expression()
( <COMMA> Identifier() <EQ> Expression() )*
)
|
(
[ <FROM> ]
(
<LPAREN> SelectStatement() <RPAREN>
SelectStatement()
|
LOOKAHEAD(2)
(
<LPAREN> SelectStatement() <RPAREN>
)
)
)
)
|
( <CONTENT> Json() )
|
( <CONTENT> Json() )
)
[ <RETURN> Projection() ]
)
[ <RETURN> Projection() ]
{ return jjtThis; }
}

OCreateVertexStatementEmptyNoTarget CreateVertexStatementEmptyNoTarget():
Expand Down Expand Up @@ -2069,13 +2110,37 @@ OArray Array():


OJson Json():
{}
{
OJsonItem lastItem;
Token token;
}
{
(
<LBRACE>
[
( Identifier() | <STRING_LITERAL> | <CHARACTER_LITERAL>) <COLON> Expression()
( <COMMA> ( Identifier() | <STRING_LITERAL> | <CHARACTER_LITERAL> ) <COLON> Expression() )*
{ lastItem = new OJsonItem(); }
(
lastItem.leftIdentifier = Identifier()
|
token = <STRING_LITERAL> { lastItem.leftString = token.image.substring(1, token.image.length() - 1); }
|
token = <CHARACTER_LITERAL> { lastItem.leftString = token.image.substring(1, token.image.length() - 1); }
)
<COLON>
lastItem.right = Expression() { jjtThis.items.add(lastItem); }
(
<COMMA>
{ lastItem = new OJsonItem(); }
(
lastItem.leftIdentifier = Identifier()
|
token = <STRING_LITERAL> { lastItem.leftString = token.image.substring(1, token.image.length() - 1); }
|
token = <CHARACTER_LITERAL> { lastItem.leftString = token.image.substring(1, token.image.length() - 1); }
)
<COLON>
lastItem.right = Expression() { jjtThis.items.add(lastItem); }
)*
]
<RBRACE>
)
Expand Down

0 comments on commit bc0c9d4

Please sign in to comment.