aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execQual.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-06-13 07:35:40 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-06-13 07:35:40 +0000
commitf2d120532207b8873a5e74e7350dd2904f377289 (patch)
tree992c89e023c4b29b42bf4fd6563de91f8d6ec8ca /src/backend/executor/execQual.c
parent8f057d971d663fff9bbb2ae7d053bf71cf09b4a2 (diff)
downloadpostgresql-f2d120532207b8873a5e74e7350dd2904f377289.tar.gz
postgresql-f2d120532207b8873a5e74e7350dd2904f377289.zip
Another batch of fmgr updates. I think I have gotten all old-style
functions that take pass-by-value datatypes. Should be ready for port testing ...
Diffstat (limited to 'src/backend/executor/execQual.c')
-rw-r--r--src/backend/executor/execQual.c54
1 files changed, 35 insertions, 19 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index a53957c4f4a..06b2b49ca88 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.70 2000/05/28 17:55:55 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.71 2000/06/13 07:34:58 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -105,6 +105,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
econtext,
isNull,
isDone);
+ /* If refexpr yields NULL, result is always NULL, for now anyway */
if (*isNull)
return (Datum) NULL;
}
@@ -132,6 +133,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
econtext,
isNull,
&dummy);
+ /* If any index expr yields NULL, result is NULL */
if (*isNull)
return (Datum) NULL;
}
@@ -148,6 +150,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
econtext,
isNull,
&dummy);
+ /* If any index expr yields NULL, result is NULL */
if (*isNull)
return (Datum) NULL;
}
@@ -165,7 +168,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
econtext,
isNull,
&dummy);
-
+ /* For now, can't cope with inserting NULL into an array */
if (*isNull)
return (Datum) NULL;
@@ -175,30 +178,43 @@ ExecEvalArrayRef(ArrayRef *arrayRef,
if (array_scanner == NULL)
return sourceData; /* XXX do something else? */
+ /*
+ * XXX shouldn't we copy the array value before modifying it??
+ *
+ * Or perhaps these array routines should deliver a modified copy
+ * instead of changing the source in-place.
+ */
if (lIndex == NULL)
- return (Datum) array_set(array_scanner, i, upper.indx,
- (char *) sourceData,
- arrayRef->refelembyval,
- arrayRef->refelemlength,
- arrayRef->refattrlength, isNull);
- return (Datum) array_assgn(array_scanner, i, upper.indx,
- lower.indx,
- (ArrayType *) sourceData,
- arrayRef->refelembyval,
- arrayRef->refelemlength, isNull);
+ return PointerGetDatum(array_set(array_scanner, i,
+ upper.indx,
+ sourceData,
+ arrayRef->refelembyval,
+ arrayRef->refelemlength,
+ arrayRef->refattrlength,
+ isNull));
+ return PointerGetDatum(array_assgn(array_scanner, i,
+ upper.indx, lower.indx,
+ (ArrayType *) DatumGetPointer(sourceData),
+ arrayRef->refelembyval,
+ arrayRef->refelemlength,
+ isNull));
}
execConstByVal = arrayRef->refelembyval;
execConstLen = arrayRef->refelemlength;
if (lIndex == NULL)
- return (Datum) array_ref(array_scanner, i, upper.indx,
- arrayRef->refelembyval,
- arrayRef->refelemlength,
- arrayRef->refattrlength, isNull);
- return (Datum) array_clip(array_scanner, i, upper.indx, lower.indx,
- arrayRef->refelembyval,
- arrayRef->refelemlength, isNull);
+ return array_ref(array_scanner, i,
+ upper.indx,
+ arrayRef->refelembyval,
+ arrayRef->refelemlength,
+ arrayRef->refattrlength,
+ isNull);
+ return PointerGetDatum(array_clip(array_scanner, i,
+ upper.indx, lower.indx,
+ arrayRef->refelembyval,
+ arrayRef->refelemlength,
+ isNull));
}