if (curr > 0) {
curr--; //remove leading dot
}
+ }
}
-}
EJDB_EXPORT void bson_visit_fields(bson_iterator *it, bson_traverse_flags_t flags, BSONVISITOR visitor, void *op) {
char pstack[BSON_MAX_FPATH_LEN + 1];
return BSON_ERROR;
}
- if (bson_check_field_name(b, (const char *) name, len - 1,
+ if (bson_check_field_name(b, (const char *) name, namelen,
!(b->flags & BSON_FLAG_QUERY_MODE), !(b->flags & BSON_FLAG_QUERY_MODE)) == BSON_ERROR) {
bson_builder_error(b);
return BSON_ERROR;
}
-
bson_append_byte(b, (char) type);
- bson_append(b, name, len);
+ memcpy(b->cur, name, namelen);
+ b->cur += namelen;
+ *(b->cur) = '\0';
+ b->cur += 1;
return BSON_OK;
}
break;
}
pdp = (fpath + i);
- while (*pdp == '.') ++pdp;
+ while (*pdp == '.') {
+ ++pdp;
+ ++i;
+ }
}
for (; lvl > 0; --lvl) {
bson_append_finish_object(bsout);
bson bsout;
bsout.data = NULL;
bsout.dataSize = 0;
+ bson_reset(&bsout);
const EJQF *setqf = NULL;
const EJQF *incqf = NULL;
if (addsetqf) { //$addToSet
char* inbuf = (bsout.finished) ? bsout.data : bsbuf;
- if (bson_find_unmerged_array_sets(bson_data(setqf->updateobj), inbuf)) {
+ if (bson_find_unmerged_array_sets(bson_data(addsetqf->updateobj), inbuf)) {
//Missing $addToSet element in some array field found
if (bsout.finished) {
//reinit `bsout`, `inbuf` already points to `bsout.data` and will be freed later
bson_init_size(&bsout, bsbufsz);
}
//$addToSet merge
- if (bson_merge_array_sets(bson_data(setqf->updateobj), inbuf, &bsout)) {
+ if (bson_merge_array_sets(bson_data(addsetqf->updateobj), inbuf, &bsout)) {
rv = false;
_ejdbsetecode(jcoll->jb, JBEQUPDFAILED, __FILE__, __LINE__, __func__);
}
}
bson_finish(&bsout);
update = true;
+ //bson_print(stderr, &bsout);
}
}
assert(qf.updateobj == NULL);
qf.q->flags |= EJQUPDATING;
qf.updateobj = bson_create();
- bson_init(qf.updateobj);
+ bson_init_as_query(qf.updateobj);
bson_type sbt;
bson_iterator sit;
bson_iterator_subiterator(it, &sit);