Skip to content

Commit 254b229

Browse files
authored
Merge pull request #41 from picoded/mongodb-remove-parameter-bug
Mongodb remove parameter bug
2 parents 7fe9df7 + 2dc619c commit 254b229

File tree

2 files changed

+74
-13
lines changed

2 files changed

+74
-13
lines changed

src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ public Map<String, Object> DataObjectRemoteDataMap_get(String _oid) {
222222
**/
223223
public void DataObjectRemoteDataMap_update(String _oid, Map<String, Object> fullMap,
224224
Set<String> updateKeys) {
225+
225226

226227
// Configure this to be an "upsert" query
227228
FindOneAndUpdateOptions opt = new FindOneAndUpdateOptions();
@@ -236,7 +237,9 @@ public void DataObjectRemoteDataMap_update(String _oid, Map<String, Object> full
236237
Document unset_doc = new Document();
237238

238239
// Lets iterate the keys, and decide accordingly
239-
Set<String> fullKeys = fullMap.keySet();
240+
Set<String> fullKeys = new HashSet<String>(fullMap.keySet());
241+
fullKeys.addAll(updateKeys);
242+
240243
for (String key : fullKeys) {
241244
// Get the value
242245
Object value = fullMap.get(key);
@@ -268,8 +271,10 @@ public void DataObjectRemoteDataMap_update(String _oid, Map<String, Object> full
268271
if (updateKeys.contains(key)) {
269272
// Handle NULL values unset
270273
if (value == null || value == ObjectToken.NULL) {
274+
271275
unset_doc.append(key, "");
272276
continue;
277+
273278
}
274279

275280
// Handle values update
@@ -285,6 +290,7 @@ public void DataObjectRemoteDataMap_update(String _oid, Map<String, Object> full
285290
setOnInsert_doc.append(key, value);
286291
}
287292
}
293+
288294

289295
// Generate the "update" doc
290296
Document updateDoc = new Document();

src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ public void constructorTest() {
5959
// Subset assertion
6060
//-----------------------------------------------
6161

62-
/// Utility function, to ensure the expected values exists in map
63-
/// while allowing future test cases not to break when additional values
64-
/// like create timestamp is added.
62+
// Utility function, to ensure the expected values exists in map
63+
// while allowing future test cases not to break when additional values
64+
// like create timestamp is added.
6565
public void assetSubset(Map<String, Object> expected, Map<String, Object> result) {
6666
for (Map.Entry<String, Object> entry : expected.entrySet()) {
6767
assertEquals(entry.getValue(), result.get(entry.getKey()));
@@ -86,10 +86,9 @@ protected HashMap<String, Object> randomObjMap() {
8686
}
8787

8888
// @Test
89-
// public void invalidSetup() { //Numeric as table prefix tend to cuase
90-
// problems
89+
// public void invalidSetup() {
90+
// //Numeric as table prefix tend to cause problems
9191
// DataObjectMap m;
92-
//
9392
// try {
9493
// m = new DataObjectMap(JStackObj, "1" + TestConfig.randomTablePrefix());
9594
// fail(); // if we got here, no exception was thrown, which is bad
@@ -139,7 +138,7 @@ public void basicTest() {
139138
assetSubset(objMap, mtObj.get(guid));
140139
}
141140

142-
/// Checks if a blank object gets saved
141+
// Checks if a blank object gets saved
143142
@Test
144143
public void blankObjectSave() {
145144
String guid = null;
@@ -607,9 +606,65 @@ public void getKeyNamesTest() {
607606
// }
608607

609608
// remove meta object support
610-
//-----------------------------------------------
609+
// -----------------------------------------------
610+
@Test
611+
public void removePropertyViaDataObject_saveDelta() {
612+
613+
// Lets just rescycle old test for some dummy data
614+
basicTest();
615+
616+
// Lets get DataObject list
617+
DataObject[] oRes = null;
618+
assertNotNull(oRes = mtObj.query(null, null));
619+
assertTrue(oRes.length > 0);
620+
621+
// Lets get the first object
622+
DataObject testObject = oRes[0];
623+
String oid = testObject._oid();
624+
625+
testObject.remove("num");
626+
testObject.remove("str_val");
627+
testObject.saveDelta();
628+
629+
// Get the object again
630+
DataObject changedObject = mtObj.get(oid);
631+
assertNotNull( changedObject );
632+
633+
// Check the respective value is null
634+
assertNull( changedObject.get("num") );
635+
assertNull( changedObject.get("str_val") );
636+
}
637+
638+
@Test
639+
public void removePropertyViaDataObject_saveAll() {
640+
641+
// Lets just rescycle old test for some dummy data
642+
basicTest();
643+
644+
// Lets get DataObject list
645+
DataObject[] oRes = null;
646+
assertNotNull(oRes = mtObj.query(null, null));
647+
assertTrue(oRes.length > 0);
648+
649+
// Lets get the first object
650+
DataObject testObject = oRes[0];
651+
String oid = testObject._oid();
652+
653+
testObject.remove("num");
654+
testObject.remove("str_val");
655+
testObject.saveAll();
656+
657+
// Get the object again
658+
DataObject changedObject = mtObj.get(oid);
659+
assertNotNull( changedObject );
660+
661+
// Check the respective value is null
662+
assertNull( changedObject.get("num") );
663+
assertNull( changedObject.get("str_val") );
664+
}
665+
611666
@Test
612-
public void removeViaDataObject() {
667+
public void removeViaMetaOID() {
613668

614669
// Lets just rescycle old test for some dummy data
615670
basicTest();
@@ -620,7 +675,7 @@ public void removeViaDataObject() {
620675
assertTrue(oRes.length > 0);
621676

622677
// Lets remove one object
623-
mtObj.remove(oRes[0]);
678+
mtObj.remove(oRes[0]._oid());
624679

625680
// Lets query to make sure its removed
626681
DataObject[] qRes = null;
@@ -629,7 +684,7 @@ public void removeViaDataObject() {
629684
}
630685

631686
@Test
632-
public void removeViaMetaOID() {
687+
public void removePropertyForMetaObject() {
633688

634689
// Lets just rescycle old test for some dummy data
635690
basicTest();
@@ -640,7 +695,7 @@ public void removeViaMetaOID() {
640695
assertTrue(oRes.length > 0);
641696

642697
// Lets remove one object
643-
mtObj.remove(oRes[0]._oid());
698+
mtObj.remove(oRes[0]);
644699

645700
// Lets query to make sure its removed
646701
DataObject[] qRes = null;

0 commit comments

Comments
 (0)