public FunctionEnvBase(ExecutionContext execCxt) { this(execCxt.getContext(), execCxt.getActiveGraph(), execCxt.getDataset()) ; execContext = execCxt ; }
@Override public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { super.build(argSubject, predicate, argObject, execCxt); DatasetGraph dsg = execCxt.getDataset(); server = chooseTextIndex(execCxt,dsg); }
@Override public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { super.build(argSubject, predicate, argObject, execCxt); DatasetGraph dsg = execCxt.getDataset(); server = chooseTextIndex(execCxt,dsg); }
@Override protected QueryIterator execute(OpQuadPattern quadPattern, QueryIterator input) { if ( ! isForTDB ) return super.execute(quadPattern, input) ; // DatasetGraph dg = execCxt.getDataset() ; // if ( ! ( dg instanceof DatasetGraphTDB ) ) // throw new InternalErrorException("Not a TDB backed dataset in quad pattern execution") ; DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; BasicPattern bgp = quadPattern.getBasicPattern() ; Node gn = quadPattern.getGraphNode() ; return optimizeExecuteQuads(ds, input, gn, bgp, null, execCxt) ; }
private QueryIterator specialcase(Node gn, Op subOp, QueryIterator input) { // This is a placeholder for code to specially handle explicitly named // default graph and union graph. if (Quad.isDefaultGraph(gn)) { ExecutionContext cxt2 = new ExecutionContext(execCxt, execCxt.getDataset().getDefaultGraph()) ; return execute(subOp, input, cxt2) ; } // Bad news -- if ( Lib.equals(gn, Quad.tripleInQuad) ) {} return null ; }
@Override protected QueryIterator execute(OpQuadPattern quadPattern, QueryIterator input) { if ( ! isForTDB ) return super.execute(quadPattern, input) ; // DatasetGraph dg = execCxt.getDataset() ; // if ( ! ( dg instanceof DatasetGraphTDB ) ) // throw new InternalErrorException("Not a TDB backed dataset in quad pattern execution") ; DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; BasicPattern bgp = quadPattern.getBasicPattern() ; Node gn = quadPattern.getGraphNode() ; return optimizeExecuteQuads(ds, input, gn, bgp, null, execCxt) ; }
@Override protected QueryIterator nextStage(Binding outerBinding) { DatasetGraph ds = getExecContext().getDataset() ; // Is this closed? Iterator<Node> graphNameNodes = makeSources(ds, outerBinding, opGraph.getNode()); // List<Node> x = Iter.toList(graphNameNodes) ; // graphNameNodes = x.iterator() ; // System.out.println(x) ; QueryIterator current = new QueryIterGraphInner(outerBinding, graphNameNodes, opGraph, getExecContext()) ; return current ; }
protected static QueryIterator buildIterator(Binding binding, Node graphNode, Op opExec, ExecutionContext outerCxt) { if ( !graphNode.isURI() && !graphNode.isBlank() ) // e.g. variable bound to a literal or blank node. throw new ARQInternalErrorException("QueryIterGraphInner.buildIterator: Not a URI or blank node: "+graphNode) ; // We can't just use DatasetGraph.getGraph because it may // "auto-create" graphs. Use the containsGraph function. boolean syntheticGraph = ( Quad.isDefaultGraph(graphNode) || Quad.isUnionGraph(graphNode) ) ; if ( ! syntheticGraph && ! outerCxt.getDataset().containsGraph(graphNode) ) return null ; Graph g = outerCxt.getDataset().getGraph(graphNode) ; // And the contains was true??!!!!!! if ( g == null ) return null ; //throw new ARQInternalErrorException(".containsGraph was true but .getGraph is null") ; ExecutionContext cxt2 = new ExecutionContext(outerCxt, g) ; QueryIterator subInput = QueryIterSingleton.create(binding, cxt2) ; return QC.execute(opExec, subInput, cxt2) ; }
@Override public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { super.build(argSubject, predicate, argObject, execCxt) ; DatasetGraph dsg = execCxt.getDataset() ; textIndex = chooseTextIndex(execCxt, dsg) ; if (argSubject.isList()) { int size = argSubject.getArgListSize(); if (size == 0 || size > 4) { throw new QueryBuildException("Subject has "+argSubject.getArgList().size()+" elements, must be at least 1 and not greater than 4: "+argSubject); } } if (argObject.isList()) { List<Node> list = argObject.getArgList() ; if (list.size() == 0) throw new QueryBuildException("Zero-length argument list") ; if (list.size() > 5) throw new QueryBuildException("Too many arguments in list : " + list) ; } }
static Table evalDS(OpDatasetNames opDSN, Evaluator evaluator) { Node graphNode = opDSN.getGraphNode() ; if ( graphNode.isURI() ) { if ( evaluator.getExecContext().getDataset().containsGraph(graphNode) ) { return new TableUnit() ; } else // WRONG { return new TableEmpty() ; } } if ( ! Var.isVar(graphNode) ) throw new ARQInternalErrorException("OpDatasetNames: Not a URI or variable: "+graphNode) ; DatasetGraph dsg = evaluator.getExecContext().getDataset() ; Iterator<Node> iter = dsg.listGraphNodes() ; List<Binding> list = new ArrayList<>((int)dsg.size()) ; for ( ; iter.hasNext(); ) { Node gn = iter.next(); Binding b = BindingFactory.binding(Var.alloc(graphNode), gn) ; list.add(b) ; } QueryIterator qIter = new QueryIterPlainWrapper(list.iterator(), evaluator.getExecContext()) ; return TableFactory.create(qIter) ; }
@Override public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { super.build(argSubject, predicate, argObject, execCxt) ; DatasetGraph dsg = execCxt.getDataset() ; textIndex = chooseTextIndex(execCxt, dsg) ; if (argSubject.isList()) { int size = argSubject.getArgListSize(); if (size == 0 || size > 4) { throw new QueryBuildException("Subject has "+argSubject.getArgList().size()+" elements, must be at least 1 and not greater than 4: "+argSubject); } } if (argObject.isList()) { List<Node> list = argObject.getArgList() ; if (list.size() == 0) throw new QueryBuildException("Zero-length argument list") ; if (list.size() > 5) throw new QueryBuildException("Too many arguments in list : " + list) ; } }
@Override protected QueryIterator execute(OpDatasetNames dsNames, QueryIterator input) { DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; Predicate<Tuple<NodeId>> filter = QC2.getFilter(execCxt.getContext()) ; Node gn = dsNames.getGraphNode() ; if ( Var.isVar(gn) ) return SolverLib.graphNames(ds, dsNames.getGraphNode(), input, filter, execCxt) ; else return SolverLib.testForGraphName(ds, dsNames.getGraphNode(), input, filter, execCxt) ; }
@Override protected QueryIterator execute(OpDatasetNames dsNames, QueryIterator input) { DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; Predicate<Tuple<NodeId>> filter = QC2.getFilter(execCxt.getContext()) ; Node gn = dsNames.getGraphNode() ; if ( Var.isVar(gn) ) return SolverLib.graphNames(ds, dsNames.getGraphNode(), input, filter, execCxt) ; else return SolverLib.testForGraphName(ds, dsNames.getGraphNode(), input, filter, execCxt) ; }
@Override public QueryIterator exec(Binding binding, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { argSubject = Substitute.substitute(argSubject, binding); argObject = Substitute.substitute(argObject, binding); if(!argObject.getArg().isVariable()) { throw new ExprEvalException("Right hand side of tosh:targetContains must be a variable"); } Node targetNode = argSubject.getArgList().get(0); Node shapesGraphNode = argSubject.getArgList().get(1); Model currentModel = ModelFactory.createModelForGraph(execCxt.getActiveGraph()); Dataset dataset = new DatasetWithDifferentDefaultModel(currentModel, DatasetImpl.wrap(execCxt.getDataset())); Model model = dataset.getNamedModel(shapesGraphNode.getURI()); Resource target = (Resource) model.asRDFNode(targetNode); Set<Node> focusNodes = new HashSet<Node>(); SHACLUtil.addNodesInTarget(target, dataset, focusNodes); return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), focusNodes.iterator(), execCxt); } }
@Override public QueryIterator exec(Binding binding, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { argSubject = Substitute.substitute(argSubject, binding); argObject = Substitute.substitute(argObject, binding); if(!argObject.getArg().isVariable()) { throw new ExprEvalException("Right hand side of tosh:targetContains must be a variable"); } Node targetNode = argSubject.getArgList().get(0); Node shapesGraphNode = argSubject.getArgList().get(1); Model currentModel = ModelFactory.createModelForGraph(execCxt.getActiveGraph()); Dataset dataset = new DatasetWithDifferentDefaultModel(currentModel, DatasetImpl.wrap(execCxt.getDataset())); Model model = dataset.getNamedModel(shapesGraphNode.getURI()); Resource target = (Resource) model.asRDFNode(targetNode); Set<Node> focusNodes = new HashSet<Node>(); SHACLUtil.addNodesInTarget(target, dataset, focusNodes); return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), focusNodes.iterator(), execCxt); } }
@Override public QueryIterator execute(OpQuadPattern opQuadPattern, QueryIterator input) { Node gn = opQuadPattern.getGraphNode() ; gn = decideGraphNode(gn, execCxt) ; if ( execCxt.getDataset() instanceof DatasetGraphTDB ) { DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; Explain.explain("Execute", opQuadPattern.getPattern(), execCxt.getContext()) ; BasicPattern bgp = opQuadPattern.getBasicPattern() ; return SolverLib.execute(ds, gn, bgp, input, filter, execCxt) ; } // Maybe a TDB named graph inside a non-TDB dataset. Graph g = execCxt.getActiveGraph() ; if ( g instanceof GraphTDB ) { // Triples graph from TDB (which is the default graph of the dataset), // used a named graph in a composite dataset. BasicPattern bgp = opQuadPattern.getBasicPattern() ; Explain.explain("Execute", bgp, execCxt.getContext()) ; // Don't pass in G -- gn may be different. return SolverLib.execute(((GraphTDB)g).getDatasetGraphTDB(), gn, bgp, input, filter, execCxt) ; } Log.warn(this, "Non-DatasetGraphTDB passed to OpExecutorPlainTDB") ; return super.execute(opQuadPattern, input) ; }
@Override public QueryIterator execute(OpQuadPattern opQuadPattern, QueryIterator input) { Node gn = opQuadPattern.getGraphNode() ; gn = decideGraphNode(gn, execCxt) ; if ( execCxt.getDataset() instanceof DatasetGraphTDB ) { DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; Explain.explain("Execute", opQuadPattern.getPattern(), execCxt.getContext()) ; BasicPattern bgp = opQuadPattern.getBasicPattern() ; return SolverLib.execute(ds, gn, bgp, input, filter, execCxt) ; } // Maybe a TDB named graph inside a non-TDB dataset. Graph g = execCxt.getActiveGraph() ; if ( g instanceof GraphTDB ) { // Triples graph from TDB (which is the default graph of the dataset), // used a named graph in a composite dataset. BasicPattern bgp = opQuadPattern.getBasicPattern() ; Explain.explain("Execute", bgp, execCxt.getContext()) ; // Don't pass in G -- gn may be different. return SolverLib.execute(((GraphTDB)g).getDSG(), gn, bgp, input, filter, execCxt) ; } Log.warn(this, "Non-DatasetGraphTDB passed to OpExecutorPlainTDB") ; return super.execute(opQuadPattern, input) ; }
protected QueryIterator execute(OpQuadPattern quadPattern, QueryIterator input) { // Convert to BGP forms to execute in this graph-centric engine. if (quadPattern.isDefaultGraph() && execCxt.getActiveGraph() == execCxt.getDataset().getDefaultGraph()) { // Note we tested that the containing graph was the dataset's // default graph. // Easy case. OpBGP opBGP = new OpBGP(quadPattern.getBasicPattern()) ; return execute(opBGP, input) ; } // Not default graph - (graph .... ) OpBGP opBGP = new OpBGP(quadPattern.getBasicPattern()) ; OpGraph op = new OpGraph(quadPattern.getGraphNode(), opBGP) ; return execute(op, input) ; }
DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; return optimizeExecuteQuads(ds, input, quadPattern.getGraphNode(), quadPattern.getBasicPattern(),
DatasetGraphTDB ds = (DatasetGraphTDB)execCxt.getDataset() ; return optimizeExecuteQuads(ds, input, quadPattern.getGraphNode(), quadPattern.getBasicPattern(),