diff --git a/expected/pg_hint_plan.out b/expected/pg_hint_plan.out index 8ef19f85..37b80a9c 100644 --- a/expected/pg_hint_plan.out +++ b/expected/pg_hint_plan.out @@ -9131,6 +9131,22 @@ set max_parallel_workers_per_gather to DEFAULT; -> Seq Scan on t3 (cost=xxx..xxx rows=100 width=xxx) \! rm results/pg_hint_plan.tmpout +-- query with join RTE +/*+Leading(ft_1 ft_2 t1)*/ +SELECT relname, seq_scan > 0 as seq_scan, idx_scan > 0 as idx_scan +FROM pg_stat_user_tables WHERE schemaname = 'public' AND relname = 't1'; +LOG: pg_hint_plan: +used hint: +not used hint: +Leading(ft_1 ft_2 t1) +duplication hint: +error hint: + + relname | seq_scan | idx_scan +---------+----------+---------- + t1 | f | f +(1 row) + -- hint error level set client_min_messages to 'DEBUG1'; /*+ SeqScan( */ SELECT 1; diff --git a/pg_hint_plan.c b/pg_hint_plan.c index 2d4421fa..adbc67aa 100644 --- a/pg_hint_plan.c +++ b/pg_hint_plan.c @@ -4530,6 +4530,7 @@ make_join_rel_wrapper(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2) int save_nestlevel; joinrelids = bms_union(rel1->relids, rel2->relids); + joinrelids = bms_intersect(joinrelids, root->all_baserels); join_hint = find_join_hint(joinrelids); memoize_hint = find_memoize_hint(joinrelids); bms_free(joinrelids); @@ -4597,6 +4598,7 @@ add_paths_to_joinrel_wrapper(PlannerInfo *root, int save_nestlevel; joinrelids = bms_union(outerrel->relids, innerrel->relids); + joinrelids = bms_intersect(joinrelids, root->all_baserels); join_hint = find_join_hint(joinrelids); memoize_hint = find_memoize_hint(joinrelids); bms_free(joinrelids); diff --git a/sql/pg_hint_plan.sql b/sql/pg_hint_plan.sql index 5e12ecce..507c21cd 100644 --- a/sql/pg_hint_plan.sql +++ b/sql/pg_hint_plan.sql @@ -1159,6 +1159,11 @@ set max_parallel_workers_per_gather to DEFAULT; \! sql/maskout.sh results/pg_hint_plan.tmpout \! rm results/pg_hint_plan.tmpout +-- query with join RTE +/*+Leading(ft_1 ft_2 t1)*/ +SELECT relname, seq_scan > 0 as seq_scan, idx_scan > 0 as idx_scan +FROM pg_stat_user_tables WHERE schemaname = 'public' AND relname = 't1'; + -- hint error level set client_min_messages to 'DEBUG1'; /*+ SeqScan( */ SELECT 1;