*** a/src/backend/executor/execQual.c
--- b/src/backend/executor/execQual.c
***************
*** 263,271 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  	ListCell   *l;
  	int			i = 0,
  				j = 0;
! 	IntArray	upper,
! 				lower;
! 	int		   *lIndex;
  
  	array_source = (ArrayType *)
  		DatumGetPointer(ExecEvalExpr(astate->refexpr,
--- 263,270 ----
  	ListCell   *l;
  	int			i = 0,
  				j = 0;
! 	int			upper[MAXDIM],
! 				lower[MAXDIM];
  
  	array_source = (ArrayType *)
  		DatumGetPointer(ExecEvalExpr(astate->refexpr,
***************
*** 295,301 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
  							i, MAXDIM)));
  
! 		upper.indx[i++] = DatumGetInt32(ExecEvalExpr(eltstate,
  													 econtext,
  													 &eisnull,
  													 NULL));
--- 294,300 ----
  					 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
  							i, MAXDIM)));
  
! 		upper[i++] = DatumGetInt32(ExecEvalExpr(eltstate,
  													 econtext,
  													 &eisnull,
  													 NULL));
***************
*** 323,329 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  						 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
  								i, MAXDIM)));
  
! 			lower.indx[j++] = DatumGetInt32(ExecEvalExpr(eltstate,
  														 econtext,
  														 &eisnull,
  														 NULL));
--- 322,328 ----
  						 errmsg("number of array dimensions (%d) exceeds the maximum allowed (%d)",
  								i, MAXDIM)));
  
! 			lower[j++] = DatumGetInt32(ExecEvalExpr(eltstate,
  														 econtext,
  														 &eisnull,
  														 NULL));
***************
*** 341,350 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  		/* this can't happen unless parser messed up */
  		if (i != j)
  			elog(ERROR, "upper and lower index lists are not same length");
- 		lIndex = lower.indx;
  	}
- 	else
- 		lIndex = NULL;
  
  	if (isAssignment)
  	{
--- 340,346 ----
***************
*** 386,394 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  			*isNull = false;
  		}
  
! 		if (lIndex == NULL)
  			resultArray = array_set(array_source, i,
! 									upper.indx,
  									sourceData,
  									eisnull,
  									astate->refattrlength,
--- 382,390 ----
  			*isNull = false;
  		}
  
! 		if (j == 0)
  			resultArray = array_set(array_source, i,
! 									upper,
  									sourceData,
  									eisnull,
  									astate->refattrlength,
***************
*** 397,403 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  									astate->refelemalign);
  		else
  			resultArray = array_set_slice(array_source, i,
! 										  upper.indx, lower.indx,
  								   (ArrayType *) DatumGetPointer(sourceData),
  										  eisnull,
  										  astate->refattrlength,
--- 393,399 ----
  									astate->refelemalign);
  		else
  			resultArray = array_set_slice(array_source, i,
! 										  upper, lower,
  								   (ArrayType *) DatumGetPointer(sourceData),
  										  eisnull,
  										  astate->refattrlength,
***************
*** 407,414 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  		return PointerGetDatum(resultArray);
  	}
  
! 	if (lIndex == NULL)
! 		return array_ref(array_source, i, upper.indx,
  						 astate->refattrlength,
  						 astate->refelemlength,
  						 astate->refelembyval,
--- 403,410 ----
  		return PointerGetDatum(resultArray);
  	}
  
! 	if (j == 0)
! 		return array_ref(array_source, i, upper,
  						 astate->refattrlength,
  						 astate->refelemlength,
  						 astate->refelembyval,
***************
*** 417,423 **** ExecEvalArrayRef(ArrayRefExprState *astate,
  	else
  	{
  		resultArray = array_get_slice(array_source, i,
! 									  upper.indx, lower.indx,
  									  astate->refattrlength,
  									  astate->refelemlength,
  									  astate->refelembyval,
--- 413,419 ----
  	else
  	{
  		resultArray = array_get_slice(array_source, i,
! 									  upper, lower,
  									  astate->refattrlength,
  									  astate->refelemlength,
  									  astate->refelembyval,
*** a/src/include/c.h
--- b/src/include/c.h
***************
*** 376,389 **** typedef uint32 CommandId;
  
  #define FirstCommandId	((CommandId) 0)
  
- /*
-  * Array indexing support
-  */
  #define MAXDIM 6
- typedef struct
- {
- 	int			indx[MAXDIM];
- } IntArray;
  
  /* ----------------
   *		Variable-length datatypes all share the 'struct varlena' header.
--- 376,382 ----
