public inbox for [email protected]
help / color / mirror / Atom feed[pgAdmin4][PATCH] To fix the issue in FTS dictonory
3+ messages / 2 participants
[nested] [flat]
* [pgAdmin4][PATCH] To fix the issue in FTS dictonory
@ 2017-05-16 06:50 Murtuza Zabuawala <[email protected]>
2017-05-16 06:54 ` Re: [pgAdmin4][PATCH] To fix the issue in FTS dictonory Murtuza Zabuawala <[email protected]>
0 siblings, 1 reply; 3+ messages in thread
From: Murtuza Zabuawala @ 2017-05-16 06:50 UTC (permalink / raw)
To: pgadmin-hackers
Hi,
PFA patch to fix the issue in FTS dictionary as below,
1) Strip the quotes from the options.
2) Template is not shown in properties views if it is not in a system
schema.
RM#1126
--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: [pgAdmin4][PATCH] To fix the issue in FTS dictonory
2017-05-16 06:50 [pgAdmin4][PATCH] To fix the issue in FTS dictonory Murtuza Zabuawala <[email protected]>
@ 2017-05-16 06:54 ` Murtuza Zabuawala <[email protected]>
2017-05-17 13:25 ` Re: [pgAdmin4][PATCH] To fix the issue in FTS dictonory Dave Page <[email protected]>
0 siblings, 1 reply; 3+ messages in thread
From: Murtuza Zabuawala @ 2017-05-16 06:54 UTC (permalink / raw)
To: pgadmin-hackers
++ Attaching patch.
--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Tue, May 16, 2017 at 12:20 PM, Murtuza Zabuawala <
[email protected]> wrote:
> Hi,
>
> PFA patch to fix the issue in FTS dictionary as below,
> 1) Strip the quotes from the options.
> 2) Template is not shown in properties views if it is not in a system
> schema.
> RM#1126
>
> --
> Regards,
> Murtuza Zabuawala
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
--
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers
Attachments:
[application/octet-stream] RM_1126.patch (12.5K, 3-RM_1126.patch)
download | inline diff:
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 7a6342d..82cede4 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
@@ -221,6 +221,8 @@ class FtsDictionaryView(PGChildNodeView):
self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(
kwargs['sid'])
self.conn = self.manager.connection(did=kwargs['did'])
+ driver = get_driver(PG_DEFAULT_DRIVER)
+ self.qtIdent = driver.qtIdent
# Set the template path for the SQL scripts
self.template_path = 'fts_dictionary/sql/#{0}#'.format(self.manager.version)
@@ -242,7 +244,8 @@ class FtsDictionaryView(PGChildNodeView):
options = []
for fdw_option in option_str:
k, v = fdw_option.split('=', 1)
- options.append({'option': k, 'value': v})
+ options.append({'option': k.strip(),
+ 'value': v.strip().strip("'")})
return options
@check_precondition
@@ -369,10 +372,22 @@ class FtsDictionaryView(PGChildNodeView):
return internal_server_error(errormsg=res)
if len(res['rows']) == 0:
- return gone(_("Could not find the FTS Dictionary node in the database node."))
+ return gone(_(
+ "Could not find the FTS Dictionary node in the database node."
+ ))
+
+ # Handle templates and its schema name properly
+ if res['rows'][0]['template_schema'] is not None:
+ if res['rows'][0]['template_schema'] != "pg_catalog":
+ res['rows'][0]['template'] = self.qtIdent(
+ self.conn, res['rows'][0]['template_schema'],
+ res['rows'][0]['template']
+ )
if res['rows'][0]['options'] is not None:
- res['rows'][0]['options'] = self.tokenize_options(res['rows'][0]['options'])
+ res['rows'][0]['options'] = self.tokenize_options(
+ res['rows'][0]['options']
+ )
return ajax_response(
response=res['rows'][0],
@@ -614,6 +629,14 @@ class FtsDictionaryView(PGChildNodeView):
old_data = res['rows'][0]
+ # Handle templates and its schema name properly
+ if old_data['template_schema'] is not None:
+ if old_data['template_schema'] != "pg_catalog":
+ old_data['template'] = self.qtIdent(
+ self.conn, old_data['template_schema'],
+ old_data['template']
+ )
+
# If user has changed the schema then fetch new schema directly
# using its oid otherwise fetch old schema name using its oid
sql = render_template(
@@ -694,8 +717,10 @@ class FtsDictionaryView(PGChildNodeView):
# at template control while creating a new FTS Dictionary
res = [{'label': '', 'value': ''}]
for row in rset['rows']:
- if row['schemaoid'] > datlastsysoid:
- row['tmplname'] = row['nspname'] + '.' + row['tmplname']
+ if row['nspname'] != "pg_catalog":
+ row['tmplname'] = self.qtIdent(
+ self.conn, row['nspname'], row['tmplname']
+ )
res.append({'label': row['tmplname'],
'value': row['tmplname']})
@@ -714,33 +739,55 @@ class FtsDictionaryView(PGChildNodeView):
:param scid: schema id
:param dcid: FTS Dictionary id
"""
- try:
- sql = render_template(
- "/".join([self.template_path, 'sql.sql']),
- dcid=dcid,
- scid=scid,
- conn=self.conn
- )
- status, res = self.conn.execute_scalar(sql)
- if not status:
- return internal_server_error(
- _(
- "Could not generate reversed engineered query for the FTS Dictionary.\n{0}").format(
- res
- )
- )
- if res is None:
- return gone(
- _(
- "Could not generate reversed engineered query for FTS Dictionary node.")
+ sql = render_template(
+ "/".join([self.template_path, 'properties.sql']),
+ scid=scid,
+ dcid=dcid
+ )
+ status, res = self.conn.execute_dict(sql)
+
+ if not status:
+ return internal_server_error(errormsg=res)
+
+ if len(res['rows']) == 0:
+ return gone(_(
+ "Could not find the FTS Dictionary node in the database node."
+ ))
+
+ # Handle templates and its schema name properly
+ if res['rows'][0]['template_schema'] is not None:
+ if res['rows'][0]['template_schema'] != "pg_catalog":
+ res['rows'][0]['template'] = self.qtIdent(
+ self.conn, res['rows'][0]['template_schema'],
+ res['rows'][0]['template']
)
- return ajax_response(response=res)
+ if res['rows'][0]['options'] is not None:
+ res['rows'][0]['options'] = self.tokenize_options(
+ res['rows'][0]['options']
+ )
+ else:
+ # Make it iterable
+ res['rows'][0]['options'] = []
- except Exception as e:
- current_app.logger.exception(e)
- return internal_server_error(errormsg=str(e))
+ # Fetch schema name from schema oid
+ sql = render_template("/".join(
+ [self.template_path, 'schema.sql']), data=res['rows'][0])
+
+ status, schema = self.conn.execute_scalar(sql)
+
+ if not status:
+ return internal_server_error(errormsg=schema)
+
+ # Replace schema oid with schema name
+ res['rows'][0]['schema'] = schema
+
+ sql = render_template("/".join([self.template_path, 'create.sql']),
+ data=res['rows'][0],
+ conn=self.conn, is_displaying=True)
+
+ return ajax_response(response=sql.strip('\n'))
@check_precondition
def dependents(self, gid, sid, did, scid, dcid):
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/js/fts_dictionary.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/js/fts_dictionary.js
index 03525de..60b47fd 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/js/fts_dictionary.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/js/fts_dictionary.js
@@ -137,7 +137,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
id: 'template', label: '{{ _('Template')}}',type: 'text',
disabled: function(m) { return !m.isNew(); }, url: 'fetch_templates',
group: '{{ _('Definition') }}', control: 'node-ajax-options',
- cache_node: 'database'
+ cache_node: 'fts_template',
},{
id: 'options', label: '{{ _('Option') }}', type: 'collection',
group: '{{ _('Options') }}', control: 'unique-col-collection',
@@ -213,5 +213,5 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
}
-return pgBrowser.Nodes['coll-fts_dictionary'];
+return pgBrowser.Nodes['fts_dictionary'];
});
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/create.sql
index 94cb11f..759eeff 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/create.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/create.sql
@@ -2,7 +2,7 @@
{% if data and data.schema and data.name and data.template %}
CREATE TEXT SEARCH DICTIONARY {{ conn|qtIdent(data.schema, data.name) }} (
TEMPLATE = {{ data.template }}{% for variable in data.options %}{% if "option" in variable and variable.option != '' %},
- {{ conn|qtIdent(variable.option) }} = {{ variable.value|qtLiteral }}{% endif %}{% endfor %}
+ {{ conn|qtIdent(variable.option) }} = {% if is_displaying %}{{ variable.value }}{% else %}{{ variable.value|qtLiteral }}{% endif %}{% endif %}{% endfor %}
);
{# Description for FTS_DICTIONARY #}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/properties.sql
index 51bb632..6e0d2df 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/properties.sql
@@ -4,6 +4,7 @@ SELECT
dict.dictname as name,
pg_get_userbyid(dict.dictowner) as owner,
t.tmplname as template,
+ (SELECT nspname FROM pg_namespace n WHERE n.oid = t.tmplnamespace) as template_schema,
dict.dictinitoption as options,
dict.dictnamespace as schema,
des.description
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/sql.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/sql.sql
deleted file mode 100644
index 27095d8..0000000
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/templates/fts_dictionary/sql/default/sql.sql
+++ /dev/null
@@ -1,52 +0,0 @@
-{# REVERSED ENGINEERED SQL FOR FTS DICTIONARY #}
-{% if dcid and scid %}
-SELECT
- array_to_string(array_agg(sql), E'\n\n') as sql
-FROM
- (
- SELECT
- E'-- Text Search Dictionary: ' || quote_ident(nspname) || E'.' || quote_ident(dict.dictname) ||
- E'\n\n-- DROP TEXT SEARCH DICTIONARY ' || quote_ident(nspname) || E'.' || quote_ident(dict.dictname) ||
- E'\n\nCREATE TEXT SEARCH DICTIONARY ' || quote_ident(nspname) || E'.' || quote_ident(dict.dictname) || E' (\n' ||
- E'\tTEMPLATE = ' || template ||
- CASE
- WHEN dict.dictinitoption IS NOT NULL THEN E',\n\t' || dict.dictinitoption
- ELSE ''
- END ||
- E'\n);' ||
- CASE
- WHEN description IS NOT NULL THEN
- E'\n\nCOMMENT ON TEXT SEARCH DICTIONARY ' || quote_ident(nspname) || E'.' || quote_ident(dict.dictname) ||
- E' IS ' || pg_catalog.quote_literal(description) || E';'
- ELSE '' END as sql
- FROM
- pg_ts_dict dict
- LEFT JOIN(
- SELECT
- t.tmplname as template,
- t.oid as oid
- FROM
- pg_ts_template t
- ) d on d.oid = dict.dicttemplate
- LEFT JOIN (
- SELECT
- des.description as description,
- des.objoid as descoid
- FROM
- pg_description des
- WHERE
- des.objoid={{dcid}}::OID AND des.classoid='pg_ts_dict'::regclass
- ) a ON (a.descoid = dict.oid)
- LEFT JOIN (
- SELECT
- nspname,
- nsp.oid as noid
- FROM
- pg_namespace nsp
- WHERE
- oid = {{scid}}::OID
- ) b ON (b.noid = dict.dictnamespace)
-WHERE
- dict.oid={{dcid}}::OID
-) as c;
-{% endif %}
\ No newline at end of file
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js
index fba56b6..7fb9f2f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js
@@ -168,5 +168,5 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
}
-return pgBrowser.Nodes['coll-fts_template'];
+return pgBrowser.Nodes['fts_template'];
});
^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: [pgAdmin4][PATCH] To fix the issue in FTS dictonory
2017-05-16 06:50 [pgAdmin4][PATCH] To fix the issue in FTS dictonory Murtuza Zabuawala <[email protected]>
2017-05-16 06:54 ` Re: [pgAdmin4][PATCH] To fix the issue in FTS dictonory Murtuza Zabuawala <[email protected]>
@ 2017-05-17 13:25 ` Dave Page <[email protected]>
0 siblings, 0 replies; 3+ messages in thread
From: Dave Page @ 2017-05-17 13:25 UTC (permalink / raw)
To: Murtuza Zabuawala <[email protected]>; +Cc: pgadmin-hackers
Thanks, applied.
On Tue, May 16, 2017 at 7:54 AM, Murtuza Zabuawala <
[email protected]> wrote:
> ++ Attaching patch.
>
> --
> Regards,
> Murtuza Zabuawala
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
> On Tue, May 16, 2017 at 12:20 PM, Murtuza Zabuawala <murtuza.zabuawala@
> enterprisedb.com> wrote:
>
>> Hi,
>>
>> PFA patch to fix the issue in FTS dictionary as below,
>> 1) Strip the quotes from the options.
>> 2) Template is not shown in properties views if it is not in a system
>> schema.
>> RM#1126
>>
>> --
>> Regards,
>> Murtuza Zabuawala
>> EnterpriseDB: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>
>
>
> --
> Sent via pgadmin-hackers mailing list ([email protected])
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgadmin-hackers
>
>
--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2017-05-17 13:25 UTC | newest]
Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2017-05-16 06:50 [pgAdmin4][PATCH] To fix the issue in FTS dictonory Murtuza Zabuawala <[email protected]>
2017-05-16 06:54 ` Murtuza Zabuawala <[email protected]>
2017-05-17 13:25 ` Dave Page <[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