Ensure that btree sort ordering functions and boolean comparison operators
Tom Lane <tgl@sss.pgh.pa.us>
Ensure that btree sort ordering functions and boolean comparison operators give consistent results for all datatypes. Types float4, float8, and numeric were broken for NaN values; abstime, timestamp, and interval were broken for INVALID values; timetz was just plain broken (some possible pairs of values were neither < nor = nor >). Also clean up text, bpchar, varchar, and bit/varbit to eliminate duplicate code and thereby reduce the probability of similar inconsistencies arising in the future.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/nbtree/nbtcompare.c | modified | +16 −122 |
| src/backend/utils/adt/date.c | modified | +30 −16 |
| src/backend/utils/adt/float.c | modified | +117 −32 |
| src/backend/utils/adt/nabstime.c | modified | +52 −85 |
| src/backend/utils/adt/numeric.c | modified | +40 −116 |
| src/backend/utils/adt/timestamp.c | modified | +60 −152 |
| src/backend/utils/adt/varbit.c | modified | +37 −39 |
| src/backend/utils/adt/varchar.c | modified | +9 −6 |
| src/backend/utils/adt/varlena.c | modified | +58 −74 |
| src/include/utils/nabstime.h | modified | +1 −2 |
| src/test/regress/expected/abstime.out | modified | +4 −2 |
| src/test/regress/expected/abstime-solaris-1947.out | modified | +4 −2 |
| src/test/regress/expected/timestamp.out | modified | +12 −3 |