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 c561159..adf7001 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 @@ -197,6 +197,18 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): * get_index_constraint_sql(self, tid, data): - This function will generate modified sql for index constraints (Primary Key & Unique) + + * 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 @@ -238,7 +250,12 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): 'all_tables': [{}, {'get': 'get_all_tables'}], 'get_access_methods': [{}, {'get': 'get_access_methods'}], 'get_oper_class': [{}, {'get': 'get_oper_class'}], - 'get_operator': [{}, {'get': 'get_operator'}] + 'get_operator': [{}, {'get': 'get_operator'}], + 'select_sql': [{'get': 'select_sql'}], + 'insert_sql': [{'get': 'insert_sql'}], + 'update_sql': [{'get': 'update_sql'}], + 'delete_sql': [{'get': 'delete_sql'}] + }) def check_precondition(f): @@ -2629,4 +2646,176 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): return ajax_response(response=sql.strip('\n')) + @check_precondition + def select_sql(self, gid, sid, did, scid, tid): + """ + SELECT script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + tid: Table Id + + Returns: + SELECT Script sql for the object + """ + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + scid=scid, tid=tid, + datlastsysoid=self.datlastsysoid) + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + data = res['rows'][0] + data = self._formatter(scid, tid, data) + + 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: + columns = ", ".join(columns) + else: + columns = '*' + + sql = "SELECT {0}\n\tFROM {1};".format( + columns, + self.qtIdent(self.conn, data['schema'], data['name']) + ) + return ajax_response(response=sql) + + @check_precondition + def insert_sql(self, gid, sid, did, scid, tid): + """ + INSERT script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + tid: Table Id + + Returns: + INSERT Script sql for the object + """ + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + scid=scid, tid=tid, + datlastsysoid=self.datlastsysoid) + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + data = res['rows'][0] + data = self._formatter(scid, tid, data) + + 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['schema'], 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, tid): + """ + UPDATE script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + tid: Table Id + + Returns: + UPDATE Script sql for the object + """ + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + scid=scid, tid=tid, + datlastsysoid=self.datlastsysoid) + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + data = res['rows'][0] + data = self._formatter(scid, tid, data) + + 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) + + sql = "UPDATE {0}\n\tSET {1}\n\tWHERE ;".format( + self.qtIdent(self.conn, data['schema'], 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, tid): + """ + DELETE script sql for the object + + Args: + gid: Server Group Id + sid: Server Id + did: Database Id + scid: Schema Id + tid: Table Id + + Returns: + DELETE Script sql for the object + """ + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + scid=scid, tid=tid, + datlastsysoid=self.datlastsysoid) + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + data = res['rows'][0] + + sql = "DELETE FROM {0}\n\tWHERE ;".format( + self.qtIdent(self.conn, data['schema'], data['name']) + ) + + return ajax_response(response=sql) + + TableView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js index 0258ca7..ffe3124 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js @@ -26,6 +26,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { sqlAlterHelp: 'sql-altertable.html', sqlCreateHelp: 'sql-createtable.html', parent_type: ['schema', 'catalog'], + hasScriptTypes: ['create', 'select', 'insert', 'update', 'delete'], Init: function() { /* Avoid mulitple registration of menus */ if (this.initialized)