| 25 | } |
| 26 | |
| 27 | @Override |
| 28 | public Value value(final QueryContext qc) throws QueryException { |
| 29 | Value value = exprs[0].value(qc); |
| 30 | |
| 31 | final QueryFocus focus = qc.focus, qf = new QueryFocus(); |
| 32 | qc.focus = qf; |
| 33 | try { |
| 34 | final int el = exprs.length; |
| 35 | for(int e = 1; e < el; e++) { |
| 36 | final Expr expr = exprs[e]; |
| 37 | qf.size = value.size(); |
| 38 | qf.pos = 0; |
| 39 | final ValueBuilder vb = new ValueBuilder(qc, e < el - 1 ? -1 : size()); |
| 40 | final Iter iter = value.iter(); |
| 41 | for(Item item; (item = qc.next(iter)) != null;) { |
| 42 | qf.value = item; |
| 43 | qf.pos++; |
| 44 | vb.add(expr.value(qc)); |
| 45 | } |
| 46 | value = vb.value(expr); |
| 47 | } |
| 48 | return value; |
| 49 | } finally { |
| 50 | qc.focus = focus; |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | @Override |
| 55 | public SimpleMap copy(final CompileContext cc, final IntObjectMap<Var> vm) { |