Search in sources :

Example 1 with Iter

use of org.brackit.xquery.xdm.Iter 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)

Example 2 with Iter

use of org.brackit.xquery.xdm.Iter in project sirix by sirixdb.

the class CreateCASIndex method execute.

@Override
public Sequence execute(StaticContext sctx, QueryContext ctx, Sequence[] args) throws QueryException {
    if (args.length != 2 && args.length != 3) {
        throw new QueryException(new QNm("No valid arguments specified!"));
    }
    final DBNode doc = ((DBNode) args[0]);
    final XdmNodeReadTrx rtx = doc.getTrx();
    final IndexController controller = rtx.getResourceManager().getWtxIndexController(rtx.getRevisionNumber() - 1);
    if (!(doc.getTrx() instanceof XdmNodeWriteTrx)) {
        throw new QueryException(new QNm("Collection must be updatable!"));
    }
    if (controller == null) {
        throw new QueryException(new QNm("Document not found: " + ((Str) args[1]).stringValue()));
    }
    Type type = null;
    if (args.length > 1 && args[1] != null) {
        final QNm name = new QNm(Namespaces.XS_NSURI, ((Str) args[1]).stringValue());
        type = sctx.getTypes().resolveAtomicType(name);
    }
    final Set<Path<QNm>> paths = new HashSet<>();
    if (args.length == 3 && args[2] != null) {
        final Iter it = args[2].iterate();
        Item next = it.next();
        while (next != null) {
            paths.add(Path.parse(((Str) next).stringValue()));
            next = it.next();
        }
    }
    final IndexDef idxDef = IndexDefs.createCASIdxDef(false, Optional.fromNullable(type), paths, controller.getIndexes().getNrOfIndexDefsWithType(IndexType.CAS));
    try {
        controller.createIndexes(ImmutableSet.of(idxDef), (XdmNodeWriteTrx) doc.getTrx());
    } catch (final SirixIOException e) {
        throw new QueryException(new QNm("I/O exception: " + e.getMessage()), e);
    }
    return idxDef.materialize();
}
Also used : XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) Path(org.brackit.xquery.util.path.Path) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) IndexController(org.sirix.access.IndexController) SirixIOException(org.sirix.exception.SirixIOException) DBNode(org.sirix.xquery.node.DBNode) Str(org.brackit.xquery.atomic.Str) QNm(org.brackit.xquery.atomic.QNm) Item(org.brackit.xquery.xdm.Item) QueryException(org.brackit.xquery.QueryException) Type(org.brackit.xquery.xdm.Type) IndexType(org.sirix.index.IndexType) Iter(org.brackit.xquery.xdm.Iter) IndexDef(org.sirix.index.IndexDef) HashSet(java.util.HashSet)

Example 3 with Iter

use of org.brackit.xquery.xdm.Iter in project sirix by sirixdb.

the class CreateNameIndex method execute.

@Override
public Sequence execute(final StaticContext sctx, final QueryContext ctx, final Sequence[] args) throws QueryException {
    if (args.length != 2 && args.length != 3) {
        throw new QueryException(new QNm("No valid arguments specified!"));
    }
    final DBNode doc = ((DBNode) args[0]);
    final XdmNodeReadTrx rtx = doc.getTrx();
    final IndexController controller = rtx.getResourceManager().getWtxIndexController(rtx.getRevisionNumber() - 1);
    if (!(doc.getTrx() instanceof XdmNodeWriteTrx)) {
        throw new QueryException(new QNm("Collection must be updatable!"));
    }
    if (controller == null) {
        throw new QueryException(new QNm("Document not found: " + ((Str) args[1]).stringValue()));
    }
    final Set<QNm> include = new HashSet<>();
    if (args.length > 1 && args[1] != null) {
        final Iter it = args[1].iterate();
        Item next = it.next();
        while (next != null) {
            include.add((QNm) next);
            next = it.next();
        }
    }
    final IndexDef idxDef = IndexDefs.createSelectiveNameIdxDef(include, controller.getIndexes().getNrOfIndexDefsWithType(IndexType.NAME));
    try {
        controller.createIndexes(ImmutableSet.of(idxDef), (XdmNodeWriteTrx) doc.getTrx());
    } catch (final SirixIOException e) {
        throw new QueryException(new QNm("I/O exception: " + e.getMessage()), e);
    }
    return idxDef.materialize();
}
Also used : DBNode(org.sirix.xquery.node.DBNode) XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) QNm(org.brackit.xquery.atomic.QNm) Item(org.brackit.xquery.xdm.Item) QueryException(org.brackit.xquery.QueryException) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) IndexController(org.sirix.access.IndexController) Iter(org.brackit.xquery.xdm.Iter) IndexDef(org.sirix.index.IndexDef) SirixIOException(org.sirix.exception.SirixIOException) HashSet(java.util.HashSet)

Example 4 with Iter

use of org.brackit.xquery.xdm.Iter in project sirix by sirixdb.

the class CreatePathIndex method execute.

@Override
public Sequence execute(final StaticContext sctx, final QueryContext ctx, final Sequence[] args) throws QueryException {
    if (args.length != 2 && args.length != 3) {
        throw new QueryException(new QNm("No valid arguments specified!"));
    }
    final DBNode doc = ((DBNode) args[0]);
    final XdmNodeReadTrx rtx = doc.getTrx();
    final IndexController controller = rtx.getResourceManager().getWtxIndexController(rtx.getRevisionNumber() - 1);
    if (!(doc.getTrx() instanceof XdmNodeWriteTrx)) {
        throw new QueryException(new QNm("Collection must be updatable!"));
    }
    if (controller == null) {
        throw new QueryException(new QNm("Document not found: " + ((Str) args[1]).stringValue()));
    }
    if (!(doc.getTrx() instanceof XdmNodeWriteTrx)) {
        throw new QueryException(new QNm("Collection must be updatable!"));
    }
    final Set<Path<QNm>> paths = new HashSet<>();
    if (args.length > 2 && args[2] != null) {
        final Iter it = args[2].iterate();
        Item next = it.next();
        while (next != null) {
            paths.add(Path.parse(((Str) next).stringValue()));
            next = it.next();
        }
    }
    final IndexDef idxDef = IndexDefs.createPathIdxDef(paths, controller.getIndexes().getNrOfIndexDefsWithType(IndexType.PATH));
    try {
        controller.createIndexes(ImmutableSet.of(idxDef), (XdmNodeWriteTrx) doc.getTrx());
    } catch (final SirixIOException e) {
        throw new QueryException(new QNm("I/O exception: " + e.getMessage()), e);
    }
    return idxDef.materialize();
}
Also used : XdmNodeWriteTrx(org.sirix.api.XdmNodeWriteTrx) Path(org.brackit.xquery.util.path.Path) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) IndexController(org.sirix.access.IndexController) SirixIOException(org.sirix.exception.SirixIOException) DBNode(org.sirix.xquery.node.DBNode) Str(org.brackit.xquery.atomic.Str) QNm(org.brackit.xquery.atomic.QNm) Item(org.brackit.xquery.xdm.Item) QueryException(org.brackit.xquery.QueryException) Iter(org.brackit.xquery.xdm.Iter) IndexDef(org.sirix.index.IndexDef) HashSet(java.util.HashSet)

Aggregations

QueryException (org.brackit.xquery.QueryException)4 Item (org.brackit.xquery.xdm.Item)4 Iter (org.brackit.xquery.xdm.Iter)4 IndexDef (org.sirix.index.IndexDef)4 DBNode (org.sirix.xquery.node.DBNode)4 HashSet (java.util.HashSet)3 QNm (org.brackit.xquery.atomic.QNm)3 IndexController (org.sirix.access.IndexController)3 XdmNodeReadTrx (org.sirix.api.XdmNodeReadTrx)3 XdmNodeWriteTrx (org.sirix.api.XdmNodeWriteTrx)3 SirixIOException (org.sirix.exception.SirixIOException)3 Str (org.brackit.xquery.atomic.Str)2 Path (org.brackit.xquery.util.path.Path)2 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