add refreshing mview flag to session info
This commit is contained in:
		@ -51,6 +51,8 @@ public:
 | 
				
			|||||||
  bool is_ddl_check_default_value() const { return is_ddl_check_default_value_bit_; }
 | 
					  bool is_ddl_check_default_value() const { return is_ddl_check_default_value_bit_; }
 | 
				
			||||||
  void set_mview_complete_refresh(const bool flag) { is_mview_complete_refresh_ = flag; }
 | 
					  void set_mview_complete_refresh(const bool flag) { is_mview_complete_refresh_ = flag; }
 | 
				
			||||||
  bool is_mview_complete_refresh() const { return is_mview_complete_refresh_; }
 | 
					  bool is_mview_complete_refresh() const { return is_mview_complete_refresh_; }
 | 
				
			||||||
 | 
					  void set_refreshing_mview(const bool flag) { is_refreshing_mview_ = flag; }
 | 
				
			||||||
 | 
					  bool is_refreshing_mview() const { return is_refreshing_mview_; }
 | 
				
			||||||
  TO_STRING_KV(K_(ddl_info));
 | 
					  TO_STRING_KV(K_(ddl_info));
 | 
				
			||||||
  OB_UNIS_VERSION(1);
 | 
					  OB_UNIS_VERSION(1);
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@ -59,7 +61,8 @@ public:
 | 
				
			|||||||
  static const int64_t IS_HEAP_TABLE_DDL_BIT = 1;
 | 
					  static const int64_t IS_HEAP_TABLE_DDL_BIT = 1;
 | 
				
			||||||
  static const int64_t IS_DDL_CHECK_DEFAULT_VALUE_BIT = 1;
 | 
					  static const int64_t IS_DDL_CHECK_DEFAULT_VALUE_BIT = 1;
 | 
				
			||||||
  static const int64_t IS_MVIEW_COMPLETE_REFRESH_BIT = 1;
 | 
					  static const int64_t IS_MVIEW_COMPLETE_REFRESH_BIT = 1;
 | 
				
			||||||
  static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT - IS_MVIEW_COMPLETE_REFRESH_BIT;
 | 
					  static const int64_t IS_REFRESHING_MVIEW_BIT = 1;
 | 
				
			||||||
 | 
					  static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT - IS_MVIEW_COMPLETE_REFRESH_BIT - IS_REFRESHING_MVIEW_BIT;
 | 
				
			||||||
  union {
 | 
					  union {
 | 
				
			||||||
    uint64_t ddl_info_;
 | 
					    uint64_t ddl_info_;
 | 
				
			||||||
    struct {
 | 
					    struct {
 | 
				
			||||||
@ -69,6 +72,7 @@ public:
 | 
				
			|||||||
      uint64_t is_heap_table_ddl_: IS_HEAP_TABLE_DDL_BIT;
 | 
					      uint64_t is_heap_table_ddl_: IS_HEAP_TABLE_DDL_BIT;
 | 
				
			||||||
      uint64_t is_ddl_check_default_value_bit_ : IS_DDL_CHECK_DEFAULT_VALUE_BIT;
 | 
					      uint64_t is_ddl_check_default_value_bit_ : IS_DDL_CHECK_DEFAULT_VALUE_BIT;
 | 
				
			||||||
      uint64_t is_mview_complete_refresh_: IS_MVIEW_COMPLETE_REFRESH_BIT;
 | 
					      uint64_t is_mview_complete_refresh_: IS_MVIEW_COMPLETE_REFRESH_BIT;
 | 
				
			||||||
 | 
					      uint64_t is_refreshing_mview_: IS_REFRESHING_MVIEW_BIT;
 | 
				
			||||||
      uint64_t reserved_bit : RESERVED_BIT;
 | 
					      uint64_t reserved_bit : RESERVED_BIT;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
				
			|||||||
@ -281,7 +281,7 @@ int ObOptimizer::get_session_parallel_info(int64_t &force_parallel_dop,
 | 
				
			|||||||
  if (OB_ISNULL(session_info = ctx_.get_session_info())) {
 | 
					  if (OB_ISNULL(session_info = ctx_.get_session_info())) {
 | 
				
			||||||
    ret = OB_ERR_UNEXPECTED;
 | 
					    ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
    LOG_WARN("get unexpected null", K(session_info), K(ret));
 | 
					    LOG_WARN("get unexpected null", K(session_info), K(ret));
 | 
				
			||||||
  } else if (!session_info->is_user_session()) {
 | 
					  } else if (!session_info->is_user_session() && !session_info->get_ddl_info().is_refreshing_mview()) {
 | 
				
			||||||
    // sys var是依赖于schema的方式实现的,获得最新的sys var需要通过inner SQL的方式,会产生循环依赖
 | 
					    // sys var是依赖于schema的方式实现的,获得最新的sys var需要通过inner SQL的方式,会产生循环依赖
 | 
				
			||||||
    // 因此inner SQL情况下不考虑系统变量`SYS_VAR__ENABLE_PARALLEL_QUERY`的值
 | 
					    // 因此inner SQL情况下不考虑系统变量`SYS_VAR__ENABLE_PARALLEL_QUERY`的值
 | 
				
			||||||
  } else if (OB_FAIL(session_info->get_parallel_degree_policy_enable_auto_dop(enable_auto_dop))) {
 | 
					  } else if (OB_FAIL(session_info->get_parallel_degree_policy_enable_auto_dop(enable_auto_dop))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -63,6 +63,7 @@ int ObMViewTransaction::ObSessionParamSaved::save(ObSQLSessionInfo *session_info
 | 
				
			|||||||
      autocommit_ = autocommit;
 | 
					      autocommit_ = autocommit;
 | 
				
			||||||
      session_info->set_inner_session();
 | 
					      session_info->set_inner_session();
 | 
				
			||||||
      session_info->set_autocommit(false);
 | 
					      session_info->set_autocommit(false);
 | 
				
			||||||
 | 
					      session_info_->get_ddl_info().set_refreshing_mview(true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
@ -78,6 +79,7 @@ int ObMViewTransaction::ObSessionParamSaved::restore()
 | 
				
			|||||||
      session_info_->set_user_session();
 | 
					      session_info_->set_user_session();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    session_info_->set_autocommit(autocommit_);
 | 
					    session_info_->set_autocommit(autocommit_);
 | 
				
			||||||
 | 
					    session_info_->get_ddl_info().set_refreshing_mview(false);
 | 
				
			||||||
    session_info_ = nullptr;
 | 
					    session_info_ = nullptr;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user