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 e319ad3ef..cc030fd62 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 @@ -568,8 +568,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if not res['rows']: + elif not res['rows']: return make_json_response( success=0, errormsg=_( @@ -643,6 +642,29 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): status=200 ) + def _get_sql_for_create(self, data, schema): + # Replace schema oid with schema name + new_data = data.copy() + new_data['schema'] = schema + + if ( + 'name' in new_data and + 'schema' in new_data + ): + sql = render_template("/".join([self.template_path, + 'create.sql']), + data=new_data, + conn=self.conn + ) + else: + sql = u"-- definition incomplete" + return sql + + @staticmethod + def _replace_schema_oid_with_schema_name(new_schema, new_data): + if 'schema' in new_data: + new_data['schema'] = new_schema + def get_sql(self, gid, sid, did, scid, data, cfgid=None): """ This function will return SQL for model data @@ -663,8 +685,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if len(res['rows']) == 0: + elif len(res['rows']) == 0: return gone(_("Could not find the FTS Configuration node.")) old_data = res['rows'][0] @@ -681,10 +702,9 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=new_schema) - # Replace schema oid with schema name new_data = data.copy() - if 'schema' in new_data: - new_data['schema'] = new_schema + # Replace schema oid with schema name + self._replace_schema_oid_with_schema_name(new_schema, new_data) # Fetch old schema name using old schema oid sql = render_template( @@ -719,21 +739,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=schema) - # Replace schema oid with schema name - new_data = data.copy() - new_data['schema'] = schema - - if ( - 'name' in new_data and - 'schema' in new_data - ): - sql = render_template("/".join([self.template_path, - 'create.sql']), - data=new_data, - conn=self.conn - ) - else: - sql = u"-- definition incomplete" + sql = self._get_sql_for_create(data, schema) return sql.strip('\n'), data['name'] @check_precondition diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py index c3cff1b73..ddf18d6bb 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/__init__.py @@ -564,8 +564,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if not res['rows']: + elif not res['rows']: return make_json_response( success=0, errormsg=_( @@ -639,6 +638,37 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): status=200 ) + def _get_sql_for_create(self, data, schema): + # Replace schema oid with schema name + new_data = data.copy() + new_data['schema'] = schema + + if ( + 'template' in new_data and + 'name' in new_data and + 'schema' in new_data + ): + sql = render_template("/".join([self.template_path, + 'create.sql']), + data=new_data, + conn=self.conn + ) + else: + sql = u"-- definition incomplete" + return sql + + def _check_template_name_and_schema_name(self, data, old_data): + if 'schema' not in data: + data['schema'] = old_data['schema'] + + # Handle templates and its schema name properly + if old_data['template_schema'] is not None and \ + old_data['template_schema'] != "pg_catalog": + old_data['template'] = self.qtIdent( + self.conn, old_data['template_schema'], + old_data['template'] + ) + def get_sql(self, gid, sid, did, scid, data, dcid=None): """ This function will return SQL for model data @@ -660,21 +690,11 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if len(res['rows']) == 0: + elif len(res['rows']) == 0: return gone(_("Could not find the FTS Dictionary node.")) old_data = res['rows'][0] - if 'schema' not in data: - data['schema'] = old_data['schema'] - - # Handle templates and its schema name properly - if old_data['template_schema'] is not None and \ - old_data['template_schema'] != "pg_catalog": - old_data['template'] = self.qtIdent( - self.conn, old_data['template_schema'], - old_data['template'] - ) + self._check_template_name_and_schema_name(data, old_data) # If user has changed the schema then fetch new schema directly # using its oid otherwise fetch old schema name using its oid @@ -721,22 +741,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=schema) - # Replace schema oid with schema name - new_data = data.copy() - new_data['schema'] = schema - - if ( - 'template' in new_data and - 'name' in new_data and - 'schema' in new_data - ): - sql = render_template("/".join([self.template_path, - 'create.sql']), - data=new_data, - conn=self.conn - ) - else: - sql = u"-- definition incomplete" + sql = self._get_sql_for_create(data, schema) return sql.strip('\n'), data['name'] @check_precondition diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py index e01ad95d0..e5f3b41f4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/__init__.py @@ -511,8 +511,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if not res['rows']: + elif not res['rows']: return make_json_response( success=0, errormsg=_( @@ -584,6 +583,33 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): status=200 ) + @staticmethod + def _replace_schema_oid_with_name(new_data, new_schema): + if 'schema' in new_data: + new_data['schema'] = new_schema + + def _get_sql_for_create(self, data, schema): + # Replace schema oid with schema name + new_data = data.copy() + new_data['schema'] = schema + + if ( + 'prsstart' in new_data and + 'prstoken' in new_data and + 'prsend' in new_data and + 'prslextype' in new_data and + 'name' in new_data and + 'schema' in new_data + ): + sql = render_template( + "/".join([self.template_path, 'create.sql']), + data=new_data, + conn=self.conn + ) + else: + sql = "-- definition incomplete" + return sql + def get_sql(self, gid, sid, did, scid, data, pid=None): """ This function will return SQL for model data @@ -605,8 +631,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - - if len(res['rows']) == 0: + elif len(res['rows']) == 0: return gone(_("Could not find the FTS Parser node.")) old_data = res['rows'][0] @@ -625,8 +650,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): # Replace schema oid with schema name new_data = data.copy() - if 'schema' in new_data: - new_data['schema'] = new_schema + FtsParserView._replace_schema_oid_with_name(new_data, new_schema) # Fetch old schema name using old schema oid sql = render_template( @@ -661,25 +685,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=schema) - # Replace schema oid with schema name - new_data = data.copy() - new_data['schema'] = schema - - if ( - 'prsstart' in new_data and - 'prstoken' in new_data and - 'prsend' in new_data and - 'prslextype' in new_data and - 'name' in new_data and - 'schema' in new_data - ): - sql = render_template( - "/".join([self.template_path, 'create.sql']), - data=new_data, - conn=self.conn - ) - else: - sql = "-- definition incomplete" + sql = self._get_sql_for_create(data, schema) return sql.strip('\n'), data['name'] @check_precondition diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py index acd316c47..cc86a7f68 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/__init__.py @@ -543,6 +543,45 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): status=200 ) + def _replace_schema_oid_with_name(self, new_schema, old_data, + new_data): + # Replace schema oid with schema name + + if 'schema' in new_data: + new_data['schema'] = new_schema + + # Fetch old schema name using old schema oid + sql = render_template( + "/".join([self.template_path, 'schema.sql']), + data=old_data) + + status, old_schema = self.conn.execute_scalar(sql) + if not status: + return True, old_schema + + # Replace old schema oid with old schema name + old_data['schema'] = old_schema + return False, '' + + def _get_sql_for_create(self, data, schema): + # Replace schema oid with schema name + new_data = data.copy() + new_data['schema'] = schema + + if ( + 'tmpllexize' in new_data and + 'name' in new_data and + 'schema' in new_data + ): + sql = render_template("/".join([self.template_path, + 'create.sql']), + data=new_data, + conn=self.conn + ) + else: + sql = u"-- definition incomplete" + return sql + def get_sql(self, gid, sid, did, scid, data, tid=None): """ This function will return SQL for model data @@ -550,6 +589,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): :param sid: server id :param did: database id :param scid: schema id + :param data: sql data :param tid: fts tempate id """ @@ -564,7 +604,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): status, res = self.conn.execute_dict(sql) if not status: return internal_server_error(errormsg=res) - if len(res['rows']) == 0: + elif len(res['rows']) == 0: return gone( gettext("Could not find the requested FTS template.") ) @@ -586,25 +626,18 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): # Replace schema oid with schema name new_data = data.copy() - if 'schema' in new_data: - new_data['schema'] = new_schema - - # Fetch old schema name using old schema oid - sql = render_template( - "/".join([self.template_path, 'schema.sql']), - data=old_data) - - status, old_schema = self.conn.execute_scalar(sql) - if not status: - return internal_server_error(errormsg=old_schema) - - # Replace old schema oid with old schema name - old_data['schema'] = old_schema + error, errmsg = self._replace_schema_oid_with_name(new_schema, + old_data, + new_data) + if error: + print('ERROR INSIDE UPDATE:: {0}'.format(errmsg)) + return internal_server_error(errormsg=errmsg) sql = render_template( "/".join([self.template_path, 'update.sql']), data=new_data, o_data=old_data ) + # Fetch sql query for modified data if 'name' in data: return sql.strip('\n'), data['name'] @@ -618,22 +651,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=schema) - # Replace schema oid with schema name - new_data = data.copy() - new_data['schema'] = schema - - if ( - 'tmpllexize' in new_data and - 'name' in new_data and - 'schema' in new_data - ): - sql = render_template("/".join([self.template_path, - 'create.sql']), - data=new_data, - conn=self.conn - ) - else: - sql = u"-- definition incomplete" + sql = self._get_sql_for_create(data, schema) return sql.strip('\n'), data['name'] @check_precondition diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py index d132e56ba..a491aaca1 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py @@ -970,6 +970,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare): if 'argtype' in a: args += a['argtype'] args_without_name.append(a['argtype']) + return args, args_without_name def _get_arguments(self, args_list, args, args_without_name): cnt = 1 @@ -989,7 +990,11 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare): args += self.qtIdent( self.conn, a['argname']) + " " - FunctionView._check_argtype(args, args_without_name, a) + args, args_without_name = FunctionView._check_argtype( + args, + args_without_name, + a + ) if cnt < len(args_list): args += ', ' @@ -1194,7 +1199,6 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare): @staticmethod def _prepare_final_dict(data, old_data, chngd_variables, del_variables, all_ids_dict): - # In case of schema diff we don't want variables from # old data if not all_ids_dict['is_schema_diff']: diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 5c3f01425..505a41102 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -1357,8 +1357,8 @@ define('pgadmin.browser.node', [ }.bind(panel), informBeforeAttributeChange = function(ok_callback) { - var j = this.$container.find('.obj_properties').first(); - view = j && j.data('obj-view'); + var obj = this.$container.find('.obj_properties').first(); + view = obj && obj .data('obj-view'); if (view && view.model && !_.isUndefined(view.model.inform_text) && !_.isNull(view.model.inform_text)) { Alertify.alert(