88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.138 2001/08/04 22:01:38 momjian Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.139 2001/08/10 14:30:14 momjian Exp $
1212 *
1313 * NOTES
1414 * The PerformAddAttribute() code, like most of the relation
@@ -1984,8 +1984,7 @@ needs_toast_table(Relation rel)
19841984MAXALIGN (data_length );
19851985return (tuple_length > TOAST_TUPLE_THRESHOLD );
19861986}
1987-
1988-
1987+
19891988/*
19901989 *
19911990 * LOCK TABLE
@@ -1994,26 +1993,38 @@ needs_toast_table(Relation rel)
19941993void
19951994LockTableCommand (LockStmt * lockstmt )
19961995{
1997- Relation rel ;
1998- int aclresult ;
1999-
2000- rel = heap_openr (lockstmt -> relname ,NoLock );
2001-
2002- if (rel -> rd_rel -> relkind != RELKIND_RELATION )
2003- elog (ERROR ,"LOCK TABLE: %s is not a table" ,lockstmt -> relname );
2004-
2005- if (lockstmt -> mode == AccessShareLock )
2006- aclresult = pg_aclcheck (lockstmt -> relname ,GetUserId (),ACL_SELECT );
2007- else
2008- aclresult = pg_aclcheck (lockstmt -> relname ,GetUserId (),
2009- ACL_UPDATE |ACL_DELETE );
1996+ List * p ;
1997+ Relation rel ;
1998+
1999+ /* Iterate over the list and open, lock, and close the relations
2000+ one at a time
2001+ */
20102002
2011- if (aclresult != ACLCHECK_OK )
2012- elog (ERROR ,"LOCK TABLE: permission denied" );
2003+ foreach (p ,lockstmt -> rellist )
2004+ {
2005+ char * relname = strVal (lfirst (p ));
2006+ int aclresult ;
2007+
2008+ rel = heap_openr (relname ,NoLock );
2009+
2010+ if (rel -> rd_rel -> relkind != RELKIND_RELATION )
2011+ elog (ERROR ,"LOCK TABLE: %s is not a table" ,
2012+ relname );
2013+
2014+ if (lockstmt -> mode == AccessShareLock )
2015+ aclresult = pg_aclcheck (relname ,GetUserId (),
2016+ ACL_SELECT );
2017+ else
2018+ aclresult = pg_aclcheck (relname ,GetUserId (),
2019+ ACL_UPDATE |ACL_DELETE );
20132020
2014- LockRelation (rel ,lockstmt -> mode );
2021+ if (aclresult != ACLCHECK_OK )
2022+ elog (ERROR ,"LOCK TABLE: permission denied" );
20152023
2016- heap_close (rel ,NoLock );/* close rel, keep lock */
2024+ LockRelation (rel ,lockstmt -> mode );
2025+
2026+ heap_close (rel ,NoLock );/* close rel, keep lock */
2027+ }
20172028}
20182029
20192030