Skip to content

Commit

Permalink
stash
Browse files Browse the repository at this point in the history
  • Loading branch information
cbeer committed Nov 12, 2013
1 parent 21e19b9 commit 780f89d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 45 deletions.
Expand Up @@ -52,7 +52,6 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.QueryManager;
import javax.jcr.query.qom.Column;
import javax.jcr.query.qom.Constraint;
Expand Down Expand Up @@ -81,7 +80,6 @@ public class JQLQueryVisitor implements QueryVisitor, ElementVisitor, ExprVisito
private ImmutableSet.Builder<Column> columns;
private ImmutableList.Builder<Ordering> orderings;
private Constraint constraint;
private boolean hasOffset = false;
private boolean hasLimit = false;
private long offset;
private long limit;
Expand Down Expand Up @@ -270,7 +268,6 @@ public void visitLimit(Query query) {
public void visitOffset(Query query) {
if (query.hasOffset()) {
logger.trace("VISIT OFFSET: {}", query.getOffset());
this.hasOffset = true;
this.offset = query.getOffset();
}
}
Expand Down Expand Up @@ -466,14 +463,15 @@ public void visit(ExprFunction1 func) {
String funcName = func.getFunctionSymbol().getSymbol();

try {

final JQLQueryVisitor subVisitor1 = new JQLQueryVisitor(this);
func.getArg().visit(subVisitor1);

switch (funcName) {
case "not":
final JQLQueryVisitor subVisitor1 = new JQLQueryVisitor(this);
func.getArg().visit(subVisitor1);
appendConstraint(queryFactory.not(subVisitor1.getConstraint()));
break;
case "bound":
final Column column = variables.get(func.getArg());
appendConstraint(queryFactory.propertyExistence(column.getSelectorName(), column.getPropertyName()));
default:
throw new NotImplementedException(funcName);
}
Expand All @@ -486,49 +484,68 @@ public void visit(ExprFunction1 func) {
@Override
public void visit(ExprFunction2 func) {
logger.trace("VISIT EXPRFUNCTION2: {}", func);
String funcName = func.getFunctionSymbol().getSymbol();
String funcName = func.getFunctionSymbol().getSymbol().toLowerCase();

try {
final JQLQueryVisitor subVisitor1 = new JQLQueryVisitor(this);
func.getArg1().visit(subVisitor1);

if (funcName.equals("and") || funcName.equals("or")) {
final JQLQueryVisitor subVisitor1 = new JQLQueryVisitor(this);
func.getArg1().visit(subVisitor1);

final JQLQueryVisitor subVisitor2 = new JQLQueryVisitor(this);
func.getArg2().visit(subVisitor2);

switch(funcName.toLowerCase()) {
case "and":
appendConstraint(queryFactory.and(subVisitor1.getConstraint(), subVisitor2.getConstraint()));
break;
case "or":
appendConstraint(queryFactory.or(subVisitor1.getConstraint(), subVisitor2.getConstraint()));
break;
case "not":
appendConstraint(queryFactory.not(subVisitor1.getConstraint()));
break;

case "eq":
appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, queryFactory.literal(getValue(func.getArg2()))));
break;
case "ge":
appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO, queryFactory.literal(getValue(func.getArg2()))));
break;
case "le":
appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO, queryFactory.literal(getValue(func.getArg2()))));
break;
final JQLQueryVisitor subVisitor2 = new JQLQueryVisitor(this);
func.getArg2().visit(subVisitor2);

case "lt":
appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN, queryFactory.literal(getValue(func.getArg2()))));
break;

case "gt":
appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN, queryFactory.literal(getValue(func.getArg2()))));
break;
default:
throw new NotImplementedException(funcName);
switch(funcName) {
case "and":
appendConstraint(queryFactory.and(subVisitor1.getConstraint(), subVisitor2.getConstraint()));
break;
case "or":
appendConstraint(queryFactory.or(subVisitor1.getConstraint(), subVisitor2.getConstraint()));
break;
}
} else if (func.getArg2().isConstant()) {
throw new NotImplementedException("EXPRFUNCTION2 2nd argument must be a constant");
} else {
final String op;
String value = func.getArg2().getConstant().getString();
switch(funcName) {
case "eq":
op = QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO;
break;
case "ge":
op = QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO;
break;
case "le":
op = QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO;
break;
case "lt":
op = QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN;
break;
case "gt":
op = QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN;
break;
case "ne":
op = QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO;
break;
case "contains":
op = QueryObjectModelConstants.JCR_OPERATOR_LIKE;
value = "%" + value + "%";
break;
case "startswith":
op = QueryObjectModelConstants.JCR_OPERATOR_LIKE;
value = value + "%";
break;
case "endswith":
op = QueryObjectModelConstants.JCR_OPERATOR_LIKE;
value = "%" + value;
break;
default:
throw new NotImplementedException(funcName);
}

appendConstraint(queryFactory.comparison(getPropertyValue(func.getArg1()), op, queryFactory.literal(getValue(value))));

}
}

} catch (RepositoryException e) {
propagate(e);
Expand Down Expand Up @@ -606,7 +623,11 @@ public void finishVisit() {
}

public Value getValue(final Expr e) throws RepositoryException {
return session.getValueFactory().createValue(e.getConstant().asString());
return getValue(e.getConstant().asString());
}

public Value getValue(final String e) throws RepositoryException {
return session.getValueFactory().createValue(e);
}

public void appendConstraint(final Constraint c) throws RepositoryException {
Expand Down
Expand Up @@ -102,7 +102,7 @@ public void testRegexFilter() throws RepositoryException {
public void testSecondOrderReturnValues() throws RepositoryException {
final String sparql = "PREFIX dc: <http://purl.org/dc/terms/>" +
"PREFIX fedorarelsext: <http://fedora.info/definitions/v4/rels-ext#>" +
"SELECT ?relatedTitle WHERE { ?subject fedorarelsext:hasPart ?part . ?pid dc:title ?relatedTitle }";
"SELECT ?relatedTitle WHERE { ?subject fedorarelsext:hasPart ?part . ?part dc:title ?relatedTitle }";
JQLConverter testObj = new JQLConverter(session, subjects, sparql);
assertEquals("", testObj.getStatement());
}
Expand Down

0 comments on commit 780f89d

Please sign in to comment.