Ejemplo n.º 1
0
  @Override
  protected Expr opt(final CompileContext cc) throws QueryException {
    if (allAreValues() && exprs[0].size() < UNROLL_LIMIT) {
      // unroll the loop
      cc.info(QueryText.OPTUNROLL_X, this);
      final Value seq = (Value) exprs[0];
      final int len = (int) seq.size();

      // fn:for-each(...)
      final Expr[] results = new Expr[len];
      for (int i = 0; i < len; i++) {
        results[i] = new DynFuncCall(info, sc, exprs[1], seq.itemAt(i)).optimize(cc);
      }
      return new List(info, results).optimize(cc);
    }
    return this;
  }