bson_timestamp_t ts;
char oidhex[25];
bson scope;
- bson_iterator_from_buffer(&i, data);
+ BSON_ITERATOR_FROM_BUFFER(&i, data);
while (bson_iterator_next(&i)) {
bson_type t = bson_iterator_type(&i);
}
bson_type bson_find_from_buffer(bson_iterator *it, const char *buffer, const char *name) {
- bson_iterator_from_buffer(it, buffer);
+ BSON_ITERATOR_FROM_BUFFER(it, buffer);
while (bson_iterator_next(it)) {
if (strcmp(name, bson_iterator_key(it)) == 0)
break;
(t == BSON_ARRAY && (flags & BSON_TRAVERSE_ARRAYS_EXCLUDED) == 0))
) {
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
bson_visit_fields_impl(flags, pstack, curr, &sit, visitor, op);
}
if (!(vcmd & BSON_VCMD_SKIP_AFTER)) {
}
}
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
bson_type st = bson_find_fieldpath_value_impl(pstack, curr, ffpctx, &sit);
if (st != BSON_EOO) { //Found in nested
*it = sit;
}
void bson_iterator_subiterator(const bson_iterator *i, bson_iterator *sub) {
- bson_iterator_from_buffer(sub, bson_iterator_value(i));
+ BSON_ITERATOR_FROM_BUFFER(sub, bson_iterator_value(i));
}
/* ----------------------------
case BSON_OBJECT:
{
bson_iterator sit;
- bson_iterator_subiterator(from, &sit);
+ BSON_ITERATOR_SUBITERATOR(from, &sit);
bson_append_start_object(into, key);
while (bson_iterator_next(&sit) != BSON_EOO) {
bson_append_field_from_iterator(&sit, into);
case BSON_ARRAY:
{
bson_iterator sit;
- bson_iterator_subiterator(from, &sit);
+ BSON_ITERATOR_SUBITERATOR(from, &sit);
bson_append_start_array(into, key);
while (bson_iterator_next(&sit) != BSON_EOO) {
bson_append_field_from_iterator(&sit, into);
buf = (TCMAPRNUM(ctx->mfields) == 0 || after) ? NULL : tcmapget(ctx->mfields, ipath, ipathlen, &bufsz);
if (buf) {
bson_iterator it2;
- bson_iterator_from_buffer(&it2, ctx->bsdata2);
+ BSON_ITERATOR_FROM_BUFFER(&it2, ctx->bsdata2);
off_t it2off;
assert(bufsz == sizeof (it2off));
memcpy(&it2off, buf, sizeof (it2off));
for (; i < ipathlen && *(mpath + i) == *(ipath + i); ++i);
if (i == ipathlen && *(mpath + i) == '.' && *(mpath + i + 1) != '\0') { //ipath prefixed
bson_iterator it2;
- bson_iterator_from_buffer(&it2, ctx->bsdata2);
+ BSON_ITERATOR_FROM_BUFFER(&it2, ctx->bsdata2);
buf = tcmapget(ctx->mfields, mpath, mpathlen, &bufsz);
off_t it2off;
assert(bufsz == sizeof (it2off));
assert(bsdata1 && bsdata2 && out);
bson_iterator it1, it2;
bson_type bt;
- bson_iterator_from_buffer(&it1, bsdata1);
- bson_iterator_from_buffer(&it2, bsdata2);
+ BSON_ITERATOR_FROM_BUFFER(&it1, bsdata1);
+ BSON_ITERATOR_FROM_BUFFER(&it2, bsdata2);
const char *it2start = it2.cur;
TCMAP *mfields = tcmapnew2(TCMAPTINYBNUM);
_BSON_MERGE3_CTX ctx = {
const char *fpath;
int fplen;
while ((fpath = tcmapiternext(mfields, &fplen)) != NULL) {
- bson_iterator_from_buffer(&it2, bsdata2);
+ BSON_ITERATOR_FROM_BUFFER(&it2, bsdata2);
if (bson_find_fieldpath_value2(fpath, fplen, &it2) != BSON_EOO) {
bson_append_fpath_from_iterator(fpath, &it2, out);
}
bson_iterator it1, it2;
bson_type bt1, bt2;
- bson_iterator_from_buffer(&it1, b1data);
- bson_iterator_from_buffer(&it2, b2data);
+ BSON_ITERATOR_FROM_BUFFER(&it1, b1data);
+ BSON_ITERATOR_FROM_BUFFER(&it2, b2data);
//Append all fields in B1 overwriten by B2
while ((bt1 = bson_iterator_next(&it1)) != BSON_EOO) {
const char* k1 = bson_iterator_key(&it1);
bson_append_field_from_iterator(&it1, out);
}
}
- bson_iterator_from_buffer(&it1, b1data);
- bson_iterator_from_buffer(&it2, b2data);
+ BSON_ITERATOR_FROM_BUFFER(&it1, b1data);
+ BSON_ITERATOR_FROM_BUFFER(&it2, b2data);
//Append all fields from B2 missing in B1
while ((bt2 = bson_iterator_next(&it2)) != BSON_EOO) {
const char* k2 = bson_iterator_key(&it2);
.matched = 0
};
bson_iterator it;
- bson_iterator_from_buffer(&it, bsbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, bsbuf);
bson_visit_fields(&it, 0, (imode) ? _bsonstripvisitor_include : _bsonstripvisitor_exclude, &ictx);
assert(ictx.nstack == 0);
return bson_finish(bsout);
int bson_compare_fpaths(const void *bsdata1, const void *bsdata2, const char *fpath1, int fplen1, const char *fpath2, int fplen2) {
assert(bsdata1 && bsdata2 && fpath1 && fpath2);
bson_iterator it1, it2;
- bson_iterator_from_buffer(&it1, bsdata1);
- bson_iterator_from_buffer(&it2, bsdata2);
+ BSON_ITERATOR_FROM_BUFFER(&it1, bsdata1);
+ BSON_ITERATOR_FROM_BUFFER(&it2, bsdata2);
bson_find_fieldpath_value2(fpath1, fplen1, &it1);
bson_find_fieldpath_value2(fpath2, fplen2, &it2);
return bson_compare_it_current(&it1, &it2);
int cv = 0;
bson_type bt1, bt2;
bson_iterator sit1, sit2;
- bson_iterator_subiterator(it1, &sit1);
- bson_iterator_subiterator(it2, &sit2);
+ BSON_ITERATOR_SUBITERATOR(it1, &sit1);
+ BSON_ITERATOR_SUBITERATOR(it2, &sit2);
while ((bt1 = bson_iterator_next(&sit1)) != BSON_EOO) {
bt2 = bson_iterator_next(&sit2);
if (bt2 == BSON_EOO) {
bool found = false;
bson_iterator it, it2;
bson_type bt, bt2;
- bson_iterator_from_buffer(&it, mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, mbuf);
while (!found && (bt = bson_iterator_next(&it)) != BSON_EOO) {
if (expandall && bt != BSON_ARRAY) {
continue;
}
- bson_iterator_from_buffer(&it2, inbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it2, inbuf);
bt2 = bson_find_fieldpath_value(bson_iterator_key(&it), &it2);
if (bt2 != BSON_ARRAY) {
continue;
}
bson_iterator sit;
- bson_iterator_subiterator(&it2, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it2, &sit);
while (!found && (bt2 = bson_iterator_next(&sit)) != BSON_EOO) {
if (expandall) {
bson_iterator sit2;
- bson_iterator_subiterator(&it, &sit2);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit2);
while ((bt2 = bson_iterator_next(&sit2)) != BSON_EOO) {
if (!bson_compare_it_current(&sit, &sit2)) {
found = true;
bool allfound = false;
bson_iterator it, it2;
bson_type bt, bt2;
- bson_iterator_from_buffer(&it, mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, mbuf);
while ((bt = bson_iterator_next(&it)) != BSON_EOO) {
- bson_iterator_from_buffer(&it2, inbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it2, inbuf);
bt2 = bson_find_fieldpath_value(bson_iterator_key(&it), &it2);
if (bt2 == BSON_EOO) { //array missing it will be created
allfound = false;
}
allfound = false;
bson_iterator sit;
- bson_iterator_subiterator(&it2, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it2, &sit);
while ((bt2 = bson_iterator_next(&sit)) != BSON_EOO) {
if (!bson_compare_it_current(&sit, &it)) {
allfound = true;
return (BSON_VCMD_SKIP_AFTER);
}
if (bt == BSON_ARRAY) {
- bson_iterator_from_buffer(&mit, ctx->mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&mit, ctx->mbuf);
bt = bson_find_fieldpath_value2(fpath, fpathlen, &mit);
if (bt == BSON_EOO || (ctx->expandall && bt != BSON_ARRAY)) {
bson_append_field_from_iterator(it, ctx->bsout);
}
//Find and merge
bson_iterator ait;
- bson_iterator_subiterator(it, &ait);
+ BSON_ITERATOR_SUBITERATOR(it, &ait);
bson_append_start_array(ctx->bsout, key);
int c = 0;
bool found = false;
found = false;
if (ctx->expandall) {
bson_iterator mitsub;
- bson_iterator_subiterator(&mit, &mitsub);
+ BSON_ITERATOR_SUBITERATOR(&mit, &mitsub);
while ((bt = bson_iterator_next(&mitsub)) != BSON_EOO) {
if (!bson_compare_it_current(&ait, &mitsub)) {
found = true;
bson_append_finish_array(ctx->bsout);
return (BSON_VCMD_OK);
}
- bson_iterator_from_buffer(&mit, ctx->mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&mit, ctx->mbuf);
bt = bson_find_fieldpath_value2(fpath, fpathlen, &mit);
if (bt == BSON_EOO) {
bson_append_start_array(ctx->bsout, key);
}
//Find and merge
bson_iterator ait;
- bson_iterator_subiterator(it, &ait);
+ BSON_ITERATOR_SUBITERATOR(it, &ait);
bson_append_start_array(ctx->bsout, key);
bool found = false;
int c = 0;
}
//Iterate over set to add
bson_iterator mitsub;
- bson_iterator_subiterator(&mit, &mitsub); //mit has BSON_ARRAY type
+ BSON_ITERATOR_SUBITERATOR(&mit, &mitsub); //mit has BSON_ARRAY type
while ((bt = bson_iterator_next(&mitsub)) != BSON_EOO) {
found = false;
- bson_iterator_subiterator(it, &ait); //Rewind main array iterator
+ BSON_ITERATOR_SUBITERATOR(it, &ait); //Rewind main array iterator
while ((bt = bson_iterator_next(&ait)) != BSON_EOO) {
if (!bson_compare_it_current(&ait, &mitsub)) {
found = true;
};
bson_type bt, bt2;
bson_iterator it, it2;
- bson_iterator_from_buffer(&it, mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, mbuf);
while ((bt = bson_iterator_next(&it)) != BSON_EOO) {
if (expandall && bt != BSON_ARRAY) {
continue;
}
ctx.mfields++;
}
- bson_iterator_from_buffer(&it, inbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, inbuf);
if (pull) {
bson_visit_fields(&it, 0, bson_merge_array_sets_pull_tf, &ctx);
} else {
return ctx.ecode;
}
//Append missing arrays fields
- bson_iterator_from_buffer(&it, mbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, mbuf);
while ((bt = bson_iterator_next(&it)) != BSON_EOO) {
const char *fpath = bson_iterator_key(&it);
- bson_iterator_from_buffer(&it2, inbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it2, inbuf);
bt2 = bson_find_fieldpath_value(fpath, &it2);
if (bt2 != BSON_EOO) continue;
int i = 0;
const char *pdp = fpath;
while (*(fpath + i) != '\0') {
for (; *(fpath + i) != '\0' && *(fpath + i) != '.'; ++i);
- bson_iterator_from_buffer(&it2, inbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it2, inbuf);
bt2 = bson_find_fieldpath_value2(fpath, i, &it2);
if (bt2 == BSON_EOO) {
if (*(fpath + i) == '\0') { //EOF
case BSON_ARRAY:
{
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
_bson2json(ctx, &sit, bt == BSON_ARRAY);
break;
}
int bson2json(const char *bsdata, char **buf, int *sp) {
assert(bsdata && buf && sp);
bson_iterator it;
- bson_iterator_from_buffer(&it, bsdata);
+ BSON_ITERATOR_FROM_BUFFER(&it, bsdata);
TCXSTR *out = tcxstrnew();
_BSON2JSONCTX ctx = {
.nlvl = 0,
return NULL;
}
bson_iterator it;
- bson_iterator_from_buffer(&it, hintsbsdata);
+ BSON_ITERATOR_FROM_BUFFER(&it, hintsbsdata);
bson *bs = bson_create_from_iterator(&it);
if (bs->err) {
bson_del(bs);
char *path = NULL;
int flags = 0;
bson_iterator sit;
- bson_iterator_subiterator(&it, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit);
if (bson_find_fieldpath_value("path", &sit) == BSON_STRING) {
path = strdup(bson_iterator_string(&sit));
}
- bson_iterator_subiterator(&it, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit);
if (bson_find_fieldpath_value("mode", &sit) == BSON_INT) {
flags = bson_iterator_int(&sit);
}
- bson_iterator_subiterator(&it, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit);
if (bson_find_fieldpath_value("cnames", &sit) == BSON_ARRAY) {
bson_iterator ait;
- bson_iterator_subiterator(&sit, &ait);
+ BSON_ITERATOR_SUBITERATOR(&sit, &ait);
while ((bt = bson_iterator_next(&ait)) != BSON_EOO) {
if (bt == BSON_STRING) {
if (cnames == NULL) {
EJCOLLOPTS cops = {0};
if (bson_find_fieldpath_value("opts", &mbsonit) == BSON_OBJECT) {
bson_iterator sit;
- bson_iterator_subiterator(&mbsonit, &sit);
+ BSON_ITERATOR_SUBITERATOR(&mbsonit, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
const char *key = bson_iterator_key(&sit);
if (strcmp("compressed", key) == 0 && bt == BSON_BOOL) {
int iflags = 0;
bson_iterator sit;
- bson_iterator_subiterator(&mbsonit, &sit);
+ BSON_ITERATOR_SUBITERATOR(&mbsonit, &sit);
bt = bson_find_fieldpath_value("ipath", &sit);
if (bt == BSON_STRING) {
ipath = strdup(bson_iterator_string(&sit));
}
- bson_iterator_subiterator(&mbsonit, &sit);
+ BSON_ITERATOR_SUBITERATOR(&mbsonit, &sit);
bt = bson_find_fieldpath_value("iflags", &sit);
if (bt == BSON_INT || bt == BSON_LONG) {
iflags = bson_iterator_int(&sit);
if (bt == BSON_ARRAY && expandarrays) { //Iterate over array
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (_qrybsvalmatch(qf, &sit, false)) {
return true;
ffpctx->fpath = ffpctx->fpath + ffpctx->stopos;
currpos += ffpctx->stopos; //adjust cumulative field position
bson_iterator sit;
- bson_iterator_subiterator(ffpctx->input, &sit);
+ BSON_ITERATOR_SUBITERATOR(ffpctx->input, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (bt == BSON_OBJECT || bt == BSON_ARRAY) {
bson_iterator sit2;
- bson_iterator_subiterator(&sit, &sit2);
+ BSON_ITERATOR_SUBITERATOR(&sit, &sit2);
ffpctx->input = &sit2;
if (_qrybsrecurrmatch(qf, ffpctx, currpos)) {
bool ret = true;
continue;
}
eqf->mflags |= EJFEXCLUDED;
- bson_iterator_subiterator(&sit, &sit2);
+ BSON_ITERATOR_SUBITERATOR(&sit, &sit2);
FFPCTX nffpctx = *ffpctx;
nffpctx.fplen = eqf->fpathsz - eqf->elmatchpos;
if (nffpctx.fplen <= 0) { //should never happen if query construction is correct
return !qf->negate;
}
bson_iterator it;
- bson_iterator_from_buffer(&it, bsbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, bsbuf);
FFPCTX ffpctx = {
.fpath = qf->fpath,
.fplen = qf->fpathsz,
JDBCOLBSON, JDBCOLBSONL, ictx->q->tmpbuf)) {
break;
}
- bson_iterator_from_buffer(&bufit, TCXSTRPTR(ictx->q->tmpbuf));
+ BSON_ITERATOR_FROM_BUFFER(&bufit, TCXSTRPTR(ictx->q->tmpbuf));
bson_append_object_from_iterator(bson_iterator_key(it), &bufit, ictx->sbson);
break;
}
if (lbt == BSON_ARRAY) {
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
bson_append_start_array(ictx->sbson, bson_iterator_key(it));
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (bt != BSON_STRING && bt != BSON_OID) {
bson_append_field_from_iterator(&sit, ictx->sbson);
continue;
}
- bson_iterator_from_buffer(&bufit, TCXSTRPTR(ictx->q->tmpbuf));
+ BSON_ITERATOR_FROM_BUFFER(&bufit, TCXSTRPTR(ictx->q->tmpbuf));
bson_append_object_from_iterator(bson_iterator_key(&sit), &bufit, ictx->sbson);
}
bson_append_finish_array(ictx->sbson);
.sbson = bsout
};
bson_iterator it;
- bson_iterator_from_buffer(&it, bsbuf);
+ BSON_ITERATOR_FROM_BUFFER(&it, bsbuf);
bson_visit_fields(&it, 0, _bson$dovisitor, &ictx);
if (bson_finish(bsout) != BSON_OK) {
_ejdbsetecode(jb, JBEINVALIDBSON, __FILE__, __LINE__, __func__);
bt = bson_find(&it, ejq->hints, "$orderby");
if (bt == BSON_OBJECT) {
int orderseq = 1;
- bson_iterator_subiterator(&it, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (!BSON_IS_NUM_TYPE(bt)) {
continue;
bt = bson_find(&it, ejq->hints, "$fields"); //Collect required fields
if (bt == BSON_OBJECT) {
TCMAP *fmap = tcmapnew2(TCMAPTINYBNUM);
- bson_iterator_subiterator(&it, &sit);
+ BSON_ITERATOR_SUBITERATOR(&it, &sit);
for (int i = 0; (bt = bson_iterator_next(&sit)) != BSON_EOO; ++i) {
if (!BSON_IS_NUM_TYPE(bt)) {
continue;
if (isckey) {
if (!strcmp("$and", fkey)) {
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (bt != BSON_OBJECT) {
continue;
break;
} else if (!strcmp("$or", fkey)) {
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
while ((bt = bson_iterator_next(&sit)) != BSON_EOO) {
if (bt != BSON_OBJECT) {
continue;
break;
} else {
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
bson_type atype = 0;
TCLIST *tokens = _fetch_bson_str_array(jb, &sit, &atype, (qf.flags & EJCONDICASE) ? JBICASE : 0);
if (atype == 0) {
}
} else {
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
ret = _parse_qobj_impl(jb, q, &sit, qlist, pathStack, &qf, elmatchgrp);
break;
}
bson_init_as_query(qf.updateobj);
bson_type sbt;
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
while ((sbt = bson_iterator_next(&sit)) != BSON_EOO) {
if ((qf.flags & EJCONDALL) && sbt != BSON_ARRAY) {
//$addToSetAll & $pullAll accepts arrays only as argument
bson_init_as_query(qf.updateobj);
bson_type sbt;
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
int ac = 0;
while ((sbt = bson_iterator_next(&sit)) != BSON_EOO) {
const char *akey = bson_iterator_key(&sit);
}
}
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
ret = _parse_qobj_impl(jb, q, &sit, qlist, pathStack, &qf, elmatchgrp);
break;
}
int rv = 0;
TCLIST *res = tclistnew2(TCLISTINYNUM);
bson_iterator it;
- bson_iterator_from_buffer(&it, qspecbsdata);
+ BSON_ITERATOR_FROM_BUFFER(&it, qspecbsdata);
TCLIST *pathStack = tclistnew2(TCLISTINYNUM);
rv = _parse_qobj_impl(jb, q, &it, res, pathStack, NULL, 0);
if (rv) {
} else if (btype == BSON_ARRAY) {
bson_type eltype; //last element bson type
bson_iterator sit;
- bson_iterator_subiterator(it, &sit);
+ BSON_ITERATOR_SUBITERATOR(it, &sit);
if (tokens) {
while ((eltype = bson_iterator_next(&sit)) != BSON_EOO) {
int vz = 0;
*vsz = 0;
return NULL;
}
- bson_iterator_from_buffer(&it, bsdata);
+ BSON_ITERATOR_FROM_BUFFER(&it, bsdata);
bson_find_fieldpath_value2(fpath, fpathsz, &it);
ret = _bsonitstrval(odata->jcoll->jb, &it, vsz, tokens, (odata->icase ? JBICASE : 0));
TCFREE(bsdata);
txtflags_t textflags = (iflags & JBIDXISTR) ? JBICASE : 0;
if (obsdata && obsdatasz > 0) {
- bson_iterator_from_buffer(&oit, obsdata);
+ BSON_ITERATOR_FROM_BUFFER(&oit, obsdata);
oft = bson_find_fieldpath_value2(mkey + 1, mkeysz - 1, &oit);
TCLIST *tokens = (oft == BSON_ARRAY || (oft == BSON_STRING && (iflags & JBIDXARR))) ? tclistnew() : NULL;
ofvalue = BSON_IS_IDXSUPPORTED_TYPE(oft) ? _bsonitstrval(jcoll->jb, &oit, &ofvaluesz, tokens, textflags) : NULL;