diff options
author | Alvaro Herrera | 2008-04-18 18:43:09 +0000 |
---|---|---|
committer | Alvaro Herrera | 2008-04-18 18:43:09 +0000 |
commit | 7861d72ea204ef4085861f79f9c1749597160f72 (patch) | |
tree | d778614447739d8388ed9726b48422e623868571 /contrib | |
parent | b8e5581d762acceda22dd7347ed43d2e013a6df1 (diff) |
Modify the float4 datatype to be pass-by-val. Along the way, remove the last
uses of the long-deprecated float32 in contrib/seg; the definitions themselves
are still there, but no longer used. fmgr/README updated to match.
I added a CREATE FUNCTION to account for existing seg_center() code in seg.c
too, and some tests for it and the neighbor functions. At the same time,
remove checks for NULL which are not needed (because the functions are declared
STRICT).
I had to do some adjustments to contrib's btree_gist too. The choices for
representation there are not ideal for changing the underlying types :-(
Original patch by Zoltan Boszormenyi, with some adjustments by me.
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/btree_gist/btree_utils_num.c | 8 | ||||
-rw-r--r-- | contrib/seg/data/test_seg.data | 1 | ||||
-rw-r--r-- | contrib/seg/expected/seg.out | 151 | ||||
-rw-r--r-- | contrib/seg/expected/seg_1.out | 151 | ||||
-rw-r--r-- | contrib/seg/seg.c | 40 | ||||
-rw-r--r-- | contrib/seg/seg.sql.in | 7 | ||||
-rw-r--r-- | contrib/seg/segdata.h | 4 | ||||
-rw-r--r-- | contrib/seg/sql/seg.sql | 4 | ||||
-rw-r--r-- | contrib/seg/uninstall_seg.sql | 4 |
9 files changed, 335 insertions, 35 deletions
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c index 9798d015635..c7b41f16c1e 100644 --- a/contrib/btree_gist/btree_utils_num.c +++ b/contrib/btree_gist/btree_utils_num.c @@ -13,10 +13,11 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo * tinfo { int16 i2; int32 i4; + float4 f4; DateADT dt; } v; - GBT_NUMKEY *r = (GBT_NUMKEY *) palloc(2 * tinfo->size); + GBT_NUMKEY *r = (GBT_NUMKEY *) palloc0(2 * tinfo->size); void *leaf = NULL; switch (tinfo->t) @@ -37,11 +38,14 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo * tinfo v.dt = DatumGetDateADT(entry->key); leaf = &v.dt; break; + case gbt_t_float4: + v.f4 = DatumGetFloat4(entry->key); + leaf = &v.f4; + break; default: leaf = DatumGetPointer(entry->key); } - memset((void *) &r[0], 0, 2 * tinfo->size); memcpy((void *) &r[0], leaf, tinfo->size); memcpy((void *) &r[tinfo->size], leaf, tinfo->size); retval = palloc(sizeof(GISTENTRY)); diff --git a/contrib/seg/data/test_seg.data b/contrib/seg/data/test_seg.data index dba9ac90452..69658067a14 100644 --- a/contrib/seg/data/test_seg.data +++ b/contrib/seg/data/test_seg.data @@ -2575,3 +2575,4 @@ 23.7 24 24.0 +\N diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index de410490bc7..69bcfa14419 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -1065,3 +1065,154 @@ SELECT * FROM test_seg WHERE s @> '11..11.3' GROUP BY s; 10.7 .. 12.3 (143 rows) +-- Test functions +SELECT seg_lower(s), seg_center(s), seg_upper(s) +FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s; + seg_lower | seg_center | seg_upper +-----------+------------+----------- + -Infinity | -Infinity | 40 + -Infinity | -Infinity | 82 + -Infinity | -Infinity | 90 + 1 | 7 | 13 + 1.3 | 6.65 | 12 + 2 | 6.75 | 11.5 + 2.1 | 6.95 | 11.8 + 2.3 | Infinity | Infinity + 2.3 | Infinity | Infinity + 2.4 | 6.85 | 11.3 + 2.5 | 7 | 11.5 + 2.5 | 7.15 | 11.8 + 2.6 | Infinity | Infinity + 2.7 | 7.35 | 12 + 3 | Infinity | Infinity + 3 | 30.5 | 58 + 3.1 | 7.3 | 11.5 + 3.5 | 7.5 | 11.5 + 3.5 | 7.85 | 12.2 + 4 | 8 | 12 + 4 | Infinity | Infinity + 4 | 8 | 12 + 4 | 7.85 | 11.7 + 4 | 8.25 | 12.5 + 4 | 8.5 | 13 + 4 | 32 | 60 + 4 | Infinity | Infinity + 4.2 | 7.85 | 11.5 + 4.2 | 7.95 | 11.7 + 4.5 | 8.25 | 12 + 4.5 | 8 | 11.5 + 4.5 | 8.25 | 12 + 4.5 | 8.25 | 12 + 4.5 | 8.5 | 12.5 + 4.5 | 59.75 | 115 + 4.7 | 8.25 | 11.8 + 4.8 | 8.15 | 11.5 + 4.8 | 8.2 | 11.6 + 4.8 | 8.65 | 12.5 + 4.8 | Infinity | Infinity + 4.9 | 8.45 | 12 + 4.9 | Infinity | Infinity + 5 | 8.25 | 11.5 + 5 | 8.5 | 12 + 5 | 17.5 | 30 + 5 | 8.2 | 11.4 + 5 | 8.25 | 11.5 + 5 | 8.3 | 11.6 + 5 | 8.35 | 11.7 + 5 | 8.5 | 12 + 5 | 8.5 | 12 + 5 | 8.5 | 12 + 5.2 | 8.35 | 11.5 + 5.2 | 8.6 | 12 + 5.25 | 8.625 | 12 + 5.3 | 8.4 | 11.5 + 5.3 | 9.15 | 13 + 5.3 | 47.65 | 90 + 5.3 | Infinity | Infinity + 5.4 | Infinity | Infinity + 5.5 | 8.5 | 11.5 + 5.5 | 8.6 | 11.7 + 5.5 | 8.75 | 12 + 5.5 | 8.75 | 12 + 5.5 | 9 | 12.5 + 5.5 | 9.5 | 13.5 + 5.5 | Infinity | Infinity + 5.5 | Infinity | Infinity + 5.7 | Infinity | Infinity + 5.9 | Infinity | Infinity + 6 | 8.75 | 11.5 + 6 | 9 | 12 + 6 | 8.75 | 11.5 + 6 | 9.5 | 13 + 6 | 8.75 | 11.5 + 6.1 | 9.05 | 12 + 6.1 | Infinity | Infinity + 6.2 | 8.85 | 11.5 + 6.3 | Infinity | Infinity + 6.5 | 9 | 11.5 + 6.5 | 9.25 | 12 + 6.5 | 9.25 | 12 + 6.5 | Infinity | Infinity + 6.6 | Infinity | Infinity + 6.7 | 9.1 | 11.5 + 6.7 | Infinity | Infinity + 6.75 | Infinity | Infinity + 6.8 | Infinity | Infinity + 6.9 | 9.55 | 12.2 + 6.9 | 48.45 | 90 + 6.9 | Infinity | Infinity + 7 | 9.25 | 11.5 + 7 | 9.25 | 11.5 + 7 | 9.25 | 11.5 + 7 | Infinity | Infinity + 7.15 | Infinity | Infinity + 7.2 | 10.35 | 13.5 + 7.3 | 48.65 | 90 + 7.3 | Infinity | Infinity + 7.3 | Infinity | Infinity + 7.4 | 9.75 | 12.1 + 7.4 | Infinity | Infinity + 7.5 | 9.5 | 11.5 + 7.5 | 9.75 | 12 + 7.5 | Infinity | Infinity + 7.7 | 9.6 | 11.5 + 7.7 | Infinity | Infinity + 7.75 | Infinity | Infinity + 8 | 9.85 | 11.7 + 8 | 10 | 12 + 8 | 10.5 | 13 + 8.2 | Infinity | Infinity + 8.3 | Infinity | Infinity + 8.5 | 10 | 11.5 + 8.5 | 10.5 | 12.5 + 8.5 | Infinity | Infinity + 8.6 | 53.8 | 99 + 8.7 | 10 | 11.3 + 8.7 | 10.2 | 11.7 + 8.9 | 10.2 | 11.5 + 9 | 10.5 | 12 + 9 | 10.15 | 11.3 + 9 | 10.25 | 11.5 + 9 | 10.5 | 12 + 9 | Infinity | Infinity + 9.2 | 10.6 | 12 + 9.4 | 10.8 | 12.2 + 9.5 | 10.75 | 12 + 9.5 | 10.85 | 12.2 + 9.5 | Infinity | Infinity + 9.6 | 10.55 | 11.5 + 9.7 | 10.6 | 11.5 + 9.7 | 10.85 | 12 + 9.8 | 11.15 | 12.5 + 10 | 10.8 | 11.6 + 10 | 10.75 | 11.5 + 10 | 11.25 | 12.5 + 10 | 11.25 | 12.5 + 10.2 | 11 | 11.8 + 10.5 | 11 | 11.5 + 10.5 | 11 | 11.5 + 10.5 | 12 | 13.5 + 10.7 | 11.5 | 12.3 + | | +(144 rows) + diff --git a/contrib/seg/expected/seg_1.out b/contrib/seg/expected/seg_1.out index 446714f8ba0..aef3df8aea1 100644 --- a/contrib/seg/expected/seg_1.out +++ b/contrib/seg/expected/seg_1.out @@ -1065,3 +1065,154 @@ SELECT * FROM test_seg WHERE s @> '11..11.3' GROUP BY s; 10.7 .. 12.3 (143 rows) +-- Test functions +SELECT seg_lower(s), seg_center(s), seg_upper(s) +FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s; + seg_lower | seg_center | seg_upper +-----------+------------+----------- + -Infinity | -Infinity | 40 + -Infinity | -Infinity | 82 + -Infinity | -Infinity | 90 + 1 | 7 | 13 + 1.3 | 6.65 | 12 + 2 | 6.75 | 11.5 + 2.1 | 6.95 | 11.8 + 2.3 | Infinity | Infinity + 2.3 | Infinity | Infinity + 2.4 | 6.85 | 11.3 + 2.5 | 7 | 11.5 + 2.5 | 7.15 | 11.8 + 2.6 | Infinity | Infinity + 2.7 | 7.35 | 12 + 3 | Infinity | Infinity + 3 | 30.5 | 58 + 3.1 | 7.3 | 11.5 + 3.5 | 7.5 | 11.5 + 3.5 | 7.85 | 12.2 + 4 | 8 | 12 + 4 | Infinity | Infinity + 4 | 8 | 12 + 4 | 7.85 | 11.7 + 4 | 8.25 | 12.5 + 4 | 8.5 | 13 + 4 | 32 | 60 + 4 | Infinity | Infinity + 4.2 | 7.85 | 11.5 + 4.2 | 7.95 | 11.7 + 4.5 | 8.25 | 12 + 4.5 | 8 | 11.5 + 4.5 | 8.25 | 12 + 4.5 | 8.25 | 12 + 4.5 | 8.5 | 12.5 + 4.5 | 59.75 | 115 + 4.7 | 8.25 | 11.8 + 4.8 | 8.15 | 11.5 + 4.8 | 8.2 | 11.6 + 4.8 | 8.65 | 12.5 + 4.8 | Infinity | Infinity + 4.9 | 8.45 | 12 + 4.9 | Infinity | Infinity + 5 | 8.25 | 11.5 + 5 | 8.5 | 12 + 5 | 17.5 | 30 + 5 | 8.2 | 11.4 + 5 | 8.25 | 11.5 + 5 | 8.3 | 11.6 + 5 | 8.35 | 11.7 + 5 | 8.5 | 12 + 5 | 8.5 | 12 + 5 | 8.5 | 12 + 5.2 | 8.35 | 11.5 + 5.2 | 8.6 | 12 + 5.25 | 8.625 | 12 + 5.3 | 8.4 | 11.5 + 5.3 | 9.15 | 13 + 5.3 | 47.65 | 90 + 5.3 | Infinity | Infinity + 5.4 | Infinity | Infinity + 5.5 | 8.5 | 11.5 + 5.5 | 8.6 | 11.7 + 5.5 | 8.75 | 12 + 5.5 | 8.75 | 12 + 5.5 | 9 | 12.5 + 5.5 | 9.5 | 13.5 + 5.5 | Infinity | Infinity + 5.5 | Infinity | Infinity + 5.7 | Infinity | Infinity + 5.9 | Infinity | Infinity + 6 | 8.75 | 11.5 + 6 | 9 | 12 + 6 | 8.75 | 11.5 + 6 | 9.5 | 13 + 6 | 8.75 | 11.5 + 6.1 | 9.05 | 12 + 6.1 | Infinity | Infinity + 6.2 | 8.85 | 11.5 + 6.3 | Infinity | Infinity + 6.5 | 9 | 11.5 + 6.5 | 9.25 | 12 + 6.5 | 9.25 | 12 + 6.5 | Infinity | Infinity + 6.6 | Infinity | Infinity + 6.7 | 9.1 | 11.5 + 6.7 | Infinity | Infinity + 6.75 | Infinity | Infinity + 6.8 | Infinity | Infinity + 6.9 | 9.55 | 12.2 + 6.9 | 48.45 | 90 + 6.9 | Infinity | Infinity + 7 | 9.25 | 11.5 + 7 | 9.25 | 11.5 + 7 | 9.25 | 11.5 + 7 | Infinity | Infinity + 7.15 | Infinity | Infinity + 7.2 | 10.35 | 13.5 + 7.3 | 48.65 | 90 + 7.3 | Infinity | Infinity + 7.3 | Infinity | Infinity + 7.4 | 9.75 | 12.1 + 7.4 | Infinity | Infinity + 7.5 | 9.5 | 11.5 + 7.5 | 9.75 | 12 + 7.5 | Infinity | Infinity + 7.7 | 9.6 | 11.5 + 7.7 | Infinity | Infinity + 7.75 | Infinity | Infinity + 8 | 9.85 | 11.7 + 8 | 10 | 12 + 8 | 10.5 | 13 + 8.2 | Infinity | Infinity + 8.3 | Infinity | Infinity + 8.5 | 10 | 11.5 + 8.5 | 10.5 | 12.5 + 8.5 | Infinity | Infinity + 8.6 | 53.8 | 99 + 8.7 | 10 | 11.3 + 8.7 | 10.2 | 11.7 + 8.9 | 10.2 | 11.5 + 9 | 10.5 | 12 + 9 | 10.15 | 11.3 + 9 | 10.25 | 11.5 + 9 | 10.5 | 12 + 9 | Infinity | Infinity + 9.2 | 10.6 | 12 + 9.4 | 10.8 | 12.2 + 9.5 | 10.75 | 12 + 9.5 | 10.85 | 12.2 + 9.5 | Infinity | Infinity + 9.6 | 10.55 | 11.5 + 9.7 | 10.6 | 11.5 + 9.7 | 10.85 | 12 + 9.8 | 11.15 | 12.5 + 10 | 10.8 | 11.6 + 10 | 10.75 | 11.5 + 10 | 11.25 | 12.5 + 10 | 11.25 | 12.5 + 10.2 | 11 | 11.8 + 10.5 | 11 | 11.5 + 10.5 | 11 | 11.5 + 10.5 | 12 | 13.5 + 10.7 | 11.5 | 12.3 + | | +(144 rows) + diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c index 65ddda1671f..9579eeab3ef 100644 --- a/contrib/seg/seg.c +++ b/contrib/seg/seg.c @@ -35,9 +35,9 @@ extern int seg_yydebug; */ SEG *seg_in(char *str); char *seg_out(SEG * seg); -float32 seg_lower(SEG * seg); -float32 seg_upper(SEG * seg); -float32 seg_center(SEG * seg); +float4 seg_lower(SEG * seg); +float4 seg_upper(SEG * seg); +float4 seg_center(SEG * seg); /* ** GiST support methods @@ -138,14 +138,14 @@ seg_out(SEG * seg) { if (seg->l_ext != '-') { - /* print the lower boudary if exists */ + /* print the lower boundary if exists */ p += restore(p, seg->lower, seg->l_sigd); p += sprintf(p, " "); } p += sprintf(p, ".."); if (seg->u_ext != '-') { - /* print the upper boudary if exists */ + /* print the upper boundary if exists */ p += sprintf(p, " "); if (seg->u_ext == '>' || seg->u_ext == '<' || seg->l_ext == '~') p += sprintf(p, "%c", seg->u_ext); @@ -156,40 +156,22 @@ seg_out(SEG * seg) return (result); } -float32 +float4 seg_center(SEG * seg) { - float32 result = (float32) palloc(sizeof(float32data)); - - if (!seg) - return (float32) NULL; - - *result = ((float) seg->lower + (float) seg->upper) / 2.0; - return (result); + return ((float) seg->lower + (float) seg->upper) / 2.0; } -float32 +float4 seg_lower(SEG * seg) { - float32 result = (float32) palloc(sizeof(float32data)); - - if (!seg) - return (float32) NULL; - - *result = (float) seg->lower; - return (result); + return seg->lower; } -float32 +float4 seg_upper(SEG * seg) { - float32 result = (float32) palloc(sizeof(float32data)); - - if (!seg) - return (float32) NULL; - - *result = (float) seg->upper; - return (result); + return seg->upper; } diff --git a/contrib/seg/seg.sql.in b/contrib/seg/seg.sql.in index 6f7d1a6438a..ae71929a73e 100644 --- a/contrib/seg/seg.sql.in +++ b/contrib/seg/seg.sql.in @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/contrib/seg/seg.sql.in,v 1.17 2008/04/14 17:05:32 tgl Exp $ */ +/* $PostgreSQL: pgsql/contrib/seg/seg.sql.in,v 1.18 2008/04/18 18:43:08 alvherre Exp $ */ -- Adjust this setting to control where the objects get created. SET search_path = public; @@ -164,6 +164,11 @@ LANGUAGE C STRICT IMMUTABLE; -- miscellaneous +CREATE OR REPLACE FUNCTION seg_center(seg) +RETURNS float4 +AS 'MODULE_PATHNAME' +LANGUAGE C STRICT IMMUTABLE; + CREATE OR REPLACE FUNCTION seg_upper(seg) RETURNS float4 AS 'MODULE_PATHNAME' diff --git a/contrib/seg/segdata.h b/contrib/seg/segdata.h index 69d85e0bc0c..420df739c51 100644 --- a/contrib/seg/segdata.h +++ b/contrib/seg/segdata.h @@ -1,7 +1,7 @@ typedef struct SEG { - float lower; - float upper; + float4 lower; + float4 upper; char l_sigd; char u_sigd; char l_ext; diff --git a/contrib/seg/sql/seg.sql b/contrib/seg/sql/seg.sql index 91d771db181..61ad519613e 100644 --- a/contrib/seg/sql/seg.sql +++ b/contrib/seg/sql/seg.sql @@ -223,3 +223,7 @@ SELECT count(*) FROM test_seg WHERE s @> '11..11.3'; -- Test sorting SELECT * FROM test_seg WHERE s @> '11..11.3' GROUP BY s; + +-- Test functions +SELECT seg_lower(s), seg_center(s), seg_upper(s) +FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s; diff --git a/contrib/seg/uninstall_seg.sql b/contrib/seg/uninstall_seg.sql index 2822927531d..f706bfb7395 100644 --- a/contrib/seg/uninstall_seg.sql +++ b/contrib/seg/uninstall_seg.sql @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/contrib/seg/uninstall_seg.sql,v 1.6 2008/04/14 17:05:32 tgl Exp $ */ +/* $PostgreSQL: pgsql/contrib/seg/uninstall_seg.sql,v 1.7 2008/04/18 18:43:08 alvherre Exp $ */ -- Adjust this setting to control where the objects get dropped. SET search_path = public; @@ -51,6 +51,8 @@ DROP OPERATOR <= (seg, seg); DROP OPERATOR < (seg, seg); +DROP FUNCTION seq_center(seg); + DROP FUNCTION seg_lower(seg); DROP FUNCTION seg_upper(seg); |