Skip to content

Commit

Permalink
new parser - implementing query rewrite
Browse files Browse the repository at this point in the history
  • Loading branch information
luigidellaquila committed Feb 10, 2015
1 parent b5dcad7 commit 1f20445
Show file tree
Hide file tree
Showing 23 changed files with 2,123 additions and 1,671 deletions.
415 changes: 236 additions & 179 deletions core/src/main/grammar/OrientSQL.jjt

Large diffs are not rendered by default.

Expand Up @@ -201,7 +201,7 @@ public OCommandExecutorSQLSelect parse(final OCommandRequest iRequest) {
// }
// textRequest.setText(queryText);

// testNewParser(iRequest);
testNewParser(iRequest);
super.parse(iRequest);

initContext();
Expand Down
Expand Up @@ -2,8 +2,12 @@
/* 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 OArraySelector extends SimpleNode {
public class OArraySelector extends SimpleNode {

protected ORid rid;
protected OInputParameter inputParam;
protected OExpression expression;

public OArraySelector(int id) {
super(id);
}
Expand All @@ -12,10 +16,21 @@ public OArraySelector(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() {
if (rid != null) {
return rid.toString();
} else if (inputParam != null) {
return inputParam.toString();
} else if (expression != null) {
return expression.toString();
}
return null;
}
}
/* JavaCC - OriginalChecksum=f87a5543b1dad0fb5f6828a0663a7c9e (do not edit this line) */
Expand Up @@ -2,8 +2,16 @@
/* 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 OBaseExpression extends OMathExpression {
public class OBaseExpression extends OMathExpression {

protected ONumber number;

protected OBaseIdentifier identifier;

protected OInputParameter inputParam;

OModifier modifier;

public OBaseExpression(int id) {
super(id);
}
Expand All @@ -12,10 +20,26 @@ public OBaseExpression(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() {
StringBuilder result = new StringBuilder();
if (number != null) {
result.append(number.toString());
} else if (identifier != null) {
result.append(identifier.toString());
} else if (inputParam != null) {
result.append(inputParam.toString());
}

if (modifier != null) {
result.append(modifier.toString());
}
return result.toString();
}
}
/* JavaCC - OriginalChecksum=71b3e2d1b65c923dc7cfe11f9f449d2b (do not edit this line) */
Expand Up @@ -2,8 +2,12 @@
/* 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 OBaseIdentifier extends SimpleNode {
public class OBaseIdentifier extends SimpleNode {

protected OLevelZeroIdentifier levelZero;

protected OSuffixIdentifier suffix;

public OBaseIdentifier(int id) {
super(id);
}
Expand All @@ -12,10 +16,19 @@ public OBaseIdentifier(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() {
if (levelZero != null) {
return levelZero.toString();
} else if (suffix != null) {
return suffix.toString();
}
return super.toString();
}
}
/* JavaCC - OriginalChecksum=ed89af10d8be41a83428c5608a4834f6 (do not edit this line) */
Expand Up @@ -27,5 +27,11 @@ public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
public boolean evaluate(OIdentifiable currentRecord) {
return false;
}

@Override
public String toString() {
return left.toString() + " CONTAINS " + right.toString();
}

}
/* JavaCC - OriginalChecksum=bad1118296ea74860e88d66bfe9fa222 (do not edit this line) */
Expand Up @@ -6,6 +6,10 @@

public
class OContainsTextCondition extends OBooleanExpression {

protected OExpression left;
protected OExpression right;

public OContainsTextCondition(int id) {
super(id);
}
Expand All @@ -23,5 +27,11 @@ public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
@Override public boolean evaluate(OIdentifiable currentRecord) {
return false;
}

@Override
public String toString() {
return left.toString() + " CONTAINSTEXT " + right.toString();
}

}
/* JavaCC - OriginalChecksum=b588492ba2cbd0f932055f1f64bbbecd (do not edit this line) */
Expand Up @@ -27,5 +27,19 @@ public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
public boolean evaluate(OIdentifiable currentRecord) {
return false;
}

