@Override public Item item(final QueryContext qc, final InputInfo ii) throws QueryException { final QNm name = toQNm(exprs[0], qc, sc, false); final long arity = toLong(exprs[1], qc); if (arity < 0 || arity > Integer.MAX_VALUE) throw FUNCUNKNOWN_X.get(ii, name); try { final Expr lit = Functions.getLiteral(name, (int) arity, qc, sc, ii); return lit == null ? null : lit.item(qc, ii); } catch (final QueryException e) { // function not found (in most cases: XPST0017) return null; } }
/** * Checks if the specified expression yields an element. Returns the element or throws an * exception. * * @param ex expression to be evaluated * @param qc query context * @return binary item * @throws QueryException query exception */ protected final ANode toElem(final Expr ex, final QueryContext qc) throws QueryException { return (ANode) checkType(ex.item(qc, info), NodeType.ELM); }
/** * Checks if the specified expression yields a non-empty item. Returns the item or throws an * exception. * * @param ex expression to be evaluated * @param qc query context * @param type expected type * @return item * @throws QueryException query exception */ private Item toItem(final Expr ex, final QueryContext qc, final Type type) throws QueryException { return checkNoEmpty(ex.item(qc, info), type); }
/** * Checks if the evaluated expression yields a non-empty item. Returns the item or throws an * exception. * * @param ex expression to be evaluated * @param qc query context * @return item * @throws QueryException query exception */ protected final Item toItem(final Expr ex, final QueryContext qc) throws QueryException { return checkNoEmpty(ex.item(qc, info)); }
/** * Checks if the specified expression yields a node or {@code null}. Returns the node, {@code * null}, or throws an exception. * * @param ex expression to be evaluated * @param qc query context * @return node or {@code null} * @throws QueryException query exception */ protected final ANode toEmptyNode(final Expr ex, final QueryContext qc) throws QueryException { final Item it = ex.item(qc, info); return it == null ? null : toNode(it); }
/** * Checks if the specified expression yields a node. Returns the boolean or throws an exception. * * @param ex expression to be evaluated * @param qc query context * @return node * @throws QueryException query exception */ protected final ANode toNode(final Expr ex, final QueryContext qc) throws QueryException { return toNode(checkNoEmpty(ex.item(qc, info), NodeType.NOD)); }
@Override public Item item(final QueryContext qc, final InputInfo ii) throws QueryException { final Expr e = exprs[0]; return e.seqType().zeroOrOne() ? e.item(qc, info) : e.iter(qc).next(); }