use of org.exist.storage.txn.TransactionManager in project exist by eXist-db.
the class LuceneIndexTest method removeCollection.
@Test
public void removeCollection() throws EXistException, CollectionConfigurationException, PermissionDeniedException, SAXException, TriggerException, LockException, IOException, XPathException {
final DocumentSet docs = configureAndStore(COLLECTION_CONFIG1, SAMPLES.getShakespeareXmlSampleNames());
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final TransactionManager transact = pool.getTransactionManager();
try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
final Txn transaction = transact.beginTransaction()) {
final XQuery xquery = pool.getXQueryService();
assertNotNull(xquery);
Sequence seq = xquery.execute(broker, "//SPEECH[ft:query(LINE, 'love')]", null);
assertNotNull(seq);
assertEquals(166, seq.getItemCount());
broker.removeCollection(transaction, root);
root = broker.getOrCreateCollection(transaction, TestConstants.TEST_COLLECTION_URI);
assertNotNull(root);
broker.saveCollection(transaction, root);
transact.commit(transaction);
root = null;
checkIndex(docs, broker, null, null, 0);
}
}
use of org.exist.storage.txn.TransactionManager in project exist by eXist-db.
the class LuceneIndexTest method xupdateReplace.
@Test
public void xupdateReplace() throws EXistException, CollectionConfigurationException, PermissionDeniedException, SAXException, LockException, IOException, XPathException, ParserConfigurationException, QName.IllegalQNameException {
final DocumentSet docs = configureAndStore(COLLECTION_CONFIG2, XML2, "xupdate.xml");
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final TransactionManager transact = pool.getTransactionManager();
try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
final Txn transaction = transact.beginTransaction()) {
final Occurrences[] occur = checkIndex(docs, broker, new QName[] { new QName("description") }, "chair", 1);
assertEquals("chair", occur[0].getTerm());
checkIndex(docs, broker, new QName[] { new QName("item") }, null, 5);
final XQuery xquery = pool.getXQueryService();
assertNotNull(xquery);
Sequence seq = xquery.execute(broker, "//item[ft:query(description, 'chair')]", null);
assertNotNull(seq);
assertEquals(1, seq.getItemCount());
final XUpdateProcessor proc = new XUpdateProcessor(broker, docs);
assertNotNull(proc);
proc.setBroker(broker);
proc.setDocumentSet(docs);
String xupdate = XUPDATE_START + "<xu:replace select=\"//item[@id = '1']\">" + "<item id='4'><description>Wheelchair</description> <condition>poor</condition></item>" + "</xu:replace>" + XUPDATE_END;
Modification[] modifications = proc.parse(new InputSource(new StringReader(xupdate)));
assertNotNull(modifications);
modifications[0].process(transaction);
proc.reset();
checkIndex(docs, broker, new QName[] { new QName("description") }, null, 3);
checkIndex(docs, broker, new QName[] { new QName("condition") }, null, 3);
checkIndex(docs, broker, new QName[] { new QName("item") }, null, 6);
checkIndex(docs, broker, new QName[] { new QName("description") }, "chair", 0);
checkIndex(docs, broker, new QName[] { new QName("item") }, "chair", 0);
Occurrences[] o = checkIndex(docs, broker, new QName[] { new QName("description") }, "wheelchair", 1);
assertEquals("wheelchair", o[0].getTerm());
o = checkIndex(docs, broker, new QName[] { new QName("condition") }, "poor", 1);
assertEquals("poor", o[0].getTerm());
o = checkIndex(docs, broker, new QName[] { new QName("item") }, "wheelchair", 1);
assertEquals("wheelchair", o[0].getTerm());
o = checkIndex(docs, broker, new QName[] { new QName("item") }, "poor", 1);
assertEquals("poor", o[0].getTerm());
proc.setBroker(broker);
proc.setDocumentSet(docs);
xupdate = XUPDATE_START + "<xu:replace select=\"//item[@id = '4']/description\">" + "<description>Armchair</description>" + "</xu:replace>" + XUPDATE_END;
modifications = proc.parse(new InputSource(new StringReader(xupdate)));
assertNotNull(modifications);
modifications[0].process(transaction);
proc.reset();
checkIndex(docs, broker, new QName[] { new QName("description") }, null, 3);
checkIndex(docs, broker, new QName[] { new QName("item") }, null, 6);
checkIndex(docs, broker, new QName[] { new QName("description") }, "wheelchair", 0);
checkIndex(docs, broker, new QName[] { new QName("item") }, "wheelchair", 0);
o = checkIndex(docs, broker, new QName[] { new QName("description") }, "armchair", 1);
assertEquals("armchair", o[0].getTerm());
o = checkIndex(docs, broker, new QName[] { new QName("item") }, "armchair", 1);
assertEquals("armchair", o[0].getTerm());
transact.commit(transaction);
}
}
use of org.exist.storage.txn.TransactionManager in project exist by eXist-db.
the class LuceneIndexTest method configureAndStore.
private DocumentSet configureAndStore(String configuration, final String[] sampleNames) throws EXistException, CollectionConfigurationException, PermissionDeniedException, SAXException, TriggerException, LockException, IOException {
final MutableDocumentSet docs = new DefaultDocumentSet();
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final TransactionManager transact = pool.getTransactionManager();
try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
final Txn transaction = transact.beginTransaction()) {
if (configuration != null) {
final CollectionConfigurationManager mgr = pool.getConfigurationManager();
mgr.addConfiguration(transaction, broker, root, configuration);
}
for (final String sampleName : sampleNames) {
broker.storeDocument(transaction, XmldbURI.create(sampleName), new InputStreamSupplierInputSource(() -> SAMPLES.getShakespeareSample(sampleName)), MimeType.XML_TYPE, root);
docs.add(root.getDocument(broker, XmldbURI.create(sampleName)));
}
transact.commit(transaction);
}
return docs;
}
use of org.exist.storage.txn.TransactionManager in project exist by eXist-db.
the class LuceneIndexTest method attributeMatch.
@Test
public void attributeMatch() throws EXistException, CollectionConfigurationException, PermissionDeniedException, SAXException, TriggerException, LockException, IOException, XPathException, ParserConfigurationException {
final DocumentSet docs = configureAndStore(COLLECTION_CONFIG7, XML8, "test.xml");
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final TransactionManager transact = pool.getTransactionManager();
try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
final Txn transaction = transact.beginTransaction()) {
final XQuery xquery = pool.getXQueryService();
assertNotNull(xquery);
Sequence seq = xquery.execute(broker, "for $a in ft:query((//b|//c), 'AAA') order by ft:score($a) descending return xs:string($a)", null);
assertNotNull(seq);
assertEquals(5, seq.getItemCount());
assertEquals("AAA on b2", seq.itemAt(0).getStringValue());
assertEquals("AAA on c1", seq.itemAt(1).getStringValue());
assertEquals("AAA on b3", seq.itemAt(2).getStringValue());
assertEquals("AAA on b1", seq.itemAt(3).getStringValue());
assertEquals("AAA on c2", seq.itemAt(4).getStringValue());
// path: /a/b
seq = xquery.execute(broker, "for $a in ft:query(/a/b, 'AAA') order by ft:score($a) descending return xs:string($a)", null);
assertNotNull(seq);
assertEquals(2, seq.getItemCount());
assertEquals("AAA on b2", seq.itemAt(0).getStringValue());
assertEquals("AAA on b1", seq.itemAt(1).getStringValue());
seq = xquery.execute(broker, "for $a in ft:query(//@att, 'att') order by ft:score($a) descending return xs:string($a)", null);
assertNotNull(seq);
assertEquals(4, seq.getItemCount());
assertEquals("att on b2", seq.itemAt(0).getStringValue());
assertEquals("att on b3", seq.itemAt(1).getStringValue());
assertEquals("att on b1", seq.itemAt(2).getStringValue());
assertEquals("att on c1", seq.itemAt(3).getStringValue());
// modify with xupdate and check if boosts are updated accordingly
final XUpdateProcessor proc = new XUpdateProcessor(broker, docs);
assertNotNull(proc);
proc.setBroker(broker);
proc.setDocumentSet(docs);
// remove 'att' attribute from first c element: it gets no boost
// also append an 'att' attribute on second c element which will
// make the two switch order in the result sequence.
String xupdate = XUPDATE_START + " <xu:remove select=\"//c[1]/@att\"/>" + " <xu:append select=\"//c[2]\"><xu:attribute name=\"att\">att on c2</xu:attribute></xu:append>" + XUPDATE_END;
final Modification[] modifications = proc.parse(new InputSource(new StringReader(xupdate)));
assertNotNull(modifications);
modifications[0].process(transaction);
modifications[1].process(transaction);
proc.reset();
transact.commit(transaction);
seq = xquery.execute(broker, "for $a in ft:query((//b|//c), 'AAA') order by ft:score($a) descending return xs:string($a)", null);
assertNotNull(seq);
assertEquals(5, seq.getItemCount());
assertEquals("AAA on b2", seq.itemAt(0).getStringValue());
assertEquals("AAA on c2", seq.itemAt(1).getStringValue());
assertEquals("AAA on b3", seq.itemAt(2).getStringValue());
assertEquals("AAA on b1", seq.itemAt(3).getStringValue());
assertEquals("AAA on c1", seq.itemAt(4).getStringValue());
}
}
use of org.exist.storage.txn.TransactionManager in project exist by eXist-db.
the class LuceneMatchListenerTest method startDB.
@BeforeClass
public static void startDB() throws DatabaseConfigurationException, EXistException, PermissionDeniedException, IOException, TriggerException {
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final TransactionManager transact = pool.getTransactionManager();
try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
final Txn transaction = transact.beginTransaction()) {
final Collection root = broker.getOrCreateCollection(transaction, TestConstants.TEST_COLLECTION_URI);
assertNotNull(root);
broker.saveCollection(transaction, root);
transact.commit(transaction);
}
final Map<String, String> m = new HashMap<>();
m.put(Namespaces.EXIST_NS_PREFIX, Namespaces.EXIST_NS);
final NamespaceContext ctx = new SimpleNamespaceContext(m);
XMLUnit.setXpathNamespaceContext(ctx);
}
Aggregations