public String toString() {
StringBuilder result = new StringBuilder();
result.append(left.toString());
result.append(" CONTAINSVALUE ");
if (condition != null) {
result.append("(");
result.append(condition.toString());
result.append(")");
} else {
result.append(expression.toString());
}
return result.toString();
}
}
/* JavaCC - OriginalChecksum=6fda752f10c8d8731f43efa706e39459 (do not edit this line) */
Expand Up @@ -2,8 +2,7 @@
/* 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 OEqualsCompareOperator extends SimpleNode implements OBinaryCompareOperator {
public class OEqualsCompareOperator extends SimpleNode implements OBinaryCompareOperator {
public OEqualsCompareOperator(int id) {
super(id);
}
Expand All @@ -12,14 +11,19 @@ public OEqualsCompareOperator(OrientSql p, int id) {
super(p, id);
}


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

@Override public boolean execute(Object left, Object right) {
@Override
public boolean execute(Object left, Object right) {
return false;
}

@Override
public String toString() {
return "=";
}
}
/* JavaCC - OriginalChecksum=bd2ec5d13a1d171779c2bdbc9d3a56bc (do not edit this line) */
Expand Up @@ -31,5 +31,10 @@ public void setValue(String value) {
public String toString(String prefix) {
return value;
}

@Override
public String toString() {
return value;
}
}
/* JavaCC - OriginalChecksum=691a2eb5096f7b5e634b2ca8ac2ded3a (do not edit this line) */
Expand Up @@ -12,7 +12,7 @@ public class OInCondition extends OBooleanExpression {
protected OSelectStatement rightStatement;
protected Collection<Object> rightCollection;
protected Object right;
protected Object rightParam;
protected Object rightParam;

public OInCondition(int id) {
super(id);
Expand All @@ -31,5 +31,39 @@ public Object jjtAccept(OrientSqlVisitor visitor, Object data) {
public boolean evaluate(OIdentifiable currentRecord) {
return false;
}

public String toString() {
StringBuilder result = new StringBuilder();
result.append(left.toString());
result.append(" IN ");
if (rightStatement != null) {
result.append("(");
result.append(rightStatement.toString());
result.append(")");
} else if (rightCollection != null) {
result.append("[");
boolean first = true;
for (Object o : rightCollection) {
if (!first) {
result.append(", ");
}
result.append(convertToString(o));
first = false;
}
result.append("]");
} else if (right != null) {
result.append(convertToString(right));
} else if (rightParam != null) {
result.append(convertToString(rightParam));
}
return result.toString();
}

private String convertToString(Object o) {
if (o instanceof String) {
return "\"" + ((String) o).replaceAll("\"", "\\\"") + "\"";
}
return o.toString();
}
}
/* JavaCC - OriginalChecksum=00df7cb1877c0a12d24205c1700653c7 (do not edit this line) */
Expand Up @@ -6,6 +6,11 @@

public
class OInstanceofCondition extends OBooleanExpression {

protected OExpression left;
protected OIdentifier right;
protected String rightString;

public OInstanceofCondition(int id) {
super(id);
}
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 OLetClause extends SimpleNode {
import java.util.ArrayList;
import java.util.List;

public class OLetClause extends SimpleNode {

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

public OLetClause(int id) {
super(id);
}
Expand All @@ -12,10 +17,25 @@ public OLetClause(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() {
StringBuilder result = new StringBuilder();
result.append("LET ");
boolean first = true;
for (OLetItem item : items) {
if (!first) {
result.append(", ");
}
result.append(item.toString());
first = false;
}
return result.toString();
}
}

/* JavaCC - OriginalChecksum=201a864b5ed7f1fbe0533843a7acd03d (do not edit this line) */
Expand Up @@ -2,8 +2,11 @@
/* 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 OLetItem extends SimpleNode {
public class OLetItem extends SimpleNode {

OIdentifier varName;
OExpression expression;

public OLetItem(int id) {
super(id);
}
Expand All @@ -12,10 +15,14 @@ public OLetItem(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() {
return varName.toString() + " = " + expression.toString();
}
}
/* JavaCC - OriginalChecksum=bb3cd298d79f50d72f6842e6d6ea4fb2 (do not edit this line) */
Expand Up @@ -2,8 +2,11 @@
/* 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 OLevelZeroIdentifier extends SimpleNode {
public class OLevelZeroIdentifier extends SimpleNode {
protected OFunctionCall functionCall;
protected Boolean self;
protected OCollection collection;

public OLevelZeroIdentifier(int id) {
super(id);
}
Expand All @@ -12,10 +15,22 @@ public OLevelZeroIdentifier(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() {
if (functionCall != null) {
return functionCall.toString();
} else if (Boolean.TRUE.equals(self)) {
return "@this";
} else if (collection != null) {
return collection.toString();
}

return super.toString();
}
}
/* JavaCC - OriginalChecksum=0305fcf120ba9395b4c975f85cdade72 (do not edit this line) */

0 comments on commit 1f20445

Please sign in to comment.