MCPcopy Create free account
hub / github.com/BaseXdb/basex / Mapping

Class Mapping

basex-core/src/main/java/org/basex/query/expr/Mapping.java:21–248  ·  view source on GitHub ↗

Mapping expression. @author BaseX Team, BSD License @author Christian Gruen

Source from the content-addressed store, hash-verified

19 * @author Christian Gruen
20 */
21public abstract class Mapping extends Arr {
22 /**
23 * Constructor.
24 * @param info input info (can be {@code null})
25 * @param seqType sequence type
26 * @param exprs expressions
27 */
28 Mapping(final InputInfo info, final SeqType seqType, final Expr... exprs) {
29 super(info, seqType, exprs);
30 }
31
32 @Override
33 public final void checkUp() throws QueryException {
34 final int el = exprs.length;
35 for(int e = 0; e < el - 1; e++) checkNoUp(exprs[e]);
36 exprs[el - 1].checkUp();
37 }
38
39 @Override
40 public final boolean vacuous() {
41 return exprs[exprs.length - 1].vacuous();
42 }
43
44 @Override
45 public final Expr compile(final CompileContext cc) throws QueryException {
46 final int el = exprs.length;
47 final boolean items = items();
48 for(int e = 0; e < el; e++) {
49 final Expr expr = cc.compileOrError(exprs[e], e == 0);
50 if(e == 0) cc.pushFocus(expr, items);
51 else cc.updateFocus(expr, items);
52 exprs[e] = expr;
53 }
54 cc.removeFocus();
55 return optimize(cc);
56 }
57
58 /**
59 * Indicates if the expression maps items or values.
60 * @return result of check
61 */
62 abstract boolean items();
63
64 @Override
65 public final boolean has(final Flag... flags) {
66 // Context dependency, positional access: only check first expression.
67 // Examples: . ! abc, position() ! a
68 return Flag.FCS.oneOf(flags) ||
69 Flag.CTX.oneOf(flags) && exprs[0].has(Flag.CTX) ||
70 Flag.POS.oneOf(flags) && exprs[0].has(Flag.POS) ||
71 super.has(Flag.remove(flags, Flag.POS, Flag.CTX));
72 }
73
74 @Override
75 public final boolean accept(final ASTVisitor visitor) {
76 visitor.enterFocus();
77 if(!visitAll(visitor, exprs)) return false;
78 visitor.exitFocus();

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected