From 6a15043a44cf6c09580bce4c989691b8f68e8515 Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 03:03:51 +0000 Subject: [PATCH 1/7] Extending unit test for remove parameter issue --- .../StructSimple_DataObjectMap_test.java | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java index e80aae33..cda492a9 100755 --- a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java +++ b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java @@ -614,13 +614,41 @@ public void removeViaDataObject() { // Lets just rescycle old test for some dummy data basicTest(); + // Lets get DataObject list + DataObject[] oRes = null; + assertNotNull(oRes = mtObj.query(null, null)); + assertTrue(oRes.length > 0); + + // Lets get the first object + DataObject testObject = oRes[0]; + String oid = testObject._oid(); + testObject.remove("num"); + testObject.remove("str_val"); + testObject.saveDelta(); + + // Get the object again + DataObject changedObject = mtObj.get(oid); + assertNotNull( changedObject ); + + // Check the respective value is null + assertNull( changedObject.get("num") ); + assertNull( changedObject.get("str_val") ); + + } + + @Test + public void removeViaMetaOID() { + + // Lets just rescycle old test for some dummy data + basicTest(); + // Lets get DataObject list DataObject[] oRes = null; assertNotNull(oRes = mtObj.query(null, null)); assertTrue(oRes.length > 0); // Lets remove one object - mtObj.remove(oRes[0]); + mtObj.remove(oRes[0]._oid()); // Lets query to make sure its removed DataObject[] qRes = null; @@ -629,7 +657,7 @@ public void removeViaDataObject() { } @Test - public void removeViaMetaOID() { + public void removePropertyForMetaObject() { // Lets just rescycle old test for some dummy data basicTest(); @@ -640,7 +668,7 @@ public void removeViaMetaOID() { assertTrue(oRes.length > 0); // Lets remove one object - mtObj.remove(oRes[0]._oid()); + mtObj.remove(oRes[0]); // Lets query to make sure its removed DataObject[] qRes = null; From 95d84b160b54c9394819bac8efc3a1d0021a7212 Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 04:50:56 +0000 Subject: [PATCH 2/7] Trying with unset set to 1 instead of "" --- src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java index e7c3a82a..a21a336a 100644 --- a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java +++ b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java @@ -268,7 +268,7 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full if (updateKeys.contains(key)) { // Handle NULL values unset if (value == null || value == ObjectToken.NULL) { - unset_doc.append(key, ""); + unset_doc.append(key, 1); continue; } From 5ab5dbba364036b6f172243d4ebb694e41420aac Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 08:09:20 +0000 Subject: [PATCH 3/7] Experimenting with wierd "remove" not working behaviour --- .../picoded/dstack/mongodb/MongoDB_DataObjectMap.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java index a21a336a..763f9f7d 100644 --- a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java +++ b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java @@ -268,13 +268,20 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full if (updateKeys.contains(key)) { // Handle NULL values unset if (value == null || value == ObjectToken.NULL) { - unset_doc.append(key, 1); + unset_doc.append(key, ""); continue; } // Handle values update set_doc.append(key, value); continue; + } else { + // It seems like for some reason NULL might not be properly triggering the updateKeys? + if (value == null || value == ObjectToken.NULL) { + unset_doc.append(key, ""); + set_doc.append(key, null); + setOnInsert_doc.append(key, null); + } } // OK - this is not in the update dataset From 6a8cb47f680418cc771ff44df6bd7f02ac4bfb4d Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 08:15:22 +0000 Subject: [PATCH 4/7] Testing with setting "null" instead of unset --- .../picoded/dstack/mongodb/MongoDB_DataObjectMap.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java index 763f9f7d..bb9f849c 100644 --- a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java +++ b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java @@ -269,19 +269,14 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full // Handle NULL values unset if (value == null || value == ObjectToken.NULL) { unset_doc.append(key, ""); + set_doc.append(key, null); + setOnInsert_doc.append(key, null); continue; } // Handle values update set_doc.append(key, value); continue; - } else { - // It seems like for some reason NULL might not be properly triggering the updateKeys? - if (value == null || value == ObjectToken.NULL) { - unset_doc.append(key, ""); - set_doc.append(key, null); - setOnInsert_doc.append(key, null); - } } // OK - this is not in the update dataset From c1ced23dead930c229cbdaa138bee532cbec3630 Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 08:56:45 +0000 Subject: [PATCH 5/7] Updating test case --- .../StructSimple_DataObjectMap_test.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java index cda492a9..42b2bf1d 100755 --- a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java +++ b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java @@ -609,7 +609,7 @@ public void getKeyNamesTest() { // remove meta object support //----------------------------------------------- @Test - public void removeViaDataObject() { + public void removePropertyViaDataObject_saveDelta() { // Lets just rescycle old test for some dummy data basicTest(); @@ -633,7 +633,33 @@ public void removeViaDataObject() { // Check the respective value is null assertNull( changedObject.get("num") ); assertNull( changedObject.get("str_val") ); + } + + @Test + public void removePropertyViaDataObject_saveAll() { + + // Lets just rescycle old test for some dummy data + basicTest(); + + // Lets get DataObject list + DataObject[] oRes = null; + assertNotNull(oRes = mtObj.query(null, null)); + assertTrue(oRes.length > 0); + + // Lets get the first object + DataObject testObject = oRes[0]; + String oid = testObject._oid(); + testObject.remove("num"); + testObject.remove("str_val"); + testObject.saveAll(); + // Get the object again + DataObject changedObject = mtObj.get(oid); + assertNotNull( changedObject ); + + // Check the respective value is null + assertNull( changedObject.get("num") ); + assertNull( changedObject.get("str_val") ); } @Test From b101e9402acc8fdba8025eadba25cc06982e169b Mon Sep 17 00:00:00 2001 From: Eugene Cheah Date: Wed, 7 Dec 2022 09:02:33 +0000 Subject: [PATCH 6/7] reverting set_doc experiment --- .../picoded/dstack/mongodb/MongoDB_DataObjectMap.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java index bb9f849c..045db802 100644 --- a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java +++ b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java @@ -268,10 +268,13 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full if (updateKeys.contains(key)) { // Handle NULL values unset if (value == null || value == ObjectToken.NULL) { + // In theory this should have worked unset_doc.append(key, ""); - set_doc.append(key, null); - setOnInsert_doc.append(key, null); - continue; + + // // But it didn't so i tried this instead + // set_doc.append(key, null); + // setOnInsert_doc.append(key, null); + // continue; } // Handle values update From 2dc619c90bcf5a97dbdbda283393416fa55e5d8f Mon Sep 17 00:00:00 2001 From: remy Date: Mon, 12 Dec 2022 16:32:40 +0000 Subject: [PATCH 7/7] Fix that damn thing --- .../dstack/mongodb/MongoDB_DataObjectMap.java | 13 ++++++----- .../StructSimple_DataObjectMap_test.java | 23 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java index 045db802..0bc8831e 100644 --- a/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java +++ b/src/main/java/picoded/dstack/mongodb/MongoDB_DataObjectMap.java @@ -222,6 +222,7 @@ public Map DataObjectRemoteDataMap_get(String _oid) { **/ public void DataObjectRemoteDataMap_update(String _oid, Map fullMap, Set updateKeys) { + // Configure this to be an "upsert" query FindOneAndUpdateOptions opt = new FindOneAndUpdateOptions(); @@ -236,7 +237,9 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full Document unset_doc = new Document(); // Lets iterate the keys, and decide accordingly - Set fullKeys = fullMap.keySet(); + Set fullKeys = new HashSet(fullMap.keySet()); + fullKeys.addAll(updateKeys); + for (String key : fullKeys) { // Get the value Object value = fullMap.get(key); @@ -268,13 +271,10 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full if (updateKeys.contains(key)) { // Handle NULL values unset if (value == null || value == ObjectToken.NULL) { - // In theory this should have worked + unset_doc.append(key, ""); + continue; - // // But it didn't so i tried this instead - // set_doc.append(key, null); - // setOnInsert_doc.append(key, null); - // continue; } // Handle values update @@ -290,6 +290,7 @@ public void DataObjectRemoteDataMap_update(String _oid, Map full setOnInsert_doc.append(key, value); } } + // Generate the "update" doc Document updateDoc = new Document(); diff --git a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java index 42b2bf1d..2e37ef56 100755 --- a/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java +++ b/src/test/java/picoded/dstack/struct/simple/StructSimple_DataObjectMap_test.java @@ -59,9 +59,9 @@ public void constructorTest() { // Subset assertion //----------------------------------------------- - /// Utility function, to ensure the expected values exists in map - /// while allowing future test cases not to break when additional values - /// like create timestamp is added. + // Utility function, to ensure the expected values exists in map + // while allowing future test cases not to break when additional values + // like create timestamp is added. public void assetSubset(Map expected, Map result) { for (Map.Entry entry : expected.entrySet()) { assertEquals(entry.getValue(), result.get(entry.getKey())); @@ -86,10 +86,9 @@ protected HashMap randomObjMap() { } // @Test - // public void invalidSetup() { //Numeric as table prefix tend to cuase - // problems + // public void invalidSetup() { + // //Numeric as table prefix tend to cause problems // DataObjectMap m; - // // try { // m = new DataObjectMap(JStackObj, "1" + TestConfig.randomTablePrefix()); // fail(); // if we got here, no exception was thrown, which is bad @@ -139,7 +138,7 @@ public void basicTest() { assetSubset(objMap, mtObj.get(guid)); } - /// Checks if a blank object gets saved + // Checks if a blank object gets saved @Test public void blankObjectSave() { String guid = null; @@ -607,7 +606,7 @@ public void getKeyNamesTest() { // } // remove meta object support - //----------------------------------------------- + // ----------------------------------------------- @Test public void removePropertyViaDataObject_saveDelta() { @@ -622,10 +621,11 @@ public void removePropertyViaDataObject_saveDelta() { // Lets get the first object DataObject testObject = oRes[0]; String oid = testObject._oid(); + testObject.remove("num"); testObject.remove("str_val"); testObject.saveDelta(); - + // Get the object again DataObject changedObject = mtObj.get(oid); assertNotNull( changedObject ); @@ -640,7 +640,7 @@ public void removePropertyViaDataObject_saveAll() { // Lets just rescycle old test for some dummy data basicTest(); - + // Lets get DataObject list DataObject[] oRes = null; assertNotNull(oRes = mtObj.query(null, null)); @@ -649,10 +649,11 @@ public void removePropertyViaDataObject_saveAll() { // Lets get the first object DataObject testObject = oRes[0]; String oid = testObject._oid(); + testObject.remove("num"); testObject.remove("str_val"); testObject.saveAll(); - + // Get the object again DataObject changedObject = mtObj.get(oid); assertNotNull( changedObject );