public inbox for [email protected]
help / color / mirror / Atom feedFrom: Khushboo Vashi <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [pgAdmin4][Patch] - RM 5270 - [EPAS] Synonym properties does not show OID.
Date: Tue, 7 Apr 2020 18:37:12 +0530
Message-ID: <CAFOhELcnGqr-498VPibJitLEAW0zcanyV5s5y4wUMSn4xs2hgA@mail.gmail.com> (raw)
Hi,
Please find the attached patch to fix the RM # 5270 - [EPAS] Synonym
properties does not show OID.
As per the current implementation, we completely ignored OID and instead
considered the name as the unique field, now with this patch OID will be
used as an unique id and also will display OID in the properties tab.
Thanks,
Khushboo
Attachments:
[application/octet-stream] RM_5270.patch (19.0K, 3-RM_5270.patch)
download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/__init__.py
index b9f5d57df..dfba24431 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/__init__.py
@@ -270,7 +270,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
for row in rset['rows']:
res.append(
self.blueprint.generate_browser_node(
- row['name'],
+ row['oid'],
scid,
row['name'],
icon="icon-synonym"
@@ -467,13 +467,16 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
SQL = render_template("/".join([self.template_path,
'get_parent_oid.sql']),
data=data, conn=self.conn)
- status, parent_id = self.conn.execute_scalar(SQL)
+ status, res = self.conn.execute_dict(SQL)
if not status:
return internal_server_error(errormsg=res)
+ parent_id = res['rows'][0]['scid']
+ syid = res['rows'][0]['syid']
+
return jsonify(
node=self.blueprint.generate_browser_node(
- data['name'],
+ syid,
int(parent_id),
data['name'],
icon="icon-synonym"
@@ -556,7 +559,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
data = request.form if request.form else json.loads(
request.data, encoding='utf-8'
)
- SQL = self.get_sql(gid, sid, data, scid, syid)
+ SQL, name = self.get_sql(gid, sid, data, scid, syid)
# Most probably this is due to error
if not isinstance(SQL, (str, unicode)):
return SQL
@@ -570,7 +573,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
node=self.blueprint.generate_browser_node(
syid,
scid,
- syid,
+ name,
icon="icon-synonym"
)
)
@@ -598,7 +601,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
data[k] = v
try:
- SQL = self.get_sql(gid, sid, data, scid, syid)
+ SQL, name = self.get_sql(gid, sid, data, scid, syid)
# Most probably this is due to error
if not isinstance(SQL, (str, unicode)):
return SQL
@@ -614,6 +617,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
"""
This function will genrate sql from model data
"""
+ name = None
if syid is not None:
SQL = render_template("/".join([self.template_path,
'properties.sql']),
@@ -626,6 +630,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
gettext("Could not find the synonym on the server.")
)
old_data = res['rows'][0]
+ name = old_data['name']
# If target schema/object is not present then take it from
# old data, it means it does not changed
if 'synobjschema' not in data:
@@ -646,10 +651,11 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
if arg not in data:
return "-- missing definition"
+ name = data['name']
SQL = render_template("/".join([self.template_path,
'create.sql']), comment=False,
data=data, conn=self.conn)
- return SQL.strip('\n')
+ return SQL.strip('\n'), name
@check_precondition
def sql(self, gid, sid, did, scid, syid, diff_schema=None,
@@ -781,7 +787,7 @@ class SynonymView(PGChildNodeView, SchemaDiffObjectCompare):
if data:
if diff_schema:
data['schema'] = diff_schema
- sql = self.get_sql(gid, sid, data, scid, oid)
+ sql, name = self.get_sql(gid, sid, data, scid, oid)
else:
if drop_sql:
sql = self.delete(gid=gid, sid=sid, did=did,
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
index 42c361633..057cb2d97 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/static/js/synonym.js
@@ -69,7 +69,7 @@ define('pgadmin.node.synonym', [
isNew: function() {
return !this.fetchFromServer;
},
- idAttribute: 'name',
+ idAttribute: 'oid',
// Default values!
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
@@ -93,6 +93,9 @@ define('pgadmin.node.synonym', [
id: 'name', label: gettext('Name'), cell: 'string',
type: 'text', mode: ['properties', 'create', 'edit'],
disabled: 'inSchema', readonly: function(m) { return !m.isNew(); },
+ },{
+ id: 'oid', label: gettext('OID'), cell: 'string',
+ type: 'text', mode: ['properties'],
},{
id: 'owner', label: gettext('Owner'), cell: 'string',
type: 'text', mode: ['properties', 'create', 'edit'],
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.2_plus/properties.sql
index ec2724a0a..cb4c66c28 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.2_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.2_plus/properties.sql
@@ -26,6 +26,6 @@ SELECT synname AS name, pg_get_userbyid(synowner) AS owner,
FROM pg_synonym s JOIN pg_namespace ns ON s.synnamespace = ns.oid
WHERE s.synnamespace={{scid}}::oid
{% if syid %}
- AND s.synname={{ syid|qtLiteral }}
+ AND s.oid={{syid}}::oid
{% endif %}
-ORDER BY synname;
\ No newline at end of file
+ORDER BY synname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.5_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.5_plus/properties.sql
index ec2724a0a..0b3b82d97 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.5_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/9.5_plus/properties.sql
@@ -1,4 +1,4 @@
-SELECT synname AS name, pg_get_userbyid(synowner) AS owner,
+SELECT s.oid, synname AS name, pg_get_userbyid(synowner) AS owner,
synobjschema, synobjname, ns.nspname as schema,
COALESCE(
(SELECT relkind
@@ -26,6 +26,6 @@ SELECT synname AS name, pg_get_userbyid(synowner) AS owner,
FROM pg_synonym s JOIN pg_namespace ns ON s.synnamespace = ns.oid
WHERE s.synnamespace={{scid}}::oid
{% if syid %}
- AND s.synname={{ syid|qtLiteral }}
+ AND s.oid={{syid}}::oid
{% endif %}
-ORDER BY synname;
\ No newline at end of file
+ORDER BY synname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
index 08f07e031..e21f9683e 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/get_parent_oid.sql
@@ -1,5 +1,5 @@
-SELECT synnamespace as scid
+SELECT s.oid as syid, synnamespace as scid
FROM pg_synonym s
WHERE synname = {{ data.name|qtLiteral }}
AND synnamespace IN
- ( SELECT oid FROM pg_namespace WHERE nspname = {{ data.schema|qtLiteral }} );
\ No newline at end of file
+ ( SELECT oid FROM pg_namespace WHERE nspname = {{ data.schema|qtLiteral }} );
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/nodes.sql
index 1f8259b4a..c1df07f08 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/nodes.sql
@@ -1,4 +1,4 @@
-SELECT synname as name
+SELECT s.oid, synname as name
FROM pg_synonym s
JOIN pg_namespace ns ON s.synnamespace = ns.oid
AND s.synnamespace = {{scid}}::oid
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/properties.sql
index ce6d59b14..eab57c8e3 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonyms/sql/default/properties.sql
@@ -14,6 +14,6 @@ SELECT synname AS name, pg_get_userbyid(synowner) AS owner,
FROM pg_synonym s JOIN pg_namespace ns ON s.synnamespace = ns.oid
WHERE s.synnamespace={{scid}}::oid
{% if syid %}
- AND s.synname={{ syid|qtLiteral }}
+ AND s.oid={{syid}}::oid
{% endif %}
-ORDER BY synname;
\ No newline at end of file
+ORDER BY synname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete.py
index 88d749aec..bad95bf50 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete.py
@@ -59,11 +59,11 @@ class SynonymDeleteTestCase(BaseTestGenerator):
self.sequence_id = sequence_utils.create_sequences(
self.server, self.db_name, self.schema_name, self.sequence_name)
self.synonym_name = "test_synonym_delete_%s" % str(uuid.uuid4())[1:8]
- synonym_utils.create_synonym(self.server,
- self.db_name,
- self.schema_name,
- self.synonym_name,
- self.sequence_name)
+ self.syn_oid = synonym_utils.create_synonym(self.server,
+ self.db_name,
+ self.schema_name,
+ self.synonym_name,
+ self.sequence_name)
def runTest(self):
"""This function will delete synonym under schema node."""
@@ -77,7 +77,7 @@ class SynonymDeleteTestCase(BaseTestGenerator):
response = self.tester.delete(
self.url + str(utils.SERVER_GROUP) + '/' +
str(self.server_id) + '/' + str(self.db_id) + '/' +
- str(self.schema_id) + '/' + str(self.synonym_name),
+ str(self.schema_id) + '/' + str(self.syn_oid),
follow_redirects=True)
self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete_multiple.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete_multiple.py
index e5b17469f..361f54713 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete_multiple.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_delete_multiple.py
@@ -60,17 +60,18 @@ class SynonymDeleteMultipleTestCase(BaseTestGenerator):
self.sequence_id = sequence_utils.create_sequences(
self.server, self.db_name, self.schema_name, self.sequence_name)
self.synonym_name = "test_synonym_delete_%s" % str(uuid.uuid4())[1:8]
- synonym_utils.create_synonym(self.server,
- self.db_name,
- self.schema_name,
- self.synonym_name,
- self.sequence_name)
+ self.syn_oid = synonym_utils.create_synonym(self.server,
+ self.db_name,
+ self.schema_name,
+ self.synonym_name,
+ self.sequence_name)
+
self.synonym_name_1 = "test_synonym_delete_%s" % str(uuid.uuid4())[1:8]
- synonym_utils.create_synonym(self.server,
- self.db_name,
- self.schema_name,
- self.synonym_name_1,
- self.sequence_name)
+ self.syn_oid_1 = synonym_utils.create_synonym(self.server,
+ self.db_name,
+ self.schema_name,
+ self.synonym_name_1,
+ self.sequence_name)
def runTest(self):
"""This function will delete synonym under schema node."""
@@ -87,7 +88,7 @@ class SynonymDeleteMultipleTestCase(BaseTestGenerator):
if not synonym_response:
raise Exception("No synonym node to delete.")
- data = {'ids': [self.synonym_name, self.synonym_name_1]}
+ data = {'ids': [self.syn_oid, self.syn_oid_1]}
response = self.tester.delete(
self.url + str(utils.SERVER_GROUP) + '/' +
str(self.server_id) + '/' + str(self.db_id) + '/' +
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_get.py
index 60f565b35..6681f1e6d 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_get.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_get.py
@@ -59,11 +59,11 @@ class SynonymGetTestCase(BaseTestGenerator):
self.sequence_id = sequence_utils.create_sequences(
self.server, self.db_name, self.schema_name, self.sequence_name)
self.synonym_name = "test_synonym_get_%s" % str(uuid.uuid4())[1:8]
- synonym_utils.create_synonym(self.server,
- self.db_name,
- self.schema_name,
- self.synonym_name,
- self.sequence_name)
+ self.syn_oid = synonym_utils.create_synonym(self.server,
+ self.db_name,
+ self.schema_name,
+ self.synonym_name,
+ self.sequence_name)
def runTest(self):
"""This function will fetch synonym under schema node."""
@@ -71,7 +71,7 @@ class SynonymGetTestCase(BaseTestGenerator):
response = self.tester.get(
self.url + str(utils.SERVER_GROUP) + '/' +
str(self.server_id) + '/' + str(self.db_id) + '/' +
- str(self.schema_id) + '/' + str(self.synonym_name),
+ str(self.schema_id) + '/' + str(self.syn_oid),
follow_redirects=True)
self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_put.py
index df0ab0000..b9faa7087 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_put.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/test_synonym_put.py
@@ -66,11 +66,11 @@ class SynonymPutTestCase(BaseTestGenerator):
self.sequence_id = sequence_utils.create_sequences(
self.server, self.db_name, self.schema_name, self.sequence_name)
self.synonym_name = "test_synonym_put_%s" % str(uuid.uuid4())[1:8]
- synonym_utils.create_synonym(self.server,
- self.db_name,
- self.schema_name,
- self.synonym_name,
- self.sequence_name)
+ self.syn_oid = synonym_utils.create_synonym(self.server,
+ self.db_name,
+ self.schema_name,
+ self.synonym_name,
+ self.sequence_name)
def runTest(self):
"""This function will update synonym under schema node."""
@@ -96,7 +96,7 @@ class SynonymPutTestCase(BaseTestGenerator):
str(self.server_id) + '/' +
str(self.db_id) + '/' +
str(self.schema_id) + '/' +
- str(self.synonym_name),
+ str(self.syn_oid),
data=json.dumps(data),
follow_redirects=True)
self.assertEquals(response.status_code, 200)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/utils.py
index a62cd706e..f5f4cbd42 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/utils.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/tests/utils.py
@@ -40,6 +40,14 @@ def create_synonym(server, db_name, schema_name, synonym_name, sequence_name):
schema_name, synonym_name, schema_name, sequence_name)
pg_cursor.execute(query)
connection.commit()
+
+ # Get 'oid' from newly created synonym
+ pg_cursor.execute("SELECT s.oid as name FROM"
+ " pg_synonym s WHERE s.synname='%s'" %
+ synonym_name)
+ synonym = pg_cursor.fetchone()
+ connection.close()
+ return synonym[0]
except Exception:
traceback.print_exc(file=sys.stderr)
view thread (8+ 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]
Subject: Re: [pgAdmin4][Patch] - RM 5270 - [EPAS] Synonym properties does not show OID.
In-Reply-To: <CAFOhELcnGqr-498VPibJitLEAW0zcanyV5s5y4wUMSn4xs2hgA@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