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

Method mark

basex-core/src/main/java/org/basex/query/func/ft/FtMark.java:39–83  ·  view source on GitHub ↗

Performs the mark function. @param qc query context @param extract extract flag @return iterator @throws QueryException query exception

(final QueryContext qc, final boolean extract)

Source from the content-addressed store, hash-verified

37 * @throws QueryException query exception
38 */
39 final Iter mark(final QueryContext qc, final boolean extract) throws QueryException {
40 final Item name = arg(1).atomItem(qc, info);
41 final Long length = toLongOrNull(arg(2), qc);
42
43 final byte[] m = name.isEmpty() ? MARK : toToken(name);
44 if(!XMLToken.isQName(m)) throw valueError(BasicType.QNAME, m, info);
45 final int l = length != null ? (int) Math.min(Integer.MAX_VALUE, length) :
46 extract ? 150 : Integer.MAX_VALUE;
47
48 return new Iter() {
49 final FTPosData ftd = new FTPosData();
50 BasicIter<Item> iter;
51 Iter nodes;
52
53 @Override
54 public Item next() throws QueryException {
55 while(true) {
56 if(iter != null) {
57 final Item item = iter.next();
58 if(item != null) return item;
59 iter = null;
60 }
61 final FTPosData tmp = qc.ftPosData;
62 try {
63 qc.ftPosData = ftd;
64 if(nodes == null) nodes = arg(0).unwrappedIter(qc);
65 final Item item = nodes.next();
66 if(item == null) return null;
67
68 // copy node to main memory data instance
69 final MemData md = new MemData(qc.context.options);
70 final DataBuilder db = new DataBuilder(md, qc);
71 db.ftpos(m, qc.ftPosData, l).build(toDBNode(item, true));
72
73 final IntList il = new IntList();
74 final int s = md.meta.size;
75 for(int p = 0; p < s; p += md.size(p, md.kind(p))) il.add(p);
76 iter = DBNodeSeq.get(il.finish(), md, FtMark.this).iter();
77 } finally {
78 qc.ftPosData = tmp;
79 }
80 }
81 }
82 };
83 }
84}

Callers 6

iterMethod · 0.95
parseMainMethod · 0.45
parseLibraryMethod · 0.45
pathMethod · 0.45
relativePathMethod · 0.45
iterMethod · 0.45

Calls 8

isQNameMethod · 0.95
toLongOrNullMethod · 0.80
toTokenMethod · 0.80
valueErrorMethod · 0.80
atomItemMethod · 0.45
argMethod · 0.45
isEmptyMethod · 0.45
minMethod · 0.45

Tested by

no test coverage detected