Search in sources :

Example 36 with SirixException

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());
    }
}
Also used : XMLSerializerBuilder(org.sirix.service.xml.serialize.XMLSerializer.XMLSerializerBuilder) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) XMLStreamException(javax.xml.stream.XMLStreamException) XMLEvent(javax.xml.stream.events.XMLEvent) SirixException(org.sirix.exception.SirixException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SirixException(org.sirix.exception.SirixException) XMLStreamException(javax.xml.stream.XMLStreamException) Test(org.junit.Test)

Example 37 with SirixException

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;
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) DocumentException(org.brackit.xquery.xdm.DocumentException) SirixException(org.sirix.exception.SirixException) SirixIOException(org.sirix.exception.SirixIOException) IOException(java.io.IOException) Indexes(org.sirix.index.Indexes) SirixIOException(org.sirix.exception.SirixIOException) IndexDef(org.sirix.index.IndexDef) FileInputStream(java.io.FileInputStream)

Example 38 with SirixException

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);
    }
}
Also used : DocumentParser(org.brackit.xquery.node.parser.DocumentParser) DocumentException(org.brackit.xquery.xdm.DocumentException) SirixException(org.sirix.exception.SirixException) D2NodeBuilder(org.brackit.xquery.node.d2linked.D2NodeBuilder)

Example 39 with SirixException

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.
    }
}
Also used : Path(java.nio.file.Path) XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) XMLSerializer(org.sirix.service.xml.serialize.XMLSerializer) DatabaseConfiguration(org.sirix.access.conf.DatabaseConfiguration) OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ResourceManager(org.sirix.api.ResourceManager) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) XMLStreamException(javax.xml.stream.XMLStreamException) Database(org.sirix.api.Database) SirixException(org.sirix.exception.SirixException)

Example 40 with SirixException

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);
    }
}
Also used : Path(java.nio.file.Path) SortedNodeSequence(org.brackit.xquery.sequence.SortedNodeSequence) Date(java.util.Date) DBNode(org.sirix.xquery.node.DBNode) Random(java.util.Random) Sequence(org.brackit.xquery.xdm.Sequence) SirixCompileChain(org.sirix.xquery.SirixCompileChain) QueryException(org.brackit.xquery.QueryException) Tuple(org.brackit.xquery.Tuple) Databases(org.sirix.access.Databases) Node(org.brackit.xquery.xdm.Node) XQuery(org.brackit.xquery.XQuery) URI(java.net.URI) Path(java.nio.file.Path) PrintStream(java.io.PrintStream) SirixException(org.sirix.exception.SirixException) IndexDef(org.sirix.index.IndexDef) Iter(org.brackit.xquery.xdm.Iter) DBStore(org.sirix.xquery.node.DBStore) Files(java.nio.file.Files) Item(org.brackit.xquery.xdm.Item) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) CompileChain(org.brackit.xquery.compiler.CompileChain) Paths(java.nio.file.Paths) Database(org.sirix.api.Database) QueryContext(org.brackit.xquery.QueryContext) Optional(java.util.Optional) Comparator(java.util.Comparator) CommitStrategy(org.sirix.xquery.SirixQueryContext.CommitStrategy) SirixQueryContext(org.sirix.xquery.SirixQueryContext) PrintStream(java.io.PrintStream) XQuery(org.brackit.xquery.XQuery) DBNode(org.sirix.xquery.node.DBNode) Node(org.brackit.xquery.xdm.Node) SortedNodeSequence(org.brackit.xquery.sequence.SortedNodeSequence) SirixCompileChain(org.sirix.xquery.SirixCompileChain) QueryContext(org.brackit.xquery.QueryContext) SirixQueryContext(org.sirix.xquery.SirixQueryContext) SortedNodeSequence(org.brackit.xquery.sequence.SortedNodeSequence) Sequence(org.brackit.xquery.xdm.Sequence) DBStore(org.sirix.xquery.node.DBStore) URI(java.net.URI) DBNode(org.sirix.xquery.node.DBNode) Item(org.brackit.xquery.xdm.Item) FileOutputStream(java.io.FileOutputStream) SirixQueryContext(org.sirix.xquery.SirixQueryContext) SirixCompileChain(org.sirix.xquery.SirixCompileChain) CompileChain(org.brackit.xquery.compiler.CompileChain) Iter(org.brackit.xquery.xdm.Iter) IndexDef(org.sirix.index.IndexDef) Tuple(org.brackit.xquery.Tuple)

Aggregations

SirixException (org.sirix.exception.SirixException)74 DocumentException (org.brackit.xquery.xdm.DocumentException)25 IOException (java.io.IOException)18 Database (org.sirix.api.Database)17 JaxRxException (org.jaxrx.core.JaxRxException)14 NodeReadTrx (org.sirix.api.NodeReadTrx)13 XdmNodeWriteTrx (org.sirix.api.XdmNodeWriteTrx)13 SessionConfiguration (org.sirix.access.conf.SessionConfiguration)12 Session (org.sirix.api.Session)12 ResourceManager (org.sirix.api.ResourceManager)10 WebApplicationException (javax.ws.rs.WebApplicationException)8 Path (java.nio.file.Path)7 XMLStreamException (javax.xml.stream.XMLStreamException)7 QNm (org.brackit.xquery.atomic.QNm)7 XdmNodeReadTrx (org.sirix.api.XdmNodeReadTrx)6 OutputStream (java.io.OutputStream)5 SubtreeListener (org.brackit.xquery.node.parser.SubtreeListener)5 AbstractTemporalNode (org.brackit.xquery.xdm.AbstractTemporalNode)5 StreamingOutput (javax.ws.rs.core.StreamingOutput)4 DatabaseConfiguration (org.sirix.access.conf.DatabaseConfiguration)4