diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-13 07:35:40 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-13 07:35:40 +0000 |
commit | f2d120532207b8873a5e74e7350dd2904f377289 (patch) | |
tree | 992c89e023c4b29b42bf4fd6563de91f8d6ec8ca /src/backend/executor/execQual.c | |
parent | 8f057d971d663fff9bbb2ae7d053bf71cf09b4a2 (diff) | |
download | postgresql-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.c | 54 |
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)); } |