Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1anThY-0006n1-6e for pgadmin-hackers@arkaria.postgresql.org; Tue, 05 Apr 2016 16:19:36 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1anThX-0000go-GT for pgadmin-hackers@arkaria.postgresql.org; Tue, 05 Apr 2016 16:19:35 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1anThI-0000QH-Iz for pgadmin-hackers@postgresql.org; Tue, 05 Apr 2016 16:19:20 +0000 Received: from mail-vk0-x22d.google.com ([2607:f8b0:400c:c05::22d]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1anThF-0004gD-5Y for pgadmin-hackers@postgresql.org; Tue, 05 Apr 2016 16:19:19 +0000 Received: by mail-vk0-x22d.google.com with SMTP id c4so24235944vkb.3 for ; Tue, 05 Apr 2016 09:19:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=203khHHup2ilQdtoXnNxwaA4iSw4X8z9FiYNlxSYX2U=; b=hoqiz4MTqvrBO0t4AwdwMmONLNFS29qbbzmQzGZef5/s8sXHHkOFPl82psfOzypzHX OIF41sMrrwI8yk6WfjoWKbGXAK9MUFwd0bgaOHVshqojO0eGW7Xy6rQFOrIvGFnMOeBl 8OgUrOoGSnVebiwdTc2f6VyVuz8uYN/rPYYp0JqtjFjyB1UGEAEr1W1hOqErmKfVzibZ MO5lFDjB0sUqPYtgHRYFzPpaS8dDBr2bc2YYYHTZw2n8jMoKgpn7D5QUlaGL9cNcSDYj s6g9lZV/jZ0Qp04u+1dbnWZoPD8qX/V/Fp3T9tkZC0c//O42eRfh/kzi+GJJinMjuYcP Z3eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=203khHHup2ilQdtoXnNxwaA4iSw4X8z9FiYNlxSYX2U=; b=D0HQy6b9hXuLM2P8atJF2IEUqr+RtEzwOHgkJAFHJPh8KC/RQD2gxwVywkvl/owx/d yc9MupizpU59ubJ/knjBywEgyTgcnN4imR/RyzgmwkdWU2Jipp30Id+Ls/e80n3eChFB h5Ino/ZA/P46hC8AYi/zppFgD0XzSzQupCiF/7VzIBzhKwyocby1FxXlbUIvBxxyz4kI bboMfPoOGTGmolqeuQTtRmYNnJAtiMJOT6Ny3EYaXxajBncQKAqAiFLpEVHJSyLfM5RY 7oNymOytLBw2Vlg7rJSaZ/T5zYpRjBAPbzP5XBYq/URx1TWPZaO8AOya9oIwRVGEfD7P fWQQ== X-Gm-Message-State: AD7BkJL182jnlqFsoM/Tr2UyQIGjO5+M7xaXCkL+PddyW9JZaDe94SIne3+E/tnBbR9rAjQT7YPN/v263xaACw== X-Received: by 10.31.171.143 with SMTP id u137mr10599424vke.88.1459873156056; Tue, 05 Apr 2016 09:19:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.159.32.105 with HTTP; Tue, 5 Apr 2016 09:18:46 -0700 (PDT) In-Reply-To: References: From: Thom Brown Date: Tue, 5 Apr 2016 17:18:46 +0100 X-Google-Sender-Auth: fZ7hvl1KsGdl2G--q_IimiCFyAE Message-ID: Subject: Re: [pgAdmin4][Patch]: Functions/Procedures Module To: Dave Page Cc: Khushboo Vashi , pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1143e99ce2658a052fbf34b7 X-Pg-Spam-Score: -2.4 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a1143e99ce2658a052fbf34b7 Content-Type: text/plain; charset=UTF-8 I'm getting weirdness with this node. See the attached picture, where it shows the servers node appearing under functions. Thom On 5 April 2016 at 16:21, Dave Page wrote: > Thanks - committed. > > On Mon, Mar 28, 2016 at 8:26 AM, Khushboo Vashi > wrote: >> Hi, >> >> Please find updated patch for the functions/procedures module. >> >> Thanks, >> Khushboo >> >> On Wed, Mar 23, 2016 at 5:33 PM, Dave Page wrote: >>> >>> On Tue, Mar 22, 2016 at 10:51 AM, Khushboo Vashi >>> wrote: >>> > Hi, >>> > >>> > Please find updated Patch for the Functions/Procedures Module. >>> >>> Hi >>> >>> Unfortunately I found more issues as I tested in-depth. I've attached >>> an updated patch in which I've done some cleanup - additional comments >>> below: >>> >>> - Some argument lists are shown with an extra space, e.g. >>> >>> character varying , integer >>> >>> (pem.create_agent(character varying , integer)) >> >> Done >>> >>> - A 404 error is seen when functions are selected under a Catalog node. >> >> Done >>> >>> - Procedures have a property of "System function?" - should be "System >>> procedure?" >>> >> Done >>> >>> - The Return Type, Returns a Set and Window fields should be hidden >>> for Procedures. >>> >> Done >>> >>> - When creating a procedure (below), I get the following error: >>> >>> ----- >>> -- PROCEDURE: foo >>> >>> -- DROP PROCEDURE foo; >>> >>> CREATE OR REPLACE PROCEDURE public.foo(IN a integer DEFAULT 10, INOUT >>> b integer DEFAULT -) >>> VOLATILE NOT LEAKPROOF SECURITY DEFINER >>> COST 100.0 >>> AS >>> >>> BEGIN >>> b:=a+b+1; >>> END; >>> >>> COMMENT ON PROCEDURE public.foo >>> IS 'Foo procedure'; >>> ----- >>> >>> ----- >>> 2016-03-23 11:22:02,186: INFO werkzeug: 127.0.0.1 - - [23/Mar/2016 >>> 11:22:02] "GET /browser/procedure/obj/1/2/14844/13627/16387 HTTP/1.1" >>> 500 - >>> Traceback (most recent call last): >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1836, in __call__ >>> return self.wsgi_app(environ, start_response) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1820, in wsgi_app >>> response = self.make_response(self.handle_exception(e)) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1403, in handle_exception >>> reraise(exc_type, exc_value, tb) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1817, in wsgi_app >>> response = self.full_dispatch_request() >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1477, in full_dispatch_request >>> rv = self.handle_user_exception(e) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1381, in handle_user_exception >>> reraise(exc_type, exc_value, tb) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1475, in full_dispatch_request >>> rv = self.dispatch_request() >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1461, in dispatch_request >>> return self.view_functions[rule.endpoint](**req.view_args) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/views.py", >>> line 84, in view >>> return self.dispatch_request(*args, **kwargs) >>> File "/Users/dpage/git/pgadmin4/web/pgadmin/browser/utils.py", line >>> 233, in dispatch_request >>> return method(*args, **kwargs) >>> File >>> "/Users/dpage/git/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py", >>> line 349, in wrap >>> return f(*args, **kwargs) >>> File >>> "/Users/dpage/git/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py", >>> line 425, in properties >>> resp_data = self._fetch_properties(gid, sid, did, scid, fnid) >>> File >>> "/Users/dpage/git/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py", >>> line 1097, in _fetch_properties >>> resp_data = res['rows'][0] >>> IndexError: list index out of range >>> ----- >>> >>> - After a Python server reset, I get the following error when trying >>> to view SQL of a Procedure (seems like it thinks it's connected to >>> PG?): >>> >>> TemplateNotFound: procedure/pg/sql/9.5_plus/node.sql >>> 2016-03-23 11:28:52,852: INFO werkzeug: 127.0.0.1 - - [23/Mar/2016 >>> 11:28:52] "GET /browser/procedure/nodes/1/2/14844/2200/ HTTP/1.1" 500 >>> - >>> Traceback (most recent call last): >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1836, in __call__ >>> return self.wsgi_app(environ, start_response) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1820, in wsgi_app >>> response = self.make_response(self.handle_exception(e)) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1403, in handle_exception >>> reraise(exc_type, exc_value, tb) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1817, in wsgi_app >>> response = self.full_dispatch_request() >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1477, in full_dispatch_request >>> rv = self.handle_user_exception(e) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1381, in handle_user_exception >>> reraise(exc_type, exc_value, tb) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1475, in full_dispatch_request >>> rv = self.dispatch_request() >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/app.py", >>> line 1461, in dispatch_request >>> return self.view_functions[rule.endpoint](**req.view_args) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/views.py", >>> line 84, in view >>> return self.dispatch_request(*args, **kwargs) >>> File "/Users/dpage/git/pgadmin4/web/pgadmin/browser/utils.py", line >>> 233, in dispatch_request >>> return method(*args, **kwargs) >>> File >>> "/Users/dpage/git/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py", >>> line 349, in wrap >>> return f(*args, **kwargs) >>> File >>> "/Users/dpage/git/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py", >>> line 390, in nodes >>> 'node.sql']), scid=scid) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/templating.py", >>> line 127, in render_template >>> return >>> _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list), >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/jinja2/environment.py", >>> line 830, in get_or_select_template >>> return self.get_template(template_name_or_list, parent, globals) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/jinja2/environment.py", >>> line 791, in get_template >>> return self._load_template(name, self.make_globals(globals)) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/jinja2/environment.py", >>> line 765, in _load_template >>> template = self.loader.load(self, name, globals) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/jinja2/loaders.py", >>> line 113, in load >>> source, filename, uptodate = self.get_source(environment, name) >>> File >>> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/flask/templating.py", >>> line 64, in get_source >>> raise TemplateNotFound(template) >>> TemplateNotFound: procedure/pg/sql/9.5_plus/node.sql >>> 2016-03-23 11:28:57,953: INFO werkzeug: 127.0.0.1 - - [23/Mar/2016 >>> 11:28:57] "POST /ping HTTP/1.1" 200 - >>> >> Done >>> >>> - Procedures do not include the schema name in the headers of reverse >>> engineered SQL, e.g. >>> >> Done >>> >>> - What's the trailing - in the parameter list in this reverse engineered >>> SQL? >>> >>> -- PROCEDURE: foo >>> >>> -- DROP PROCEDURE foo; >>> >>> CREATE OR REPLACE PROCEDURE public.foo(IN a integer DEFAULT 10, INOUT >>> b integer DEFAULT -) >>> VOLATILE NOT LEAKPROOF SECURITY DEFINER >>> COST 100.0 >>> AS >>> >>> BEGIN >>> b:=a+b+1; >>> END; >>> >>> COMMENT ON PROCEDURE public.foo >>> IS 'Foo procedure'; >>> >> Done >>> >>> Thanks! >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >> >> > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > > > -- > Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgadmin-hackers -- Thom --001a1143e99ce2658a052fbf34b7 Content-Type: image/png; name="Screenshot from 2016-04-05 17:16:00.png" Content-Disposition: attachment; filename="Screenshot from 2016-04-05 17:16:00.png" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imnmpgvj0 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 EhCGYRAnZ0tFGQNg08rpmoSzhAEG8VpBbLAzq+jcZzToK7G1ODIsU9dkNkeA AcQp+ZI8JUj9gqooPiDEICFXUGjMnCGc08+kff1TX/6Pf9mRWnNNS8uK3aMv vrBth/XKXn/lJTeuaK4+9gR9CJpCc5vG/FvfA5PEBIADqNJ2QaFqQ6GcXKiX AIVC1YZCoWpDoVC1oVCo2pxFakNVjkLV5tTy2r5DL7wSnt9yHrrwfHQhE7y2 f3d48IKW88bGo+dfqVzItKQwWo0voRfqbOVc/95mEed9/DejX/tfj1T2VwFA 5K++LHFB/8+eGRsfX9bcfBP3lnesxt8beOpNzIq//av2m9a89bxly2gjo2pz rvPSq3v/01f/5cjrYwBw3vJln/gz4Z77f15f4IpLL77tpj8qWL9sbm760Vf+ y9uS9LFlmtuc87nNvgMkjhkAWI1X/vL3L00p8PKefU0AF1/QMj4eHX79KG1h VG3ONupdb+qZxfXmmdFdXd/413j9P4k3pJKXRDD+h517Sk/UjvPF//ze5c1N P/ud/6vtL/3gS3+ZXHkRbWQ0tzmrcptFuN7gSy9CF54fHqgCwPJlyzbd/zM2 ufK977w2fvXC81f8/qXdzwcVcuTon9/yjlWJC2kLo52008EZ/guEl158wZ/e sLp2y1nWdPTo+O9fenWiM3aQHFmVeBN5/ejyZc1tN6xubm6atDOxRCSWwhM4 /cQRiCUi0SKLOUZom6ZF3XZobnN6eTdX+yXd8AC59OIL6l+KIvCDymWJN/3x 9alrr7zszKx/4Jh5KyC07VO1WTT79+39kPaj+mX/vr0T0Vv/d4K3XJaIV5xt L7zvP1y7fFnzeF1++PAvf99x83WtV1/esmKWDjDxi5rAYowxK2hFn9RkwJA5 jDFCrKCVAghLCocQwhhhTjKcaSoVlLIyh5kmhlUKHpnpsH5JEzmWZTFmea0U eHnNeHq7KXEsK+gODZ5FstSda07cLGqhrjcHq4c33PvAu9ZvEu66d+sz/m9H y+b/cd61ftPEsnngqfKefXv2Hjzy+tHJrjcDbYm2/koUjWxsTbbH/k2jm9uT rT0jUVTua0+2dg9VoiiKykMDQ+UoqoyWq1EURVG5vyOZ6S3XHaE60NaS7Nw8 XI6iyuD6VLJzsNrwsNWhrlS6ezh2xxkZGqlE0UhPa3pDvIWySM51tTl0qDp9 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 JQAAAABJRU5ErkJggg== --001a1143e99ce2658a052fbf34b7 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a1143e99ce2658a052fbf34b7--