firtst release
Revision | 59a773301ea6f56ba52873f000fb53448982312f (tree) |
---|---|
Time | 2014-01-17 16:56:40 |
Author | Takashi Suzuki <suzuki.takashi@metr...> |
Commiter | Takashi Suzuki |
bug fix #2
件数補正のときに、全ての結合パスにおいて部分集合となってしまい、他
のRowsヒント句適用後に見積もり件数を再計算してしまった。。
理由
@@ -117,6 +117,13 @@ make_join_rel(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2) | ||
117 | 117 | { |
118 | 118 | rows_hint = current_hint->rows_hints[i]; |
119 | 119 | |
120 | + /* | |
121 | + * This Rows hint specifies aliasname is error, or does not exist in | |
122 | + * query. | |
123 | + */ | |
124 | + if (!rows_hint->joinrelids || | |
125 | + rows_hint->base.state == HINT_STATE_ERROR) | |
126 | + continue; | |
120 | 127 | if (bms_equal(joinrelids, rows_hint->joinrelids)) |
121 | 128 | { |
122 | 129 | /* |
@@ -3198,9 +3198,15 @@ create_bms_of_relids(Hint *base, PlannerInfo *root, List *initial_rels, | ||
3198 | 3198 | if (relid == -1) |
3199 | 3199 | base->state = HINT_STATE_ERROR; |
3200 | 3200 | |
3201 | + /* | |
3202 | + * the aliasname is not found(relid == 0) or same aliasname was used | |
3203 | + * multiple times in a query(relid == -1) | |
3204 | + */ | |
3201 | 3205 | if (relid <= 0) |
3206 | + { | |
3207 | + relids = NULL; | |
3202 | 3208 | break; |
3203 | - | |
3209 | + } | |
3204 | 3210 | if (bms_is_member(relid, relids)) |
3205 | 3211 | { |
3206 | 3212 | hint_ereport(base->hint_str, |
@@ -3267,9 +3273,6 @@ transform_join_hints(HintState *hstate, PlannerInfo *root, int nbaserel, | ||
3267 | 3273 | |
3268 | 3274 | hint->joinrelids = create_bms_of_relids(&(hint->base), root, |
3269 | 3275 | initial_rels, hint->nrels, hint->relnames); |
3270 | - | |
3271 | - if (hint->joinrelids == NULL || hint->base.state == HINT_STATE_ERROR) | |
3272 | - continue; | |
3273 | 3276 | } |
3274 | 3277 | |
3275 | 3278 | /* Do nothing if no Leading hint was supplied. */ |