#88 fixed it
authoradam <adamansky@gmail.com>
Sun, 4 Aug 2013 16:11:25 +0000 (23:11 +0700)
committeradam <adamansky@gmail.com>
Sun, 4 Aug 2013 16:11:25 +0000 (23:11 +0700)
tcejdb/bson.c
tcejdb/testejdb/t2.c

index 139484c..02a7aeb 100644 (file)
@@ -1537,7 +1537,7 @@ int bson_merge3(const void *bsdata1, const void *bsdata2, bson *out) {
         }
         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;
@@ -1560,11 +1560,11 @@ int bson_merge3(const void *bsdata1, const void *bsdata2, bson *out) {
                     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;
@@ -1576,12 +1576,15 @@ int bson_merge3(const void *bsdata1, const void *bsdata2, bson *out) {
                     } 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;
index 84c8c97..79e9f73 100644 (file)
@@ -3164,6 +3164,7 @@ void testTicket88() { //https://github.com/Softmotions/ejdb/issues/88
     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);
 
@@ -3178,7 +3179,8 @@ void testTicket88() { //https://github.com/Softmotions/ejdb/issues/88
 
     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);