66 * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
77 * Portions Copyright (c) 1994, Regents of the University of California
88 *
9- *$Id: analyze.c,v 1.171 2000/12/06 23:55:19 tgl Exp $
9+ *$Id: analyze.c,v 1.172 2000/12/07 01:12:08 tgl Exp $
1010 *
1111 *-------------------------------------------------------------------------
1212 */
@@ -2503,6 +2503,7 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt)
25032503return qry ;
25042504}
25052505
2506+ /* exported so planner can check again after rewriting, query pullup, etc */
25062507void
25072508CheckSelectForUpdate (Query * qry )
25082509{
@@ -2519,7 +2520,7 @@ CheckSelectForUpdate(Query *qry)
25192520static void
25202521transformForUpdate (Query * qry ,List * forUpdate )
25212522{
2522- List * rowMarks = NIL ;
2523+ List * rowMarks = qry -> rowMarks ;
25232524List * l ;
25242525List * rt ;
25252526Index i ;
@@ -2542,7 +2543,8 @@ transformForUpdate(Query *qry, List *forUpdate)
25422543}
25432544else
25442545{
2545- rowMarks = lappendi (rowMarks ,i );
2546+ if (!intMember (i ,rowMarks ))/* avoid duplicates */
2547+ rowMarks = lappendi (rowMarks ,i );
25462548rte -> checkForWrite = true;
25472549}
25482550}