public inbox for [email protected]  
help / color / mirror / Atom feed
From: Surinder Kumar <[email protected]>
To: Dave Page <[email protected]>
Cc: pgadmin-hackers <[email protected]>
Subject: Re: [pgAdmin4][Patch]: RM1728 - Properties are not refreshing after objects are edited
Date: Fri, 14 Oct 2016 15:31:05 +0530
Message-ID: <CAM5-9D9Pbmg4MQdsOqzHeeuWWbZvBCLvzeauhQ6U8vtwSrJLow@mail.gmail.com> (raw)
In-Reply-To: <CA+OCxoxaYdKVbmEN-zJG5N_wrXViznkngdHwOpM563Jt+Vxe0Q@mail.gmail.com>
References: <CAM5-9D9n8nvcH44nSGKmMLfCDSV-ka5mrmcEKEdaPJN+zy5CHw@mail.gmail.com>
	<CA+OCxoxwp0_fAaOjReySQAOAtXnsHxQ=--K08Scayfpy=gka9Q@mail.gmail.com>
	<CAM5-9D9s4sz_3dC9Hr6L_O6qEyB5qWE-GjNBvvS26rhguEWCEg@mail.gmail.com>
	<CA+OCxowiq3KZz+86J9BWOLwk=F1c-Cx9FOvG5QCw2awHUK-ucA@mail.gmail.com>
	<CA+OCxoxaYdKVbmEN-zJG5N_wrXViznkngdHwOpM563Jt+Vxe0Q@mail.gmail.com>
List-Unsubscribe:  <mailto:[email protected]?body=unsub%20pgadmin-hackers>

Hi

*Following are the issues fixed in nodes:*

1) If we create/update a node with non-default schema, It should return
selected schema id in return response. but default schema id is returned
every time due to which it throws error in properties panel.
Fixed in Domains, Collation, Types, Views & Table node.

2) Incorrect parent id of object node is returned from *nodes method* due
to which wrong parent id is passed while updating object and
thus node didn't get refreshed.
Fixed in FTS Configuration, FTS Parser nodes.

Also, I have kept changes of first patch which are essential to refresh
node every time. Without that patch nodes properties panel updates only
sometimes.

Please find attached patch. Please review and let me know for comments.

Thanks
Surinder Kumar



On Fri, Sep 23, 2016 at 6:00 PM, Dave Page <[email protected]> wrote:

> Umm, no it wasn't - sorry.
>
> I see the same issue with Types. Can you fix that, and check all other
> nodes as well please?
>
> Thanks.
>
> On Fri, Sep 23, 2016 at 1:29 PM, Dave Page <[email protected]> wrote:
> > Thanks, applied.
> >
> > On Fri, Sep 23, 2016 at 12:05 PM, Surinder Kumar
> > <[email protected]> wrote:
> >> Hi,
> >>
> >> Please find updated patch with changes:
> >> 1) On debugging through JS files, the issue was in synonym update method
> >> which wasn't returning node object.
> >> 2) retrieving schema name in node.sql for creating node object in update
> >> method.
> >>
> >> Please review and let me know for comments.
> >>
> >> On Fri, Sep 23, 2016 at 2:44 PM, Dave Page <[email protected]> wrote:
> >>>
> >>> Hi
> >>>
> >>> On Fri, Sep 23, 2016 at 7:39 AM, Surinder Kumar
> >>> <[email protected]> wrote:
> >>> > Hi
> >>> >
> >>> > Issue:
> >>> > on updating node, we deselect and then again select the node updated
> to
> >>> > refresh the panel. but it needs some delay of few milliseconds
> between
> >>> > deselect and select to fix this issue.
> >>> >
> >>> > Please find attached patch and review.
> >>>
> >>> This does not resolve the issue for me. I tested using a synonym to a
> >>> package on EPAS 9.5, by changing the target package name.
> >>>
> >>>
> >>> --
> >>> Dave Page
> >>> Blog: http://pgsnake.blogspot.com
> >>> Twitter: @pgsnake
> >>>
> >>> EnterpriseDB UK: http://www.enterprisedb.com
> >>> The Enterprise PostgreSQL Company
> >>
> >>
> >
> >
> >
> > --
> > Dave Page
> > Blog: http://pgsnake.blogspot.com
> > Twitter: @pgsnake
> >
> > EnterpriseDB UK: http://www.enterprisedb.com
> > The Enterprise PostgreSQL Company
>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>


-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers


Attachments:

  [application/octet-stream] RM1728_v2.patch (13.6K, 3-RM1728_v2.patch)
  download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
