firtst release
Revision | b9e4cfb9ce8b605d46c00b2344040d65e4075e78 (tree) |
---|---|
Time | 2013-09-12 09:30:56 |
Author | Takashi Suzuki <suzuki.takashi@metr...> |
Commiter | Takashi Suzuki |
いくつかのPL/pgSQL文でもクエリ文字列を取得するようにした。
指定ヒント適用の必要性の高いPL/pgSQL文にヒントを適用させるため。
@@ -3587,16 +3587,45 @@ set_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, | ||
3587 | 3587 | static void |
3588 | 3588 | pg_hint_plan_plpgsql_stmt_beg(PLpgSQL_execstate *estate, PLpgSQL_stmt *stmt) |
3589 | 3589 | { |
3590 | - PLpgSQL_expr *expr; | |
3590 | + PLpgSQL_expr *expr = NULL; | |
3591 | + | |
3591 | 3592 | switch ((enum PLpgSQL_stmt_types) stmt->cmd_type) |
3592 | 3593 | { |
3594 | + case PLPGSQL_STMT_FORS: | |
3595 | + expr = ((PLpgSQL_stmt_fors *) stmt)->query; | |
3596 | + break; | |
3597 | + case PLPGSQL_STMT_FORC: | |
3598 | + expr = ((PLpgSQL_stmt_forc *) stmt)->argquery; | |
3599 | + break; | |
3600 | + case PLPGSQL_STMT_RETURN_QUERY: | |
3601 | + if (((PLpgSQL_stmt_return_query *) stmt)->query != NULL) | |
3602 | + expr = ((PLpgSQL_stmt_return_query *) stmt)->query; | |
3603 | + else | |
3604 | + expr = ((PLpgSQL_stmt_return_query *) stmt)->dynquery; | |
3605 | + break; | |
3593 | 3606 | case PLPGSQL_STMT_EXECSQL: |
3594 | 3607 | expr = ((PLpgSQL_stmt_execsql *) stmt)->sqlstmt; |
3595 | - plpgsql_query_string = expr->query; | |
3608 | + break; | |
3609 | + case PLPGSQL_STMT_DYNEXECUTE: | |
3610 | + expr = ((PLpgSQL_stmt_dynexecute *) stmt)->query; | |
3611 | + break; | |
3612 | + case PLPGSQL_STMT_DYNFORS: | |
3613 | + expr = ((PLpgSQL_stmt_dynfors *) stmt)->query; | |
3614 | + break; | |
3615 | + case PLPGSQL_STMT_OPEN: | |
3616 | + if (((PLpgSQL_stmt_open *) stmt)->query != NULL) | |
3617 | + expr = ((PLpgSQL_stmt_open *) stmt)->query; | |
3618 | + else if (((PLpgSQL_stmt_open *) stmt)->dynquery != NULL) | |
3619 | + expr = ((PLpgSQL_stmt_open *) stmt)->dynquery; | |
3620 | + else | |
3621 | + expr = ((PLpgSQL_var *) (estate->datums[((PLpgSQL_stmt_open *)stmt)->curvar]))->cursor_explicit_expr; | |
3596 | 3622 | break; |
3597 | 3623 | default: |
3598 | 3624 | break; |
3599 | 3625 | } |
3626 | + | |
3627 | + if (expr) | |
3628 | + plpgsql_query_string = expr->query; | |
3600 | 3629 | } |
3601 | 3630 | |
3602 | 3631 | /* |