From aa1c283514d61dd9949eaaed06cfe2e80648f1d4 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Tue, 24 May 2016 12:41:00 +0530 Subject: [PATCH] Added Insert/Delete/Update script functionality for foreign table objects --- .../schemas/foreign_tables/__init__.py | 156 +++++++++++++++++- .../foreign_tables/js/foreign_tables.js | 1 + 2 files changed, 156 insertions(+), 1 deletion(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py index 1fb6d3c26..b969b2da4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/__init__.py @@ -157,6 +157,19 @@ class ForeignTableView(PGChildNodeView, DataTypeReader): * dependencies(gid, sid, did, scid, foid): - Returns the dependencies for the Foreign Table object. + + * select_sql(gid, sid, did, scid, foid): + - Returns sql for Script + + * insert_sql(gid, sid, did, scid, foid): + - Returns sql for Script + + * update_sql(gid, sid, did, scid, foid): + - Returns sql for Script + + * delete_sql(gid, sid, did, scid, foid): + - Returns sql for Script + """ node_type = blueprint.node_type @@ -193,7 +206,11 @@ class ForeignTableView(PGChildNodeView, DataTypeReader): 'get_foreign_servers': [{'get': 'get_foreign_servers'}, {'get': 'get_foreign_servers'}], 'get_tables': [{'get': 'get_tables'}, {'get': 'get_tables'}], - 'get_columns': [{'get': 'get_columns'}, {'get': 'get_columns'}] + 'get_columns': [{'get': 'get_columns'}, {'get': 'get_columns'}], + 'select_sql': [{'get': 'select_sql'}], + 'insert_sql': [{'get': 'insert_sql'}], + 'update_sql': [{'get': 'update_sql'}], + 'delete_sql': [{'get': 'delete_sql'}] }) def validate_request(f): @@ -1118,4 +1135,141 @@ AND relkind != 'c'))""" return {"ftoptions": variables_lst} + + @check_precondition + def select_sql(self, gid, sid, did, scid, foid): + """ + SELECT script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + foid: Foreign Table Id + + Returns: + SELECT Script sql for the object + """ + data = self._fetch_properties(gid, sid, did, scid, foid) + + columns = [] + for c in data['columns']: + columns.append(self.qtIdent(self.conn, c['attname'])) + + if len(columns) > 0: + columns = ", ".join(columns) + else: + columns = '*' + + sql = "SELECT {0}\n\tFROM {1};".format( + columns, + self.qtIdent(self.conn, data['basensp'], data['name']) + ) + + return ajax_response(response=sql) + + @check_precondition + def insert_sql(self, gid, sid, did, scid, foid): + """ + INSERT script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + foid: Foreign Table Id + + Returns: + INSERT Script sql for the object + """ + data = self._fetch_properties(gid, sid, did, scid, foid) + + columns = [] + values = [] + + # Now we have all list of columns which we need + if 'columns' in data: + for c in data['columns']: + columns.append(self.qtIdent(self.conn, c['attname'])) + values.append('?') + + if len(columns) > 0: + columns = ", ".join(columns) + values = ", ".join(values) + sql = "INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format( + self.qtIdent(self.conn, data['basensp'], data['name']), + columns, values + ) + else: + sql = gettext('-- Please create column(s) first...') + + return ajax_response(response=sql) + + @check_precondition + def update_sql(self, gid, sid, did, scid, foid): + """ + UPDATE script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + foid: Foreign Table Id + + Returns: + UPDATE Script sql for the object + """ + data = self._fetch_properties(gid, sid, did, scid, foid) + + columns = [] + + # Now we have all list of columns which we need + if 'columns' in data: + for c in data['columns']: + columns.append(self.qtIdent(self.conn, c['attname'])) + + if len(columns) > 0: + if len(columns) == 1: + columns = columns[0] + columns += "=?" + else: + columns = "=?, ".join(columns) + columns += "=?" + + sql = "UPDATE {0}\n\tSET {1}\n\tWHERE ;".format( + self.qtIdent(self.conn, data['basensp'], data['name']), + columns + ) + else: + sql = gettext('-- Please create column(s) first...') + + return ajax_response(response=sql) + + @check_precondition + def delete_sql(self, gid, sid, did, scid, foid): + """ + DELETE script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + foid: Foreign Table Id + + Returns: + DELETE Script sql for the object + """ + data = self._fetch_properties(gid, sid, did, scid, foid) + + sql = "DELETE FROM {0}\n\tWHERE ;".format( + self.qtIdent(self.conn, data['basensp'], data['name']) + ) + + return ajax_response(response=sql) + + ForeignTableView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js index e6ed9f6b3..2e730f82f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js @@ -534,6 +534,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { collection_type: 'coll-foreign-table', hasSQL: true, hasDepends: true, + hasScriptTypes: ['create', 'select', 'insert', 'update', 'delete'], parent_type: ['schema'], Init: function() { /* Avoid multiple registration of menus */