index 941604d..1e1f536 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/__init__.py
@@ -443,6 +443,13 @@ class CollationView(PGChildNodeView):
         if not status:
             return internal_server_error(errormsg=coid)

+        # Get updated schema oid
+        SQL = render_template("/".join([self.template_path,
+                                        'get_oid.sql']), coid=coid)
+        status, scid = self.conn.execute_scalar(SQL)
+        if not status:
+            return internal_server_error(errormsg=coid)
+
         return jsonify(
             node=self.blueprint.generate_browser_node(
                 coid,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
index 59d9a3d..52b2079 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py
@@ -546,6 +546,14 @@ AND relkind != 'c'))"""
         if not status:
             return internal_server_error(errormsg=res)

+        # Get updated schema oid
+        SQL = render_template("/".join([self.template_path,
+                                        'get_oid.sql']),
+                              doid=doid)
+        status, scid = self.conn.execute_scalar(SQL)
+        if not status:
+            return internal_server_error(errormsg=res)
+
         return jsonify(
             node=self.blueprint.generate_browser_node(
                 doid,
@@ -640,12 +648,10 @@ AND relkind != 'c'))"""
             SQL = render_template("/".join([self.template_path,
                                             'get_oid.sql']),
                                   doid=doid)
-            status, res = self.conn.execute_2darray(SQL)
+            status, scid = self.conn.execute_scalar(SQL)
             if not status:
                 return internal_server_error(errormsg=res)

-            scid = res['rows'][0]['scid']
-
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     doid,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
index 4dc9cf2..f9fca3a 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/__init__.py
@@ -286,7 +286,7 @@ class FtsConfigurationView(PGChildNodeView):
             res.append(
                 self.blueprint.generate_browser_node(
                     row['oid'],
-                    did,
+                    scid,
                     row['name'],
                     icon="icon-fts_configuration"
                 ))
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/__init__.py
index b80f9eb..52cb2d8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/__init__.py
@@ -256,7 +256,7 @@ class FtsParserView(PGChildNodeView):
             res.append(
                 self.blueprint.generate_browser_node(
                     row['oid'],
-                    did,
+                    scid,
                     row['name'],
                     icon="icon-fts_parser"
                 ))
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/sql/9.5_plus/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/sql/9.5_plus/get_schema.sql
new file mode 100644
index 0000000..c05ee0f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/sql/9.5_plus/get_schema.sql
@@ -0,0 +1,7 @@
+{# ===== fetch new assigned schema id ===== #}
+SELECT
+    c.relnamespace as scid
+FROM
+    pg_class c
+WHERE
+    c.oid = {{syid|qtLiteral}}::oid;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
index 040afb8..daa6ef0 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py
@@ -1442,9 +1442,17 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings):
             if not status:
                 return internal_server_error(errormsg=res)

+            # Get updated schema oid
+            SQL = render_template("/".join([self.template_path,
+                                  'get_schema_oid.sql']), tname=data['name'])
+
+            status, scid = self.conn.execute_scalar(SQL)
+            if not status:
+                return internal_server_error(errormsg=scid)
+
             # we need oid to to add object in tree at browser
             SQL = render_template("/".join([self.template_path,
-                                            'get_oid.sql']), scid=scid, data=data)
+                                  'get_oid.sql']), scid=scid, data=data)
             status, tid = self.conn.execute_scalar(SQL)
             if not status:
                 return internal_server_error(errormsg=tid)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_schema_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_schema_oid.sql
