Skip to content

Commit

Permalink
new parser - finised implementation of query rewrite (Select)
Browse files Browse the repository at this point in the history
  • Loading branch information
luigidellaquila committed Feb 11, 2015
1 parent ff5f0ee commit 10c510e
Show file tree
Hide file tree
Showing 22 changed files with 1,597 additions and 1,284 deletions.
106 changes: 85 additions & 21 deletions core/src/main/grammar/OrientSQL.jjt
Expand Up @@ -167,9 +167,9 @@ TOKEN:
|
< STRATEGY: ( "s" | "S" ) ( "t" | "T" ) ( "r" | "R" ) ( "a" | "A" ) ( "t" | "T" ) ( "e" | "E" ) ( "g" | "G" ) ( "y" | "Y" ) >
|
< DEPTH_FIRST: ( "d" | "d" ) ( "e" | "E" ) ( "p" | "P" ) ( "t" | "T" ) ( "h" | "H" ) "_" ( "f" | "F" ) ( "i" | "I" ) ( "r" | "R" ) ( "s" | "S" ) ( "t" | "T" ) >
< DEPTH_FIRST: ( "d" | "d" ) ( "e" | "E" ) ( "p" | "P" ) ( "t" | "T" ) ( "h" | "H" ) ( "_" ) ( "f" | "F" ) ( "i" | "I" ) ( "r" | "R" ) ( "s" | "S" ) ( "t" | "T" ) >
|
< BREADTH_FIRST: ( "b" | "B" ) ( "r" | "R" ) ( "e" | "E" ) ( "a" | "A" ) ( "d" | "D" ) ( "t" | "T" ) ( "h" | "H" ) "_" ( "f" | "F" ) ( "i" | "I" ) ( "r" | "R" ) ( "s" | "S" ) ( "t" | "T" ) >
< BREADTH_FIRST: ( "b" | "B" ) ( "r" | "R" ) ( "e" | "E" ) ( "a" | "A" ) ( "d" | "D" ) ( "t" | "T" ) ( "h" | "H" ) ( "_" ) ( "f" | "F" ) ( "i" | "I" ) ( "r" | "R" ) ( "s" | "S" ) ( "t" | "T" ) >
|
< THIS: "@this" >
|
Expand Down Expand Up @@ -455,6 +455,8 @@ OInteger Integer():
) { return jjtThis; }
}



OFloatingPoint FloatingPoint():
{
String stringValue;
Expand Down Expand Up @@ -564,17 +566,27 @@ OSelectStatement SelectStatement():
}

OTraverseStatement TraverseStatement():
{}
{ OTraverseProjectionItem lastProjection;}
{
(
<TRAVERSE>
[ TraverseProjectionItem() ( <COMMA> TraverseProjectionItem() )* ]
[
lastProjection = TraverseProjectionItem() { jjtThis.projections.add(lastProjection); }
( <COMMA> lastProjection = TraverseProjectionItem() { jjtThis.projections.add(lastProjection); } )*
]
<FROM>
FromClause()
[ <WHILE> WhereClause() ]
[ Limit() ]
[ <STRATEGY> ( <DEPTH_FIRST> | <BREADTH_FIRST> ) ]
) {return jjtThis;}
jjtThis.target = FromClause()
[ <WHILE> jjtThis.whereClause = WhereClause() ]
[ jjtThis.limit = Limit() ]
[ <STRATEGY>
(
<DEPTH_FIRST> { jjtThis.strategy = OTraverseStatement.Strategy.DEPTH_FIRST; }
|
<BREADTH_FIRST> { jjtThis.strategy = OTraverseStatement.Strategy.BREADTH_FIRST; }
)
]
)
{return jjtThis;}
}


Expand Down Expand Up @@ -971,23 +983,30 @@ OArraySelector ArraySelector():
}

OArrayNumberSelector ArrayNumberSelector():
{}
{ Token tokenVal; }
{
(
LOOKAHEAD( InputParameter() )
jjtThis.inputValue = InputParameter()
|
LOOKAHEAD( Integer() )
tokenVal = <INTEGER_LITERAL> { jjtThis.integer = Integer.parseInt(tokenVal.image); }
/* TODO for 3.0
|
LOOKAHEAD( MathExpression() )
jjtThis.expressionValue = MathExpression()
*/

)
{ return jjtThis; }
}

