Search in sources :

Example 1 with CompileChain

use of org.brackit.xquery.compiler.CompileChain 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

FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 PrintStream (java.io.PrintStream)1 URI (java.net.URI)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 Paths (java.nio.file.Paths)1 Comparator (java.util.Comparator)1 Date (java.util.Date)1 Optional (java.util.Optional)1 Random (java.util.Random)1 QueryContext (org.brackit.xquery.QueryContext)1 QueryException (org.brackit.xquery.QueryException)1 Tuple (org.brackit.xquery.Tuple)1 XQuery (org.brackit.xquery.XQuery)1 CompileChain (org.brackit.xquery.compiler.CompileChain)1 SortedNodeSequence (org.brackit.xquery.sequence.SortedNodeSequence)1 Item (org.brackit.xquery.xdm.Item)1 Iter (org.brackit.xquery.xdm.Iter)1 Node (org.brackit.xquery.xdm.Node)1