On 16 October 2010 18:25, Dean Rasheed <dean.a.rash...@gmail.com> wrote: > Are there corner cases the author has failed to consider? > > None that I could find. > > Are there any assertion failures or crashes? >
I just thought of another corner case, which can lead to a crash. The comparison code assumes that the number of elements in the enumeration is constant during a query, but that's not necessarily the case. For example the following will crash it: CREATE TYPE test_enum AS ENUM('Elem 1'); CREATE OR REPLACE FUNCTION test_fn(a int) RETURNS test_enum AS $$ DECLARE new_label text; BEGIN new_label := 'Elem '||a; EXECUTE 'ALTER TYPE test_enum ADD '''||new_label||''' BEFORE ''Elem 1'''; RETURN new_label::test_enum; END; $$ LANGUAGE plpgsql; WITH t(a) AS (SELECT test_fn(i) FROM generate_series(2, 10) g(i)) SELECT MAX(a) from t; Of course that's a pathalogical example, but we should protect against it, preferrably without compromising performance in more normal cases. Regards, Dean -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers