Tries to convert this for loop into a let binding. @param clauses FLWOR clauses @param p position @param cc compilation context @return true if the clause was converted, false otherwise @throws QueryException query exception
(final List<Clause> clauses, final int p, final CompileContext cc)
| 178 | * @throws QueryException query exception |
| 179 | */ |
| 180 | boolean asLet(final List<Clause> clauses, final int p, final CompileContext cc) |
| 181 | throws QueryException { |
| 182 | |
| 183 | if(!expr.seqType().one()) return false; |
| 184 | clauses.set(p, new Let(var, expr).optimize(cc)); |
| 185 | if(score != null) { |
| 186 | clauses.add(p + 1, new Let(score, new VarRef(info(), var).optimize(cc), true).optimize(cc)); |
| 187 | } |
| 188 | if(pos != null) { |
| 189 | clauses.add(p + 1, new Let(pos, Itr.ONE).optimize(cc)); |
| 190 | } |
| 191 | return true; |
| 192 | } |
| 193 | |
| 194 | /** |
| 195 | * Removes a variable reference. |