Apologies for the late response, somehow I missed this update.
The changes generally look good and seem to work, except one remaining
issue with domains:
CREATE DOMAIN df AS float8;
CREATE TABLE t (id int, x df);
INSERT INTO t VALUES (1,'-inf'),(2,'-1'),(3,'0'),(4,'3'),(5,'inf'),(6,'nan');
CREATE INDEX ON t (x);
SET enable_seqscan=off; SET enable_sort=off; SET enable_bitmapscan=off;
SELECT id, -x AS f FROM t ORDER BY (-x) ASC NULLS FIRST;
/*
* get_const_sign
* Helper to determine the sign of a numeric constant.
* Returns 1 for positive, -1 for negative, 0 for zero or unknown.
*/
-static int
+static inline enum NUMERIC_SIGN
This comment is now outdated. The default value is unreachable
currently, but is 0 still a safe value there?
+enum NUMERIC_SIGN {
+ NUMERIC_SIGN_NINF=-2,
+ NUMERIC_SIGN_NEG=-1,
+ NUMERIC_SIGN_ZERO=0,
+ NUMERIC_SIGN_POS=1,
+ NUMERIC_SIGN_PINF=3,
+ NUMERIC_SIGN_NAN=4,
+ NUMERIC_SIGN_NULL=5,
+};
this is missing a typedef and maybe it should be defined at the
beginning of the file or in a header? Is skipping positive 2
intentional?
The patchset also has many small formatting issues/inconsistencies,
maybe it would be worth to run pgindent on it?