OArraySingleValuesSelector ArraySingleValuesSelector():
{}
{ OArraySelector lastSelector; }
{
(
ArraySelector() ( <COMMA> ArraySelector() ) *
lastSelector = ArraySelector() { jjtThis.items.add(lastSelector); }
( <COMMA> lastSelector = ArraySelector() { jjtThis.items.add(lastSelector); } ) *
)
{ return jjtThis; }
}
Expand All @@ -996,6 +1015,8 @@ OArrayRangeSelector ArrayRangeSelector():
{ Token token; }
{
(

/* TODO for 3.0
token = <INTEGER_RANGE>
{
String img = token.image;
Expand All @@ -1004,8 +1025,9 @@ OArrayRangeSelector ArrayRangeSelector():
jjtThis.to = Integer.parseInt(splitted[1], 10);
}
|
*/
(
jjtThis.fromSelector = ArrayNumberSelector() <RANGE> jjtThis.toSelector = ArrayNumberSelector()
jjtThis.fromSelector = ArrayNumberSelector() [ <MINUS> | <RANGE> { jjtThis.newRange = true; } ] jjtThis.toSelector = ArrayNumberSelector()
)
)
{ return jjtThis; }
Expand Down Expand Up @@ -1243,7 +1265,7 @@ OMathExpression ParenthesisExpression():
{}
{
(
<LPAREN> ( Expression() | SelectStatement() ) <RPAREN>
<LPAREN> ( jjtThis.expression = Expression() | jjtThis.statement = SelectStatement() ) <RPAREN>
)
{return jjtThis;}
}
Expand Down Expand Up @@ -1721,6 +1743,7 @@ OBooleanExpression InCondition():
jjtThis.rightCollection.add(lastExpression);
}
)*
<RBRACKET>
)
|
LOOKAHEAD(2)
Expand Down Expand Up @@ -1806,19 +1829,59 @@ OBooleanExpression MatchesCondition():
}

OOrderBy OrderBy():
{ jjtThis.items = new java.util.ArrayList(); }
{
jjtThis.items = new java.util.ArrayList();
OOrderByItem lastItem;
OIdentifier lastIdentifier;
ORid lastRid;
Token lastToken;
}
{
(
<ORDER> <BY> ( Identifier() | Rid() | <RECORD_ATTRIBUTE> ) [ <DESC> | <ASC> ]
( "," ( Identifier() | Rid() | <RECORD_ATTRIBUTE> ) [ <DESC> | <ASC> ] )*
<ORDER> <BY>
(
{
lastItem = new OOrderByItem();
jjtThis.items.add(lastItem);
}
(
lastIdentifier = Identifier() { lastItem.alias = lastIdentifier.toString(); }
|
lastItem.rid = Rid()
|
lastToken = <RECORD_ATTRIBUTE> { lastItem.recordAttr = lastToken.image; }
)
)
[ <DESC> { lastItem.type = OOrderByItem.DESC; }| <ASC> { lastItem.type = OOrderByItem.ASC; }]
(
","
(
{
lastItem = new OOrderByItem();
jjtThis.items.add(lastItem);
}
(
lastIdentifier = Identifier() { lastItem.alias = lastIdentifier.toString(); }
|
lastItem.rid = Rid()
|
lastToken = <RECORD_ATTRIBUTE> { lastItem.recordAttr = lastToken.image; }
)
)
[ <DESC> { lastItem.type = OOrderByItem.DESC; }| <ASC> { lastItem.type = OOrderByItem.ASC; }]
)*
) {return jjtThis;}
}

OGroupBy GroupBy():
{}
{ OIdentifier lastIdentifier; }
{
(
<GROUP> <BY> Identifier() ( "," Identifier() )*
<GROUP> <BY> lastIdentifier = Identifier() { jjtThis.items.add(lastIdentifier); }
(
","
lastIdentifier = Identifier() { jjtThis.items.add(lastIdentifier); }
)*
) {return jjtThis;}
}

