From 58a79e4fc63350717c25b70ff3cd3c68306616d8 Mon Sep 17 00:00:00 2001 From: Harshal Dhumal Date: Mon, 22 Aug 2016 16:49:32 +0100 Subject: [PATCH] Fix parsing issue in packages. --- .../databases/schemas/packages/__init__.py | 20 ++++++++++--------- .../schemas/packages/edbfuncs/__init__.py | 19 ++++++++++-------- .../package/ppas/9.1_plus/update.sql | 10 ++++++++++ .../package/ppas/9.2_plus/update.sql | 10 ++++++++++ 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py index 1cdc2c0ae..831404625 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py @@ -8,7 +8,7 @@ ########################################################################## """Implements Package Node""" - +import re import simplejson as json from functools import wraps @@ -662,16 +662,18 @@ class PackageView(PGChildNodeView): def get_inner(sql): if sql is None: return None + start = 0 + start_position = re.search("\s+[is|as]+\s+", sql, flags=re.I) - sql = sql.lower() - start = sql.find('is') - if start == -1: - start = sql.find('as') + if start_position: + start = start_position.start() + 4 - end = max(sql.rfind('end;'), sql.rfind('end')) + try: + end_position = [i for i in re.finditer("end", sql, flags=re.I)][-1] + end = end_position.start() + except IndexError: + return sql[start:].strip("\n") - if start == -1: - return sql[0: end].strip("\n") - return sql[start+2: end].strip("\n") + return sql[start:end].strip("\n") PackageView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py index 2c95c9cff..fc0e056ae 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py @@ -10,6 +10,7 @@ """Implements Edb Functions/Edb Procedures Node.""" import copy +import re from functools import wraps import pgadmin.browser.server_groups.servers.databases.schemas.packages as packages @@ -563,17 +564,19 @@ It may have been removed by another user or moved to another schema. def get_inner(sql): if sql is None: return None + start = 0 + start_position = re.search("\s+[is|as]+\s+", sql, flags=re.I) - sql = sql.lower() - start = sql.find('is') - if start == -1: - start = sql.find('as') + if start_position: + start = start_position.start() + 4 - end = max(sql.rfind('end;'), sql.rfind('end')) + try: + end_position = [i for i in re.finditer("end", sql, flags=re.I)][-1] + end = end_position.start() + except IndexError: + return sql[start:].strip("\n") - if start == -1: - return sql[0: end].strip("\n") - return sql[start+2: end].strip("\n") + return sql[start:end].strip("\n") EdbFuncView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.1_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.1_plus/update.sql index 2c1aed02a..757bcef64 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.1_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.1_plus/update.sql @@ -10,7 +10,16 @@ CREATE OR REPLACE PACKAGE {{ conn|qtIdent(data.schema,data.name) }} IS {{data.pkgheadsrc}} END {{ conn|qtIdent(data.name) }}; + +CREATE OR REPLACE PACKAGE BODY {{ conn|qtIdent(data.schema,data.name) }} +IS +{% if data.pkgbodysrc %} +{{data.pkgbodysrc}} +{% else %} +{{o_data.pkgbodysrc}} {% endif %} +END {{ conn|qtIdent(data.name) }}; +{% else %} {% if data.pkgbodysrc %} CREATE OR REPLACE PACKAGE BODY {{ conn|qtIdent(data.schema,data.name) }} @@ -18,6 +27,7 @@ IS {{data.pkgbodysrc}} END {{ conn|qtIdent(data.name) }}; {% endif %} +{% endif %} {% if data.pkgacl %} {% if 'deleted' in data.pkgacl %} {% for priv in data.pkgacl.deleted %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.2_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.2_plus/update.sql index 2c1aed02a..757bcef64 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.2_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/ppas/9.2_plus/update.sql @@ -10,7 +10,16 @@ CREATE OR REPLACE PACKAGE {{ conn|qtIdent(data.schema,data.name) }} IS {{data.pkgheadsrc}} END {{ conn|qtIdent(data.name) }}; + +CREATE OR REPLACE PACKAGE BODY {{ conn|qtIdent(data.schema,data.name) }} +IS +{% if data.pkgbodysrc %} +{{data.pkgbodysrc}} +{% else %} +{{o_data.pkgbodysrc}} {% endif %} +END {{ conn|qtIdent(data.name) }}; +{% else %} {% if data.pkgbodysrc %} CREATE OR REPLACE PACKAGE BODY {{ conn|qtIdent(data.schema,data.name) }} @@ -18,6 +27,7 @@ IS {{data.pkgbodysrc}} END {{ conn|qtIdent(data.name) }}; {% endif %} +{% endif %} {% if data.pkgacl %} {% if 'deleted' in data.pkgacl %} {% for priv in data.pkgacl.deleted %}