diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-04-10 13:51:29 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-04-10 13:51:53 -0400 |
commit | 8f0530f58061b185dc385df42e62d78a18d4ae3e (patch) | |
tree | 63d038ae4012dcdcff3b556dde4c654959f8448e /src/backend/parser/parse_utilcmd.c | |
parent | 56dd8e85c40fef3e3c2c10afa186ee30416ec507 (diff) | |
download | postgresql-8f0530f58061b185dc385df42e62d78a18d4ae3e.tar.gz postgresql-8f0530f58061b185dc385df42e62d78a18d4ae3e.zip |
Improve castNode notation by introducing list-extraction-specific variants.
This extends the castNode() notation introduced by commit 5bcab1114 to
provide, in one step, extraction of a list cell's pointer and coercion to
a concrete node type. For example, "lfirst_node(Foo, lc)" is the same
as "castNode(Foo, lfirst(lc))". Almost half of the uses of castNode
that have appeared so far include a list extraction call, so this is
pretty widely useful, and it saves a few more keystrokes compared to the
old way.
As with the previous patch, back-patch the addition of these macros to
pg_list.h, so that the notation will be available when back-patching.
Patch by me, after an idea of Andrew Gierth's.
Discussion: https://postgr.es/m/14197.1491841216@sss.pgh.pa.us
Diffstat (limited to 'src/backend/parser/parse_utilcmd.c')
-rw-r--r-- | src/backend/parser/parse_utilcmd.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 926699608be..e5461944e29 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -388,7 +388,7 @@ generateSerialExtraStmts(CreateStmtContext *cxt, ColumnDef *column, foreach(option, seqoptions) { - DefElem *defel = castNode(DefElem, lfirst(option)); + DefElem *defel = lfirst_node(DefElem, option); if (strcmp(defel->defname, "sequence_name") == 0) { @@ -605,7 +605,7 @@ transformColumnDefinition(CreateStmtContext *cxt, ColumnDef *column) foreach(clist, column->constraints) { - Constraint *constraint = castNode(Constraint, lfirst(clist)); + Constraint *constraint = lfirst_node(Constraint, clist); switch (constraint->contype) { @@ -1635,7 +1635,7 @@ transformIndexConstraints(CreateStmtContext *cxt) */ foreach(lc, cxt->ixconstraints) { - Constraint *constraint = castNode(Constraint, lfirst(lc)); + Constraint *constraint = lfirst_node(Constraint, lc); Assert(constraint->contype == CONSTR_PRIMARY || constraint->contype == CONSTR_UNIQUE || @@ -1956,8 +1956,8 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt) List *opname; Assert(list_length(pair) == 2); - elem = castNode(IndexElem, linitial(pair)); - opname = castNode(List, lsecond(pair)); + elem = linitial_node(IndexElem, pair); + opname = lsecond_node(List, pair); index->indexParams = lappend(index->indexParams, elem); index->excludeOpNames = lappend(index->excludeOpNames, opname); @@ -1984,7 +1984,7 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt) foreach(columns, cxt->columns) { - column = castNode(ColumnDef, lfirst(columns)); + column = lfirst_node(ColumnDef, columns); if (strcmp(column->colname, key) == 0) { found = true; @@ -2013,7 +2013,7 @@ transformIndexConstraint(Constraint *constraint, CreateStmtContext *cxt) foreach(inher, cxt->inhRelations) { - RangeVar *inh = castNode(RangeVar, lfirst(inher)); + RangeVar *inh = lfirst_node(RangeVar, inher); Relation rel; int count; @@ -2823,7 +2823,7 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt, */ foreach(lc, castNode(List, cmd->def)) { - DefElem *def = castNode(DefElem, lfirst(lc)); + DefElem *def = lfirst_node(DefElem, lc); if (strcmp(def->defname, "generated") == 0) newdef = lappend(newdef, def); @@ -2900,7 +2900,7 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt, */ foreach(l, cxt.alist) { - IndexStmt *idxstmt = castNode(IndexStmt, lfirst(l)); + IndexStmt *idxstmt = lfirst_node(IndexStmt, l); idxstmt = transformIndexStmt(relid, idxstmt, queryString); newcmd = makeNode(AlterTableCmd); |