mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Add TupleDescGetDefault()
This unifies some repetitive code. Note: I didn't push the "not found" error message into the new function, even though all existing callers would be able to make use of it. Using the existing error handling as-is would probably require exposing the Relation type via tupdesc.h, which doesn't seem desirable. (Or even if we changed it to just report the OID, it would inject the concept of a relation containing the tuple descriptor into tupdesc.h, which might be a layering violation. Perhaps some further improvements could be considered here separately.) Discussion: https://www.postgresql.org/message-id/flat/52a125e4-ff9a-95f5-9f61-b87cf447e4da%40eisentraut.org
This commit is contained in:
@ -1246,21 +1246,7 @@ build_column_default(Relation rel, int attrno)
|
||||
*/
|
||||
if (att_tup->atthasdef)
|
||||
{
|
||||
if (rd_att->constr && rd_att->constr->num_defval > 0)
|
||||
{
|
||||
AttrDefault *defval = rd_att->constr->defval;
|
||||
int ndef = rd_att->constr->num_defval;
|
||||
|
||||
while (--ndef >= 0)
|
||||
{
|
||||
if (attrno == defval[ndef].adnum)
|
||||
{
|
||||
/* Found it, convert string representation to node tree. */
|
||||
expr = stringToNode(defval[ndef].adbin);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
expr = TupleDescGetDefault(rd_att, attrno);
|
||||
if (expr == NULL)
|
||||
elog(ERROR, "default expression not found for attribute %d of relation \"%s\"",
|
||||
attrno, RelationGetRelationName(rel));
|
||||
|
Reference in New Issue
Block a user