*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.33 1998/09/30 05:47:56 thomas Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.34 1998/10/02 16:23:04 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
}
;
-ParamNo: PARAM
+ParamNo: PARAM opt_indirection
{
$$ = makeNode(ParamNo);
$$->number = $1;
+ $$->indirection = $2;
}
;
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.35 1998/10/01 22:51:20 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.36 1998/10/02 16:23:05 momjian Exp $
*
*-------------------------------------------------------------------------
*/
param->paramtype = (Oid) toid;
param->param_tlist = (List *) NULL;
- result = (Node *) param;
+ if (pno->indirection != NIL)
+ {
+ List *idx = pno->indirection;
+
+ while (idx != NIL)
+ {
+ A_Indices *ai = (A_Indices *) lfirst(idx);
+ Node *lexpr = NULL,
+ *uexpr;
+
+ uexpr = transformExpr(pstate, ai->uidx, precedence); /* must exists */
+ if (exprType(uexpr) != INT4OID)
+ elog(ERROR, "array index expressions must be int4's");
+ if (ai->lidx != NULL)
+ {
+ lexpr = transformExpr(pstate, ai->lidx, precedence);
+ if (exprType(lexpr) != INT4OID)
+ elog(ERROR, "array index expressions must be int4's");
+ }
+ ai->lidx = lexpr;
+ ai->uidx = uexpr;
+
+ /*
+ * note we reuse the list of indices, make sure we
+ * don't free them! Otherwise, make a new list
+ * here
+ */
+ idx = lnext(idx);
+ }
+ result = (Node *) make_array_ref((Node *)param, pno->indirection);
+ }
+ else
+ result = (Node *) param;
break;
}
case T_A_Expr:
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: parsenodes.h,v 1.59 1998/09/01 04:36:43 momjian Exp $
+ * $Id: parsenodes.h,v 1.60 1998/10/02 16:23:07 momjian Exp $
*
*-------------------------------------------------------------------------
*/
NodeTag type;
int number; /* the number of the parameter */
TypeName *typename; /* the typecast */
+ List *indirection; /* array references */
} ParamNo;
/*