📄 removestatements.java
字号:
/* Sesame - Storage and Querying architecture for RDF and RDF Schema * Copyright (C) 2001-2005 Aduna * * Contact: * Aduna * Prinses Julianaplein 14 b * 3817 CS Amersfoort * The Netherlands * tel. +33 (0)33 465 99 87 * fax. +33 (0)33 465 99 87 * * http://aduna.biz/ * http://www.openrdf.org/ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package org.openrdf.sesame.sail.test.benchmark.tests;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import org.openrdf.util.log.ThreadLog;import org.openrdf.model.Resource;import org.openrdf.model.Statement;import org.openrdf.model.URI;import org.openrdf.model.Value;import org.openrdf.sesame.sail.RdfRepository;import org.openrdf.sesame.sail.SailUpdateException;import org.openrdf.sesame.sail.StatementIterator;import org.openrdf.sesame.sail.test.benchmark.model.BMStatement;import org.openrdf.sesame.sail.test.benchmark.pools.RdfRepositoryPool;/** * Tests performance of * org.openrdf.sesame.sail.RdfRepository.removeStatements. * * @author Peter van 't Hof. * @version $Revision: 1.4 $ */public class RemoveStatements extends RdfRepositoryBMTestB {/*-------------+| Constructors |+-------------*/ /** * Creates a new benchmark test which tests * org.openrdf.sesame.sail.RdfRepository.removeStatements. * * @param rdfRepository RdfRepository to test. */ public RemoveStatements(RdfRepository rdfRepository) { super("removeStatements", rdfRepository); _needsPool = true; }/*--------+| Methods |+--------*/ /** * Tests performance of * org.openrdf.sesame.sail.RdfRepository.removeStatements. * * @throws Exception If Exception was thrown. */ public void test() throws Exception { _status("Removing..."); super.test(); if (_testDone) { _status("Removing done."); } } /* Gets all statements. Removes every combination of subject, predicate, * object and wildcards. */ protected void _testA() throws SailUpdateException { Iterator i = _cutDown(_getStatements(), 16).iterator(); while (i.hasNext()) { BMStatement statement = (BMStatement)i.next(); Resource subject = statement.getSubject(); URI predicate = statement.getPredicate(); Value object = statement.getObject(); _removeStatementsA(subject, null, null); _removeStatementsA(null, predicate, null); _removeStatementsA(null, null, object); _removeStatementsA(subject, predicate, null); _removeStatementsA(subject, null, object); _removeStatementsA(null, predicate, object); _removeStatementsA(subject, predicate, object); } } /* Call to RdfRepository. Checks if statements are removed. Pattern should * exist and therefore afterwards adds all removed statements to the * repository so no statements are lost. */ protected void _removeStatementsA(Resource subject, URI predicate, Value object) throws SailUpdateException { if (!_testDone) { // Suppress traces. ThreadLog.registerThread(null, 0); // Save statements to be removed. Set statements = new HashSet(); StatementIterator i = _getStatements(subject, predicate, object); while (i.hasNext()) { statements.add(i.next()); } i.close(); // Remove statements. _startA(); _rdfRepository.startTransaction(); int statementsRemoved = _rdfRepository.removeStatements(subject, predicate, object); _rdfRepository.commitTransaction(); _stopA(); if (statementsRemoved == 0) { _error("removeStatements(" + new BMStatement(subject, predicate, object) + ") should remove statements."); } // Add saved statements to repository. Iterator j = statements.iterator(); _rdfRepository.startTransaction(); while (j.hasNext()) { Statement statement = (Statement)j.next(); _rdfRepository.addStatement(statement.getSubject(), statement.getPredicate(), statement.getObject()); } _rdfRepository.commitTransaction(); // Show traces. ThreadLog.registerThread(null, 5); if (getTime() > _maxTime) { _error("Maximum time reached. Test aborted."); _testDone = true; } } } // This method consists of two parts. See below. protected void _testB() throws SailUpdateException { /* Part one: remove statements, pattern consists of values who do not * exist and wildcards. */ _removeStatementsB(RdfRepositoryPool.noSubject, null, null); _removeStatementsB(null, RdfRepositoryPool.noPredicate, null); _removeStatementsB(null, null, RdfRepositoryPool.noObject); _removeStatementsB(RdfRepositoryPool.noSubject, RdfRepositoryPool.noPredicate, null); _removeStatementsB(RdfRepositoryPool.noSubject, null, RdfRepositoryPool.noObject); _removeStatementsB(null, RdfRepositoryPool.noPredicate, RdfRepositoryPool.noObject); _removeStatementsB(RdfRepositoryPool.noSubject, RdfRepositoryPool.noPredicate, RdfRepositoryPool.noObject); Iterator i = _cutDown(_getStatements(), 8).iterator(); while (i.hasNext()) { BMStatement statement = (BMStatement)i.next(); Resource subject = statement.getSubject(); URI predicate = statement.getPredicate(); Value object = statement.getObject(); _removeStatementsB(RdfRepositoryPool.noSubject, null, object); _removeStatementsB(RdfRepositoryPool.noSubject, predicate, null); _removeStatementsB(RdfRepositoryPool.noSubject, predicate, object); _removeStatementsB(subject, RdfRepositoryPool.noPredicate, object); _removeStatementsB(null, RdfRepositoryPool.noPredicate, object); _removeStatementsB(subject, RdfRepositoryPool.noPredicate, null); _removeStatementsB(subject, predicate, RdfRepositoryPool.noObject); _removeStatementsB(null, predicate, RdfRepositoryPool.noObject); _removeStatementsB(subject, null, RdfRepositoryPool.noObject); _removeStatementsB(RdfRepositoryPool.noSubject, RdfRepositoryPool.noPredicate, object); _removeStatementsB(RdfRepositoryPool.noSubject, predicate, RdfRepositoryPool.noObject); _removeStatementsB(subject, RdfRepositoryPool.noPredicate, RdfRepositoryPool.noObject); } /* Part two: remove statements, pattern consists of statements who do * not exist. */ Iterator j = _cutDown(_getNoStatements(), 8).iterator(); while (j.hasNext()) { BMStatement noStatement= (BMStatement)j.next(); _removeStatementsB( noStatement.getSubject(), noStatement.getPredicate(), noStatement.getObject()); } } /* Call to RdfRepository. Checks if statements are not removed. Pattern * should not exist. */ protected void _removeStatementsB(Resource subject, URI predicate, Value object) throws SailUpdateException { if (!_testDone) { // Suppress traces. ThreadLog.registerThread(null, 0); _startB(); _rdfRepository.startTransaction(); int statementsRemoved = _rdfRepository.removeStatements(subject, predicate, object); _rdfRepository.commitTransaction(); _stopB(); if (statementsRemoved > 0) { _error("removeStatements(" + new BMStatement(subject, predicate, object) + ") should not remove statement."); } // Show traces. ThreadLog.registerThread(null, 5); if (getTime() > _maxTime) { _error("Maximum time reached. Test aborted."); _testDone = true; } } } protected List _getStatements() { return RdfRepositoryPool.statements; } protected List _getNoStatements() { return RdfRepositoryPool.noStatements; } protected StatementIterator _getStatements( Resource subject, URI predicate, Value object) { return _rdfRepository.getStatements(subject, predicate, object); } public String toString() { return _toString("Removed", "Not removed") + "\n" + "\n" + "Removing\t|Time in s\n" + "----------------+--------\n" + "Total\t\t|" + (int)((double)getTime()/1000 + 0.5); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -