diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2015-12-18 21:35:22 +0300 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2015-12-18 21:35:22 +0300 |
commit | bbbd807097092c7f292872e7da02eee35d67e54b (patch) | |
tree | 754831612e24305dee439214ba0c55089a0847db /src/backend/executor/execQual.c | |
parent | 3c7042a7d7871b47dae3c9777c8020e41dedee89 (diff) | |
download | postgresql-bbbd807097092c7f292872e7da02eee35d67e54b.tar.gz postgresql-bbbd807097092c7f292872e7da02eee35d67e54b.zip |
Revert 9246af6799819847faa33baf441251003acbb8fe because
I miss too much. Patch is returned to commitfest process.
Diffstat (limited to 'src/backend/executor/execQual.c')
-rw-r--r-- | src/backend/executor/execQual.c | 44 |
1 files changed, 9 insertions, 35 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index d9bf9773fe8..29f058ce5cb 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -268,12 +268,10 @@ ExecEvalArrayRef(ArrayRefExprState *astate, bool eisnull; ListCell *l; int i = 0, - j = 0, - indexexpr; + j = 0; IntArray upper, lower; int *lIndex; - AnyArrayType *arrays; array_source = ExecEvalExpr(astate->refexpr, econtext, @@ -295,7 +293,6 @@ ExecEvalArrayRef(ArrayRefExprState *astate, foreach(l, astate->refupperindexpr) { ExprState *eltstate = (ExprState *) lfirst(l); - eisnull = false; if (i >= MAXDIM) ereport(ERROR, @@ -303,23 +300,10 @@ ExecEvalArrayRef(ArrayRefExprState *astate, errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", i + 1, MAXDIM))); - if (eltstate == NULL && astate->refattrlength <= 0) - { - if (isAssignment) - ereport(ERROR, - (errcode(ERRCODE_ARRAY_SUBSCRIPT_ERROR), - errmsg("cannot determine upper index for empty array"))); - arrays = (AnyArrayType *)DatumGetArrayTypeP(array_source); - indexexpr = AARR_LBOUND(arrays)[i] + AARR_DIMS(arrays)[i] - 1; - } - else - indexexpr = DatumGetInt32(ExecEvalExpr(eltstate, - econtext, - &eisnull, - NULL)); - - upper.indx[i++] = indexexpr; - + upper.indx[i++] = DatumGetInt32(ExecEvalExpr(eltstate, + econtext, + &eisnull, + NULL)); /* If any index expr yields NULL, result is NULL or error */ if (eisnull) { @@ -337,7 +321,6 @@ ExecEvalArrayRef(ArrayRefExprState *astate, foreach(l, astate->reflowerindexpr) { ExprState *eltstate = (ExprState *) lfirst(l); - eisnull = false; if (j >= MAXDIM) ereport(ERROR, @@ -345,19 +328,10 @@ ExecEvalArrayRef(ArrayRefExprState *astate, errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)", j + 1, MAXDIM))); - if (eltstate == NULL) - { - arrays = (AnyArrayType *)DatumGetArrayTypeP(array_source); - indexexpr = AARR_LBOUND(arrays)[j]; - } - else - indexexpr = DatumGetInt32(ExecEvalExpr(eltstate, - econtext, - &eisnull, - NULL)); - - lower.indx[j++] = indexexpr; - + lower.indx[j++] = DatumGetInt32(ExecEvalExpr(eltstate, + econtext, + &eisnull, + NULL)); /* If any index expr yields NULL, result is NULL or error */ if (eisnull) { |