Expand Down Expand Up @@ -1946,10 +2009,11 @@ OTraverseProjectionItem TraverseProjectionItem():
{}
{
(
<STAR>
<STAR> { jjtThis.star = true; }
|
(
BaseIdentifier() [ LOOKAHEAD( Modifier() ) Modifier() ]
jjtThis.base = BaseIdentifier()
[ LOOKAHEAD( Modifier() ) jjtThis.modifier = Modifier() ]
)
)
{ return jjtThis; }
Expand Down
Expand Up @@ -7,6 +7,8 @@ public class OArrayNumberSelector extends SimpleNode {

OMathExpression expressionValue;

Integer integer;

public OArrayNumberSelector(int id) {
super(id);
}
Expand All @@ -26,6 +28,8 @@ public String toString() {
return inputValue.toString();
} else if (expressionValue != null) {
return expressionValue.toString();
}else if(integer!=null){
return integer.toString();
}
return super.toString();
}
Expand Down
Expand Up @@ -5,6 +5,7 @@
public class OArrayRangeSelector extends SimpleNode {
protected Integer from;
protected Integer to;
boolean newRange = false;

protected OArrayNumberSelector fromSelector;
protected OArrayNumberSelector toSelector;
Expand All @@ -30,7 +31,12 @@ public String toString() {
} else {
result.append(fromSelector.toString());
}
result.append("..");
if (newRange) {
result.append("-");
// TODO in 3.0 result.append("..");
} else {
result.append("-");
}
if (to != null) {
result.append(to);
} else {
Expand Down
Expand Up @@ -7,6 +7,7 @@ public class OArraySelector extends SimpleNode {
protected ORid rid;
protected OInputParameter inputParam;
protected OExpression expression;
protected OInteger integer;

public OArraySelector(int id) {
super(id);
Expand All @@ -29,6 +30,8 @@ public String toString() {
return inputParam.toString();
} else if (expression != null) {
return expression.toString();
} else if (integer != null) {
return integer.toString();
}
return null;
}
Expand Down
Expand Up @@ -2,8 +2,13 @@
/* JavaCCOptions:MULTI=true,NODE_USES_PARSER=false,VISITOR=true,TRACK_TOKENS=true,NODE_PREFIX=O,NODE_EXTENDS=,NODE_FACTORY=,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
package com.orientechnologies.orient.core.sql.parser;

public
class OArraySingleValuesSelector extends SimpleNode {
import java.util.ArrayList;
import java.util.List;

public class OArraySingleValuesSelector extends SimpleNode {

protected List<OArraySelector> items = new ArrayList<OArraySelector>();

public OArraySingleValuesSelector(int id) {
super(id);
}
Expand All @@ -12,10 +17,23 @@ public OArraySingleValuesSelector(OrientSql p, int id) {
super(p, id);
}


/** Accept the visitor. **/
public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
return visitor.visit(this, data);
}

@Override
public String toString() {
boolean first = true;
StringBuilder result = new StringBuilder();
for (OArraySelector item : items) {
if (!first) {
result.append(",");
}
result.append(item.toString());
first = false;
}
return result.toString();
}
}
/* JavaCC - OriginalChecksum=991998c77a4831184b6dca572513fd8d (do not edit this line) */
Expand Up @@ -12,13 +12,24 @@ public abstract class OBooleanExpression extends SimpleNode {
public boolean evaluate(OIdentifiable currentRecord) {
return true;
}

@Override
public String toString() {
return "true";
}
};

public static OBooleanExpression FALSE = new OBooleanExpression(0) {
@Override
public boolean evaluate(OIdentifiable currentRecord) {
return false;
}

@Override
public String toString() {
return "false";
}

};

public OBooleanExpression(int id) {
Expand Down
Expand Up @@ -10,7 +10,7 @@ public class OContainsAllCondition extends OBooleanExpression {

protected OExpression right;

protected OOrBlock rightBlock;
protected OOrBlock rightBlock;

public OContainsAllCondition(int id) {
super(id);
Expand All @@ -32,7 +32,18 @@ public boolean evaluate(OIdentifiable currentRecord) {

@Override
public String toString() {
return left.toString() + " CONTAINSALL " + right.toString();
StringBuilder result = new StringBuilder();
result.append(left.toString());
result.append(" CONTAINSALL ");
if (right != null) {
result.append(right.toString());
} else if (rightBlock != null) {
result.append("(");
result.append(rightBlock.toString());
result.append(")");
}

return result.toString();
}

public OExpression getLeft() {
Expand Down
Expand Up @@ -30,7 +30,18 @@ public boolean evaluate(OIdentifiable currentRecord) {

@Override
public String toString() {
return left.toString() + " CONTAINS " + right.toString();
StringBuilder result = new StringBuilder();
result.append(left.toString());
result.append(" CONTAINS ");
if (right != null) {
result.append(right.toString());
} else if (condition != null) {
result.append("(");
result.append(condition.toString());
result.append(")");
}

return result.toString();
}

}
Expand Down
Expand Up @@ -76,7 +76,7 @@ public String toString() {
}

private String encode(String s) {
return s.replaceAll("\"", "\\\"");
return s.replaceAll("\"", "\\\\\"");
}
}
/* JavaCC - OriginalChecksum=9c860224b121acdc89522ae97010be01 (do not edit this line) */
Expand Up @@ -31,7 +31,7 @@ public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
@Override
public String toString() {
StringBuilder result = new StringBuilder();
if (star) {
if (Boolean.TRUE.equals(star)) {
result.append("*");
} else {
if (leftDepth != null) {
Expand Down

0 comments on commit 10c510e

Please sign in to comment.