aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-03-02 21:13:11 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-03-02 21:13:11 +0000
commit0138fb8697ecae27023eb3113a0e129b158f0da0 (patch)
treeb166ececba6c3f03c3552eeff6e0b6d5f729679e
parent5e4bf929b35122f3b3d6155f90db42c5e4aa9e25 (diff)
downloadpostgresql-0138fb8697ecae27023eb3113a0e129b158f0da0.tar.gz
postgresql-0138fb8697ecae27023eb3113a0e129b158f0da0.zip
Repair oidvectorrecv and int2vectorrecv, which I broke while changing
them to use array_recv :-(. Per report from Tim Kordas.
-rw-r--r--src/backend/utils/adt/int.c27
-rw-r--r--src/backend/utils/adt/oid.c27
2 files changed, 42 insertions, 12 deletions
diff --git a/src/backend/utils/adt/int.c b/src/backend/utils/adt/int.c
index e41e584ffea..bbfa53b3f95 100644
--- a/src/backend/utils/adt/int.c
+++ b/src/backend/utils/adt/int.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.68 2005/10/15 02:49:28 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/int.c,v 1.68.2.1 2006/03/02 21:13:11 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -212,13 +212,28 @@ Datum
int2vectorrecv(PG_FUNCTION_ARGS)
{
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
+ FunctionCallInfoData locfcinfo;
int2vector *result;
- result = (int2vector *)
- DatumGetPointer(DirectFunctionCall3(array_recv,
- PointerGetDatum(buf),
- ObjectIdGetDatum(INT2OID),
- Int32GetDatum(-1)));
+ /*
+ * Normally one would call array_recv() using DirectFunctionCall3,
+ * but that does not work since array_recv wants to cache some data
+ * using fcinfo->flinfo->fn_extra. So we need to pass it our own
+ * flinfo parameter.
+ */
+ InitFunctionCallInfoData(locfcinfo, fcinfo->flinfo, 3, NULL, NULL);
+
+ locfcinfo.arg[0] = PointerGetDatum(buf);
+ locfcinfo.arg[1] = ObjectIdGetDatum(INT2OID);
+ locfcinfo.arg[2] = Int32GetDatum(-1);
+ locfcinfo.argnull[0] = false;
+ locfcinfo.argnull[1] = false;
+ locfcinfo.argnull[2] = false;
+
+ result = (int2vector *) DatumGetPointer(array_recv(&locfcinfo));
+
+ Assert(!locfcinfo.isnull);
+
/* sanity checks: int2vector must be 1-D, no nulls */
if (result->ndim != 1 ||
result->flags != 0 ||
diff --git a/src/backend/utils/adt/oid.c b/src/backend/utils/adt/oid.c
index 351eeec0755..81acac86246 100644
--- a/src/backend/utils/adt/oid.c
+++ b/src/backend/utils/adt/oid.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.64.2.1 2005/11/22 18:23:21 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/oid.c,v 1.64.2.2 2006/03/02 21:13:11 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -254,13 +254,28 @@ Datum
oidvectorrecv(PG_FUNCTION_ARGS)
{
StringInfo buf = (StringInfo) PG_GETARG_POINTER(0);
+ FunctionCallInfoData locfcinfo;
oidvector *result;
- result = (oidvector *)
- DatumGetPointer(DirectFunctionCall3(array_recv,
- PointerGetDatum(buf),
- ObjectIdGetDatum(OIDOID),
- Int32GetDatum(-1)));
+ /*
+ * Normally one would call array_recv() using DirectFunctionCall3,
+ * but that does not work since array_recv wants to cache some data
+ * using fcinfo->flinfo->fn_extra. So we need to pass it our own
+ * flinfo parameter.
+ */
+ InitFunctionCallInfoData(locfcinfo, fcinfo->flinfo, 3, NULL, NULL);
+
+ locfcinfo.arg[0] = PointerGetDatum(buf);
+ locfcinfo.arg[1] = ObjectIdGetDatum(OIDOID);
+ locfcinfo.arg[2] = Int32GetDatum(-1);
+ locfcinfo.argnull[0] = false;
+ locfcinfo.argnull[1] = false;
+ locfcinfo.argnull[2] = false;
+
+ result = (oidvector *) DatumGetPointer(array_recv(&locfcinfo));
+
+ Assert(!locfcinfo.isnull);
+
/* sanity checks: oidvector must be 1-D, no nulls */
if (result->ndim != 1 ||
result->flags != 0 ||