mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Support assignment to subfields of composite columns in UPDATE and INSERT.
As a side effect, cause subscripts in INSERT targetlists to do something more or less sensible; previously we evaluated such subscripts and then effectively ignored them. Another side effect is that UPDATE-ing an element or slice of an array value that is NULL now produces a non-null result, namely an array containing just the assigned-to positions.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.171 2004/05/30 23:40:27 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/readfuncs.c,v 1.172 2004/06/09 19:08:15 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Path and Plan nodes do not have any readfuncs support, because we
|
||||
@ -543,6 +543,22 @@ _readFieldSelect(void)
|
||||
READ_DONE();
|
||||
}
|
||||
|
||||
/*
|
||||
* _readFieldStore
|
||||
*/
|
||||
static FieldStore *
|
||||
_readFieldStore(void)
|
||||
{
|
||||
READ_LOCALS(FieldStore);
|
||||
|
||||
READ_NODE_FIELD(arg);
|
||||
READ_NODE_FIELD(newvals);
|
||||
READ_NODE_FIELD(fieldnums);
|
||||
READ_OID_FIELD(resulttype);
|
||||
|
||||
READ_DONE();
|
||||
}
|
||||
|
||||
/*
|
||||
* _readRelabelType
|
||||
*/
|
||||
@ -814,17 +830,6 @@ _readFromExpr(void)
|
||||
* Stuff from parsenodes.h.
|
||||
*/
|
||||
|
||||
static ColumnRef *
|
||||
_readColumnRef(void)
|
||||
{
|
||||
READ_LOCALS(ColumnRef);
|
||||
|
||||
READ_NODE_FIELD(fields);
|
||||
READ_NODE_FIELD(indirection);
|
||||
|
||||
READ_DONE();
|
||||
}
|
||||
|
||||
static ColumnDef *
|
||||
_readColumnDef(void)
|
||||
{
|
||||
@ -859,18 +864,6 @@ _readTypeName(void)
|
||||
READ_DONE();
|
||||
}
|
||||
|
||||
static ExprFieldSelect *
|
||||
_readExprFieldSelect(void)
|
||||
{
|
||||
READ_LOCALS(ExprFieldSelect);
|
||||
|
||||
READ_NODE_FIELD(arg);
|
||||
READ_NODE_FIELD(fields);
|
||||
READ_NODE_FIELD(indirection);
|
||||
|
||||
READ_DONE();
|
||||
}
|
||||
|
||||
/*
|
||||
* _readRangeTblEntry
|
||||
*/
|
||||
@ -974,6 +967,8 @@ parseNodeString(void)
|
||||
return_value = _readSubLink();
|
||||
else if (MATCH("FIELDSELECT", 11))
|
||||
return_value = _readFieldSelect();
|
||||
else if (MATCH("FIELDSTORE", 10))
|
||||
return_value = _readFieldStore();
|
||||
else if (MATCH("RELABELTYPE", 11))
|
||||
return_value = _readRelabelType();
|
||||
else if (MATCH("CASE", 4))
|
||||
@ -1008,14 +1003,10 @@ parseNodeString(void)
|
||||
return_value = _readJoinExpr();
|
||||
else if (MATCH("FROMEXPR", 8))
|
||||
return_value = _readFromExpr();
|
||||
else if (MATCH("COLUMNREF", 9))
|
||||
return_value = _readColumnRef();
|
||||
else if (MATCH("COLUMNDEF", 9))
|
||||
return_value = _readColumnDef();
|
||||
else if (MATCH("TYPENAME", 8))
|
||||
return_value = _readTypeName();
|
||||
else if (MATCH("EXPRFIELDSELECT", 15))
|
||||
return_value = _readExprFieldSelect();
|
||||
else if (MATCH("RTE", 3))
|
||||
return_value = _readRangeTblEntry();
|
||||
else if (MATCH("NOTIFY", 6))
|
||||
|
Reference in New Issue
Block a user