NIHVIVO-3795 NIHVIVO-3793 fixed deletion bugs in RDFServiceSDB
This commit is contained in:
parent
2cc59294be
commit
e5509654d2
1 changed files with 29 additions and 9 deletions
|
@ -113,7 +113,9 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
|
||||||
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
modelChange.getSerializedModel().mark(Integer.MAX_VALUE);
|
||||||
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
dataset.getLock().enterCriticalSection(Lock.WRITE);
|
||||||
try {
|
try {
|
||||||
Model model = dataset.getNamedModel(modelChange.getGraphURI());
|
Model model = (modelChange.getGraphURI() == null)
|
||||||
|
? dataset.getDefaultModel()
|
||||||
|
: dataset.getNamedModel(modelChange.getGraphURI());
|
||||||
operateOnModel(model, modelChange, dataset);
|
operateOnModel(model, modelChange, dataset);
|
||||||
} finally {
|
} finally {
|
||||||
dataset.getLock().leaveCriticalSection();
|
dataset.getLock().leaveCriticalSection();
|
||||||
|
@ -158,9 +160,10 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
|
||||||
model.read(modelChange.getSerializedModel(), null,
|
model.read(modelChange.getSerializedModel(), null,
|
||||||
getSerializationFormatString(modelChange.getSerializationFormat()));
|
getSerializationFormatString(modelChange.getSerializationFormat()));
|
||||||
} else if (modelChange.getOperation() == ModelChange.Operation.REMOVE) {
|
} else if (modelChange.getOperation() == ModelChange.Operation.REMOVE) {
|
||||||
model.remove(parseModel(modelChange));
|
Model removal = parseModel(modelChange);
|
||||||
|
model.remove(removal);
|
||||||
if (dataset != null) {
|
if (dataset != null) {
|
||||||
removeBlankNodesWithSparqlUpdate(dataset, model, modelChange.getGraphURI());
|
removeBlankNodesWithSparqlUpdate(dataset, removal, modelChange.getGraphURI());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.error("unrecognized operation type");
|
log.error("unrecognized operation type");
|
||||||
|
@ -172,15 +175,25 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
|
||||||
|
|
||||||
private void removeBlankNodesWithSparqlUpdate(Dataset dataset, Model model, String graphURI) {
|
private void removeBlankNodesWithSparqlUpdate(Dataset dataset, Model model, String graphURI) {
|
||||||
|
|
||||||
Model blankNodeModel = ModelFactory.createDefaultModel();
|
List<Statement> blankNodeStatements = new ArrayList<Statement>();
|
||||||
StmtIterator stmtIt = model.listStatements();
|
StmtIterator stmtIt = model.listStatements();
|
||||||
while (stmtIt.hasNext()) {
|
while (stmtIt.hasNext()) {
|
||||||
Statement stmt = stmtIt.nextStatement();
|
Statement stmt = stmtIt.nextStatement();
|
||||||
if (stmt.getSubject().isAnon() || stmt.getObject().isAnon()) {
|
if (stmt.getSubject().isAnon() || stmt.getObject().isAnon()) {
|
||||||
blankNodeModel.add(stmt);
|
blankNodeStatements.add(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(blankNodeStatements.size() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Model blankNodeModel = ModelFactory.createDefaultModel();
|
||||||
|
blankNodeModel.add(blankNodeStatements);
|
||||||
|
|
||||||
|
log.debug("removal model size " + model.size());
|
||||||
|
log.debug("blank node model size " + blankNodeModel.size());
|
||||||
|
|
||||||
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s } FILTER (!bound(?ss)) }";
|
String rootFinder = "SELECT ?s WHERE { ?s ?p ?o OPTIONAL { ?ss ?pp ?s } FILTER (!bound(?ss)) }";
|
||||||
Query rootFinderQuery = QueryFactory.create(rootFinder);
|
Query rootFinderQuery = QueryFactory.create(rootFinder);
|
||||||
QueryExecution qe = QueryExecutionFactory.create(rootFinderQuery, blankNodeModel);
|
QueryExecution qe = QueryExecutionFactory.create(rootFinderQuery, blankNodeModel);
|
||||||
|
@ -214,7 +227,11 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
|
||||||
}
|
}
|
||||||
m2.add(stmt);
|
m2.add(stmt);
|
||||||
DataSource ds = DatasetFactory.create();
|
DataSource ds = DatasetFactory.create();
|
||||||
|
if (graphURI == null) {
|
||||||
|
ds.setDefaultModel(dataset.getDefaultModel());
|
||||||
|
} else {
|
||||||
ds.addNamedModel(graphURI, dataset.getNamedModel(graphURI));
|
ds.addNamedModel(graphURI, dataset.getNamedModel(graphURI));
|
||||||
|
}
|
||||||
removeUsingSparqlUpdate(ds, m2, graphURI);
|
removeUsingSparqlUpdate(ds, m2, graphURI);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -276,8 +293,11 @@ public class RDFServiceSDB extends RDFServiceImpl implements RDFService {
|
||||||
// make a plain dataset to force the query to be run in a way that
|
// make a plain dataset to force the query to be run in a way that
|
||||||
// won't overwhelm MySQL with too many joins
|
// won't overwhelm MySQL with too many joins
|
||||||
DataSource ds = DatasetFactory.create();
|
DataSource ds = DatasetFactory.create();
|
||||||
ds.addNamedModel(graphURI, (graphURI != null)
|
if (graphURI == null) {
|
||||||
? dataset.getNamedModel(graphURI) : dataset.getDefaultModel());
|
ds.setDefaultModel(dataset.getDefaultModel());
|
||||||
|
} else {
|
||||||
|
ds.addNamedModel(graphURI, dataset.getNamedModel(graphURI));
|
||||||
|
}
|
||||||
QueryExecution qe = QueryExecutionFactory.create(construct, ds);
|
QueryExecution qe = QueryExecutionFactory.create(construct, ds);
|
||||||
try {
|
try {
|
||||||
Model m = qe.execConstruct();
|
Model m = qe.execConstruct();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue