On Thu, Apr 7, 2016 at 5:06 PM, Dave Page <dpage@pgadmin.org> wrote:
Hi Murtuza
On Tue, Mar 22, 2016 at 9:22 AM, Dave Page <dpage@pgadmin.org> wrote: > Hi > > On Tue, Mar 22, 2016 at 8:14 AM, Murtuza Zabuawala > <murtuza.zabuawala@enterprisedb.com> wrote: >> Hi Dave, >> >> We can create new external type using below method, By running all of below >> queries at the same time , we can not create separate external type by only >> using create type statement. >> >> So as per my discussion with Ashesh, We should not allow user to create >> external type in pgAdmin4 but only show definition in edit mode. > > Hmm, would it not make sense to allow the user to create the shell > type as well (perhaps, with a new type of "SHELL")? Then they could do > what is needed (and that should be easy, as it's just CREATE TYPE > foo;) > > For example: > > CREATE TYPE box; > > CREATE FUNCTION my_box_in_function(cstring) RETURNS box AS ... ; > CREATE FUNCTION my_box_out_function(box) RETURNS cstring AS ... ; > > CREATE TYPE box ( > INTERNALLENGTH = 16, > INPUT = my_box_in_function, > OUTPUT = my_box_out_function > ); > > CREATE TABLE myboxes ( > id integer, > description box > );
In the interests of making progress, I've committed the most recent patch, with a number of minor changes most significantly, the Postgres docs and system catalogs seem to have different ideas about what to call length, precision and scale. pgAdmin 3 followed the catalogs and used length and precision, however I've updated pgAdmin 4 to use "Length/precision" and "Scale" which is inline with the Postgres docs. That's only in the UI though - the code follows the catalogs.
There are still a couple of issues - please provide fixes ASAP:
1) If you create a composite type that contains a sized type (e.g. numeric(5, 4), the precision and scale are not shown if you later open the properties dialogue, or in the reverse engineered SQL.
E.g. what pgAdmin3 shows as:
CREATE TYPE pem.blergh AS (c1 text COLLATE pg_catalog."C", c2 numeric(5));
Is shown by pgAdmin4 as:
CREATE TYPE pem.blergh AS (c1 text COLLATE pg_catalog."C", c2 numeric);
(adding the \n's would be good too).
2) If you select a different type of type in create mode, the new options are shown below those for the previously selected type, instead of replacing them. Please see the attached screenshot.
3) I would still like us to support External types. I believe the simple option here is to re-add the code you had previously, and to add a new type of type called "SHELL" as discussed in my previous email above. The user would then be able to create a SHELL type, add the required functions, then come back and create the EXTERNAL type.
I'll add cards to our internal kanban chart for these issues.