Hi Dave,

-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

On Mon, Aug 22, 2016 at 5:45 PM, Dave Page <[email protected]> wrote:

> Hi
>
> On Mon, Aug 22, 2016 at 1:04 PM, Harshal Dhumal
> <[email protected]> wrote:
> > Hi,
> > PFA patch for wrong header and body were generated.
> >
> > Fixed the header and body sql parsing issue.
>
> Won't this break if I have a package called issues.foo or anything
> else that matches the ' is' or ' as'?
>
Yes, this causes issue. I have fixed it in updated patch.

Also fixed one more issue pointed by Khushboo, In some cases if we update
package header it drops package body. Ideally it should not drop body.



>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
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 1cdc2c0..8314046 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 2c95c9c..fc0e056 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 2c1aed0..757bcef 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 2c1aed0..757bcef 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 %}
-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to