index 99498f3..4d329d2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_schema_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_schema_oid.sql
@@ -1,9 +1,11 @@
 {# ===== fetch new assigned schema oid ===== #}
-{% if tid %}
 SELECT
     c.relnamespace as scid
 FROM
     pg_class c
 WHERE
+{% if tid %}
     c.oid = {{tid}}::oid;
+{% else %}
+    c.relname = {{tname|qtLiteral}}::text;
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_schema_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_schema_oid.sql
index 99498f3..4d329d2 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_schema_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_schema_oid.sql
@@ -1,9 +1,11 @@
 {# ===== fetch new assigned schema oid ===== #}
-{% if tid %}
 SELECT
     c.relnamespace as scid
 FROM
     pg_class c
 WHERE
+{% if tid %}
     c.oid = {{tid}}::oid;
+{% else %}
+    c.relname = {{tname|qtLiteral}}::text;
 {% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
index c67c47c..e6b7f3c 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py
@@ -902,10 +902,17 @@ class TypeView(PGChildNodeView, DataTypeReader):
         try:
             SQL = render_template("/".join([self.template_path, 'create.sql']),
                                   data=data, conn=self.conn)
-            status, res = self.conn.execute_scalar(SQL)
+            status, res = self.conn.execute_dict(SQL)
             if not status:
                 return internal_server_error(errormsg=res)

+            # we need scid to update in browser tree
+            SQL = render_template("/".join([self.template_path,
+                                  'get_scid.sql']), tname=data['name'])
+            status, scid = self.conn.execute_scalar(SQL)
+            if not status:
+                return internal_server_error(errormsg=scid)
+
             # we need oid to to add object in tree at browser
             SQL = render_template("/".join([self.template_path,
                                             'get_oid.sql']),
@@ -948,6 +955,14 @@ class TypeView(PGChildNodeView, DataTypeReader):
             if not status:
                 return internal_server_error(errormsg=res)

+            SQL = render_template("/".join([self.template_path,
+                                  'get_scid.sql']), tname=data['name'])
+
+            # Get updated schema oid
+            status, scid = self.conn.execute_scalar(SQL)
+            if not status:
+                return internal_server_error(errormsg=res)
+
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     tid,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_oid.sql
index 14f7950..1751498 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_oid.sql
@@ -8,4 +8,4 @@ WHERE t.typtype != 'd' AND t.typname NOT LIKE E'\\_%' AND t.typnamespace = {{sci
 {% if data %}
     AND t.typname = {{data.name|qtLiteral}}
 {% endif %}
-ORDER BY t.typname;
\ No newline at end of file
+ORDER BY t.typname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_scid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_scid.sql
new file mode 100644
index 0000000..696a205
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/sql/9.1_plus/get_scid.sql
@@ -0,0 +1,6 @@
+SELECT
+    t.typnamespace as scid
+FROM
+    pg_type t
+WHERE
+    t.typname = {{tname|qtLiteral}}::text;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
index 1063c4e..73f818f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py
@@ -487,12 +487,24 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             SQL = render_template("/".join(
                 [self.template_path, 'sql/view_id.sql']), data=data)
             status, view_id = self.conn.execute_scalar(SQL)
+
+            if not status:
+                return internal_server_error(errormsg=res)
+
+            # Get updated schema oid
+            SQL = render_template("/".join(
+                [self.template_path, 'sql/get_oid.sql']), vid=view_id)
+            status, scid = self.conn.execute_scalar(SQL)
+
+            if not status:
+                return internal_server_error(errormsg=res)
+
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     view_id,
                     scid,
                     data['name'],
-                    icon="icon-%s" % self.node_type
+                    icon="icon-view"
                 )
             )
         except Exception as e:
@@ -525,15 +537,13 @@ class ViewNode(PGChildNodeView, VacuumSettings):
             view_id = res_data['rows'][0]['oid']
             new_view_name = res_data['rows'][0]['relname']

+            # Get updated schema oid
             SQL = render_template("/".join(
                 [self.template_path, 'sql/get_oid.sql']), vid=view_id)
-            status, res = self.conn.execute_2darray(SQL)
+            status, scid = self.conn.execute_scalar(SQL)
             if not status:
                 return internal_server_error(errormsg=res)

-            # new schema id
-            scid = res['rows'][0]['scid']
-
             return jsonify(
                 node=self.blueprint.generate_browser_node(
                     view_id,
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 46c49cf..3652ec5 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -1148,7 +1148,8 @@ function(require, $, _, S, Bootstrap, pgAdmin, Alertify, CodeMirror) {
             if (
               this.i && this.d && this.new._type == this.d._type
             ) {
-              var _id = this.d._id;
+              var self = this,
+              _id = this.d._id;
               if (this.new._id != this.d._id) {
                 // Found the new oid, update its node_id
                 var node_data = this.t.itemData(ctx.i);
@@ -1162,7 +1163,10 @@ function(require, $, _, S, Bootstrap, pgAdmin, Alertify, CodeMirror) {
                 this.t.setId(ctx.id, {id: this.new.id});
                 this.t.openPath(this.i);
                 this.t.deselect(this.i);
-                this.t.select(this.i);
+                // select tree item after few milliseconds
+                setTimeout(function() {
+                  self.t.select(self.i);
+                }, 10);
               }
             }
             var success = this.o && this.o.success;


view thread (12+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: [pgAdmin4][Patch]: RM1728 - Properties are not refreshing after objects are edited
  In-Reply-To: <CAM5-9D9Pbmg4MQdsOqzHeeuWWbZvBCLvzeauhQ6U8vtwSrJLow@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox