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);
}
}
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();
}
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();
}
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();
}
Aggregations