List<Node> visit(Exp exp) { ArrayList<Node> list = new ArrayList<Node>(); visit(exp, list); return list; }
/** * exp is a Regex return its predicates */ void visitRegex(Edge edge, Expression exp, List<Node> list) { if (exp.isConstant()) { Node node = compiler.createNode(exp.getConstant()); add(list, node, edge); } else if (exp.isTerm() && exp.isTest()) { // path @[ a foaf:Person ] Expression ee = exp.getExpr(); visit(ee, list); } else if (exp.isTerm() && exp.isNot()) { // ! p is a problem because we do not know the predicate nodes ... // let's return top level property, it subsumes all properties //list.clear(); Node node = compiler.createNode(ASTQuery.getRootPropertyURI()); add(list, node, edge); } else { for (Expression ee : exp.getArgs()) { visitRegex(edge, ee, list); } } }
new VisitQuery(compiler).visit(q);
/** * exp is a Regex return its predicates */ void visitRegex(Edge edge, Expression exp, List<Node> list) { if (exp.isConstant()) { Node node = compiler.createNode(exp.getConstant()); add(list, node, edge); } else if (exp.isTerm() && exp.isTest()) { // path @[ a foaf:Person ] Expression ee = exp.getExpr(); visit(ee, list); } else if (exp.isTerm() && exp.isNot()) { // ! p is a problem because we do not know the predicate nodes ... // let's return top level property, it subsumes all properties //list.clear(); Node node = compiler.createNode(ASTQuery.getRootPropertyURI()); add(list, node, edge); } else { for (Expression ee : exp.getArgs()) { visitRegex(edge, ee, list); } } }
new VisitQuery(compiler).visit(q);
add(list, exp.getEdge().getEdgeNode(), exp.getEdge()); if (exp.isPath()){ visit(exp.getPath()); visitRegex(exp.getEdge(), (Expression) exp.getRegex(), list); break; visit(exp.getFilter().getExp(), list); break; visit(exp.getFilter().getExp(), list); break; visit(ee.getFilter().getExp(), list); visit(q.getHaving().getFilter().getExp(), list); visit(ee, list);
List<Node> visit(Exp exp) { ArrayList<Node> list = new ArrayList<Node>(); visit(exp, list); return list; }
add(list, exp.getEdge().getEdgeNode(), exp.getEdge()); if (exp.isPath()){ visit(exp.getPath()); visitRegex(exp.getEdge(), (Expression) exp.getRegex(), list); break; visit(exp.getFilter().getExp(), list); break; visit(exp.getFilter().getExp(), list); break; visit(ee.getFilter().getExp(), list); visit(q.getHaving().getFilter().getExp(), list); visit(ee, list);
void visit(Query q) { query = q; q.setNodeList(visit(q.getBody())); }
void visit(Query q) { query = q; q.setNodeList(visit(q.getBody())); }