use of org.sirix.index.IndexDef 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.sirix.index.IndexDef 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