Simplify code to switch pg_class.relrowsecurity in tablecmds.c
authorMichael Paquier <michael@paquier.xyz>
Tue, 2 Mar 2021 03:30:21 +0000 (12:30 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 2 Mar 2021 03:30:21 +0000 (12:30 +0900)
The same code pattern was repeated twice to enable or disable ROW LEVEL
SECURITY with an ALTER TABLE command.  This makes the code slightly
cleaner.

Author: Justin Pryzby
Reviewed-by: Zhihong Yu
Discussion: https://postgr.es/m/20210228211854.GC20769@telsasoft.com

src/backend/commands/tablecmds.c

index b2457a6924564f609c1f102350e452980cb3facc..559fa1d2e510eb9a9311c413c8a8fb59ccd888d3 100644 (file)
@@ -525,8 +525,7 @@ static ObjectAddress ATExecAddOf(Relation rel, const TypeName *ofTypename, LOCKM
 static void ATExecDropOf(Relation rel, LOCKMODE lockmode);
 static void ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode);
 static void ATExecGenericOptions(Relation rel, List *options);
-static void ATExecEnableRowSecurity(Relation rel);
-static void ATExecDisableRowSecurity(Relation rel);
+static void ATExecSetRowSecurity(Relation rel, bool rls);
 static void ATExecForceNoForceRowSecurity(Relation rel, bool force_rls);
 
 static void index_copy_data(Relation rel, RelFileNode newrnode);
@@ -4823,10 +4822,10 @@ ATExecCmd(List **wqueue, AlteredTableInfo *tab, Relation rel,
            ATExecReplicaIdentity(rel, (ReplicaIdentityStmt *) cmd->def, lockmode);
            break;
        case AT_EnableRowSecurity:
-           ATExecEnableRowSecurity(rel);
+           ATExecSetRowSecurity(rel, true);
            break;
        case AT_DisableRowSecurity:
-           ATExecDisableRowSecurity(rel);
+           ATExecSetRowSecurity(rel, false);
            break;
        case AT_ForceRowSecurity:
            ATExecForceNoForceRowSecurity(rel, true);
@@ -14813,30 +14812,7 @@ ATExecReplicaIdentity(Relation rel, ReplicaIdentityStmt *stmt, LOCKMODE lockmode
  * ALTER TABLE ENABLE/DISABLE ROW LEVEL SECURITY
  */
 static void
-ATExecEnableRowSecurity(Relation rel)
-{
-   Relation    pg_class;
-   Oid         relid;
-   HeapTuple   tuple;
-
-   relid = RelationGetRelid(rel);
-
-   pg_class = table_open(RelationRelationId, RowExclusiveLock);
-
-   tuple = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(relid));
-
-   if (!HeapTupleIsValid(tuple))
-       elog(ERROR, "cache lookup failed for relation %u", relid);
-
-   ((Form_pg_class) GETSTRUCT(tuple))->relrowsecurity = true;
-   CatalogTupleUpdate(pg_class, &tuple->t_self, tuple);
-
-   table_close(pg_class, RowExclusiveLock);
-   heap_freetuple(tuple);
-}
-
-static void
-ATExecDisableRowSecurity(Relation rel)
+ATExecSetRowSecurity(Relation rel, bool rls)
 {
    Relation    pg_class;
    Oid         relid;
@@ -14852,7 +14828,7 @@ ATExecDisableRowSecurity(Relation rel)
    if (!HeapTupleIsValid(tuple))
        elog(ERROR, "cache lookup failed for relation %u", relid);
 
-   ((Form_pg_class) GETSTRUCT(tuple))->relrowsecurity = false;
+   ((Form_pg_class) GETSTRUCT(tuple))->relrowsecurity = rls;
    CatalogTupleUpdate(pg_class, &tuple->t_self, tuple);
 
    table_close(pg_class, RowExclusiveLock);