Hi Dave,

PFA updated patch.

On Sat, Dec 2, 2017 at 10:42 AM, Dave Page <dp...@pgadmin.org> wrote:

> Hi
>
> On Thursday, November 30, 2017, Murtuza Zabuawala <
> murtuza.zabuaw...@enterprisedb.com> wrote:
>
>> Hi,
>>
>> PFA patch to fix the issue where debugger failed to run when user tries
>> to debug the function which call itself recursively.
>> RM#2524
>>
>
> This seems to fix the recursion problem, but walking the stack doesn't
> work - no matter which frame I click on, the highlighted source code line
> remains that of the top frame, as does the value of in_val on the
> Parameters tab.
>
​Fixed.​

​It's due to improper conditional logic to select frame id in JS code.​


>
> Thanks.
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
>
diff --git a/web/pgadmin/tools/debugger/static/js/direct.js 
b/web/pgadmin/tools/debugger/static/js/direct.js
index 640bcf2..2085654 100644
--- a/web/pgadmin/tools/debugger/static/js/direct.js
+++ b/web/pgadmin/tools/debugger/static/js/direct.js
@@ -979,6 +979,7 @@ define([
 
         var DebuggerStackModel = Backbone.Model.extend({
           defaults: {
+            frame_id: 0,
             name: undefined,
             value: undefined,
             line_no: undefined
@@ -991,17 +992,22 @@ define([
         });
 
         var stackGridCols = [
-          {name: 'name', label: gettext('Name'), type:'text', editable: false, 
cell:'string'},
-          {name: 'value', label: gettext('Value'), type:'text', editable: 
false, cell:'string'},
-          {name: 'line_no', label: gettext('Line No.'), type:'text', editable: 
false, cell:'string'}
+          {name: 'name', label: gettext('Name'), type:'text',
+            editable: false, cell:'string'},
+          {name: 'value', label: gettext('Value'), type:'text',
+            editable: false, cell:'string'},
+          {name: 'line_no', label: gettext('Line No.'), type:'text',
+            editable: false, cell:'string'}
         ];
 
         var my_obj = [];
-        if (result.length != 0)
-        {
-          for (var i = 0; i < result.length; i++) {
-            my_obj.push({ "name": result[i].targetname, "value": 
result[i].args, "line_no": result[i].linenumber });
-          }
+        for (var i = 0; i < result.length; i++) {
+          my_obj.push({
+            "frame_id": i,
+            "name": result[i].targetname,
+            "value": result[i].args,
+            "line_no": result[i].linenumber
+          });
         }
 
         var stackColl = this.stackColl = new StackCollection(my_obj);
@@ -1018,14 +1024,11 @@ define([
             },
             rowClick: function(e) {
               //Find which row is selected and depending on that send the 
frame id
-              for (var i = 0; i < this.model.collection.length; i++) {
-                if (this.model.collection.models[i].get('name') == 
this.model.get('name')) {
-                  self.frame_id_ = i;
-                  break;
-                }
-              }
+              self.frame_id = this.model.get('frame_id');
               this.model.trigger('backgrid:row:selected', this);
-              self.stack_grid.$el.find("td").css("background-color", 
this.disabledColor);
+              self.stack_grid.$el.find("td").css(
+                "background-color", this.disabledColor
+              );
               this.$el.find("td").css("background-color", this.highlightColor);
             }
           }),
@@ -1036,7 +1039,10 @@ define([
         stack_grid.render();
 
         // Render the stack grid into stack panel
-        
pgTools.DirectDebug.stack_pane_panel.$container.find('.stack_pane').append(stack_grid.el);
+        pgTools.DirectDebug.stack_pane_panel
+                           .$container
+                           .find('.stack_pane')
+                           .append(stack_grid.el);
 
       },
 
@@ -1235,7 +1241,7 @@ define([
         // Make ajax call to listen the database message
         var baseUrl = url_for('debugger.select_frame', {
                         'trans_id': pgTools.DirectDebug.trans_id,
-                        'frame_id': self.frame_id_
+                        'frame_id': self.frame_id
                       });
         $.ajax({
           url: baseUrl,
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/continue.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/continue.sql
index ff51aa9..6eaac13 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/continue.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/continue.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
     FROM pldbg_get_stack({{session_id}}::INTEGER) s
-    WHERE s.func = p.func AND s.pkg = p.pkg) AS args
+    WHERE s.func = p.func AND s.pkg = p.pkg ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_continue({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/select_frame.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/select_frame.sql
index c70def7..f887417 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/select_frame.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/select_frame.sql
@@ -7,6 +7,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func AND s.pkg = p.pkg) AS args
+     WHERE s.func = p.func AND s.pkg = p.pkg ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_select_frame({{session_id}}::INTEGER, {{frame_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_into.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_into.sql
index 676bbe0..dfbf19c 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_into.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_into.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func AND s.pkg = p.pkg) AS args
+     WHERE s.func = p.func AND s.pkg = p.pkg ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_step_into({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_over.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_over.sql
index 572aa80..4b9848b 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_over.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/step_over.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
     FROM pldbg_get_stack({{session_id}}::INTEGER) s
-    WHERE s.func = p.func AND s.pkg = p.pkg) AS args
+    WHERE s.func = p.func AND s.pkg = p.pkg ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_step_over({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/wait_for_breakpoint.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/wait_for_breakpoint.sql
index eb98625..a1eb1fd 100644
--- 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v1/wait_for_breakpoint.sql
+++ 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v1/wait_for_breakpoint.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func AND s.pkg = p.pkg) AS args
+     WHERE s.func = p.func AND s.pkg = p.pkg ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_wait_for_breakpoint({{session_id}}::INTEGER) p;
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/continue.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/continue.sql
index 3cbeeab..67fd863 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/continue.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/continue.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
     FROM pldbg_get_stack({{session_id}}::INTEGER) s
-    WHERE s.func = p.func) AS args
+    WHERE s.func = p.func ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_continue({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/select_frame.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/select_frame.sql
index ac2bc77..4ae0356 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/select_frame.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/select_frame.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func) AS args
+     WHERE s.func = p.func ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_select_frame({{session_id}}::INTEGER, {{frame_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_into.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_into.sql
index 2645a69..dcccbde 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_into.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_into.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func) AS args
+     WHERE s.func = p.func ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_step_into({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_over.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_over.sql
index d77a0ae..4ee9dab 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_over.sql
+++ b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/step_over.sql
@@ -6,6 +6,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func) AS args
+     WHERE s.func = p.func ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_step_over({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/wait_for_breakpoint.sql 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/wait_for_breakpoint.sql
index befca11..3d78103 100644
--- 
a/web/pgadmin/tools/debugger/templates/debugger/sql/v2/wait_for_breakpoint.sql
+++ 
b/web/pgadmin/tools/debugger/templates/debugger/sql/v2/wait_for_breakpoint.sql
@@ -7,6 +7,6 @@ SELECT
     (SELECT
         s.args
      FROM pldbg_get_stack({{session_id}}::INTEGER) s
-     WHERE s.func = p.func) AS args
+     WHERE s.func = p.func ORDER BY s.level LIMIT 1) AS args
 FROM pldbg_wait_for_breakpoint({{session_id}}::INTEGER) p
-{% endif %}
\ No newline at end of file
+{% endif %}

Reply via email to