diff --git a/src/sql/engine/cmd/ob_outline_executor.cpp b/src/sql/engine/cmd/ob_outline_executor.cpp index 971a6e0182..6d9ece9a49 100644 --- a/src/sql/engine/cmd/ob_outline_executor.cpp +++ b/src/sql/engine/cmd/ob_outline_executor.cpp @@ -190,10 +190,6 @@ int ObOutlineExecutor::generate_logical_plan(ObExecContext &ctx, ObPhysicalPlan *phy_plan = NULL; ObOptimizer optimizer(opt_ctx); ObCacheObjGuard guard(OUTLINE_EXEC_HANDLE); - ObStmtNeedPrivs mock_stmt_need_privs; - ObStmtOraNeedPrivs mock_stmt_ora_need_privs; - mock_stmt_need_privs.need_privs_.set_allocator(&opt_ctx.get_allocator()); - mock_stmt_ora_need_privs.need_privs_.set_allocator(&opt_ctx.get_allocator()); if (OB_ISNULL(session_info) || OB_ISNULL(outline_stmt)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("invalid parameter", K(session_info), K(outline_stmt)); @@ -215,9 +211,7 @@ int ObOutlineExecutor::generate_logical_plan(ObExecContext &ctx, &opt_ctx.get_local_server_addr(), phy_plan, ctx, - outline_stmt, - mock_stmt_need_privs, - mock_stmt_ora_need_privs))) { + outline_stmt))) { LOG_WARN("fail to transform outline stmt", K(ret)); } else if (FALSE_IT(opt_ctx.set_root_stmt(outline_stmt))) { /*do nothing*/ diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 2136608627..b8fea35ef9 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -3441,9 +3441,7 @@ int ObSql::generate_plan(ParseResult &parse_result, &self_addr_, phy_plan, result.get_exec_context(), - stmt, - stmt_need_privs, - stmt_ora_need_privs))) { //rewrite stmt + stmt))) { //rewrite stmt LOG_WARN("Failed to transform stmt", K(ret)); } else if (OB_FAIL(generate_stmt_with_reconstruct_sql(stmt, pc_ctx, @@ -3568,10 +3566,6 @@ int ObSql::generate_stmt_with_reconstruct_sql(ObDMLStmt* &stmt, session->get_charsets4parser(), pc_ctx->def_name_ctx_); stmt->get_query_ctx()->global_dependency_tables_.reuse(); - ObStmtNeedPrivs mock_stmt_need_privs; - ObStmtOraNeedPrivs mock_stmt_ora_need_privs; - mock_stmt_need_privs.need_privs_.set_allocator(&pc_ctx->allocator_); - mock_stmt_ora_need_privs.need_privs_.set_allocator(&pc_ctx->allocator_); if (OB_FAIL(parser.parse(sql, parse_result))) { LOG_WARN("failed to parser sql", K(ret)); } else if (OB_FAIL(generate_stmt(parse_result, @@ -3592,8 +3586,6 @@ int ObSql::generate_stmt_with_reconstruct_sql(ObDMLStmt* &stmt, phy_plan, result.get_exec_context(), stmt, - mock_stmt_need_privs, - mock_stmt_ora_need_privs, true))) { //rewrite stmt LOG_WARN("Failed to transform stmt", K(ret)); } @@ -3722,8 +3714,6 @@ int ObSql::transform_stmt(ObSqlSchemaGuard *sql_schema_guard, ObPhysicalPlan *phy_plan, ObExecContext &exec_ctx, ObDMLStmt *&stmt, - ObStmtNeedPrivs &stmt_need_privs, - ObStmtOraNeedPrivs &stmt_ora_need_privs, bool ignore_trace_event) { int ret = OB_SUCCESS; @@ -3764,8 +3754,6 @@ int ObSql::transform_stmt(ObSqlSchemaGuard *sql_schema_guard, trans_ctx.opt_stat_mgr_ = opt_stat_mgr; trans_ctx.sql_schema_guard_ = sql_schema_guard; trans_ctx.self_addr_ = self_addr; - trans_ctx.stmt_need_privs_ = &stmt_need_privs; - trans_ctx.stmt_ora_need_privs_ = &stmt_ora_need_privs; // trans_ctx.merged_version_ = merged_version; trans_ctx.phy_plan_ = phy_plan; diff --git a/src/sql/ob_sql.h b/src/sql/ob_sql.h index f70f2ffbf2..ed7b1e7b00 100644 --- a/src/sql/ob_sql.h +++ b/src/sql/ob_sql.h @@ -178,8 +178,6 @@ public: ObPhysicalPlan *phy_plan, ObExecContext &exec_ctx, ObDMLStmt *&stmt, - ObStmtNeedPrivs &stmt_need_privs, - ObStmtOraNeedPrivs &stmt_ora_need_privs, bool ignore_trace_event=false); //optimize stmt, generate logical_plan diff --git a/src/sql/resolver/ddl/ob_create_view_resolver.cpp b/src/sql/resolver/ddl/ob_create_view_resolver.cpp index 8b6ac16b23..4c1988df2c 100644 --- a/src/sql/resolver/ddl/ob_create_view_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_view_resolver.cpp @@ -1852,8 +1852,6 @@ int ObCreateViewResolver::load_mview_dep_session_vars(ObSQLSessionInfo &session_ LOG_WARN("fail to reserve max local vars capacity", K(ret)); } else if (OB_FAIL(get_dep_session_vars_from_stmt(session_info, stmt, dep_vars))) { LOG_WARN("fail to get dep session vars from stmt", K(ret)); - } else if (OB_FAIL(dep_vars.remove_local_var(SYS_VAR_SQL_MODE))) { - LOG_WARN("fail to remove sql_mode from vars", K(ret)); } else { LOG_TRACE("finish load mview dep session vars", K(session_info.get_sql_mode()), K(dep_vars)); } diff --git a/src/sql/rewrite/ob_transform_mv_rewrite.cpp b/src/sql/rewrite/ob_transform_mv_rewrite.cpp index 65f3c7e6c3..3e87cfde88 100644 --- a/src/sql/rewrite/ob_transform_mv_rewrite.cpp +++ b/src/sql/rewrite/ob_transform_mv_rewrite.cpp @@ -11,7 +11,6 @@ */ #define USING_LOG_PREFIX SQL_REWRITE -#include #include "sql/rewrite/ob_transform_mv_rewrite.h" #include "sql/rewrite/ob_transform_pre_process.h" #include "sql/rewrite/ob_transform_mv_rewrite_prepare.h" @@ -19,7 +18,6 @@ #include "sql/rewrite/ob_expand_aggregate_utils.h" #include "sql/resolver/dml/ob_select_resolver.h" #include "sql/resolver/expr/ob_raw_expr_wrap_enum_set.h" -#include "sql/privilege_check/ob_privilege_check.h" #include "lib/mysqlclient/ob_mysql_result.h" #include "share/schema/ob_table_schema.h" @@ -57,20 +55,11 @@ int ObTransformMVRewrite::transform_one_stmt(common::ObIArray & LOG_WARN("failed to check mv match hint", K(ret)); } else if (!is_match_hint) { // do nothing - } else if (NULL == mv_info.view_stmt_) { - if (++ctx_->mv_stmt_gen_count_ > MAX_MV_STMT_GEN) { - OPT_TRACE("reach the mv stmt generate count limit!"); - } else if (OB_FAIL(ObTransformMVRewritePrepare::generate_mv_stmt(mv_info, ctx_, &mv_temp_query_ctx_))) { - LOG_WARN("failed to generate mv stmt", K(ret), K(mv_info)); - } else if (OB_FAIL(mv_privilege_check(mv_info, mv_info.has_select_priv_))) { - LOG_WARN("failed to check mv privilege", K(ret)); - } else if (!mv_info.has_select_priv_) { - OPT_TRACE("SELECT command is denied to current user for", mv_info.mv_schema_->get_table_name()); - } - } - - if (OB_FAIL(ret) || !mv_info.has_select_priv_) { - // do nothing + } else if (NULL == mv_info.view_stmt_ && ++ctx_->mv_stmt_gen_count_ > MAX_MV_STMT_GEN) { + OPT_TRACE("reach the mv stmt generate count limit!"); + } else if (NULL == mv_info.view_stmt_ + && OB_FAIL(ObTransformMVRewritePrepare::generate_mv_stmt(mv_info, ctx_, &mv_temp_query_ctx_))) { + LOG_WARN("failed to generate mv stmt", K(ret), K(mv_info)); } else if (OB_FAIL(try_transform_with_one_mv(ori_stmt, mv_info, new_stmt, is_happened))) { LOG_WARN("failed to try one mv", K(ret)); } else if (is_happened) { @@ -456,8 +445,6 @@ int ObTransformMVRewrite::try_transform_with_one_mv(ObSelectStmt *origin_stmt, LOG_WARN("failed to try transform contain mode", K(ret)); } else if (!transform_happened) { // do nothing - } else if (OB_FAIL(push_back_stmt_privilege(mv_info))) { - LOG_WARN("failed to push back stmt privilege", K(ret)); } else if (OB_FAIL(add_transform_hint(*new_stmt, &mv_info))) { LOG_WARN("failed to add transform hint", K(ret)); } else { @@ -3121,61 +3108,6 @@ int ObTransformMVRewrite::add_param_constraint(MvRewriteHelper &helper) return ret; } -int ObTransformMVRewrite::mv_privilege_check(MvInfo &mv_info, - bool &is_valid) -{ - int ret = OB_SUCCESS; - is_valid = false; - if (OB_ISNULL(ctx_) || OB_ISNULL(ctx_->allocator_) || OB_ISNULL(ctx_->exec_ctx_) - || OB_ISNULL(ctx_->exec_ctx_->get_sql_ctx()) || OB_ISNULL(mv_info.select_mv_stmt_)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("get unexpected null", K(ret), K(ctx_), K(mv_info.select_mv_stmt_)); - } else { - int tmp_ret; - mv_info.mv_need_privs_.need_privs_.set_allocator(ctx_->allocator_); - mv_info.mv_ora_need_privs_.need_privs_.set_allocator(ctx_->allocator_); - tmp_ret = ObPrivilegeCheck::check_privilege_new(*ctx_->exec_ctx_->get_sql_ctx(), - mv_info.select_mv_stmt_, - mv_info.mv_need_privs_, - mv_info.mv_ora_need_privs_); - if (OB_SUCCESS == tmp_ret) { - is_valid = true; - } else if (OB_UNLIKELY(OB_ERR_NO_TABLE_PRIVILEGE != tmp_ret - && OB_TABLE_NOT_EXIST != tmp_ret)) { - ret = tmp_ret; - LOG_WARN("failed to check mv privilege", K(ret)); - } - } - - return ret; -} - -int ObTransformMVRewrite::push_back_stmt_privilege(MvInfo &mv_info) { - int ret = OB_SUCCESS; - ObSEArray tmp_need_privs; - ObSEArray tmp_ora_need_privs; - if (OB_ISNULL(ctx_) || OB_ISNULL(ctx_->stmt_need_privs_) - || OB_ISNULL(ctx_->stmt_ora_need_privs_)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("get unexpected null", K(ret), K(ctx_)); - } else if (OB_FAIL(append(tmp_need_privs, ctx_->stmt_need_privs_->need_privs_))) { - LOG_WARN("failed to append stmt need privs", K(ret)); - } else if (OB_FAIL(append(tmp_need_privs, mv_info.mv_need_privs_.need_privs_))) { - LOG_WARN("failed to append mv need privs", K(ret)); - } else if (OB_FAIL(append(tmp_ora_need_privs, ctx_->stmt_ora_need_privs_->need_privs_))) { - LOG_WARN("failed to append stmt ora need privs", K(ret)); - } else if (OB_FAIL(append(tmp_ora_need_privs, mv_info.mv_ora_need_privs_.need_privs_))) { - LOG_WARN("failed to append mv ora need privs", K(ret)); - } else if (OB_FALSE_IT(ctx_->stmt_need_privs_->need_privs_.reset())) { - } else if (OB_FAIL(ctx_->stmt_need_privs_->need_privs_.assign(tmp_need_privs))) { - LOG_WARN("failed to assign stmt need privs", K(ret)); - } else if (OB_FALSE_IT(ctx_->stmt_ora_need_privs_->need_privs_.reset())) { - } else if (OB_FAIL(ctx_->stmt_ora_need_privs_->need_privs_.assign(tmp_ora_need_privs))) { - LOG_WARN("failed to assign stmt ora need privs", K(ret)); - } - return ret; -} - bool ObTransformMVRewrite::MvRewriteCheckCtx::compare_column(const ObColumnRefRawExpr &inner, const ObColumnRefRawExpr &outer) { diff --git a/src/sql/rewrite/ob_transform_mv_rewrite.h b/src/sql/rewrite/ob_transform_mv_rewrite.h index 91d06b3874..9723c955d9 100644 --- a/src/sql/rewrite/ob_transform_mv_rewrite.h +++ b/src/sql/rewrite/ob_transform_mv_rewrite.h @@ -368,9 +368,6 @@ private: int check_condition_match_index(MvRewriteHelper &helper, bool &is_match_index); int add_param_constraint(MvRewriteHelper &helper); - int mv_privilege_check(MvInfo &mv_info, - bool &is_valid); - int push_back_stmt_privilege(MvInfo &mv_info); static int find_query_rel_id(MvRewriteHelper &helper, int64_t mv_relid); static int classify_predicates(const ObIArray &input_conds, diff --git a/src/sql/rewrite/ob_transform_rule.cpp b/src/sql/rewrite/ob_transform_rule.cpp index 25fcf53e02..48bb0e3b79 100644 --- a/src/sql/rewrite/ob_transform_rule.cpp +++ b/src/sql/rewrite/ob_transform_rule.cpp @@ -49,9 +49,7 @@ bool ObTransformerCtx::is_valid() NULL != stmt_factory_ && NULL != sql_schema_guard_ && NULL != sql_schema_guard_->get_schema_guard() && - NULL != self_addr_ && - NULL != stmt_need_privs_ && - NULL != stmt_ora_need_privs_; + NULL != self_addr_; } void ObTransformerCtx::reset() diff --git a/src/sql/rewrite/ob_transform_rule.h b/src/sql/rewrite/ob_transform_rule.h index 6e9c1ab790..b250ff3757 100644 --- a/src/sql/rewrite/ob_transform_rule.h +++ b/src/sql/rewrite/ob_transform_rule.h @@ -64,8 +64,7 @@ struct MvInfo { db_schema_(db_schema), view_stmt_(view_stmt), select_mv_stmt_(select_mv_stmt), - mv_intersect_tbl_num_(mv_intersect_tbl_num), - has_select_priv_(false) {} + mv_intersect_tbl_num_(mv_intersect_tbl_num) {} TO_STRING_KV( K_(mv_id), @@ -75,8 +74,7 @@ struct MvInfo { K_(db_schema), K_(view_stmt), K_(select_mv_stmt), - K_(mv_intersect_tbl_num), - K_(has_select_priv) + K_(mv_intersect_tbl_num) ); bool operator<(const MvInfo &other) { @@ -91,9 +89,6 @@ struct MvInfo { ObSelectStmt *view_stmt_; // stmt of mv's definition ObSelectStmt *select_mv_stmt_; // stmt of "SELECT * FROM mv;" uint64_t mv_intersect_tbl_num_; // number of tables that appear in both mv and origin query, used for sort mv info - ObStmtNeedPrivs mv_need_privs_; // privilege needed of mv - ObStmtOraNeedPrivs mv_ora_need_privs_; // ora privilege needed of mv - bool has_select_priv_; }; struct ObTransformerCtx @@ -132,9 +127,7 @@ struct ObTransformerCtx push_down_filters_(), in_accept_transform_(false), iteration_level_(0), - mv_stmt_gen_count_(0), - stmt_need_privs_(NULL), - stmt_ora_need_privs_(NULL) + mv_stmt_gen_count_(0) { } virtual ~ObTransformerCtx() {} @@ -205,8 +198,6 @@ struct ObTransformerCtx uint64_t iteration_level_; ObSEArray mv_infos_; // used to perform mv rewrite int64_t mv_stmt_gen_count_; - ObStmtNeedPrivs *stmt_need_privs_; - ObStmtOraNeedPrivs *stmt_ora_need_privs_; }; enum TransMethod diff --git a/src/sql/session/ob_local_session_var.cpp b/src/sql/session/ob_local_session_var.cpp index 8b0378bced..8cb5f6d7a4 100644 --- a/src/sql/session/ob_local_session_var.cpp +++ b/src/sql/session/ob_local_session_var.cpp @@ -168,7 +168,12 @@ int ObLocalSessionVar::get_different_vars_from_session(const sql::ObBasicSession bool is_same = false; ObObj session_val; for (int64_t i = 0; OB_SUCC(ret) && i < local_session_vars_.count(); ++i) { - if (OB_FAIL(check_var_same_with_session(*session, local_session_vars_.at(i), is_same, &session_val))) { + if (OB_ISNULL(local_session_vars_.at(i))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected null", K(ret), K(i)); + } else if (SYS_VAR_SQL_MODE == local_session_vars_.at(i)->type_) { + /* just ignore sql mode now */ + } else if (OB_FAIL(check_var_same_with_session(*session, local_session_vars_.at(i), is_same, &session_val))) { LOG_WARN("fail to check var same with session", K(ret)); } else if (is_same) { /* do nothing */