mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Remove unused constisset and constiscast fields of Const nodes. Clean
up code and documentation associated with Param nodes.
This commit is contained in:
parent
dbe100c402
commit
f893ee271f
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.181 2002/11/23 03:59:07 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.182 2002/11/25 21:29:34 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -860,9 +860,7 @@ CopyFrom(Relation rel, List *attnumlist, bool binary, bool oids,
|
|||||||
attr[i]->attlen,
|
attr[i]->attlen,
|
||||||
(Datum) 0,
|
(Datum) 0,
|
||||||
true, /* is null */
|
true, /* is null */
|
||||||
attr[i]->attbyval,
|
attr[i]->attbyval);
|
||||||
false, /* not a set */
|
|
||||||
false); /* not coerced */
|
|
||||||
|
|
||||||
node = coerce_type_constraints((Node *) con, attr[i]->atttypid,
|
node = coerce_type_constraints((Node *) con, attr[i]->atttypid,
|
||||||
COERCE_IMPLICIT_CAST);
|
COERCE_IMPLICIT_CAST);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.109 2002/11/15 02:50:06 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.110 2002/11/25 21:29:35 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -392,40 +392,32 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull)
|
|||||||
* Returns the value of a parameter. A param node contains
|
* Returns the value of a parameter. A param node contains
|
||||||
* something like ($.name) and the expression context contains
|
* something like ($.name) and the expression context contains
|
||||||
* the current parameter bindings (name = "sam") (age = 34)...
|
* the current parameter bindings (name = "sam") (age = 34)...
|
||||||
* so our job is to replace the param node with the datum
|
* so our job is to find and return the appropriate datum ("sam").
|
||||||
* containing the appropriate information ("sam").
|
|
||||||
*
|
*
|
||||||
* Q: if we have a parameter ($.foo) without a binding, i.e.
|
* Q: if we have a parameter ($.foo) without a binding, i.e.
|
||||||
* there is no (foo = xxx) in the parameter list info,
|
* there is no (foo = xxx) in the parameter list info,
|
||||||
* is this a fatal error or should this be a "not available"
|
* is this a fatal error or should this be a "not available"
|
||||||
* (in which case we shoud return a Const node with the
|
* (in which case we could return NULL)? -cim 10/13/89
|
||||||
* isnull flag) ? -cim 10/13/89
|
|
||||||
*
|
|
||||||
* Minor modification: Param nodes now have an extra field,
|
|
||||||
* `paramkind' which specifies the type of parameter
|
|
||||||
* (see params.h). So while searching the paramList for
|
|
||||||
* a paramname/value pair, we have also to check for `kind'.
|
|
||||||
*
|
|
||||||
* NOTE: The last entry in `paramList' is always an
|
|
||||||
* entry with kind == PARAM_INVALID.
|
|
||||||
* ----------------------------------------------------------------
|
* ----------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
Datum
|
Datum
|
||||||
ExecEvalParam(Param *expression, ExprContext *econtext, bool *isNull)
|
ExecEvalParam(Param *expression, ExprContext *econtext, bool *isNull)
|
||||||
{
|
{
|
||||||
char *thisParameterName;
|
int thisParamKind = expression->paramkind;
|
||||||
int thisParameterKind = expression->paramkind;
|
AttrNumber thisParamId = expression->paramid;
|
||||||
AttrNumber thisParameterId = expression->paramid;
|
|
||||||
int matchFound;
|
|
||||||
ParamListInfo paramList;
|
|
||||||
|
|
||||||
if (thisParameterKind == PARAM_EXEC)
|
if (thisParamKind == PARAM_EXEC)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* PARAM_EXEC params (internal executor parameters) are stored in
|
||||||
|
* the ecxt_param_exec_vals array, and can be accessed by array index.
|
||||||
|
*/
|
||||||
ParamExecData *prm;
|
ParamExecData *prm;
|
||||||
|
|
||||||
prm = &(econtext->ecxt_param_exec_vals[thisParameterId]);
|
prm = &(econtext->ecxt_param_exec_vals[thisParamId]);
|
||||||
if (prm->execPlan != NULL)
|
if (prm->execPlan != NULL)
|
||||||
{
|
{
|
||||||
|
/* Parameter not evaluated yet, so go do it */
|
||||||
ExecSetParamPlan(prm->execPlan, econtext);
|
ExecSetParamPlan(prm->execPlan, econtext);
|
||||||
/* ExecSetParamPlan should have processed this param... */
|
/* ExecSetParamPlan should have processed this param... */
|
||||||
Assert(prm->execPlan == NULL);
|
Assert(prm->execPlan == NULL);
|
||||||
@ -433,82 +425,56 @@ ExecEvalParam(Param *expression, ExprContext *econtext, bool *isNull)
|
|||||||
*isNull = prm->isnull;
|
*isNull = prm->isnull;
|
||||||
return prm->value;
|
return prm->value;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
thisParameterName = expression->paramname;
|
|
||||||
paramList = econtext->ecxt_param_list_info;
|
|
||||||
|
|
||||||
*isNull = false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* search the list with the parameter info to find a matching name. An
|
|
||||||
* entry with an InvalidName denotes the last element in the array.
|
|
||||||
*/
|
|
||||||
matchFound = 0;
|
|
||||||
if (paramList != NULL)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* search for an entry in 'paramList' that matches the
|
* All other parameter types must be sought in ecxt_param_list_info.
|
||||||
* `expression'.
|
* NOTE: The last entry in the param array is always an
|
||||||
|
* entry with kind == PARAM_INVALID.
|
||||||
*/
|
*/
|
||||||
while (paramList->kind != PARAM_INVALID && !matchFound)
|
ParamListInfo paramList = econtext->ecxt_param_list_info;
|
||||||
|
char *thisParamName = expression->paramname;
|
||||||
|
bool matchFound = false;
|
||||||
|
|
||||||
|
if (paramList != NULL)
|
||||||
{
|
{
|
||||||
switch (thisParameterKind)
|
while (paramList->kind != PARAM_INVALID && !matchFound)
|
||||||
{
|
{
|
||||||
case PARAM_NAMED:
|
if (thisParamKind == paramList->kind)
|
||||||
if (thisParameterKind == paramList->kind &&
|
{
|
||||||
strcmp(paramList->name, thisParameterName) == 0)
|
switch (thisParamKind)
|
||||||
matchFound = 1;
|
|
||||||
break;
|
|
||||||
case PARAM_NUM:
|
|
||||||
if (thisParameterKind == paramList->kind &&
|
|
||||||
paramList->id == thisParameterId)
|
|
||||||
matchFound = 1;
|
|
||||||
break;
|
|
||||||
case PARAM_OLD:
|
|
||||||
case PARAM_NEW:
|
|
||||||
if (thisParameterKind == paramList->kind &&
|
|
||||||
paramList->id == thisParameterId)
|
|
||||||
{
|
{
|
||||||
matchFound = 1;
|
case PARAM_NAMED:
|
||||||
|
if (strcmp(paramList->name, thisParamName) == 0)
|
||||||
/*
|
matchFound = true;
|
||||||
* sanity check
|
break;
|
||||||
*/
|
case PARAM_NUM:
|
||||||
if (strcmp(paramList->name, thisParameterName) != 0)
|
if (paramList->id == thisParamId)
|
||||||
{
|
matchFound = true;
|
||||||
elog(ERROR,
|
break;
|
||||||
"ExecEvalParam: new/old params with same id & diff names");
|
default:
|
||||||
}
|
elog(ERROR, "ExecEvalParam: invalid paramkind %d",
|
||||||
|
thisParamKind);
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
default:
|
if (!matchFound)
|
||||||
|
paramList++;
|
||||||
|
} /* while */
|
||||||
|
} /* if */
|
||||||
|
|
||||||
/*
|
if (!matchFound)
|
||||||
* oops! this is not supposed to happen!
|
{
|
||||||
*/
|
if (thisParamKind == PARAM_NAMED)
|
||||||
elog(ERROR, "ExecEvalParam: invalid paramkind %d",
|
elog(ERROR, "ExecEvalParam: Unknown value for parameter %s",
|
||||||
thisParameterKind);
|
thisParamName);
|
||||||
}
|
else
|
||||||
if (!matchFound)
|
elog(ERROR, "ExecEvalParam: Unknown value for parameter %d",
|
||||||
paramList++;
|
thisParamId);
|
||||||
} /* while */
|
}
|
||||||
} /* if */
|
|
||||||
|
|
||||||
if (!matchFound)
|
*isNull = paramList->isnull;
|
||||||
{
|
return paramList->value;
|
||||||
/*
|
|
||||||
* ooops! we couldn't find this parameter in the parameter list.
|
|
||||||
* Signal an error
|
|
||||||
*/
|
|
||||||
elog(ERROR, "ExecEvalParam: Unknown value for parameter %s",
|
|
||||||
thisParameterName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* return the value.
|
|
||||||
*/
|
|
||||||
*isNull = paramList->isnull;
|
|
||||||
return paramList->value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.222 2002/11/25 03:33:27 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.223 2002/11/25 21:29:36 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -769,8 +769,6 @@ _copyConst(Const *from)
|
|||||||
|
|
||||||
COPY_SCALAR_FIELD(constisnull);
|
COPY_SCALAR_FIELD(constisnull);
|
||||||
COPY_SCALAR_FIELD(constbyval);
|
COPY_SCALAR_FIELD(constbyval);
|
||||||
COPY_SCALAR_FIELD(constisset);
|
|
||||||
COPY_SCALAR_FIELD(constiscast);
|
|
||||||
|
|
||||||
return newnode;
|
return newnode;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.168 2002/11/25 03:33:27 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.169 2002/11/25 21:29:36 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -190,7 +190,6 @@ _equalConst(Const *a, Const *b)
|
|||||||
COMPARE_SCALAR_FIELD(constlen);
|
COMPARE_SCALAR_FIELD(constlen);
|
||||||
COMPARE_SCALAR_FIELD(constisnull);
|
COMPARE_SCALAR_FIELD(constisnull);
|
||||||
COMPARE_SCALAR_FIELD(constbyval);
|
COMPARE_SCALAR_FIELD(constbyval);
|
||||||
/* XXX What about constisset and constiscast? */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We treat all NULL constants of the same type as equal. Someday this
|
* We treat all NULL constants of the same type as equal. Someday this
|
||||||
@ -212,19 +211,12 @@ _equalParam(Param *a, Param *b)
|
|||||||
switch (a->paramkind)
|
switch (a->paramkind)
|
||||||
{
|
{
|
||||||
case PARAM_NAMED:
|
case PARAM_NAMED:
|
||||||
case PARAM_NEW:
|
|
||||||
case PARAM_OLD:
|
|
||||||
COMPARE_STRING_FIELD(paramname);
|
COMPARE_STRING_FIELD(paramname);
|
||||||
break;
|
break;
|
||||||
case PARAM_NUM:
|
case PARAM_NUM:
|
||||||
case PARAM_EXEC:
|
case PARAM_EXEC:
|
||||||
COMPARE_SCALAR_FIELD(paramid);
|
COMPARE_SCALAR_FIELD(paramid);
|
||||||
break;
|
break;
|
||||||
case PARAM_INVALID:
|
|
||||||
/*
|
|
||||||
* XXX: Hmmm... What are we supposed to return in this case ??
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
elog(ERROR, "_equalParam: Invalid paramkind value: %d",
|
elog(ERROR, "_equalParam: Invalid paramkind value: %d",
|
||||||
a->paramkind);
|
a->paramkind);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.35 2002/09/18 21:35:21 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/makefuncs.c,v 1.36 2002/11/25 21:29:36 tgl Exp $
|
||||||
*/
|
*/
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
|
||||||
@ -157,9 +157,7 @@ makeConst(Oid consttype,
|
|||||||
int constlen,
|
int constlen,
|
||||||
Datum constvalue,
|
Datum constvalue,
|
||||||
bool constisnull,
|
bool constisnull,
|
||||||
bool constbyval,
|
bool constbyval)
|
||||||
bool constisset,
|
|
||||||
bool constiscast)
|
|
||||||
{
|
{
|
||||||
Const *cnst = makeNode(Const);
|
Const *cnst = makeNode(Const);
|
||||||
|
|
||||||
@ -168,8 +166,7 @@ makeConst(Oid consttype,
|
|||||||
cnst->constvalue = constvalue;
|
cnst->constvalue = constvalue;
|
||||||
cnst->constisnull = constisnull;
|
cnst->constisnull = constisnull;
|
||||||
cnst->constbyval = constbyval;
|
cnst->constbyval = constbyval;
|
||||||
cnst->constisset = constisset;
|
|
||||||
cnst->constiscast = constiscast;
|
|
||||||
return cnst;
|
return cnst;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,9 +185,7 @@ makeNullConst(Oid consttype)
|
|||||||
(int) typLen,
|
(int) typLen,
|
||||||
(Datum) 0,
|
(Datum) 0,
|
||||||
true,
|
true,
|
||||||
typByVal,
|
typByVal);
|
||||||
false,
|
|
||||||
false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.182 2002/11/25 18:12:09 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.183 2002/11/25 21:29:36 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* Every node type that can appear in stored rules' parsetrees *must*
|
* Every node type that can appear in stored rules' parsetrees *must*
|
||||||
@ -735,7 +735,6 @@ _outConst(StringInfo str, Const *node)
|
|||||||
WRITE_INT_FIELD(constlen);
|
WRITE_INT_FIELD(constlen);
|
||||||
WRITE_BOOL_FIELD(constbyval);
|
WRITE_BOOL_FIELD(constbyval);
|
||||||
WRITE_BOOL_FIELD(constisnull);
|
WRITE_BOOL_FIELD(constisnull);
|
||||||
/* XXX what about constisset, constiscast? */
|
|
||||||
|
|
||||||
appendStringInfo(str, " :constvalue ");
|
appendStringInfo(str, " :constvalue ");
|
||||||
if (node->constisnull)
|
if (node->constisnull)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.139 2002/11/25 18:12:10 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.140 2002/11/25 21:29:38 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* Path and Plan nodes do not have any readfuncs support, because we
|
* Path and Plan nodes do not have any readfuncs support, because we
|
||||||
@ -390,7 +390,6 @@ _readConst(void)
|
|||||||
READ_INT_FIELD(constlen);
|
READ_INT_FIELD(constlen);
|
||||||
READ_BOOL_FIELD(constbyval);
|
READ_BOOL_FIELD(constbyval);
|
||||||
READ_BOOL_FIELD(constisnull);
|
READ_BOOL_FIELD(constisnull);
|
||||||
/* XXX what about constisset, constiscast? */
|
|
||||||
|
|
||||||
token = pg_strtok(&length); /* skip :constvalue */
|
token = pg_strtok(&length); /* skip :constvalue */
|
||||||
if (local_node->constisnull)
|
if (local_node->constisnull)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.52 2002/10/19 02:56:16 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.53 2002/11/25 21:29:39 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -29,8 +29,7 @@
|
|||||||
|
|
||||||
/* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
|
/* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
|
||||||
#define MAKEBOOLCONST(val,isnull) \
|
#define MAKEBOOLCONST(val,isnull) \
|
||||||
((Node *) makeConst(BOOLOID, 1, (Datum) (val), \
|
((Node *) makeConst(BOOLOID, 1, (Datum) (val), (isnull), true))
|
||||||
(isnull), true, false, false))
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.125 2002/11/24 21:52:14 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.126 2002/11/25 21:29:39 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -2167,7 +2167,7 @@ network_prefix_quals(Var *leftop, Oid expr_op, Datum rightop)
|
|||||||
op = makeOper(opr1oid, InvalidOid, BOOLOID, false);
|
op = makeOper(opr1oid, InvalidOid, BOOLOID, false);
|
||||||
expr = make_opclause(op, leftop,
|
expr = make_opclause(op, leftop,
|
||||||
(Var *) makeConst(datatype, -1, opr1right,
|
(Var *) makeConst(datatype, -1, opr1right,
|
||||||
false, false, false, false));
|
false, false));
|
||||||
result = makeList1(expr);
|
result = makeList1(expr);
|
||||||
|
|
||||||
/* create clause "key <= network_scan_last( rightop )" */
|
/* create clause "key <= network_scan_last( rightop )" */
|
||||||
@ -2182,7 +2182,7 @@ network_prefix_quals(Var *leftop, Oid expr_op, Datum rightop)
|
|||||||
op = makeOper(opr2oid, InvalidOid, BOOLOID, false);
|
op = makeOper(opr2oid, InvalidOid, BOOLOID, false);
|
||||||
expr = make_opclause(op, leftop,
|
expr = make_opclause(op, leftop,
|
||||||
(Var *) makeConst(datatype, -1, opr2right,
|
(Var *) makeConst(datatype, -1, opr2right,
|
||||||
false, false, false, false));
|
false, false));
|
||||||
result = lappend(result, expr);
|
result = lappend(result, expr);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -2233,5 +2233,5 @@ string_to_const(const char *str, Oid datatype)
|
|||||||
Datum conval = string_to_datum(str, datatype);
|
Datum conval = string_to_datum(str, datatype);
|
||||||
|
|
||||||
return makeConst(datatype, ((datatype == NAMEOID) ? NAMEDATALEN : -1),
|
return makeConst(datatype, ((datatype == NAMEOID) ? NAMEDATALEN : -1),
|
||||||
conval, false, false, false, false);
|
conval, false, false);
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.57 2002/09/18 21:35:21 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.58 2002/11/25 21:29:40 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -183,9 +183,7 @@ expand_targetlist(List *tlist, int command_type,
|
|||||||
att_tup->attlen,
|
att_tup->attlen,
|
||||||
(Datum) 0,
|
(Datum) 0,
|
||||||
true, /* isnull */
|
true, /* isnull */
|
||||||
att_tup->attbyval,
|
att_tup->attbyval);
|
||||||
false, /* not a set */
|
|
||||||
false);
|
|
||||||
if (!att_tup->attisdropped)
|
if (!att_tup->attisdropped)
|
||||||
new_expr = coerce_type_constraints(new_expr,
|
new_expr = coerce_type_constraints(new_expr,
|
||||||
atttype,
|
atttype,
|
||||||
@ -198,9 +196,7 @@ expand_targetlist(List *tlist, int command_type,
|
|||||||
att_tup->attlen,
|
att_tup->attlen,
|
||||||
(Datum) 0,
|
(Datum) 0,
|
||||||
true, /* isnull */
|
true, /* isnull */
|
||||||
att_tup->attbyval,
|
att_tup->attbyval);
|
||||||
false, /* not a set */
|
|
||||||
false);
|
|
||||||
else
|
else
|
||||||
new_expr = (Node *) makeVar(result_relation,
|
new_expr = (Node *) makeVar(result_relation,
|
||||||
attrno,
|
attrno,
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.80 2002/09/18 21:35:21 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.81 2002/11/25 21:29:40 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -448,9 +448,7 @@ generate_setop_tlist(List *colTypes, int flag,
|
|||||||
sizeof(int4),
|
sizeof(int4),
|
||||||
Int32GetDatum(flag),
|
Int32GetDatum(flag),
|
||||||
false,
|
false,
|
||||||
true,
|
true);
|
||||||
false,
|
|
||||||
false);
|
|
||||||
tlist = lappend(tlist, makeTargetEntry(resdom, expr));
|
tlist = lappend(tlist, makeTargetEntry(resdom, expr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.111 2002/11/15 02:50:07 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.112 2002/11/25 21:29:40 tgl Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -36,8 +36,7 @@
|
|||||||
|
|
||||||
/* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
|
/* note that pg_type.h hardwires size of bool as 1 ... duplicate it */
|
||||||
#define MAKEBOOLCONST(val,isnull) \
|
#define MAKEBOOLCONST(val,isnull) \
|
||||||
((Node *) makeConst(BOOLOID, 1, (Datum) (val), \
|
((Node *) makeConst(BOOLOID, 1, (Datum) (val), (isnull), true))
|
||||||
(isnull), true, false, false))
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -666,7 +665,8 @@ check_subplans_for_ungrouped_vars_walker(Node *node,
|
|||||||
|
|
||||||
if (node == NULL)
|
if (node == NULL)
|
||||||
return false;
|
return false;
|
||||||
if (IsA(node, Const) ||IsA(node, Param))
|
if (IsA(node, Const) ||
|
||||||
|
IsA(node, Param))
|
||||||
return false; /* constants are always acceptable */
|
return false; /* constants are always acceptable */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1286,8 +1286,8 @@ eval_const_expressions_mutator(Node *node, void *context)
|
|||||||
* Make the constant result node.
|
* Make the constant result node.
|
||||||
*/
|
*/
|
||||||
return (Node *) makeConst(result_typeid, resultTypLen,
|
return (Node *) makeConst(result_typeid, resultTypLen,
|
||||||
const_val, const_is_null,
|
const_val, const_is_null,
|
||||||
resultTypByVal, false, false);
|
resultTypByVal);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1734,7 +1734,7 @@ simplify_op_or_func(Expr *expr, List *args)
|
|||||||
*/
|
*/
|
||||||
return (Expr *) makeConst(result_typeid, resultTypLen,
|
return (Expr *) makeConst(result_typeid, resultTypLen,
|
||||||
const_val, const_is_null,
|
const_val, const_is_null,
|
||||||
resultTypByVal, false, false);
|
resultTypByVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.382 2002/11/25 03:36:50 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.383 2002/11/25 21:29:40 tgl Exp $
|
||||||
*
|
*
|
||||||
* HISTORY
|
* HISTORY
|
||||||
* AUTHOR DATE MAJOR EVENT
|
* AUTHOR DATE MAJOR EVENT
|
||||||
@ -4437,8 +4437,6 @@ select_limit_value:
|
|||||||
n->constvalue = Int32GetDatum($1);
|
n->constvalue = Int32GetDatum($1);
|
||||||
n->constisnull = FALSE;
|
n->constisnull = FALSE;
|
||||||
n->constbyval = TRUE;
|
n->constbyval = TRUE;
|
||||||
n->constisset = FALSE;
|
|
||||||
n->constiscast = FALSE;
|
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| ALL
|
| ALL
|
||||||
@ -4451,8 +4449,6 @@ select_limit_value:
|
|||||||
n->constvalue = (Datum) 0;
|
n->constvalue = (Datum) 0;
|
||||||
n->constisnull = TRUE;
|
n->constisnull = TRUE;
|
||||||
n->constbyval = TRUE;
|
n->constbyval = TRUE;
|
||||||
n->constisset = FALSE;
|
|
||||||
n->constiscast = FALSE;
|
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| PARAM
|
| PARAM
|
||||||
@ -4479,8 +4475,6 @@ select_offset_value:
|
|||||||
n->constvalue = Int32GetDatum($1);
|
n->constvalue = Int32GetDatum($1);
|
||||||
n->constisnull = FALSE;
|
n->constisnull = FALSE;
|
||||||
n->constbyval = TRUE;
|
n->constbyval = TRUE;
|
||||||
n->constisset = FALSE;
|
|
||||||
n->constiscast = FALSE;
|
|
||||||
$$ = (Node *)n;
|
$$ = (Node *)n;
|
||||||
}
|
}
|
||||||
| PARAM
|
| PARAM
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.86 2002/11/15 02:50:09 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.87 2002/11/25 21:29:41 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -161,7 +161,6 @@ coerce_type(Node *node, Oid inputTypeId, Oid targetTypeId,
|
|||||||
newcon->constlen = typeLen(targetType);
|
newcon->constlen = typeLen(targetType);
|
||||||
newcon->constbyval = typeByVal(targetType);
|
newcon->constbyval = typeByVal(targetType);
|
||||||
newcon->constisnull = con->constisnull;
|
newcon->constisnull = con->constisnull;
|
||||||
newcon->constisset = false;
|
|
||||||
|
|
||||||
if (!con->constisnull)
|
if (!con->constisnull)
|
||||||
{
|
{
|
||||||
@ -553,9 +552,7 @@ coerce_type_typmod(Node *node, Oid targetTypeId, int32 targetTypMod,
|
|||||||
sizeof(int32),
|
sizeof(int32),
|
||||||
Int32GetDatum(targetTypMod),
|
Int32GetDatum(targetTypMod),
|
||||||
false,
|
false,
|
||||||
true,
|
true);
|
||||||
false,
|
|
||||||
false);
|
|
||||||
|
|
||||||
args = makeList2(node, cons);
|
args = makeList2(node, cons);
|
||||||
|
|
||||||
@ -566,9 +563,7 @@ coerce_type_typmod(Node *node, Oid targetTypeId, int32 targetTypMod,
|
|||||||
sizeof(bool),
|
sizeof(bool),
|
||||||
BoolGetDatum(cformat != COERCE_IMPLICIT_CAST),
|
BoolGetDatum(cformat != COERCE_IMPLICIT_CAST),
|
||||||
false,
|
false,
|
||||||
true,
|
true);
|
||||||
false,
|
|
||||||
false);
|
|
||||||
|
|
||||||
args = lappend(args, cons);
|
args = lappend(args, cons);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.73 2002/11/15 02:50:09 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.74 2002/11/25 21:29:41 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -293,9 +293,7 @@ transformArraySubscripts(ParseState *pstate,
|
|||||||
sizeof(int32),
|
sizeof(int32),
|
||||||
Int32GetDatum(1),
|
Int32GetDatum(1),
|
||||||
false,
|
false,
|
||||||
true, /* pass by value */
|
true); /* pass by value */
|
||||||
false,
|
|
||||||
false);
|
|
||||||
}
|
}
|
||||||
lowerIndexpr = lappend(lowerIndexpr, subexpr);
|
lowerIndexpr = lappend(lowerIndexpr, subexpr);
|
||||||
}
|
}
|
||||||
@ -444,8 +442,6 @@ make_const(Value *value)
|
|||||||
-1,
|
-1,
|
||||||
(Datum) NULL,
|
(Datum) NULL,
|
||||||
true,
|
true,
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false);
|
false);
|
||||||
return con;
|
return con;
|
||||||
}
|
}
|
||||||
@ -454,9 +450,7 @@ make_const(Value *value)
|
|||||||
typelen,
|
typelen,
|
||||||
val,
|
val,
|
||||||
false,
|
false,
|
||||||
typebyval,
|
typebyval);
|
||||||
false, /* not a set */
|
|
||||||
false); /* not coerced */
|
|
||||||
|
|
||||||
return con;
|
return con;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* back to source text
|
* back to source text
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.125 2002/11/15 02:50:09 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.126 2002/11/25 21:29:41 tgl Exp $
|
||||||
*
|
*
|
||||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||||
*
|
*
|
||||||
@ -2243,8 +2243,6 @@ get_rule_expr(Node *node, deparse_context *context,
|
|||||||
switch (param->paramkind)
|
switch (param->paramkind)
|
||||||
{
|
{
|
||||||
case PARAM_NAMED:
|
case PARAM_NAMED:
|
||||||
case PARAM_NEW:
|
|
||||||
case PARAM_OLD:
|
|
||||||
appendStringInfo(buf, "$%s", param->paramname);
|
appendStringInfo(buf, "$%s", param->paramname);
|
||||||
break;
|
break;
|
||||||
case PARAM_NUM:
|
case PARAM_NUM:
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.121 2002/11/19 23:21:59 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.122 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -3730,7 +3730,7 @@ string_to_const(const char *str, Oid datatype)
|
|||||||
Datum conval = string_to_datum(str, datatype);
|
Datum conval = string_to_datum(str, datatype);
|
||||||
|
|
||||||
return makeConst(datatype, ((datatype == NAMEOID) ? NAMEDATALEN : -1),
|
return makeConst(datatype, ((datatype == NAMEOID) ? NAMEDATALEN : -1),
|
||||||
conval, false, false, false, false);
|
conval, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
|
6
src/backend/utils/cache/lsyscache.c
vendored
6
src/backend/utils/cache/lsyscache.c
vendored
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.85 2002/09/19 23:40:56 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.86 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* Eventually, the index information should go through here, too.
|
* Eventually, the index information should go through here, too.
|
||||||
@ -1047,9 +1047,7 @@ get_typdefault(Oid typid)
|
|||||||
type->typlen,
|
type->typlen,
|
||||||
datum,
|
datum,
|
||||||
false,
|
false,
|
||||||
type->typbyval,
|
type->typbyval);
|
||||||
false, /* not a set */
|
|
||||||
false);
|
|
||||||
pfree(strDefaultVal);
|
pfree(strDefaultVal);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: execnodes.h,v 1.79 2002/11/22 22:10:01 tgl Exp $
|
* $Id: execnodes.h,v 1.80 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -281,14 +281,15 @@ typedef struct ResultRelInfo
|
|||||||
*
|
*
|
||||||
* direction direction of the scan
|
* direction direction of the scan
|
||||||
*
|
*
|
||||||
|
* snapshot time qual to use
|
||||||
|
*
|
||||||
* range_table array of scan relation information
|
* range_table array of scan relation information
|
||||||
*
|
*
|
||||||
* result_relation information for insert/update/delete queries
|
* result_relation information for insert/update/delete queries
|
||||||
*
|
*
|
||||||
* into_relation_descriptor relation being retrieved "into"
|
* into_relation_descriptor relation being retrieved "into"
|
||||||
*
|
*
|
||||||
* param_list_info information needed to transform
|
* param_list_info information about Param values
|
||||||
* Param nodes into Const nodes
|
|
||||||
*
|
*
|
||||||
* tupleTable this is a pointer to an array
|
* tupleTable this is a pointer to an array
|
||||||
* of pointers to tuples used by
|
* of pointers to tuples used by
|
||||||
@ -307,8 +308,8 @@ typedef struct EState
|
|||||||
* elt */
|
* elt */
|
||||||
JunkFilter *es_junkFilter; /* currently active junk filter */
|
JunkFilter *es_junkFilter; /* currently active junk filter */
|
||||||
Relation es_into_relation_descriptor;
|
Relation es_into_relation_descriptor;
|
||||||
ParamListInfo es_param_list_info;
|
ParamListInfo es_param_list_info; /* values of external params */
|
||||||
ParamExecData *es_param_exec_vals; /* this is for subselects */
|
ParamExecData *es_param_exec_vals; /* values of internal params */
|
||||||
TupleTable es_tupleTable;
|
TupleTable es_tupleTable;
|
||||||
uint32 es_processed; /* # of tuples processed */
|
uint32 es_processed; /* # of tuples processed */
|
||||||
Oid es_lastoid; /* last oid processed (by INSERT) */
|
Oid es_lastoid; /* last oid processed (by INSERT) */
|
||||||
@ -322,6 +323,7 @@ typedef struct EState
|
|||||||
* needed.
|
* needed.
|
||||||
*/
|
*/
|
||||||
ExprContext *es_per_tuple_exprcontext;
|
ExprContext *es_per_tuple_exprcontext;
|
||||||
|
|
||||||
/* Below is to re-evaluate plan qual in READ COMMITTED mode */
|
/* Below is to re-evaluate plan qual in READ COMMITTED mode */
|
||||||
struct Plan *es_origPlan;
|
struct Plan *es_origPlan;
|
||||||
Pointer es_evalPlanQual;
|
Pointer es_evalPlanQual;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: makefuncs.h,v 1.41 2002/09/18 21:35:24 tgl Exp $
|
* $Id: makefuncs.h,v 1.42 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -45,9 +45,7 @@ extern Const *makeConst(Oid consttype,
|
|||||||
int constlen,
|
int constlen,
|
||||||
Datum constvalue,
|
Datum constvalue,
|
||||||
bool constisnull,
|
bool constisnull,
|
||||||
bool constbyval,
|
bool constbyval);
|
||||||
bool constisset,
|
|
||||||
bool constiscast);
|
|
||||||
|
|
||||||
extern Const *makeNullConst(Oid consttype);
|
extern Const *makeNullConst(Oid consttype);
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* params.h
|
* params.h
|
||||||
* Declarations/definitions of stuff needed to handle parameterized plans.
|
* Declarations of stuff needed to handle parameterized plans.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: params.h,v 1.17 2002/06/20 20:29:51 momjian Exp $
|
* $Id: params.h,v 1.18 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -16,66 +16,55 @@
|
|||||||
|
|
||||||
#include "access/attnum.h"
|
#include "access/attnum.h"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
|
||||||
*
|
/* ----------------
|
||||||
* The following are the possible values for the 'paramkind'
|
* The following are the possible values for the 'paramkind'
|
||||||
* field of a Param node.
|
* field of a Param node.
|
||||||
*
|
*
|
||||||
* PARAM_NAMED: The parameter has a name, i.e. something
|
* PARAM_NAMED: The parameter has a name, i.e. something
|
||||||
* like `$.salary' or `$.foobar'.
|
* like `$.salary' or `$.foobar'.
|
||||||
* In this case field `paramname' must be a valid Name.
|
* In this case field `paramname' must be a valid name.
|
||||||
* and field `paramid' must be == 0.
|
|
||||||
*
|
*
|
||||||
* PARAM_NUM: The parameter has only a numeric identifier,
|
* PARAM_NUM: The parameter has only a numeric identifier,
|
||||||
* i.e. something like `$1', `$2' etc.
|
* i.e. something like `$1', `$2' etc.
|
||||||
* The number is contained in the `parmid' field.
|
* The number is contained in the `paramid' field.
|
||||||
*
|
*
|
||||||
* PARAM_NEW: Used in PRS2 rule, similar to PARAM_NAMED.
|
* PARAM_EXEC: The parameter is an internal executor parameter.
|
||||||
* The `paramname' & `paramid' refer to the "NEW" tuple
|
* It has a number contained in the `paramid' field.
|
||||||
* `paramname' is the attribute name and `paramid' its
|
|
||||||
* attribute number.
|
|
||||||
*
|
*
|
||||||
* PARAM_OLD: Same as PARAM_NEW, but in this case we refer to
|
* PARAM_INVALID should never appear in a Param node; it's used to mark
|
||||||
* the "OLD" tuple.
|
* the end of a ParamListInfo array.
|
||||||
*
|
|
||||||
* PARAM_EXEC: Evaluated by executor. Used for subselect...
|
|
||||||
*
|
*
|
||||||
|
* NOTE: As of PostgreSQL 7.3, named parameters aren't actually used and
|
||||||
|
* so the code that handles PARAM_NAMED cases is dead code. We leave it
|
||||||
|
* in place since it might be resurrected someday.
|
||||||
|
* ----------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define PARAM_NAMED 11
|
#define PARAM_NAMED 11
|
||||||
#define PARAM_NUM 12
|
#define PARAM_NUM 12
|
||||||
#define PARAM_NEW 13
|
|
||||||
#define PARAM_OLD 14
|
|
||||||
#define PARAM_EXEC 15
|
#define PARAM_EXEC 15
|
||||||
#define PARAM_INVALID 100
|
#define PARAM_INVALID 100
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------
|
||||||
* ParamListInfo
|
* ParamListInfo
|
||||||
*
|
*
|
||||||
* Information needed in order for the executor to handle
|
* ParamListInfo entries are used to pass parameters into the executor
|
||||||
* parameterized plans (you know, $.salary, $.name etc. stuff...).
|
* for parameterized plans. Each entry in the array defines the value
|
||||||
|
* to be substituted for a PARAM_NAMED or PARAM_NUM parameter.
|
||||||
*
|
*
|
||||||
* ParamListInfoData contains information needed when substituting a
|
* kind : the kind of parameter (PARAM_NAMED or PARAM_NUM)
|
||||||
* Param node with a Const node.
|
* name : the parameter name (valid if kind == PARAM_NAMED)
|
||||||
*
|
|
||||||
* kind : the kind of parameter.
|
|
||||||
* name : the parameter name (valid if kind == PARAM_NAMED,
|
|
||||||
* PARAM_NEW or PARAM_OLD)
|
|
||||||
* id : the parameter id (valid if kind == PARAM_NUM)
|
* id : the parameter id (valid if kind == PARAM_NUM)
|
||||||
* or the attrno (if kind == PARAM_NEW or PARAM_OLD)
|
* isnull : true if the value is null (if so 'value' is undefined)
|
||||||
* type : PG_TYPE OID of the value
|
|
||||||
* length : length in bytes of the value
|
|
||||||
* isnull : true if & only if the value is null (if true then
|
|
||||||
* the fields 'length' and 'value' are undefined).
|
|
||||||
* value : the value that has to be substituted in the place
|
* value : the value that has to be substituted in the place
|
||||||
* of the parameter.
|
* of the parameter.
|
||||||
*
|
*
|
||||||
* ParamListInfo is to be used as an array of ParamListInfoData
|
* ParamListInfo is to be used as an array of ParamListInfoData
|
||||||
* records. An 'InvalidName' in the name field of such a record
|
* records. A dummy record with kind == PARAM_INVALID marks the end
|
||||||
* indicates that this is the last record in the array.
|
* of the array.
|
||||||
*
|
* ----------------
|
||||||
* ----------------------------------------------------------------
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct ParamListInfoData
|
typedef struct ParamListInfoData
|
||||||
@ -83,19 +72,33 @@ typedef struct ParamListInfoData
|
|||||||
int kind;
|
int kind;
|
||||||
char *name;
|
char *name;
|
||||||
AttrNumber id;
|
AttrNumber id;
|
||||||
Oid type;
|
|
||||||
Size length;
|
|
||||||
bool isnull;
|
bool isnull;
|
||||||
bool byval;
|
|
||||||
Datum value;
|
Datum value;
|
||||||
} ParamListInfoData;
|
} ParamListInfoData;
|
||||||
|
|
||||||
typedef ParamListInfoData *ParamListInfo;
|
typedef ParamListInfoData *ParamListInfo;
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------
|
||||||
|
* ParamExecData
|
||||||
|
*
|
||||||
|
* ParamExecData entries are used for executor internal parameters
|
||||||
|
* (that is, values being passed into or out of a sub-query). The
|
||||||
|
* paramid of a PARAM_EXEC Param is a (zero-based) index into an
|
||||||
|
* array of ParamExecData records, which is referenced through
|
||||||
|
* es_param_exec_vals or ecxt_param_exec_vals.
|
||||||
|
*
|
||||||
|
* If execPlan is not NULL, it points to a SubPlan node that needs to
|
||||||
|
* be executed to produce the value. (This is done so that we can have
|
||||||
|
* lazy evaluation of InitPlans: they aren't executed until/unless a
|
||||||
|
* result value is needed.) Otherwise the value is assumed to be valid
|
||||||
|
* when needed.
|
||||||
|
* ----------------
|
||||||
|
*/
|
||||||
|
|
||||||
typedef struct ParamExecData
|
typedef struct ParamExecData
|
||||||
{
|
{
|
||||||
void *execPlan; /* plan must be executed to get param
|
void *execPlan; /* should be "SubPlan *" */
|
||||||
* value */
|
|
||||||
Datum value;
|
Datum value;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
} ParamExecData;
|
} ParamExecData;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: primnodes.h,v 1.68 2002/09/18 21:35:24 tgl Exp $
|
* $Id: primnodes.h,v 1.69 2002/11/25 21:29:42 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -267,20 +267,16 @@ typedef struct Var
|
|||||||
typedef struct Const
|
typedef struct Const
|
||||||
{
|
{
|
||||||
NodeTag type;
|
NodeTag type;
|
||||||
Oid consttype; /* PG_TYPE OID of the constant's value */
|
Oid consttype; /* PG_TYPE OID of the constant's datatype */
|
||||||
int constlen; /* length in bytes of the constant's value */
|
int constlen; /* typlen of the constant's datatype */
|
||||||
Datum constvalue; /* the constant's value */
|
Datum constvalue; /* the constant's value */
|
||||||
bool constisnull; /* whether the constant is null (if true,
|
bool constisnull; /* whether the constant is null (if true,
|
||||||
* the other fields are undefined) */
|
* constvalue is undefined) */
|
||||||
bool constbyval; /* whether the information in constvalue
|
bool constbyval; /* whether this datatype is passed by value.
|
||||||
* if passed by value. If true, then all
|
* If true, then all the information is
|
||||||
* the information is stored in the datum.
|
* stored in the Datum.
|
||||||
* If false, then the datum contains a
|
* If false, then the Datum contains a
|
||||||
* pointer to the information. */
|
* pointer to the information. */
|
||||||
bool constisset; /* whether the const represents a set. The
|
|
||||||
* const value corresponding will be the
|
|
||||||
* query that defines the set. */
|
|
||||||
bool constiscast;
|
|
||||||
} Const;
|
} Const;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -290,31 +286,24 @@ typedef struct Const
|
|||||||
*
|
*
|
||||||
* PARAM_NAMED: The parameter has a name, i.e. something
|
* PARAM_NAMED: The parameter has a name, i.e. something
|
||||||
* like `$.salary' or `$.foobar'.
|
* like `$.salary' or `$.foobar'.
|
||||||
* In this case field `paramname' must be a valid Name.
|
* In this case field `paramname' must be a valid name.
|
||||||
*
|
*
|
||||||
* PARAM_NUM: The parameter has only a numeric identifier,
|
* PARAM_NUM: The parameter has only a numeric identifier,
|
||||||
* i.e. something like `$1', `$2' etc.
|
* i.e. something like `$1', `$2' etc.
|
||||||
* The number is contained in the `paramid' field.
|
* The number is contained in the `paramid' field.
|
||||||
*
|
*
|
||||||
* PARAM_NEW: Used in PRS2 rule, similar to PARAM_NAMED.
|
* PARAM_EXEC: The parameter is an internal executor parameter.
|
||||||
* The `paramname' and `paramid' refer to the "NEW" tuple
|
* It has a number contained in the `paramid' field.
|
||||||
* The `pramname' is the attribute name and `paramid'
|
|
||||||
* is the attribute number.
|
|
||||||
*
|
*
|
||||||
* PARAM_OLD: Same as PARAM_NEW, but in this case we refer to
|
|
||||||
* the "OLD" tuple.
|
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
typedef struct Param
|
typedef struct Param
|
||||||
{
|
{
|
||||||
NodeTag type;
|
NodeTag type;
|
||||||
int paramkind; /* specifies the kind of parameter. See
|
int paramkind; /* kind of parameter. See above */
|
||||||
* above */
|
AttrNumber paramid; /* numeric ID for parameter ("$1") */
|
||||||
AttrNumber paramid; /* numeric identifier for literal-constant
|
char *paramname; /* name for parameter ("$.foo") */
|
||||||
* parameters ("$1") */
|
Oid paramtype; /* PG_TYPE OID of parameter's datatype */
|
||||||
char *paramname; /* attribute name for tuple-substitution
|
|
||||||
* parameters ("$.foo") */
|
|
||||||
Oid paramtype; /* PG_TYPE OID of the parameter's value */
|
|
||||||
} Param;
|
} Param;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user