use of org.sirix.exception.SirixException in project sirix by sirixdb.
the class StAXSerializerTest method testStAXSerializer.
@Test
public void testStAXSerializer() {
try {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final XMLSerializer xmlSerializer = new XMLSerializerBuilder(holder.getResourceManager(), out).emitXMLDeclaration().build();
xmlSerializer.call();
final XdmNodeReadTrx rtx = holder.getResourceManager().beginNodeReadTrx();
StAXSerializer serializer = new StAXSerializer(rtx);
final StringBuilder strBuilder = new StringBuilder();
boolean isEmptyElement = false;
while (serializer.hasNext()) {
XMLEvent event = serializer.nextEvent();
switch(event.getEventType()) {
case XMLStreamConstants.START_DOCUMENT:
strBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
break;
case XMLStreamConstants.START_ELEMENT:
emitElement(event, strBuilder);
if (serializer.peek().getEventType() == XMLStreamConstants.END_ELEMENT) {
strBuilder.append("/>");
isEmptyElement = true;
} else {
strBuilder.append('>');
}
break;
case XMLStreamConstants.END_ELEMENT:
if (isEmptyElement) {
isEmptyElement = false;
} else {
emitQName(true, event, strBuilder);
strBuilder.append('>');
}
break;
case XMLStreamConstants.CHARACTERS:
strBuilder.append(((Characters) event).getData());
break;
}
}
assertEquals(out.toString(), strBuilder.toString());
// Check getElementText().
// ========================================================
holder.getReader().moveToDocumentRoot();
holder.getReader().moveToFirstChild();
serializer = new StAXSerializer(holder.getReader());
String elemText = null;
// <p:a>
if (serializer.hasNext()) {
serializer.next();
elemText = serializer.getElementText();
}
assertEquals("oops1foooops2baroops3", elemText);
// oops1
checkForException(serializer);
// <b>
if (serializer.hasNext()) {
serializer.next();
elemText = serializer.getElementText();
}
assertEquals("foo", elemText);
// foo
checkForException(serializer);
// <c>
if (serializer.hasNext()) {
serializer.next();
elemText = serializer.getElementText();
}
assertEquals("", elemText);
// </c>
checkForException(serializer);
// </b>
checkForException(serializer);
// oops2
checkForException(serializer);
// <b p:x='y'>
if (serializer.hasNext()) {
serializer.next();
elemText = serializer.getElementText();
}
assertEquals("bar", elemText);
// <c>
if (serializer.hasNext()) {
serializer.next();
elemText = serializer.getElementText();
}
assertEquals("", elemText);
// </c>
checkForException(serializer);
// bar
checkForException(serializer);
// </b>
checkForException(serializer);
// oops3
checkForException(serializer);
// </p:a>
checkForException(serializer);
rtx.close();
} catch (final XMLStreamException e) {
fail("XML error while parsing: " + e.getMessage());
} catch (final SirixException e) {
fail("Sirix exception occured: " + e.getMessage());
} catch (final Exception e) {
fail("Any exception occured: " + e.getMessage());
}
}
use of org.sirix.exception.SirixException in project sirix by sirixdb.
the class IndexController method containsIndex.
/**
* Determines if an index of the specified type is available.
*
* @param type type of index to lookup
* @param resourceManager the {@link ResourceManager} this index controller is bound to
* @return {@code true} if an index of the specified type exists, {@code false} otherwise
* @throws SirixIOException if an I/O exception occurs while deserializing the index configuration
* for the specified {@code revision}
*/
public boolean containsIndex(final IndexType type, final ResourceManager resourceManager, final int revision) throws SirixIOException {
final Indexes indexes = new Indexes();
final java.nio.file.Path indexesFile = resourceManager.getResourceConfig().mPath.resolve(ResourceConfiguration.ResourcePaths.INDEXES.getFile() + String.valueOf(revision) + ".xml");
try {
if (Files.exists(indexesFile) && Files.size(indexesFile) > 0) {
try (final InputStream in = new FileInputStream(indexesFile.toFile())) {
indexes.init(deserialize(in).getFirstChild());
}
}
} catch (IOException | DocumentException | SirixException e) {
throw new SirixIOException("Index definitions couldn't be deserialized!", e);
}
for (final IndexDef indexDef : indexes.getIndexDefs()) {
if (indexDef.getType() == type)
return true;
}
return false;
}
use of org.sirix.exception.SirixException in project sirix by sirixdb.
the class IndexController method deserialize.
/**
* Deserialize from an {@link InputStream}.
*
* @param out the {@link InputStream} from which to deserialize the XML fragment
* @throws SirixException if an exception occurs during serialization
*/
public Node<?> deserialize(final InputStream in) throws SirixException {
try {
final DocumentParser parser = new DocumentParser(in);
final D2NodeBuilder builder = new D2NodeBuilder();
parser.parse(builder);
return builder.root();
} catch (final DocumentException e) {
throw new SirixException(e);
}
}
use of org.sirix.exception.SirixException in project sirix by sirixdb.
the class ResourceTransactionUsage method main.
public static void main(final String[] args) {
final Path file = LOCATION.resolve("db");
final DatabaseConfiguration config = new DatabaseConfiguration(file);
if (Files.exists(file)) {
Databases.truncateDatabase(config);
}
Databases.createDatabase(config);
try (final Database database = Databases.openDatabase(file)) {
database.createResource(new ResourceConfiguration.Builder("resource", config).build());
try (final ResourceManager resource = database.getResourceManager(new ResourceManagerConfiguration.Builder("resource").build());
final XdmNodeWriteTrx wtx = resource.beginNodeWriteTrx()) {
wtx.insertSubtreeAsFirstChild(XMLShredder.createFileReader(LOCATION.resolve("input.xml")));
wtx.moveTo(2);
wtx.moveSubtreeToFirstChild(4).commit();
final OutputStream out = new ByteArrayOutputStream();
new XMLSerializer.XMLSerializerBuilder(resource, out).prettyPrint().build().call();
System.out.println(out);
}
} catch (final SirixException | IOException | XMLStreamException e) {
// LOG or do anything, the database is closed properly.
}
}
use of org.sirix.exception.SirixException in project sirix by sirixdb.
the class XQueryUsage method loadDocumentAndQueryTemporal.
/**
* Load a document and query it (temporal enhancements).
*/
private static void loadDocumentAndQueryTemporal() throws QueryException, IOException, SirixException {
// Initialize query context and store (implicit transaction commit).
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx1 = new SirixQueryContext(store);
final CompileChain compileChain = new SirixCompileChain(store);
final Path doc1 = generateSampleDoc("sample1");
final URI docUri = doc1.toUri();
// Use XQuery to load sample document into store.
System.out.println("Loading document:");
final String xq1 = String.format("sdb:load('mydocs.col', 'resource1', '%s')", docUri.toString());
System.out.println(xq1);
new XQuery(compileChain, xq1).evaluate(ctx1);
}
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx = new QueryContext(store);
System.out.println();
System.out.println("Query loaded document:");
final String xq3 = "let $doc:= doc('mydocs.col')/log return sdb:select-node($doc, 7) ";
System.out.println(xq3);
XQuery q = new XQuery(new SirixCompileChain(store), xq3);
q.prettyPrint();
q.serialize(ctx, System.out);
}
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx = new SirixQueryContext(store);
System.out.println();
System.out.println("Query loaded document:");
final String xq3 = "doc('mydocs.col')/log/all-time::*";
System.out.println(xq3);
XQuery q = new XQuery(new SirixCompileChain(store), xq3);
q.prettyPrint();
q.serialize(ctx, System.out);
}
// Create and commit CAS indexes on all attribute- and text-nodes.
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx3 = new QueryContext(store);
System.out.println();
System.out.println("Create a cas index for all attributes and another one for text-nodes. A third one is created for all integers:");
final XQuery q = new XQuery(new SirixCompileChain(store), "let $doc := sdb:doc('mydocs.col', 'resource1', (), fn:boolean(1)) " + "let $casStats1 := sdb:create-cas-index($doc, 'xs:string', '//@*') " + "let $casStats2 := sdb:create-cas-index($doc, 'xs:string', '//*') " + "let $casStats3 := sdb:create-cas-index($doc, 'xs:integer', '//*') " + "return <rev>{sdb:commit($doc)}</rev>");
q.serialize(ctx3, System.out);
System.out.println();
System.out.println("CAS index creation done.");
}
// Create and commit path index on all elements.
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx3 = new QueryContext(store);
System.out.println();
System.out.println("Create path index for all elements (all paths):");
final XQuery q = new XQuery(new SirixCompileChain(store), "let $doc := sdb:doc('mydocs.col', 'resource1', (), fn:boolean(1)) " + "let $stats := sdb:create-path-index($doc, '//*') " + "return <rev>{sdb:commit($doc)}</rev>");
q.serialize(ctx3, System.out);
System.out.println();
System.out.println("Path index creation done.");
}
// Create and commit name index on all elements with QName 'src' or 'msg'.
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx3 = new SirixQueryContext(store, CommitStrategy.EXPLICIT);
System.out.println();
System.out.println("Create name index for all elements with name 'src' or 'msg':");
final XQuery q = new XQuery(new SirixCompileChain(store), "let $doc := sdb:doc('mydocs.col', 'resource1', (), fn:boolean(1)) " + "let $stats := sdb:create-name-index($doc, fn:QName((), 'src')) " + "return <rev>{sdb:commit($doc)}</rev>");
q.serialize(ctx3, System.out);
System.out.println();
System.out.println("Name index creation done.");
}
// Query CAS index.
try (final DBStore store = DBStore.newBuilder().build()) {
System.out.println("");
System.out.println("Find CAS index for all attribute values.");
final QueryContext ctx3 = new SirixQueryContext(store);
final String query = "let $doc := sdb:doc('mydocs.col', 'resource1') return sdb:scan-cas-index($doc, sdb:find-cas-index($doc, 'xs:string', '//@*'), 'bar', true(), 0, ())";
final Sequence seq = new XQuery(new SirixCompileChain(store), query).execute(ctx3);
// final Iter iter = seq.iterate();
// for (Item item = iter.next(); item != null; item = iter.next()) {
// System.out.println(item);
// }
final Comparator<Tuple> comparator = (o1, o2) -> ((Node<?>) o1).cmp((Node<?>) o2);
final Sequence sortedSeq = new SortedNodeSequence(comparator, seq, true);
final Iter sortedIter = sortedSeq.iterate();
System.out.println("Sorted index entries in document order: ");
for (Item item = sortedIter.next(); item != null; item = sortedIter.next()) {
System.out.println(item);
}
}
// Query CAS index.
try (final DBStore store = DBStore.newBuilder().build()) {
System.out.println("");
System.out.println("Find CAS index for all text values which are integers between 10 and 100.");
final QueryContext ctx3 = new SirixQueryContext(store);
final String query = "let $doc := sdb:doc('mydocs.col', 'resource1') return sdb:scan-cas-index-range($doc, sdb:find-cas-index($doc, 'xs:integer', '//*'), 10, 100, true(), true(), ())";
final Sequence seq = new XQuery(new SirixCompileChain(store), query).execute(ctx3);
// final Iter iter = seq.iterate();
// for (Item item = iter.next(); item != null; item = iter.next()) {
// System.out.println(item);
// }
final Comparator<Tuple> comparator = (o1, o2) -> ((Node<?>) o1).cmp((Node<?>) o2);
final Sequence sortedSeq = new SortedNodeSequence(comparator, seq, true);
final Iter sortedIter = sortedSeq.iterate();
System.out.println("Sorted index entries in document order: ");
for (Item item = sortedIter.next(); item != null; item = sortedIter.next()) {
System.out.println(item);
}
}
// Query path index which are children of the log-element (only elements).
try (final DBStore store = DBStore.newBuilder().build()) {
System.out.println("");
System.out.println("Find path index for all elements which are children of the log-element (only elements).");
final QueryContext ctx3 = new SirixQueryContext(store);
final DBNode node = (DBNode) new XQuery(new SirixCompileChain(store), "doc('mydocs.col')").execute(ctx3);
final Optional<IndexDef> index = node.getTrx().getResourceManager().getRtxIndexController(node.getTrx().getRevisionNumber()).getIndexes().findPathIndex(org.brackit.xquery.util.path.Path.parse("//log/*"));
System.out.println(index);
// last param '()' queries whole index.
final String query = "let $doc := sdb:doc('mydocs.col', 'resource1') " + "return sdb:scan-path-index($doc, " + index.get().getID() + ", '//log/*')";
final Sequence seq = new XQuery(new SirixCompileChain(store), query).execute(ctx3);
final Comparator<Tuple> comparator = (o1, o2) -> ((Node<?>) o1).cmp((Node<?>) o2);
final Sequence sortedSeq = new SortedNodeSequence(comparator, seq, true);
final Iter sortedIter = sortedSeq.iterate();
System.out.println("Sorted index entries in document order: ");
for (Item item = sortedIter.next(); item != null; item = sortedIter.next()) {
System.out.println(item);
}
}
// Query name index.
try (final DBStore store = DBStore.newBuilder().build()) {
System.out.println("");
System.out.println("Query name index (src-element).");
final QueryContext ctx3 = new QueryContext(store);
final String query = "let $doc := sdb:doc('mydocs.col', 'resource1')" + " let $sequence := sdb:scan-name-index($doc, sdb:find-name-index($doc, fn:QName((), 'src')), fn:QName((), 'src'))" + " return sdb:sort($sequence)";
final XQuery q = new XQuery(new SirixCompileChain(store), query);
q.prettyPrint();
q.serialize(ctx3, System.out);
}
try (final DBStore store = DBStore.newBuilder().build()) {
final QueryContext ctx = new SirixQueryContext(store);
System.out.println();
System.out.println("Query loaded document:");
final String xq3 = "doc('mydocs.col')/log/all-time::*";
System.out.println(xq3);
XQuery q = new XQuery(new SirixCompileChain(store), xq3);
q.prettyPrint();
q.serialize(ctx, System.out);
// Serialize first version to XML
// ($user.home$/sirix-data/output-revision-1.xml).
final QueryContext ctx4 = new QueryContext(store);
final String xq4 = "doc('mydocs.col', 1)";
q = new XQuery(xq4);
try (final PrintStream out = new PrintStream(new FileOutputStream(LOCATION.resolve("output-revision-1.xml").toFile()))) {
q.prettyPrint().serialize(ctx4, out);
}
System.out.println();
// Serialize second version to XML
// ($user.home$/sirix-data/output-revision-1.xml).
final QueryContext ctx5 = new SirixQueryContext(store);
final String xq5 = "sdb:serialize(doc('mydocs.col', 2), fn:boolean(1), 'output-revision-2.xml')";
q = new XQuery(xq5);
q.execute(ctx5);
System.out.println();
// Serialize first, second and third version to XML
// ($user.home$/sirix-data/output-revisions.xml).
final QueryContext ctx6 = new SirixQueryContext(store);
final String xq6 = "for $i in ((doc('mydocs.col', 1), doc('mydocs.col', 2), doc('mydocs.col', 3))) return $i";
q = new XQuery(xq6);
try (final PrintStream out = new PrintStream(new FileOutputStream(LOCATION.resolve("output-revisions.xml").toFile()))) {
q.prettyPrint().serialize(ctx6, out);
}
System.out.println();
}
try (final DBStore store = DBStore.newBuilder().build()) {
final Path doc = Paths.get("src", "main", "resources", "test.xml");
final QueryContext ctx = new SirixQueryContext(store);
System.out.println();
final String xq3 = String.format("sdb:load('mycoll.col', 'mydoc.xml', '%s')", doc.toUri().toString());
System.out.println(xq3);
final XQuery q = new XQuery(new SirixCompileChain(store), xq3);
q.execute(ctx);
}
}
Aggregations