public inbox for [email protected]help / color / mirror / Atom feed
[pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers 3+ messages / 2 participants [nested] [flat]
* [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers @ 2020-03-18 10:58 Akshay Joshi <[email protected]> 2020-03-19 07:55 ` Re: [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Khushboo Vashi <[email protected]> 0 siblings, 1 reply; 3+ messages in thread From: Akshay Joshi @ 2020-03-18 10:58 UTC (permalink / raw) To: pgadmin-hackers Hi Hackers, Attached is the patch to add support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers in Schema Diff Tool. The patch contains some minor fix where parameters are added in the difference list even though it's size is zero. I have also added the test cases. Please review it. -- *Thanks & Regards* *Akshay Joshi* *Sr. Software Architect* *EnterpriseDB Software India Private Limited* *Mobile: +91 976-788-8246* Attachments: [application/octet-stream] RM_5261.patch (64.7K, 3-RM_5261.patch) download | inline diff: diff --git a/docs/en_US/release_notes_4_20.rst b/docs/en_US/release_notes_4_20.rst index be1a58c0d..f22d55ebb 100644 --- a/docs/en_US/release_notes_4_20.rst +++ b/docs/en_US/release_notes_4_20.rst @@ -9,6 +9,7 @@ This release contains a number of bug fixes and new features since the release o New features ************ +| `Issue #5261 <https://redmine.postgresql.org/issues/5261>`_ - Added support of Collation, FTS Configuration, FTS Dictionary, FTS Parser, and FTS Template to the Schema Diff. Housekeeping ************ 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 8c2de07f7..4c67480b3 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 @@ -501,7 +501,7 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def delete(self, gid, sid, did, scid, coid=None): + def delete(self, gid, sid, did, scid, coid=None, only_sql=False): """ This function will delete existing the collation object @@ -511,6 +511,7 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): did: Database ID scid: Schema ID coid: Collation ID + only_sql: Return only sql if True """ if coid is None: data = request.form if request.form else json.loads( @@ -548,6 +549,11 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): nspname=data['schema'], cascade=cascade, conn=self.conn) + + # Used for schema diff tool + if only_sql: + return SQL + status, res = self.conn.execute_scalar(SQL) if not status: return internal_server_error(errormsg=res) @@ -685,7 +691,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): return SQL.strip('\n'), data['name'] @check_precondition - def sql(self, gid, sid, did, scid, coid): + def sql(self, gid, sid, did, scid, coid, diff_schema=None, + json_resp=True): """ This function will generates reverse engineered sql for collation object @@ -696,6 +703,8 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): did: Database ID scid: Schema ID coid: Collation ID + diff_schema: Target Schema for schema diff + json_resp: True then return json response """ SQL = render_template("/".join([self.template_path, 'properties.sql']), @@ -710,6 +719,9 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): data = res['rows'][0] + if diff_schema: + data['schema'] = diff_schema + SQL = render_template("/".join([self.template_path, 'create.sql']), data=data, conn=self.conn) @@ -722,6 +734,9 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): nspname=data['schema']) SQL = sql_header + '\n\n' + SQL.strip('\n') + if not json_resp: + return SQL + return ajax_response(response=SQL) @check_precondition @@ -793,5 +808,38 @@ class CollationView(PGChildNodeView, SchemaDiffObjectCompare): return res - + def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None, + diff_schema=None, drop_sql=False): + """ + This function is used to get the DDL/DML statements. + :param gid: Group ID + :param sid: Serve ID + :param did: Database ID + :param scid: Schema ID + :param oid: Collation ID + :param data: Difference data + :param diff_schema: Target Schema + :param drop_sql: True if need to drop the collation + :return: + """ + sql = '' + if data: + if diff_schema: + data['schema'] = diff_schema + sql, name = self.get_sql(gid=gid, sid=sid, data=data, scid=scid, + coid=oid) + else: + if drop_sql: + sql = self.delete(gid=gid, sid=sid, did=did, + scid=scid, coid=oid, only_sql=True) + elif diff_schema: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, coid=oid, + diff_schema=diff_schema, json_resp=False) + else: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, coid=oid, + json_resp=False) + return sql + + +SchemaDiffRegistry(blueprint.node_type, CollationView) CollationView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql index 9ee1ccb27..25859f89b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collations/sql/default/update.sql @@ -1,5 +1,23 @@ {% if data %} {# Change object's owner #} +{% if (data.lc_collate and data.lc_type) or data.locale or data.copy_collation %} +-- WARNING: +-- We have found the difference in either of LC_COLLATE or LC_CTYPE or LOCALE, +-- so we need to drop the existing collation first and re-create it. +DROP COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }}; + +CREATE COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }} +{% if data.lc_collate and data.lc_type %} + (LC_COLLATE = {{ data.lc_collate|qtLiteral }}, LC_CTYPE = {{ data.lc_type|qtLiteral }}); +{% endif %} +{% if data.locale %} + (LOCALE = {{ data.locale|qtLiteral }}); +{% endif %} +{% if data.copy_collation %} + FROM {{ data.copy_collation }}; +{% endif %} + +{% endif %} {% if data.owner and data.owner != o_data.owner %} ALTER COLLATION {{ conn|qtIdent(o_data.schema, o_data.name) }} OWNER TO {{ conn|qtIdent(data.owner) }}; 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 cae149f29..7065c6630 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 @@ -532,7 +532,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def delete(self, gid, sid, did, scid, cfgid=None): + def delete(self, gid, sid, did, scid, cfgid=None, only_sql=False): """ This function will drop the FTS Configuration object :param gid: group id @@ -540,6 +540,7 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param cfgid: FTS Configuration id + :param only_sql: Return only sql if True """ if cfgid is None: data = request.form if request.form else json.loads( @@ -587,6 +588,10 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): cascade=cascade ) + # Used for schema diff tool + if only_sql: + return sql + status, res = self.conn.execute_scalar(sql) if not status: return internal_server_error(errormsg=res) @@ -869,7 +874,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def sql(self, gid, sid, did, scid, cfgid): + def sql(self, gid, sid, did, scid, cfgid, diff_schema=None, + json_resp=True): """ This function will reverse generate sql for sql panel :param gid: group id @@ -877,6 +883,8 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param cfgid: FTS Configuration id + :param diff_schema: Target Schema for schema diff + :param json_resp: True then return json response """ try: sql = render_template( @@ -901,6 +909,25 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): "FTS Configuration node.") ) + # Used for schema diff tool + if diff_schema: + data = {'schema': scid} + # Fetch schema name from schema oid + sql = render_template("/".join([self.template_path, + 'schema.sql']), + data=data, + conn=self.conn, + ) + + status, schema = self.conn.execute_scalar(sql) + if not status: + return internal_server_error(errormsg=schema) + + res = res.replace(schema, diff_schema) + + if not json_resp: + return res + return ajax_response(response=res) except Exception as e: @@ -970,5 +997,38 @@ class FtsConfigurationView(PGChildNodeView, SchemaDiffObjectCompare): return res + def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None, + diff_schema=None, drop_sql=False): + """ + This function is used to get the DDL/DML statements. + :param gid: Group ID + :param sid: Serve ID + :param did: Database ID + :param scid: Schema ID + :param oid: Collation ID + :param data: Difference data + :param diff_schema: Target Schema + :param drop_sql: True if need to drop the fts configuration + :return: + """ + sql = '' + if data: + if diff_schema: + data['schema'] = diff_schema + sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid, + data=data, cfgid=oid) + else: + if drop_sql: + sql = self.delete(gid=gid, sid=sid, did=did, + scid=scid, cfgid=oid, only_sql=True) + elif diff_schema: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, cfgid=oid, + diff_schema=diff_schema, json_resp=False) + else: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, cfgid=oid, + json_resp=False) + return sql + +SchemaDiffRegistry(blueprint.node_type, FtsConfigurationView) FtsConfigurationView.register_node_view(blueprint) 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 84d6edead..6b8232f07 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 @@ -527,7 +527,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def delete(self, gid, sid, did, scid, dcid=None): + def delete(self, gid, sid, did, scid, dcid=None, only_sql=False): """ This function will drop the FTS Dictionary object :param gid: group id @@ -535,6 +535,7 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param dcid: FTS Dictionary id + :param only_sql: Return only sql if True """ if dcid is None: data = request.form if request.form else json.loads( @@ -581,6 +582,10 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): cascade=cascade ) + # Used for schema diff tool + if only_sql: + return sql + status, res = self.conn.execute_scalar(sql) if not status: return internal_server_error(errormsg=res) @@ -766,7 +771,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def sql(self, gid, sid, did, scid, dcid): + def sql(self, gid, sid, did, scid, dcid, diff_schema=None, + json_resp=True): """ This function will reverse generate sql for sql panel :param gid: group id @@ -774,6 +780,8 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param dcid: FTS Dictionary id + :param diff_schema: Target Schema for schema diff + :param json_resp: True then return json response """ sql = render_template( @@ -819,6 +827,9 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): # Replace schema oid with schema name res['rows'][0]['schema'] = schema + if diff_schema: + res['rows'][0]['schema'] = diff_schema + sql = render_template("/".join([self.template_path, 'create.sql']), data=res['rows'][0], conn=self.conn, is_displaying=True) @@ -832,6 +843,9 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): sql = sql_header + sql + if not json_resp: + return sql + return ajax_response(response=sql.strip('\n')) @check_precondition @@ -897,5 +911,38 @@ class FtsDictionaryView(PGChildNodeView, SchemaDiffObjectCompare): return res + def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None, + diff_schema=None, drop_sql=False): + """ + This function is used to get the DDL/DML statements. + :param gid: Group ID + :param sid: Serve ID + :param did: Database ID + :param scid: Schema ID + :param oid: Collation ID + :param data: Difference data + :param diff_schema: Target Schema + :param drop_sql: True if need to drop the fts configuration + :return: + """ + sql = '' + if data: + if diff_schema: + data['schema'] = diff_schema + sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid, + data=data, dcid=oid) + else: + if drop_sql: + sql = self.delete(gid=gid, sid=sid, did=did, + scid=scid, dcid=oid, only_sql=True) + elif diff_schema: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, dcid=oid, + diff_schema=diff_schema, json_resp=False) + else: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, dcid=oid, + json_resp=False) + return sql + +SchemaDiffRegistry(blueprint.node_type, FtsDictionaryView) FtsDictionaryView.register_node_view(blueprint) 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 fd7cfd0b7..d4a1151f6 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 @@ -476,7 +476,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def delete(self, gid, sid, did, scid, pid=None): + def delete(self, gid, sid, did, scid, pid=None, only_sql=False): """ This function will drop the fts_parser object :param gid: group id @@ -484,6 +484,7 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param pid: fts tempate id + :param only_sql: Return only sql if True """ if pid is None: data = request.form if request.form else json.loads( @@ -530,6 +531,10 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): cascade=cascade ) + # Used for schema diff tool + if only_sql: + return sql + status, res = self.conn.execute_scalar(sql) if not status: return internal_server_error(errormsg=res) @@ -813,7 +818,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def sql(self, gid, sid, did, scid, pid): + def sql(self, gid, sid, did, scid, pid, diff_schema=None, + json_resp=True): """ This function will reverse generate sql for sql panel :param gid: group id @@ -821,6 +827,8 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param pid: fts tempate id + :param diff_schema: Target Schema for schema diff + :param json_resp: True then return json response """ try: sql = render_template( @@ -846,6 +854,25 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): ) ) + # Used for schema diff tool + if diff_schema: + data = {'schema': scid} + # Fetch schema name from schema oid + sql = render_template("/".join([self.template_path, + 'schema.sql']), + data=data, + conn=self.conn, + ) + + status, schema = self.conn.execute_scalar(sql) + if not status: + return internal_server_error(errormsg=schema) + + res = res.replace(schema, diff_schema) + + if not json_resp: + return res + return ajax_response(response=res) except Exception as e: @@ -915,5 +942,38 @@ class FtsParserView(PGChildNodeView, SchemaDiffObjectCompare): return res + def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None, + diff_schema=None, drop_sql=False): + """ + This function is used to get the DDL/DML statements. + :param gid: Group ID + :param sid: Serve ID + :param did: Database ID + :param scid: Schema ID + :param oid: Collation ID + :param data: Difference data + :param diff_schema: Target Schema + :param drop_sql: True if need to drop the fts configuration + :return: + """ + sql = '' + if data: + if diff_schema: + data['schema'] = diff_schema + sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid, + data=data, pid=oid) + else: + if drop_sql: + sql = self.delete(gid=gid, sid=sid, did=did, + scid=scid, pid=oid, only_sql=True) + elif diff_schema: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, pid=oid, + diff_schema=diff_schema, json_resp=False) + else: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, pid=oid, + json_resp=False) + return sql + +SchemaDiffRegistry(blueprint.node_type, FtsParserView) FtsParserView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql index bce558da0..48e335b1d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/templates/fts_parsers/sql/default/update.sql @@ -15,6 +15,23 @@ ALTER TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(o_data.n ALTER TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}} SET SCHEMA {{data.schema}}; {% endif %} +{# Schema Diff SQL for FTS PARSER #} +{% if data.prsstart or data.prstoken or data.prsend or data.prslextype or data.prsheadline %} +-- WARNING: +-- We have found the difference in either of START or GETTOKEN or END or +-- LEXTYPES or HEADLINE, so we need to drop the existing parser first +-- and re-create it. +DROP TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}; + +CREATE TEXT SEARCH PARSER {{ conn|qtIdent(o_data.schema, name) }} ( + START = {% if data.prsstart is defined %}{{data.prsstart}}{% else %}{{o_data.prsstart}}{% endif %}, + GETTOKEN = {% if data.prstoken is defined %}{{data.prstoken}}{% else %}{{o_data.prstoken}}{% endif %}, + END = {% if data.prsend is defined %}{{data.prsend}}{% else %}{{o_data.prsend}}{% endif %}, + LEXTYPES = {% if data.prslextype is defined %}{{data.prslextype}}{% else %}{{o_data.prslextype}}{% endif %}{% if (data.prsheadline and data.prsheadline != '-') or (o_data.prsheadline and o_data.prsheadline != '-') %}, + HEADLINE = {% if data.prsheadline is defined %}{{data.prsheadline}}{% else %}{{o_data.prsheadline}}{% endif %}{% endif %} + +); +{% endif %} {% if "description" in data and data.description != o_data.description %} COMMENT ON TEXT SEARCH PARSER {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}} IS {{ data.description|qtLiteral }}; 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 dd5ec7980..7032682f1 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 @@ -443,7 +443,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def delete(self, gid, sid, did, scid, tid=None): + def delete(self, gid, sid, did, scid, tid=None, only_sql=False): """ This function will drop the fts_template object :param gid: group id @@ -451,6 +451,7 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param tid: fts tempate id + :param only_sql: Return only sql if True """ if tid is None: data = request.form if request.form else json.loads( @@ -493,6 +494,10 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): cascade=cascade ) + # Used for schema diff tool + if only_sql: + return sql + status, res = self.conn.execute_scalar(sql) if not status: return internal_server_error(errormsg=res) @@ -691,7 +696,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): ) @check_precondition - def sql(self, gid, sid, did, scid, tid): + def sql(self, gid, sid, did, scid, tid, diff_schema=None, + json_resp=True): """ This function will reverse generate sql for sql panel :param gid: group id @@ -699,6 +705,8 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): :param did: database id :param scid: schema id :param tid: fts tempate id + :param diff_schema: Target Schema for schema diff + :param json_resp: True then return json response """ sql = render_template( "/".join([self.template_path, 'sql.sql']), @@ -721,6 +729,25 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): "FTS Template node.") ) + # Used for schema diff tool + if diff_schema: + data = {'schema': scid} + # Fetch schema name from schema oid + sql = render_template("/".join([self.template_path, + 'schema.sql']), + data=data, + conn=self.conn, + ) + + status, schema = self.conn.execute_scalar(sql) + if not status: + return internal_server_error(errormsg=schema) + + res = res.replace(schema, diff_schema) + + if not json_resp: + return res + return ajax_response(response=res) @check_precondition @@ -786,5 +813,38 @@ class FtsTemplateView(PGChildNodeView, SchemaDiffObjectCompare): return res + def get_sql_from_diff(self, gid, sid, did, scid, oid, data=None, + diff_schema=None, drop_sql=False): + """ + This function is used to get the DDL/DML statements. + :param gid: Group ID + :param sid: Serve ID + :param did: Database ID + :param scid: Schema ID + :param oid: Collation ID + :param data: Difference data + :param diff_schema: Target Schema + :param drop_sql: True if need to drop the fts configuration + :return: + """ + sql = '' + if data: + if diff_schema: + data['schema'] = diff_schema + sql, name = self.get_sql(gid=gid, sid=sid, did=did, scid=scid, + data=data, tid=oid) + else: + if drop_sql: + sql = self.delete(gid=gid, sid=sid, did=did, + scid=scid, tid=oid, only_sql=True) + elif diff_schema: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, tid=oid, + diff_schema=diff_schema, json_resp=False) + else: + sql = self.sql(gid=gid, sid=sid, did=did, scid=scid, tid=oid, + json_resp=False) + return sql + +SchemaDiffRegistry(blueprint.node_type, FtsTemplateView) FtsTemplateView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql index d6754f0f2..d76f12115 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_templates/sql/default/update.sql @@ -15,6 +15,21 @@ ALTER TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(o_data ALTER TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}} SET SCHEMA {{conn|qtIdent(data.schema)}}; {% endif %} +{# Schema Diff SQL for FTS PARSER #} +{% if data.tmplinit or data.tmpllexize %} +-- WARNING: +-- We have found the difference in either of INIT or LEXIZE, +-- so we need to drop the existing template first and re-create it. +DROP TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}}; + +CREATE TEXT SEARCH TEMPLATE {{ conn|qtIdent(o_data.schema, name) }} ( +{% if data.tmplinit and data.tmplinit != '-'%} + INIT = {{data.tmplinit}}, +{% endif %} + LEXIZE = {% if data.tmpllexize is defined %}{{data.tmpllexize}}{% else %}{{o_data.tmpllexize}}{% endif %} + +); +{% endif %} {% if 'description' in data and data.description != o_data.description %} COMMENT ON TEXT SEARCH TEMPLATE {{conn|qtIdent(o_data.schema)}}.{{conn|qtIdent(name)}} IS {{ data.description|qtLiteral }}; diff --git a/web/pgadmin/tools/schema_diff/__init__.py b/web/pgadmin/tools/schema_diff/__init__.py index 04ff644ce..14f041e92 100644 --- a/web/pgadmin/tools/schema_diff/__init__.py +++ b/web/pgadmin/tools/schema_diff/__init__.py @@ -435,7 +435,7 @@ def compare(trans_id, source_sid, source_did, source_scid, status, msg = check_version_compatibility(source_sid, target_sid) if not status: - return make_json_response(success=0, errormsg=msg, status=404) + return make_json_response(success=0, errormsg=msg, status=428) comparison_result = [] diff --git a/web/pgadmin/tools/schema_diff/directory_compare.py b/web/pgadmin/tools/schema_diff/directory_compare.py index eb0d7d220..112609b9b 100644 --- a/web/pgadmin/tools/schema_diff/directory_compare.py +++ b/web/pgadmin/tools/schema_diff/directory_compare.py @@ -318,37 +318,40 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}): )) if len(tmp_list) > 0: + tmp_target = copy.deepcopy(target_dict[key]) for index in range(len(source_dict[key])): source = copy.deepcopy(source_dict[key][index]) if type(source) is list: # TODO pass elif type(source) is dict: - tmp_key_array = ['name', 'colname', 'argid'] - for tmp_key in tmp_key_array: - if tmp_key in source: - if type(target_dict[key]) is list and \ - len(target_dict[key]) > 0: - tmp = None - tmp_target = \ - copy.deepcopy(target_dict[key]) - for item in tmp_target: - if tmp_key in item and \ - item[tmp_key] == \ - source[tmp_key]: - tmp = copy.deepcopy(item) - if tmp and source != tmp: - updated.append(copy.deepcopy(source)) - tmp_target.remove(tmp) - elif tmp and source == tmp: - tmp_target.remove(tmp) - elif tmp is None: - added.append(source) - else: + tmp_key_array = ['name', 'colname', 'argid', 'token', + 'option'] + # Check the above keys are exist in the dictionary + tmp_key = is_key_exists(tmp_key_array, source) + if tmp_key is not None: + if type(target_dict[key]) is list and \ + len(target_dict[key]) > 0: + tmp = None + for item in tmp_target: + if tmp_key in item and \ + item[tmp_key] == \ + source[tmp_key]: + tmp = copy.deepcopy(item) + if tmp and source != tmp: + updated.append(copy.deepcopy(source)) + tmp_target.remove(tmp) + elif tmp and source == tmp: + tmp_target.remove(tmp) + elif tmp is None: added.append(source) + else: + added.append(source) - difference[key] = {} + difference[key] = {} + if len(added) > 0: difference[key]['added'] = added + if len(updated) > 0: difference[key]['changed'] = updated elif target_dict[key] is None or \ (type(target_dict[key]) is list and @@ -358,7 +361,7 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}): elif type(target_dict[key]) is list and\ len(target_dict[key]) > index: difference[key] = source - else: + elif len(source_dict[key]) > 0: difference[key] = source_dict[key] if type(source) is dict and tmp_target and key in tmp_target and \ @@ -383,6 +386,21 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}): return difference +def is_key_exists(key_list, target_dict): + """ + This function is used to iterate the key list and check that key is + present in the given dictionary + :param key_list: + :param target_dict: + :return: + """ + for key in key_list: + if key in target_dict: + return key + + return None + + def parce_acl(source, target): key = 'acl' diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql index 99757ceb2..de56c5876 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql @@ -438,3 +438,91 @@ ALTER TABLE source."test view f" OWNER TO postgres; -- COMMENT ON VIEW source."test view f" IS 'cmn'; + +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."POSIX"; + +ALTER COLLATION source.coll_src + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX'); + +ALTER COLLATION source.coll_diff + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql index c3042ab60..fb5a7918f 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql @@ -427,3 +427,73 @@ ALTER TABLE target."test view f" OWNER TO postgres; -- COMMENT ON VIEW target."test view f" IS 'cmn'; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."POSIX"; + +ALTER COLLATION target.coll_tar + OWNER TO postgres; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO postgres; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql index 2429eb799..c0002d624 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql @@ -437,3 +437,91 @@ ALTER TABLE source."test view f" OWNER TO postgres; -- COMMENT ON VIEW source."test view f" IS 'cmn'; + +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."POSIX"; + +ALTER COLLATION source.coll_src + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX'); + +ALTER COLLATION source.coll_diff + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql index 89a029232..170ae8d9f 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql @@ -426,3 +426,73 @@ ALTER TABLE target."test view f" OWNER TO postgres; -- COMMENT ON VIEW target."test view f" IS 'cmn'; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."POSIX"; + +ALTER COLLATION target.coll_tar + OWNER TO postgres; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO postgres; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql index 8ef87e3bc..43d51e4eb 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql @@ -438,3 +438,91 @@ CREATE PROCEDURE source.proc1(arg1 bigint) ALTER PROCEDURE source.proc1(arg1 bigint) OWNER TO postgres; + +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."POSIX"; + +ALTER COLLATION source.coll_src + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX'); + +ALTER COLLATION source.coll_diff + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql index d57841744..b9e863aa1 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql @@ -415,3 +415,73 @@ CREATE PROCEDURE target.dodaj_klijenta(v_naziv character varying, v_oib characte ALTER PROCEDURE target.dodaj_klijenta(v_naziv character varying, v_oib character varying, v_pdv_id character varying, v_adresa character varying, v_mjesto integer, v_drzava character varying, v_tip_p_sub character varying, v_vlasnik character varying, v_pdv boolean, v_fisk boolean, v_iban character varying, v_k_osoba character varying, v_email character varying, v_br_tel character varying, v_radna_god numeric, v_schema character varying) OWNER TO postgres; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."POSIX"; + +ALTER COLLATION target.coll_tar + OWNER TO postgres; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO postgres; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql index af9054eeb..4511fb0bb 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql @@ -309,3 +309,89 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments'; CREATE RULE rule2 AS ON INSERT TO source.table_for_rule DO NOTHING; +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."POSIX"; + +ALTER COLLATION source.coll_src + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX'); + +ALTER COLLATION source.coll_diff + OWNER TO postgres; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO postgres; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql index ddc4fda28..0a479dddd 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql @@ -335,3 +335,73 @@ CREATE RULE rule3 AS -- REFRESH MATERIALIZED VIEW target."MView"; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."POSIX"; + +ALTER COLLATION target.coll_tar + OWNER TO postgres; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO postgres; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO postgres; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql index b60dbcd55..2a148d4a2 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql @@ -374,3 +374,91 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments'; CREATE RULE rule2 AS ON INSERT TO source.table_for_rule DO NOTHING; + +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."POSIX"; + +ALTER COLLATION source.coll_src + OWNER TO enterprisedb; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + (LC_COLLATE = 'POSIX', LC_CTYPE = 'POSIX'); + +ALTER COLLATION source.coll_diff + OWNER TO enterprisedb; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO enterprisedb; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql index 57ef05d6a..27c5b36ad 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql @@ -362,3 +362,73 @@ CREATE RULE rule3 AS -- REFRESH MATERIALIZED VIEW target."MView"; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."POSIX"; + +ALTER COLLATION target.coll_tar + OWNER TO enterprisedb; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO enterprisedb; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO enterprisedb; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql index 67ec216d6..7b9ad2954 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql @@ -309,3 +309,90 @@ COMMENT ON RULE rule1 ON source.table_for_rule IS 'comments'; CREATE RULE rule2 AS ON INSERT TO source.table_for_rule DO NOTHING; +-- Collation scripts +CREATE COLLATION source.coll_src + FROM pg_catalog."default"; + +ALTER COLLATION source.coll_src + OWNER TO enterprisedb; + +COMMENT ON COLLATION source.coll_src + IS 'Test Comment'; + +CREATE COLLATION source.coll_diff + FROM pg_catalog."default"; + +ALTER COLLATION source.coll_diff + OWNER TO enterprisedb; + +COMMENT ON COLLATION source.coll_diff + IS 'Test Comment'; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION source.fts_con_src ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION source.fts_con_src OWNER TO enterprisedb; + +COMMENT ON TEXT SEARCH CONFIGURATION source.fts_con_src + IS 'Test Comment'; + + +CREATE TEXT SEARCH CONFIGURATION source.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR asciiword WITH german_stem; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION source.fts_con_diff ADD MAPPING FOR hword WITH dutch_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY source.fts_dict_src ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_src + IS 'Test Comment'; + +CREATE TEXT SEARCH DICTIONARY source.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'english' +); + +COMMENT ON TEXT SEARCH DICTIONARY source.fts_dict_diff + IS 'Test Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER source.fts_par_src ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_src + IS 'Test Comment'; + +CREATE TEXT SEARCH PARSER source.fts_par_diff ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +COMMENT ON TEXT SEARCH PARSER source.fts_par_diff + IS 'Test Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE source.fts_templ_src ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_src IS 'Test Comment'; + +CREATE TEXT SEARCH TEMPLATE source.fts_templ_diff ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE source.fts_templ_diff IS 'Test Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql index f64765224..df53f01d5 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql @@ -335,3 +335,73 @@ CREATE RULE rule3 AS -- REFRESH MATERIALIZED VIEW target."MView"; + +-- Collation scripts +CREATE COLLATION target.coll_tar + FROM pg_catalog."default"; + +ALTER COLLATION target.coll_tar + OWNER TO enterprisedb; + +CREATE COLLATION target.coll_diff + (LC_COLLATE = 'C', LC_CTYPE = 'C'); + +ALTER COLLATION target.coll_diff + OWNER TO enterprisedb; + +-- FTS Configuration scripts +CREATE TEXT SEARCH CONFIGURATION target.fts_con_tar ( + COPY=german +); + +ALTER TEXT SEARCH CONFIGURATION target.fts_con_tar OWNER TO enterprisedb; + +CREATE TEXT SEARCH CONFIGURATION target.fts_con_diff ( + PARSER = default +); +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR asciiword WITH dutch_stem; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR email WITH simple; +ALTER TEXT SEARCH CONFIGURATION target.fts_con_diff ADD MAPPING FOR hword WITH german_stem; + +-- FTS Dictionary scripts +CREATE TEXT SEARCH DICTIONARY target.fts_dict_tar ( + TEMPLATE = simple, + stopwords = 'english' +); + +CREATE TEXT SEARCH DICTIONARY target.fts_dict_diff ( + TEMPLATE = simple, + stopwords = 'german' +); + +COMMENT ON TEXT SEARCH DICTIONARY target.fts_dict_diff + IS 'Comment'; + +-- FTS Parser scripts +CREATE TEXT SEARCH PARSER target.fts_par_tar ( + START = prsd_start, + GETTOKEN = prsd_nexttoken, + END = prsd_end, + LEXTYPES = prsd_lextype); + +CREATE TEXT SEARCH PARSER target.fts_par_diff ( + START = int4_accum, + GETTOKEN = inet_gist_penalty, + END = btint2sortsupport, + LEXTYPES = dispell_init); + +COMMENT ON TEXT SEARCH PARSER target.fts_par_diff + IS 'Comment'; + +-- FTS Template scripts +CREATE TEXT SEARCH TEMPLATE target.fts_templ_tar ( + INIT = dispell_init, + LEXIZE = dispell_lexize +); + +CREATE TEXT SEARCH TEMPLATE target.fts_templ_diff ( + INIT = dsimple_init, + LEXIZE = dsimple_lexize +); + +COMMENT ON TEXT SEARCH TEMPLATE target.fts_templ_diff IS 'Comment'; diff --git a/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py b/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py index 57dec4599..f15e2b516 100644 --- a/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py +++ b/web/pgadmin/tools/schema_diff/tests/test_schema_diff_comp.py @@ -165,6 +165,8 @@ class SchemaDiffTestCase(BaseTestGenerator): self.assertEquals(response.status_code, 200) response_data = json.loads(response.data.decode('utf-8')) file_obj.write(response_data['diff_ddl']) + elif 'diff_ddl' in diff: + file_obj.write(diff['diff_ddl']) file_obj.close() try: ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers 2020-03-18 10:58 [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Akshay Joshi <[email protected]> @ 2020-03-19 07:55 ` Khushboo Vashi <[email protected]> 2020-03-19 08:31 ` Re: [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Akshay Joshi <[email protected]> 0 siblings, 1 reply; 3+ messages in thread From: Khushboo Vashi @ 2020-03-19 07:55 UTC (permalink / raw) To: Akshay Joshi <[email protected]>; +Cc: pgadmin-hackers Hi Akshay, The patch looks good to me. Apart from this patch, I encountered below error. "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_utils.py", line 271, in get_sql_from_submodule_diff parent_target_data=target File "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py", line 790, in ddl_compare target_data=parent_target_data) File "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", line 142, in wrap return f(*args, **kwargs) File "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py", line 508, in get_sql_from_diff schema_diff=True) File "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", line 1369, in get_partitions_sql part_data['partition_scheme'] = self.get_partition_scheme(row) File "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", line 695, in get_partition_scheme for row in data[part_keys]: KeyError: 'partition_keys' Thanks, Khushboo On Wed, Mar 18, 2020 at 4:28 PM Akshay Joshi <[email protected]> wrote: > Hi Hackers, > > Attached is the patch to add support for Collation, FTS Templates, FTS > Dictionaries, FTS Configurations and FTS Parsers in Schema Diff Tool. > > The patch contains some minor fix where parameters are added in the > difference list even though it's size is zero. I have also added the test > cases. > > Please review it. > > -- > *Thanks & Regards* > *Akshay Joshi* > > *Sr. Software Architect* > *EnterpriseDB Software India Private Limited* > *Mobile: +91 976-788-8246* > ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers 2020-03-18 10:58 [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Akshay Joshi <[email protected]> 2020-03-19 07:55 ` Re: [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Khushboo Vashi <[email protected]> @ 2020-03-19 08:31 ` Akshay Joshi <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Akshay Joshi @ 2020-03-19 08:31 UTC (permalink / raw) To: Khushboo Vashi <[email protected]>; +Cc: pgadmin-hackers Thanks, Khushboo for review. On Thu, Mar 19, 2020 at 1:25 PM Khushboo Vashi < [email protected]> wrote: > Hi Akshay, > > The patch looks good to me. > > Apart from this patch, I encountered below error. > > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_utils.py", > line 271, in get_sql_from_submodule_diff > parent_target_data=target > File > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py", > line 790, in ddl_compare > target_data=parent_target_data) > File > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", > line 142, in wrap > return f(*args, **kwargs) > File > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py", > line 508, in get_sql_from_diff > schema_diff=True) > File > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", > line 1369, in get_partitions_sql > part_data['partition_scheme'] = self.get_partition_scheme(row) > File > "/Users/khushboovashi/Projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py", > line 695, in get_partition_scheme > for row in data[part_keys]: > KeyError: 'partition_keys' > The issue has been fixed and committed. > > > > Thanks, > Khushboo > > On Wed, Mar 18, 2020 at 4:28 PM Akshay Joshi < > [email protected]> wrote: > >> Hi Hackers, >> >> Attached is the patch to add support for Collation, FTS Templates, FTS >> Dictionaries, FTS Configurations and FTS Parsers in Schema Diff Tool. >> >> The patch contains some minor fix where parameters are added in the >> difference list even though it's size is zero. I have also added the test >> cases. >> >> Please review it. >> >> -- >> *Thanks & Regards* >> *Akshay Joshi* >> >> *Sr. Software Architect* >> *EnterpriseDB Software India Private Limited* >> *Mobile: +91 976-788-8246* >> > -- *Thanks & Regards* *Akshay Joshi* *Sr. Software Architect* *EnterpriseDB Software India Private Limited* *Mobile: +91 976-788-8246* ^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2020-03-19 08:31 UTC | newest] Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-03-18 10:58 [pgAdmin4][RM#5261] Support for Collation, FTS Templates, FTS Dictionaries, FTS Configurations and FTS Parsers Akshay Joshi <[email protected]> 2020-03-19 07:55 ` Khushboo Vashi <[email protected]> 2020-03-19 08:31 ` Akshay Joshi <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox