diff options
author | Michael Paquier <michael@paquier.xyz> | 2018-07-01 15:10:10 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2018-07-01 15:10:10 +0900 |
commit | 65782346a4812482bfb09f9e1117c908146e67b5 (patch) | |
tree | 633e40cbd1669b1b6458a07cb9209aa7fb1bd591 /contrib/postgres_fdw | |
parent | feced1387f07c3fa6c47d36a68962750e6065486 (diff) | |
download | postgresql-65782346a4812482bfb09f9e1117c908146e67b5.tar.gz postgresql-65782346a4812482bfb09f9e1117c908146e67b5.zip |
Use optimized bitmap set function for membership test in postgres_fdw
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
Diffstat (limited to 'contrib/postgres_fdw')
-rw-r--r-- | contrib/postgres_fdw/deparse.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index d272719ff48..8068e28184c 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -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 |