]> granicus.if.org Git - postgresql/blobdiff - src/backend/executor/execQual.c
Cause ARRAY[] construct to return a NULL array, rather than raising an
[postgresql] / src / backend / executor / execQual.c
index dad12acb78375f4221bdcf7bc2a195df0813ad57..d2efab0e36fa459b5991387cf0d2fda832604d3a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.135 2003/07/21 17:05:08 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.137 2003/07/30 19:02:18 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -533,7 +533,7 @@ GetAttributeByNum(TupleTableSlot *slot,
        Datum           retval;
 
        if (!AttributeNumberIsValid(attrno))
-               elog(ERROR, "invalid attribute number: %d", attrno);
+               elog(ERROR, "invalid attribute number %d", attrno);
 
        if (isNull == (bool *) NULL)
                elog(ERROR, "a NULL isNull pointer was passed");
@@ -616,7 +616,7 @@ init_fcache(Oid foid, FuncExprState *fcache, MemoryContext fcacheCxt)
 
        /* Safety check (should never fail, as parser should check sooner) */
        if (length(fcache->args) > FUNC_MAX_ARGS)
-               elog(ERROR, "too many arguments to function");
+               elog(ERROR, "too many arguments");
 
        /* Set up the primary fmgr lookup information */
        fmgr_info_cxt(foid, &(fcache->func), fcacheCxt);
@@ -1603,6 +1603,10 @@ ExecEvalCase(CaseExprState *caseExpr, ExprContext *econtext,
 
 /* ----------------------------------------------------------------
  *             ExecEvalArray - ARRAY[] expressions
+ *
+ * NOTE: currently, if any input value is NULL then we return a NULL array,
+ * so the ARRAY[] construct can be considered strict.  Eventually this will
+ * change; when it does, be sure to fix contain_nonstrict_functions().
  * ----------------------------------------------------------------
  */
 static Datum
@@ -1642,9 +1646,10 @@ ExecEvalArray(ArrayExprState *astate, ExprContext *econtext,
 
                        dvalues[i++] = ExecEvalExpr(e, econtext, &eisnull, NULL);
                        if (eisnull)
-                               ereport(ERROR,
-                                               (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
-                                                errmsg("arrays cannot have NULL elements")));
+                       {
+                               *isNull = true;
+                               return (Datum) 0;
+                       }
                }
 
                /* setup for 1-D array of the given length */
@@ -1686,9 +1691,10 @@ ExecEvalArray(ArrayExprState *astate, ExprContext *econtext,
 
                        arraydatum = ExecEvalExpr(e, econtext, &eisnull, NULL);
                        if (eisnull)
-                               ereport(ERROR,
-                                               (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
-                                                errmsg("arrays cannot have NULL elements")));
+                       {
+                               *isNull = true;
+                               return (Datum) 0;
+                       }
 
                        array = DatumGetArrayTypeP(arraydatum);