[pgAdmin][RM4895] Possible issue in reset function for nested objects

Ganesh Jaybhay <[email protected]>
Newsgroups gmane.comp.db.postgresql.pgadmin.devel
Message-ID <CAK6syAqnqETKXYZybYiQ5Bbq=WxLjpWN-eqaPP5tqYEt4=W1iQ@mail.gmail.com>
Hi Hackers,

Please find the attached patch to fix the possible issue in reset function
for nested objects.

Regards,
Ganesh Jaybhay
RM4895.patch (application/octet-stream, 2.4 KB)
diff --git a/web/pgadmin/browser/static/js/collection.js b/web/pgadmin/browser/static/js/collection.js
index 1b4d195..51919fd 100644
--- a/web/pgadmin/browser/static/js/collection.js
+++ b/web/pgadmin/browser/static/js/collection.js
@@ -188,7 +188,7 @@ define([
           'remove': function() {
             if (this.grid) {
               if (this.grid.collection) {
-                this.grid.collection.reset({silent: true});
+                this.grid.collection.reset([], {silent: true});
                 delete (this.grid.collection);
               }
               delete (this.grid);
diff --git a/web/pgadmin/browser/static/js/datamodel.js b/web/pgadmin/browser/static/js/datamodel.js
index ed66354..514c403 100644
--- a/web/pgadmin/browser/static/js/datamodel.js
+++ b/web/pgadmin/browser/static/js/datamodel.js
@@ -283,11 +283,17 @@ define([
     },
     // Create a reset function, which allow us to remove the nested object.
     reset: function(opts) {
-      var obj;
+      var obj,
+        reindex = !!(opts && opts.reindex);
 
       if (opts && opts.stop)
         this.stopSession();
 
+      // Let's not touch the child attributes, if reindex is false.
+      if (!reindex) {
+        return;
+      }
+
       for (var id in this.objects) {
         obj = this.get(id);
 
@@ -297,7 +303,7 @@ define([
           } else if (obj instanceof Backbone.Model) {
             obj.clear(opts);
           } else if (obj instanceof pgBrowser.DataCollection) {
-            obj.reset(opts);
+            obj.reset([], opts);
           } else if (obj instanceof Backbone.Collection) {
             obj.each(function(m) {
               if (m instanceof Backbone.DataModel) {
@@ -305,14 +311,11 @@ define([
                 obj.clear(opts);
               }
             });
-            if (!(opts instanceof Array)) {
-              opts = [opts];
-            }
-            Backbone.Collection.prototype.reset.apply(obj, opts);
+            Backbone.Collection.prototype.reset.call(obj, [], opts);
           }
         }
       }
-      this.clear(opts);
+      Backbone.Collection.prototype.reset.apply(this, arguments);
     },
     sessChanged: function() {
       var self = this;
@@ -996,7 +999,7 @@ define([
     },
     // Override the reset function, so that - we can reset the model
     // properly.
-    reset: function(opts) {
+    reset: function(_set, opts) {
       if (opts && opts.stop)
         this.stopSession();
       this.each(function(m) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.