]> granicus.if.org Git - postgresql/commitdiff
Use optimized bitmap set function for membership test in postgres_fdw
authorMichael Paquier <michael@paquier.xyz>
Sun, 1 Jul 2018 06:10:10 +0000 (15:10 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sun, 1 Jul 2018 06:10:10 +0000 (15:10 +0900)
Deparsing logic in postgres_fdw for locking, FROM clause (alias) and Var
(column qualification) does not need to know the exact number of members
involved, which can be calculated with bms_num_members(), but just if
there is more than one relation involved, which is what bms_membership()
does.  The latter is more performant than the former so this shaves a
couple of cycles.

Author: Daniel Gustafsson
Reviewed-by: Ashutosh Bapat, Nathan Bossart
Discussion: https://postgr.es/m/C73594E0-2B67-4E10-BB35-CDE0E41CC384@yesql.se

contrib/postgres_fdw/deparse.c

index d272719ff48540f8d4834ac6ee8f81cb7a88d25e..8068e28184c2c0cd39a4b2986481a478da67c9c7 100644 (file)
@@ -1076,7 +1076,7 @@ deparseFromExpr(List *quals, deparse_expr_cxt *context)
        /* Construct FROM clause */
        appendStringInfoString(buf, " FROM ");
        deparseFromExprForRel(buf, context->root, scanrel,
-                                                 (bms_num_members(scanrel->relids) > 1),
+                                                 (bms_membership(scanrel->relids) == BMS_MULTIPLE),
                                                  (Index) 0, NULL, context->params_list);
 
        /* Construct WHERE clause */
@@ -1262,7 +1262,7 @@ deparseLockingClause(deparse_expr_cxt *context)
                                }
 
                                /* Add the relation alias if we are here for a join relation */
-                               if (bms_num_members(rel->relids) > 1 &&
+                               if (bms_membership(rel->relids) == BMS_MULTIPLE &&
                                        rc->strength != LCS_NONE)
                                        appendStringInfo(buf, " OF %s%d", REL_ALIAS_PREFIX, relid);
                        }
@@ -2328,7 +2328,7 @@ deparseVar(Var *node, deparse_expr_cxt *context)
        int                     colno;
 
        /* Qualify columns when multiple relations are involved. */
-       bool            qualify_col = (bms_num_members(relids) > 1);
+       bool            qualify_col = (bms_membership(relids) == BMS_MULTIPLE);
 
        /*
         * If the Var belongs to the foreign relation that is deparsed as a