From fd6b7ed1c501a1e871bd8b1e4d668458740ed2b1 Mon Sep 17 00:00:00 2001 From: chimyue Date: Wed, 17 Jan 2024 11:12:35 +0000 Subject: [PATCH] [CP] use optimizer_features_enable system variable and optimizer_features_enable hint to control optimizer behaviors --- .../ob_system_variable_init.cpp | 2 +- .../ob_system_variable_init.json | 2 +- src/sql/monitor/ob_sql_plan.cpp | 18 +++-- src/sql/ob_sql_context.h | 5 +- src/sql/resolver/dml/ob_dml_resolver.cpp | 5 +- src/sql/resolver/dml/ob_hint.cpp | 13 ++-- src/sql/resolver/dml/ob_hint.h | 14 +++- src/sql/resolver/dml/ob_sql_hint.cpp | 11 ++- src/sql/session/ob_basic_session_info.cpp | 22 +++++- src/sql/session/ob_basic_session_info.h | 1 + .../deploy/mysql_test/r/mysql/explain.result | 2 +- tools/deploy/mysql_test/r/mysql/view_2.result | 2 +- .../r/mysql/geometry_filter_mysql.result | 76 +++++++++---------- .../r/mysql/geometry_index2_mysql.result | 12 +-- .../mysql/spatial_relation_join_mysql.result | 6 +- .../r/mysql/skyline_basic_mysql.result | 48 ++++++------ .../r/mysql/subplan_filter.result | 22 +++--- 17 files changed, 153 insertions(+), 108 deletions(-) diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index d82e3db0b8..7f8f759ab9 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3280,7 +3280,7 @@ static struct VarsInit{ }(); [&] (){ - ObSysVars[232].default_value_ = "" ; + ObSysVars[232].default_value_ = "4.3.0.0" ; ObSysVars[232].info_ = "enabling a series of optimizer features based on an OceanBase release number" ; ObSysVars[232].name_ = "optimizer_features_enable" ; ObSysVars[232].data_type_ = ObVarcharType ; diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index 5d049830d1..8299e74199 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -3313,7 +3313,7 @@ "optimizer_features_enable": { "id": 10150, "name": "optimizer_features_enable", - "default_value": "", + "default_value": "4.3.0.0", "base_value": "", "data_type": "varchar", "info": "enabling a series of optimizer features based on an OceanBase release number", diff --git a/src/sql/monitor/ob_sql_plan.cpp b/src/sql/monitor/ob_sql_plan.cpp index 9d93e3b563..3f12709da8 100644 --- a/src/sql/monitor/ob_sql_plan.cpp +++ b/src/sql/monitor/ob_sql_plan.cpp @@ -278,15 +278,17 @@ int ObSqlPlan::construct_outline_global_hint(ObLogPlan &plan, ObGlobalHint &outl { int ret = OB_SUCCESS; ObDelUpdLogPlan *del_upd_plan = NULL; - outline_global_hint.opt_features_version_ = ObGlobalHint::CURRENT_OUTLINE_ENABLE_VERSION; outline_global_hint.pdml_option_ = ObPDMLOption::NOT_SPECIFIED; - if (OB_SUCC(ret) && NULL != (del_upd_plan = dynamic_cast(&plan)) - && del_upd_plan->use_pdml()) { - outline_global_hint.pdml_option_ = ObPDMLOption::ENABLE; - } - - if (OB_SUCC(ret)) { - outline_global_hint.parallel_ = ObGlobalHint::UNSET_PARALLEL; + outline_global_hint.parallel_ = ObGlobalHint::UNSET_PARALLEL; + const ObQueryCtx *query_ctx = NULL; + if (OB_ISNULL(query_ctx = plan.get_optimizer_context().get_query_ctx())) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected NULL", K(ret), K(query_ctx)); + } else { + outline_global_hint.opt_features_version_ = query_ctx->optimizer_features_enable_version_; + if (NULL != (del_upd_plan = dynamic_cast(&plan)) && del_upd_plan->use_pdml()) { + outline_global_hint.pdml_option_ = ObPDMLOption::ENABLE; + } if (plan.get_optimizer_context().is_use_auto_dop()) { outline_global_hint.merge_parallel_hint(ObGlobalHint::SET_ENABLE_AUTO_DOP); } else if (plan.get_optimizer_context().get_max_parallel() > ObGlobalHint::DEFAULT_PARALLEL) { diff --git a/src/sql/ob_sql_context.h b/src/sql/ob_sql_context.h index c5fc4ec94e..0980ebab4b 100644 --- a/src/sql/ob_sql_context.h +++ b/src/sql/ob_sql_context.h @@ -687,7 +687,8 @@ public: res_map_rule_param_idx_(common::OB_INVALID_INDEX), root_stmt_(NULL), udf_has_select_stmt_(false), - has_pl_udf_(false) + has_pl_udf_(false), + optimizer_features_enable_version_(0) { } TO_STRING_KV(N_PARAM_NUM, question_marks_count_, @@ -733,6 +734,7 @@ public: root_stmt_ = NULL; udf_has_select_stmt_ = false; has_pl_udf_ = false; + optimizer_features_enable_version_ = 0; } int64_t get_new_stmt_id() { return stmt_count_++; } @@ -817,6 +819,7 @@ public: ObDMLStmt *root_stmt_; bool udf_has_select_stmt_; // udf has select stmt, not contain other dml stmt bool has_pl_udf_; // used to mark sql contain pl udf + uint64_t optimizer_features_enable_version_; }; } /* ns sql*/ } /* ns oceanbase */ diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index ea83c77d95..97e0e87ba3 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -13173,7 +13173,10 @@ int ObDMLResolver::resolve_global_hint(const ParseNode &hint_node, case T_OPTIMIZER_FEATURES_ENABLE: { CHECK_HINT_PARAM(hint_node, 1) { uint64_t version = 0; - if (OB_FAIL(ObClusterVersion::get_version(child0->str_value_, version))) { + ObString ver_str(child0->str_len_, child0->str_value_); + if (ver_str.empty()) { + global_hint.merge_opt_features_version_hint(LASTED_COMPAT_VERSION); + } else if (OB_FAIL(ObClusterVersion::get_version(ver_str, version))) { ret = OB_SUCCESS; // just ignore this invalid hint LOG_WARN("failed to get version in hint"); } else { diff --git a/src/sql/resolver/dml/ob_hint.cpp b/src/sql/resolver/dml/ob_hint.cpp index 3b575a9ffa..dd71da360d 100644 --- a/src/sql/resolver/dml/ob_hint.cpp +++ b/src/sql/resolver/dml/ob_hint.cpp @@ -503,15 +503,18 @@ int ObGlobalHint::print_global_hint(PlanText &plan_text) const // OPTIMIZER_FEATURES_ENABLE if (OB_SUCC(ret) && (has_valid_opt_features_version())) { int64_t cur_pos = 0; - const uint64_t version = has_valid_opt_features_version() - ? opt_features_version_ : CURRENT_OUTLINE_ENABLE_VERSION; + // if enabled trace point outline valid check tp_no = 551 and opt_features_version_ is LASTED_COMPAT_VERSION, + // just print OPTIMIZER_FEATURES_ENABLE('') to avoid mysqltest changed repeatedly after upgrade LASTED_COMPAT_VERSION + const bool print_empty_str = (OB_SUCCESS != (OB_E(EventTable::EN_EXPLAIN_GENERATE_PLAN_WITH_OUTLINE) OB_SUCCESS) + && LASTED_COMPAT_VERSION == opt_features_version_); if (OB_FAIL(BUF_PRINTF("%s%s(\'", outline_indent, "OPTIMIZER_FEATURES_ENABLE"))) { LOG_WARN("failed to print hint", K(ret)); - } else if (OB_UNLIKELY(0 == (cur_pos = ObClusterVersion::print_version_str(buf + pos, + } else if (!print_empty_str && + OB_UNLIKELY(0 == (cur_pos = ObClusterVersion::print_version_str(buf + pos, buf_len - pos, - version)))) { + opt_features_version_)))) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to print version str", K(ret), K(version)); + LOG_WARN("failed to print version str", K(ret), K(opt_features_version_)); } else if (OB_FALSE_IT(pos += cur_pos)) { } else if (OB_FAIL(BUF_PRINTF("\')"))) { } diff --git a/src/sql/resolver/dml/ob_hint.h b/src/sql/resolver/dml/ob_hint.h index d675056759..c9d6910f4c 100644 --- a/src/sql/resolver/dml/ob_hint.h +++ b/src/sql/resolver/dml/ob_hint.h @@ -137,12 +137,20 @@ struct ObGlobalHint { void reset(); int assign(const ObGlobalHint &other); +// optimizer version define, move defines below to other file later +#define COMPAT_VERSION_4_0 (oceanbase::common::cal_version(4, 0, 0, 0)) +#define COMPAT_VERSION_4_2_1 (oceanbase::common::cal_version(4, 2, 1, 0)) +//#define COMPAT_VERSION_4_2_1_BP3 (oceanbase::common::cal_version(4, 2, 1, 3)) +#define COMPAT_VERSION_4_2_2 (oceanbase::common::cal_version(4, 2, 2, 0)) +#define COMPAT_VERSION_4_3_0 (oceanbase::common::cal_version(4, 3, 0, 0)) +#define LASTED_COMPAT_VERSION COMPAT_VERSION_4_3_0 + static bool is_valid_opt_features_version(uint64_t version) + { return COMPAT_VERSION_4_0 <= version && LASTED_COMPAT_VERSION >= version; } + static const common::ObConsistencyLevel UNSET_CONSISTENCY = common::INVALID_CONSISTENCY; static const int64_t UNSET_QUERY_TIMEOUT = -1; static const int64_t UNSET_MAX_CONCURRENT = -1; static const uint64_t UNSET_OPT_FEATURES_VERSION = 0; - static const uint64_t MIN_OUTLINE_ENABLE_VERSION = CLUSTER_VERSION_4_0_0_0; - static const uint64_t CURRENT_OUTLINE_ENABLE_VERSION = CLUSTER_VERSION_4_0_0_0; static const int64_t DEFAULT_PARALLEL = 1; static const int64_t UNSET_PARALLEL = 0; static const int64_t SET_ENABLE_AUTO_DOP = -1; @@ -184,8 +192,6 @@ struct ObGlobalHint { bool enable_manual_dop() const { return SET_ENABLE_MANUAL_DOP == parallel_; } bool is_topk_specified() const { return topk_precision_ > 0 || sharding_minimum_row_count_ > 0; } bool has_valid_opt_features_version() const { return is_valid_opt_features_version(opt_features_version_); } - static bool is_valid_opt_features_version(uint64_t version) - { return MIN_OUTLINE_ENABLE_VERSION <= version && CLUSTER_CURRENT_VERSION >= version; } bool disable_query_transform() const { return disable_transform_; } bool disable_cost_based_transform() const { return disable_cost_based_transform_; } inline bool has_dbms_stats_hint() const { return has_dbms_stats_hint_; } diff --git a/src/sql/resolver/dml/ob_sql_hint.cpp b/src/sql/resolver/dml/ob_sql_hint.cpp index 8141f64e08..d1c0922af5 100644 --- a/src/sql/resolver/dml/ob_sql_hint.cpp +++ b/src/sql/resolver/dml/ob_sql_hint.cpp @@ -228,9 +228,11 @@ int ObQueryHint::check_and_set_params_from_hint(const ObResolverParams ¶ms, int ret = OB_SUCCESS; const ObSQLSessionInfo *session_info = NULL; bool has_enable_param = false; - if (OB_ISNULL(session_info = params.session_info_)) { + ObQueryCtx *query_ctx = NULL; + if (OB_ISNULL(session_info = params.session_info_) + || OB_ISNULL(query_ctx = params.query_ctx_)) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected null", K(ret), K(session_info)); + LOG_WARN("unexpected null", K(ret), K(session_info), K(query_ctx)); } else if (T_NONE_SCOPE != params.hidden_column_scope_ && OB_FAIL(global_hint_.opt_params_.has_enable_opt_param(ObOptParamHint::OptParamType::HIDDEN_COLUMN_VISIBLE, has_enable_param))) { LOG_WARN("failed to check has enable opt param", K(ret)); @@ -247,6 +249,11 @@ int ObQueryHint::check_and_set_params_from_hint(const ObResolverParams ¶ms, if (global_hint_.query_timeout_ > 0) { THIS_WORKER.set_timeout_ts(session_info->get_query_start_time() + global_hint_.query_timeout_); } + if (global_hint_.has_valid_opt_features_version()) { + query_ctx->optimizer_features_enable_version_ = global_hint_.opt_features_version_; + } else if (OB_FAIL(session_info->get_optimizer_features_enable_version(query_ctx->optimizer_features_enable_version_))) { + LOG_WARN("failed to check ddl schema version", K(ret)); + } } return ret; } diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 6f49946a71..3aa809699f 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -3312,7 +3312,7 @@ int ObBasicSessionInfo::check_optimizer_features_enable_valid(const ObObj &val) } else if (OB_FAIL(ObClusterVersion::get_version(version_str, version))) { LOG_WARN("failed to get version"); LOG_USER_ERROR(OB_INVALID_ARGUMENT, "version for optimizer_features_enable"); - } else if (version < CLUSTER_VERSION_4_0_0_0 || version > CLUSTER_CURRENT_VERSION) { + } else if (OB_UNLIKELY(!ObGlobalHint::is_valid_opt_features_version(version))) { ret = OB_INVALID_ARGUMENT; LOG_USER_ERROR(OB_INVALID_ARGUMENT, "version for optimizer_features_enable"); } @@ -5303,6 +5303,26 @@ int ObBasicSessionInfo::get_auto_increment_cache_size(int64_t &auto_increment_ca return ret; } +int ObBasicSessionInfo::get_optimizer_features_enable_version(uint64_t &version) const +{ + int ret = OB_SUCCESS; + // if OPTIMIZER_FEATURES_ENABLE is set as '', use LASTED_COMPAT_VERSION + version = LASTED_COMPAT_VERSION; + ObString version_str; + uint64_t tmp_version = 0; + if (OB_FAIL(get_string_sys_var(SYS_VAR_OPTIMIZER_FEATURES_ENABLE, version_str))) { + LOG_WARN("failed to update session_timeout", K(ret)); + } else if (version_str.empty() + || OB_FAIL(ObClusterVersion::get_version(version_str, tmp_version)) + || !ObGlobalHint::is_valid_opt_features_version(tmp_version)) { + LOG_WARN("fail invalid optimizer features version", K(ret), K(version_str), K(tmp_version)); + ret = OB_SUCCESS; + } else { + version = tmp_version; + } + return ret; +} + int ObBasicSessionInfo::get_enable_parallel_dml(bool &v) const { return get_bool_sys_var(SYS_VAR__ENABLE_PARALLEL_DML, v); diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index 816514c59e..33f4e672e7 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -637,6 +637,7 @@ public: return common::OB_SUCCESS; } int get_nlj_batching_enabled(bool &v) const; + int get_optimizer_features_enable_version(uint64_t &version) const; int get_enable_parallel_dml(bool &v) const; int get_enable_parallel_query(bool &v) const; int get_enable_parallel_ddl(bool &v) const; diff --git a/tools/deploy/mysql_test/r/mysql/explain.result b/tools/deploy/mysql_test/r/mysql/explain.result index 88f68421b4..7536e3303c 100644 --- a/tools/deploy/mysql_test/r/mysql/explain.result +++ b/tools/deploy/mysql_test/r/mysql/explain.result @@ -59,7 +59,7 @@ Outline Data: ------------------------------------- /*+ BEGIN_OUTLINE_DATA - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ drop table sd; diff --git a/tools/deploy/mysql_test/r/mysql/view_2.result b/tools/deploy/mysql_test/r/mysql/view_2.result index 1e4639ae5e..8f7af3b804 100644 --- a/tools/deploy/mysql_test/r/mysql/view_2.result +++ b/tools/deploy/mysql_test/r/mysql/view_2.result @@ -467,7 +467,7 @@ Outline Data: OUTER_TO_INNER(@"SEL$CFEA49FE") PRED_DEDUCE(@"SEL$A7A036C9") SIMPLIFY_EXPR(@"SEL$AC33F27C") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: diff --git a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_filter_mysql.result b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_filter_mysql.result index 288156173d..58c8238fae 100644 --- a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_filter_mysql.result +++ b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_filter_mysql.result @@ -118,7 +118,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -179,7 +179,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -240,7 +240,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -302,7 +302,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -363,7 +363,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -425,7 +425,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -487,7 +487,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -548,7 +548,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -668,7 +668,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -729,7 +729,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -999,7 +999,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."geo_table2"@"SEL$1" "geom") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1068,7 +1068,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."geo_table2"@"SEL$1" "geom") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1153,7 +1153,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."geo_table"@"SEL$1" "geom") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1370,7 +1370,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1431,7 +1431,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1492,7 +1492,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1555,7 +1555,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1616,7 +1616,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1678,7 +1678,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1740,7 +1740,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1801,7 +1801,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1974,7 +1974,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2035,7 +2035,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2096,7 +2096,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2158,7 +2158,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2219,7 +2219,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2281,7 +2281,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2343,7 +2343,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2404,7 +2404,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2465,7 +2465,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2526,7 +2526,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2587,7 +2587,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2650,7 +2650,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2711,7 +2711,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2773,7 +2773,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2835,7 +2835,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2896,7 +2896,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2979,7 +2979,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."t"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: diff --git a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_index2_mysql.result b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_index2_mysql.result index f3d4887416..98cf32507a 100644 --- a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_index2_mysql.result +++ b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/geometry_index2_mysql.result @@ -232,7 +232,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "test"."tt2"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -280,7 +280,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "test"."tt2"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -335,7 +335,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."tt2"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -387,7 +387,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."tt2"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -439,7 +439,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."tt2"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -491,7 +491,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "test"."tt2"@"SEL$1" "idx") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: diff --git a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/spatial_relation_join_mysql.result b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/spatial_relation_join_mysql.result index 6f90b8f092..fbdcaf3847 100644 --- a/tools/deploy/mysql_test/test_suite/geometry/r/mysql/spatial_relation_join_mysql.result +++ b/tools/deploy/mysql_test/test_suite/geometry/r/mysql/spatial_relation_join_mysql.result @@ -75,7 +75,7 @@ Outline Data: USE_NL_MATERIALIZATION(@"SEL$1" "test"."tgnoindex1"@"SEL$1") FULL(@"SEL$1" "test"."tgnoindex2"@"SEL$1") FULL(@"SEL$1" "test"."tgnoindex1"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -179,7 +179,7 @@ Outline Data: FULL(@"SEL$1" "test"."tgeom1"@"SEL$1") INDEX(@"SEL$1" "test"."tgeom2"@"SEL$1" "gidx2") USE_DAS(@"SEL$1" "test"."tgeom2"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -293,7 +293,7 @@ Outline Data: FULL(@"SEL$1" "test"."ptgeom1"@"SEL$1") INDEX(@"SEL$1" "test"."ptgeom2"@"SEL$1" "pgidx2") USE_DAS(@"SEL$1" "test"."ptgeom2"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: diff --git a/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_basic_mysql.result b/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_basic_mysql.result index 0ec4690307..e38b5c2087 100644 --- a/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_basic_mysql.result +++ b/tools/deploy/mysql_test/test_suite/skyline/r/mysql/skyline_basic_mysql.result @@ -3746,7 +3746,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t10"@"SEL$1" "t10i1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3796,7 +3796,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t10"@"SEL$1" "t10i2") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3844,7 +3844,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3892,7 +3892,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3940,7 +3940,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3988,7 +3988,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t10"@"SEL$1" "t10i2") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4040,7 +4040,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4091,7 +4091,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4142,7 +4142,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4193,7 +4193,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t10"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4242,7 +4242,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4290,7 +4290,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t11"@"SEL$1" "t11i1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4338,7 +4338,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4387,7 +4387,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4439,7 +4439,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4488,7 +4488,7 @@ Outline Data: BEGIN_OUTLINE_DATA FULL(@"SEL$E230E5BA" "hualong"."t11"@"SEL$1") REPLACE_CONST(@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4539,7 +4539,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4586,7 +4586,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t11"@"SEL$1" "t11i1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4636,7 +4636,7 @@ Outline Data: BEGIN_OUTLINE_DATA FULL(@"SEL$E230E5BA" "hualong"."t11"@"SEL$1") REPLACE_CONST(@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4689,7 +4689,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t11"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4738,7 +4738,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "hualong"."t12"@"SEL$1" "t12i1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4785,7 +4785,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t12"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4833,7 +4833,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t12"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -4881,7 +4881,7 @@ Outline Data: /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "hualong"."t12"@"SEL$1") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: diff --git a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/subplan_filter.result b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/subplan_filter.result index c2a850d1f5..eba25bca79 100644 --- a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/subplan_filter.result +++ b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/subplan_filter.result @@ -1761,7 +1761,7 @@ Outline Data: FULL(@"SEL$1" "test"."t1"@"SEL$1") FULL(@"SEL$2" "test"."t2"@"SEL$2") USE_DAS(@"SEL$2" "test"."t2"@"SEL$2") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1863,7 +1863,7 @@ Outline Data: FULL(@"SEL$1" "test"."t1"@"SEL$1") FULL(@"SEL$2" "test"."t2"@"SEL$2") USE_DAS(@"SEL$2" "test"."t2"@"SEL$2") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -1965,7 +1965,7 @@ Outline Data: FULL(@"SEL$1" "test"."t1"@"SEL$1") FULL(@"SEL$2" "test"."t2"@"SEL$2") USE_DAS(@"SEL$2" "test"."t2"@"SEL$2") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2075,7 +2075,7 @@ Outline Data: FULL(@"SEL$2" "test"."t2"@"SEL$2") FULL(@"SEL$3" "t2"@"SEL$3") USE_DAS(@"SEL$3" "t2"@"SEL$3") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2196,7 +2196,7 @@ Outline Data: FULL(@"SEL$2" "test"."t2"@"SEL$2") FULL(@"SEL$3" "t2"@"SEL$3") USE_DAS(@"SEL$3" "t2"@"SEL$3") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2317,7 +2317,7 @@ Outline Data: FULL(@"SEL$2" "test"."t2"@"SEL$2") FULL(@"SEL$3" "t2"@"SEL$3") USE_DAS(@"SEL$3" "t2"@"SEL$3") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2438,7 +2438,7 @@ Outline Data: FULL(@"SEL$2" "test"."t2"@"SEL$2") FULL(@"SEL$3" "t2"@"SEL$3") USE_DAS(@"SEL$3" "t2"@"SEL$3") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2568,7 +2568,7 @@ Outline Data: USE_DAS(@"SEL$3" "t2"@"SEL$3") FULL(@"SEL$4" "t2"@"SEL$4") USE_DAS(@"SEL$4" "t2"@"SEL$4") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2751,7 +2751,7 @@ Outline Data: USE_DAS(@"SEL$7" "t2"@"SEL$7") FULL(@"SEL$8" "t2"@"SEL$8") USE_DAS(@"SEL$8" "t2"@"SEL$8") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -2978,7 +2978,7 @@ Outline Data: USE_DAS(@"SEL$7" "t2"@"SEL$7") FULL(@"SEL$8" "t2"@"SEL$8") USE_DAS(@"SEL$8" "t2"@"SEL$8") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: @@ -3205,7 +3205,7 @@ Outline Data: USE_DAS(@"SEL$7" "t2"@"SEL$7") FULL(@"SEL$8" "t2"@"SEL$8") USE_DAS(@"SEL$8" "t2"@"SEL$8") - OPTIMIZER_FEATURES_ENABLE('4.0.0.0') + OPTIMIZER_FEATURES_ENABLE('') END_OUTLINE_DATA */ Optimization Info: