summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/btree_gist/btree_utils_num.c8
-rw-r--r--contrib/seg/data/test_seg.data1
-rw-r--r--contrib/seg/expected/seg.out151
-rw-r--r--contrib/seg/expected/seg_1.out151
-rw-r--r--contrib/seg/seg.c40
-rw-r--r--contrib/seg/seg.sql.in7
-rw-r--r--contrib/seg/segdata.h4
-rw-r--r--contrib/seg/sql/seg.sql4
-rw-r--r--contrib/seg/uninstall_seg.sql4
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);