public static UpdateModify cloneUpdateModify(UpdateModify update) { UpdateModify result = new UpdateModify(); result.getUsing().addAll(update.getUsing()); result.setWithIRI(update.getWithIRI()); result.setElement(update.getWherePattern()); for(Quad quad : update.getInsertQuads()) { result.getInsertAcc().addQuad(quad); } for(Quad quad : update.getDeleteQuads()) { result.getDeleteAcc().addQuad(quad); } return result; } }
@Override public void visit(UpdateModify update) { Element el = update.getWherePattern() ; Element el2 = ElementTransformer.transform(el, elTransform, exprTransform) ; List<Quad> del = update.getDeleteQuads() ; List<Quad> del1 = transform(del) ; List<Quad> ins = update.getInsertQuads() ; List<Quad> ins1 = transform(ins) ; UpdateModify mod = new UpdateModify() ; addAll(mod.getDeleteAcc(), del1) ; addAll(mod.getInsertAcc(), ins1) ; mod.setElement(el2); result = mod ; }
@Override public boolean equalTo(Update obj, NodeIsomorphismMap isoMap) { if (this == obj) return true ; if (obj == null) return false ; if (getClass() != obj.getClass()) return false ; UpdateModify other = (UpdateModify)obj ; if ( hasDelete != other.hasDelete ) return false ; if ( hasInsert != other.hasInsert ) return false ; if ( ! equalIso(other, isoMap)) return false ; if ( ! Iso.isomorphicQuads(getDeleteQuads(), other.getDeleteQuads(), isoMap) ) return false ; if ( ! Iso.isomorphicQuads(getInsertQuads(), other.getInsertQuads(), isoMap) ) return false ; if ( ! wherePattern.equalTo(other.wherePattern, isoMap) ) return false ; return true ; } }
UpdateModify retval = new UpdateModify(); if (with != null) graph = with; retval.setWithIRI(graph); retval.setHasInsertClause(true); acc = retval.getInsertAcc(); iter = getQuads(inserts); while (iter.hasNext()) { retval.setHasDeleteClause(true); acc = retval.getDeleteAcc(); retval.setElement(whereProcessor.setVars(values).build());
@Test public void testModify1() { DatasetGraph gStore = getEmptyDatasetGraph() ; defaultGraphData(gStore, data2()) ; namedGraphData(gStore, graphIRI, Factory.createDefaultGraph()) ; UpdateModify modify = new UpdateModify() ; Element element = QueryFactory.createElement("{ ?s <http://example/p> ?o }" ) ; modify.setElement(element) ; modify.getInsertAcc().addQuad(new Quad(graphIRI, triple1)) ; modify.getDeleteAcc().addTriple(SSE.parseTriple("(?s <http://example/p> ?o)")) ; modify.getDeleteAcc().addQuad(SSE.parseQuad("(<http://example/graph> ?s <http://example/p> ?o)")) ; UpdateAction.execute(modify, gStore) ; assertFalse(graphEmpty(gStore.getGraph(graphIRI))) ; assertTrue(graphEmpty(gStore.getDefaultGraph())) ; assertTrue(graphContains(gStore.getGraph(graphIRI), triple1)) ; }
if ( update.getWithIRI() != null ) output(update.getWithIRI()) ; if ( update.hasDeleteClause() ) List<Quad> deleteQuads = update.getDeleteQuads() ; out.ensureStartOfLine() ; out.print("DELETE ") ; if ( update.hasInsertClause() ) List<Quad> insertQuads = update.getInsertQuads() ; out.ensureStartOfLine() ; out.print("INSERT ") ; if ( ! update.hasInsertClause() && ! update.hasDeleteClause() ) for ( Node x : update.getUsing() ) for ( Node x : update.getUsingNamed() ) Element el = update.getWherePattern() ; out.ensureStartOfLine() ; out.print("WHERE") ;
public static Iterator<Diff<Set<Quad>>> createIteratorDiff(QueryExecutionFactory qef, UpdateModify update, int batchSize) { Element wherePattern = update.getWherePattern(); Query query = QueryUtils.elementToQuery(wherePattern); // TODO Limit and offset... QueryExecution qe = qef.createQueryExecution(query); ExtendedIterator<Binding> itBinding = ResultSetUtils.toIteratorBinding(qe); Iterator<List<Binding>> itBindingChunk = Iterators.partition(itBinding, batchSize); Diff<List<Quad>> template = new Diff<List<Quad>>(update.getInsertQuads(), update.getDeleteQuads(), null); Iterator<Diff<Set<Quad>>> result = createIteratorDiff(itBindingChunk, template); //QuadDiffIterator result = new QuadDiffIterator(itBindingChunk, template); return result; }
public static Iterator<Diff<Set<Quad>>> createIteratorDiff(QueryExecutionFactory qef, UpdateDeleteWhere update, int batchSize) { UpdateModify tmp = new UpdateModify(); QuadAcc acc = tmp.getDeleteAcc(); for(Quad quad : update.getQuads()) { acc.addQuad(quad); } Element element = QuadUtils.toElement(acc.getQuads()); tmp.setElement(element); Iterator<Diff<Set<Quad>>> result = createIteratorDiff(qef, tmp, batchSize); return result; }
@Override public void visit(UpdateModify update) { Node withGraph = update.getWithIRI(); Element elt = update.getWherePattern(); execDelete(datasetGraph, update.getDeleteQuads(), withGraph, it); Iter.close(it); execInsert(datasetGraph, update.getInsertQuads(), withGraph, it2); Iter.close(it2);
final public Update Modify() throws ParseException { Element el ; String iri = null ; UpdateModify up = new UpdateModify() ; startModifyUpdate() ; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { jj_consume_token(WITH); iri = iri(); Node n = createNode(iri) ; up.setWithIRI(n) ; break; default: startWherePattern() ; el = GroupGraphPattern(); up.setElement(el) ; finishWherePattern() ; finishModifyUpdate() ;
private static Collection<ConstraintViolationException> validateUpdateRequest(final UpdateRequest request) { return request.getOperations().stream() .flatMap(x -> { if (x instanceof UpdateModify) { final UpdateModify y = (UpdateModify) x; return concat(y.getInsertQuads().stream(), y.getDeleteQuads().stream()); } else if (x instanceof UpdateData) { return ((UpdateData) x).getQuads().stream(); } else if (x instanceof UpdateDeleteWhere) { return ((UpdateDeleteWhere) x).getQuads().stream(); } else { return empty(); } }) .map(x -> x.asTriple()) .flatMap(FedoraResourceImpl::validateTriple) .filter(x -> x != null) .collect(Collectors.toList()); }
@Test public void testInsert4() { DatasetGraph gStore = getEmptyDatasetGraph() ; defaultGraphData(gStore, graph1) ; UpdateModify insert = new UpdateModify() ; insert.getInsertAcc().addTriple(SSE.parseTriple("(?s <http://example/p> 1066)")) ; Element element = QueryFactory.createElement("{ ?s <http://example/p> 2007 }" ) ; insert.setElement(element) ; UpdateAction.execute(insert, gStore) ; assertTrue(graphContains(gStore.getDefaultGraph(), triple2)) ; }
@Test public void testInsert2() { DatasetGraph gStore = getEmptyDatasetGraph() ; UpdateModify insert = new UpdateModify() ; insert.getInsertAcc().addTriple(triple1) ; UpdateAction.execute(insert, gStore) ; assertTrue(graphContains(gStore.getDefaultGraph(), triple1)) ; }
public static void fixVarNames(UpdateRequest updateRequest) { List<Update> updates = updateRequest.getOperations(); for(Update update : updates) { if(update instanceof UpdateDeleteInsert) { UpdateDeleteInsert x = (UpdateDeleteInsert)update; Element before = x.getWherePattern(); Element after = ElementUtils.fixVarNames(before); x.setElement(after); } else if(update instanceof UpdateModify) { UpdateModify x = (UpdateModify)update; Element before = x.getWherePattern(); Element after = ElementUtils.fixVarNames(before); x.setElement(after); } } }
List<Quad> quads = update.getInsertQuads(); Element element = update.getWherePattern();
final public void DeleteClause(UpdateModify up) throws ParseException { QuadAcc qp = up.getDeleteAcc() ; Token t ; t = jj_consume_token(DELETE); int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null; startDeleteTemplate(qp, beginLine, beginColumn) ; QuadPattern(qp); finishDeleteTemplate(qp, beginLine, beginColumn) ; up.setHasDeleteClause(true) ; }
final public void InsertClause(UpdateModify up) throws ParseException { QuadAcc qp = up.getInsertAcc() ; Token t ; t = jj_consume_token(INSERT); int beginLine = t.beginLine; int beginColumn = t.beginColumn; t = null; startInsertTemplate(qp, beginLine, beginColumn) ; QuadPattern(qp); finishInsertTemplate(qp, beginLine, beginColumn) ; up.setHasInsertClause(true) ; }
@Override public void visit(UpdateModify mod) { SyntaxVarScope.check(mod.getWherePattern()) ; } } ;
@Test public void testInsert1() { DatasetGraph gStore = getEmptyDatasetGraph() ; UpdateModify insert = new UpdateModify() ; UpdateAction.execute(insert, gStore) ; assertTrue(graphEmpty(gStore.getDefaultGraph())) ; }
@Override public void visit(UpdateModify update) { Element el = update.getWherePattern() ; Element el2 = ElementTransformer.transform(el, elTransform, exprTransform) ; List<Quad> del = update.getDeleteQuads() ; List<Quad> del1 = transform(del) ; List<Quad> ins = update.getInsertQuads() ; List<Quad> ins1 = transform(ins) ; UpdateModify mod = new UpdateModify() ; addAll(mod.getDeleteAcc(), del1) ; addAll(mod.getInsertAcc(), ins1) ; result = mod ; }