}
const char *fp = fpath;
int nl = 0; //nesting level
- bool generated = false; //if `true` a missing parts of bson object are generated
+ bool appendmissing = false; //if `true` a missing parts of bson object are generated
while (fplen > 0) { //split fpath with '.' delim
const char *rp = fp;
const char *ep = fp + fplen;
bson_append_finish_object(out); //arrays are covered also
}
} else { //intermediate part
- if (!generated) {
+ if (!appendmissing) {
bson_iterator_from_buffer(&it1, bsdata1);
bt = bson_find_fieldpath_value2(fpath, (fp - fpath) + keylen, &it1);
if (bt == BSON_EOO) {
- generated = true;
+ appendmissing = true;
} else if (bt == BSON_OBJECT) {
if (bson_isnumstr(key, keylen)) {
break;
} else {
break;
}
- } else if (bson_isnumstr(key, keylen)) {
- nl++;
- bson_append_start_array2(out, key, keylen);
- } else {
- nl++;
- bson_append_start_object2(out, key, keylen);
+ }
+ if (appendmissing) {
+ if (bson_isnumstr(key, keylen)) {
+ nl++;
+ bson_append_start_array2(out, key, keylen);
+ } else {
+ nl++;
+ bson_append_start_object2(out, key, keylen);
+ }
}
}
fp = rp;
bson_init_as_query(&bsq1);
bson_append_start_object(&bsq1, "$set");
bson_append_int(&bsq1, "arr1.1", 1111);
+ bson_append_string(&bsq1, "a.b", "c");
bson_append_finish_object(&bsq1);
bson_finish(&bsq1);
bson bsq2;
bson_init_as_query(&bsq2);
- bson_append_int(&bsq1, "arr1.1", 1111);
+ bson_append_int(&bsq2, "arr1.1", 1111);
+ bson_append_string(&bsq2, "a.b", "c");
bson_finish(&bsq2);
q1 = ejdbcreatequery(jb, &bsq2, NULL, 0, NULL);
ejdbqryexecute(ccoll, q1, &count, JBQRYCOUNT, NULL);