diff --git a/deps/oblib/src/lib/CMakeLists.txt b/deps/oblib/src/lib/CMakeLists.txt index 5e69c66ac..a44fd4b3d 100644 --- a/deps/oblib/src/lib/CMakeLists.txt +++ b/deps/oblib/src/lib/CMakeLists.txt @@ -204,6 +204,8 @@ ob_set_subtarget(oblib_lib common_mixed wide_integer/ob_wide_integer_cmp_funcs.cpp wide_integer/ob_wide_integer_str_funcs.cpp udt/ob_udt_type.cpp + locale/ob_locale_type.cc + locale/ob_locale.cpp ) ob_set_subtarget(oblib_lib lock diff --git a/deps/oblib/src/lib/locale/ob_locale.cpp b/deps/oblib/src/lib/locale/ob_locale.cpp new file mode 100644 index 000000000..aebfd870b --- /dev/null +++ b/deps/oblib/src/lib/locale/ob_locale.cpp @@ -0,0 +1,81 @@ +/** +* Copyright (c) 2021 OceanBase +* OceanBase CE is licensed under Mulan PubL v2. +* You can use this software according to the terms and conditions of the Mulan PubL v2. +* You may obtain a copy of Mulan PubL v2 at: +* http://license.coscl.org.cn/MulanPubL-2.0 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PubL v2 for more details. +*/ +#include "lib/locale/ob_locale_type.h" +namespace oceanbase { +namespace common { +// Note that the index of the ob_locale_ja_JP is exactly 2 and should be placed in the 2nd position in the ob_locales. +OB_LOCALE *ob_locales[] = {&ob_locale_en_US, NULL, &ob_locale_ja_JP, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, &ob_locale_ko_KR, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + &ob_locale_zh_CN, &ob_locale_zh_TW, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL}; + +OB_LOCALE *ob_locale_by_name(const ObString &locale_name) { + OB_LOCALE ** locale = NULL; + OB_LOCALE *result_locale = NULL; + bool has_found = false; + OB_LOCALE ** locale_limit = ob_locales + LOCALE_COUNT; + for (locale = ob_locales ; !has_found && locale < locale_limit ; locale++) { + if ( *locale != NULL && 0 == locale_name.case_compare((*locale)->name_) ) { + result_locale = *locale; + has_found = true; + } + } + if (NULL == result_locale) { + result_locale = &ob_locale_en_US; + } + return result_locale; +} + +bool is_valid_ob_locale(const ObString &in_locale_name, ObString &valid_locale_name) { + OB_LOCALE ** locale = NULL; + OB_LOCALE *result_locale = NULL; + bool ret = true; + bool has_found = false; + for (locale = ob_locales; !has_found && locale < ob_locales + LOCALE_COUNT; locale++) { + if (*locale != NULL && 0 == in_locale_name.case_compare((*locale)->name_)) { + result_locale = *locale; + valid_locale_name = ObString(result_locale->name_); + has_found = true; + } + } + if (NULL == result_locale) { + ret = false; + } + return ret; +} + +} // common +} // oceanbase \ No newline at end of file diff --git a/deps/oblib/src/lib/locale/ob_locale_type.cc b/deps/oblib/src/lib/locale/ob_locale_type.cc new file mode 100644 index 000000000..51e843323 --- /dev/null +++ b/deps/oblib/src/lib/locale/ob_locale_type.cc @@ -0,0 +1,145 @@ +/** +* Copyright (c) 2021 OceanBase +* OceanBase CE is licensed under Mulan PubL v2. +* You can use this software according to the terms and conditions of the Mulan PubL v2. +* You may obtain a copy of Mulan PubL v2 at: +* http://license.coscl.org.cn/MulanPubL-2.0 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PubL v2 for more details. +*/ +#include "ob_locale_type.h" + +namespace oceanbase { +namespace common { + +//LOCALE BEGIN en_US: English - United States +static const char *ob_locale_month_names_en_US[MONTH_LENGTH] = { + "January", "February", "March", "April", "May", "June", "July", + "August", "September", "October", "November", "December", NULL}; +static const char *ob_locale_ab_month_names_en_US[MONTH_LENGTH] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Aug", "Sep", "Oct", "Nov", "Dec", NULL}; +static const char *ob_locale_day_names_en_US[DAY_LENGTH] = { + "Monday", "Tuesday", "Wednesday", "Thursday", + "Friday", "Saturday", "Sunday", NULL}; +static const char *ob_locale_ab_day_names_en_US[DAY_LENGTH] = { + "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", NULL}; +static OB_LOCALE_TYPE ob_locale_type_month_names_en_US( MONTH_LENGTH - 1, "", ob_locale_month_names_en_US, NULL); +static OB_LOCALE_TYPE ob_locale_type_ab_month_names_en_US(MONTH_LENGTH - 1, "", ob_locale_ab_month_names_en_US, NULL); +static OB_LOCALE_TYPE ob_locale_type_day_names_en_US(DAY_LENGTH - 1, "", ob_locale_day_names_en_US, NULL); +static OB_LOCALE_TYPE ob_locale_type_ab_day_names_en_US(DAY_LENGTH - 1, "", ob_locale_ab_day_names_en_US, NULL); + +OB_LOCALE ob_locale_en_US(0, "en_US", "English - United States", true, + &ob_locale_type_month_names_en_US, + &ob_locale_type_ab_month_names_en_US, + &ob_locale_type_day_names_en_US, + &ob_locale_type_ab_day_names_en_US, 9, 9, + '.', /* decimal point en_US */ + ',', /* thousands_sep en_US */ + "\x03\x03"/* grouping en_US */); + +/***** LOCALE BEGIN ja_JP: Japanese - Japan *****/ +static const char *ob_locale_month_names_ja_JP[MONTH_LENGTH] = { + "1月", "2月", "3月", "4月", "5月", "6月", "7月", + "8月", "9月", "10月", "11月", "12月", NULL}; +static const char *ob_locale_ab_month_names_ja_JP[MONTH_LENGTH] = { + " 1月", " 2月", " 3月", " 4月", " 5月", " 6月", " 7月", + " 8月", " 9月", "10月", "11月", "12月", NULL}; +static const char *ob_locale_day_names_ja_JP[DAY_LENGTH] = { + "月曜日", "火曜日", "水曜日","木曜日", + "金曜日", "土曜日", "日曜日", NULL}; +static const char *ob_locale_ab_day_names_ja_JP[DAY_LENGTH] = { + "月", "火", "水", "木", "金", "土", "日", NULL}; +static OB_LOCALE_TYPE ob_locale_type_month_names_ja_JP = { MONTH_LENGTH - 1, "", ob_locale_month_names_ja_JP, NULL }; +static OB_LOCALE_TYPE ob_locale_type_ab_month_names_ja_JP = { MONTH_LENGTH - 1, "", ob_locale_ab_month_names_ja_JP, NULL}; +static OB_LOCALE_TYPE ob_locale_type_day_names_ja_JP = { DAY_LENGTH - 1, "", ob_locale_day_names_ja_JP, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_day_names_ja_JP = { DAY_LENGTH - 1, "", ob_locale_ab_day_names_ja_JP, NULL}; + +OB_LOCALE ob_locale_ja_JP(2, "ja_JP", "Japanese - Japan", false, + &ob_locale_type_month_names_ja_JP, + &ob_locale_type_ab_month_names_ja_JP, + &ob_locale_type_day_names_ja_JP, + &ob_locale_type_ab_day_names_ja_JP, 3, 3, + '.', /* decimal point ja_JP */ + ',', /* thousands_sep ja_JP */ + "\x03"/* grouping ja_JP */); + +/***** LOCALE BEGIN ko_KR: Korean - Korea *****/ +static const char *ob_locale_month_names_ko_KR[MONTH_LENGTH] = { + "일월", "이월", "삼월", "사월", "오월", "유월", "칠월", + "팔월", "구월", "시월", "십일월", "십이월", NULL}; +static const char *ob_locale_ab_month_names_ko_KR[MONTH_LENGTH] = { + " 1월", " 2월", " 3월", " 4월", " 5월", " 6월", " 7월", + " 8월", " 9월", "10월", "11월", "12월", NULL}; +static const char *ob_locale_day_names_ko_KR[DAY_LENGTH] = { + "월요일", "화요일", "수요일", "목요일", + "금요일", "토요일", "일요일", NULL}; +static const char *ob_locale_ab_day_names_ko_KR[DAY_LENGTH] = { + "월", "화", "수", "목", "금", "토", "일", NULL}; +static OB_LOCALE_TYPE ob_locale_type_month_names_ko_KR = { MONTH_LENGTH - 1, "", ob_locale_month_names_ko_KR, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_month_names_ko_KR = { MONTH_LENGTH - 1, "", ob_locale_ab_month_names_ko_KR, NULL}; +static OB_LOCALE_TYPE ob_locale_type_day_names_ko_KR = { DAY_LENGTH - 1, "", ob_locale_day_names_ko_KR, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_day_names_ko_KR = { DAY_LENGTH - 1, "", ob_locale_ab_day_names_ko_KR, NULL}; +OB_LOCALE ob_locale_ko_KR(31, "ko_KR", "Korean - Korea", false, + &ob_locale_type_month_names_ko_KR, + &ob_locale_type_ab_month_names_ko_KR, + &ob_locale_type_day_names_ko_KR, + &ob_locale_type_ab_day_names_ko_KR, 3, 3, + '.', /* decimal point ko_KR */ + ',', /* thousands_sep ko_KR */ + "\x03\x03" /* grouping ko_KR */); + +/***** LOCALE BEGIN zh_CN: Chinese - Peoples Republic of China *****/ +static const char *ob_locale_month_names_zh_CN[MONTH_LENGTH] = { + "一月", "二月", "三月", "四月", "五月", "六月", "七月", + "八月", "九月", "十月", "十一月", "十二月", NULL}; +static const char *ob_locale_ab_month_names_zh_CN[MONTH_LENGTH] = { + " 1月", " 2月", " 3月", " 4月", " 5月", " 6月", " 7月", + " 8月", " 9月", "10月", "11月", "12月", NULL}; +static const char *ob_locale_day_names_zh_CN[DAY_LENGTH] = { + "星期一", "星期二", "星期三", "星期四", + "星期五", "星期六", "星期日", NULL}; +static const char *ob_locale_ab_day_names_zh_CN[DAY_LENGTH] = { + "一", "二", "三", "四", "五", "六", "日", NULL}; +static OB_LOCALE_TYPE ob_locale_type_month_names_zh_CN = { MONTH_LENGTH - 1, "", ob_locale_month_names_zh_CN, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_month_names_zh_CN = { MONTH_LENGTH - 1, "", ob_locale_ab_month_names_zh_CN, NULL}; +static OB_LOCALE_TYPE ob_locale_type_day_names_zh_CN = { DAY_LENGTH - 1, "", ob_locale_day_names_zh_CN, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_day_names_zh_CN = { DAY_LENGTH - 1, "", ob_locale_ab_day_names_zh_CN, NULL}; +OB_LOCALE ob_locale_zh_CN(56, "zh_CN", "Chinese - Peoples Republic of China", false, + &ob_locale_type_month_names_zh_CN, + &ob_locale_type_ab_month_names_zh_CN, + &ob_locale_type_day_names_zh_CN, + &ob_locale_type_ab_day_names_zh_CN, 3, 3, + '.', /* decimal point zh_CN */ + ',', /* thousands_sep zh_CN */ + "\x03" /* grouping zh_CN */); + +/***** LOCALE BEGIN zh_TW: Chinese - Taiwan *****/ +static const char *ob_locale_month_names_zh_TW[MONTH_LENGTH] = { + "一月", "二月", "三月", "四月", "五月", "六月", "七月", + "八月", "九月", "十月", "十一月", "十二月", NULL}; +static const char *ob_locale_ab_month_names_zh_TW[MONTH_LENGTH] = { + " 1月", " 2月", " 3月", " 4月", " 5月", " 6月", " 7月", + " 8月", " 9月", "10月", "11月", "12月", NULL}; +static const char *ob_locale_day_names_zh_TW[DAY_LENGTH] = { + "週一", "週二", "週三", "週四", + "週五", "週六", "週日", NULL}; +static const char *ob_locale_ab_day_names_zh_TW[DAY_LENGTH] = { + "一", "二", "三", "四","五", "六", "日", NULL}; +static OB_LOCALE_TYPE ob_locale_type_month_names_zh_TW = { MONTH_LENGTH - 1, "", ob_locale_month_names_zh_TW, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_month_names_zh_TW = { MONTH_LENGTH - 1, "", ob_locale_ab_month_names_zh_TW, NULL}; +static OB_LOCALE_TYPE ob_locale_type_day_names_zh_TW = { DAY_LENGTH - 1, "", ob_locale_day_names_zh_TW, NULL}; +static OB_LOCALE_TYPE ob_locale_type_ab_day_names_zh_TW = { DAY_LENGTH - 1, "", ob_locale_ab_day_names_zh_TW, NULL}; +OB_LOCALE ob_locale_zh_TW(57, "zh_TW", "Chinese - Taiwan", false, + &ob_locale_type_month_names_zh_TW, + &ob_locale_type_ab_month_names_zh_TW, + &ob_locale_type_day_names_zh_TW, + &ob_locale_type_ab_day_names_zh_TW, 3, 2, + '.', /* decimal point zh_TW */ + ',', /* thousands_sep zh_TW */ + "\x03" /* grouping zh_TW */); + +} // common +} // oceanbase diff --git a/deps/oblib/src/lib/locale/ob_locale_type.h b/deps/oblib/src/lib/locale/ob_locale_type.h new file mode 100644 index 000000000..6042783ff --- /dev/null +++ b/deps/oblib/src/lib/locale/ob_locale_type.h @@ -0,0 +1,81 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#ifndef OCEANBASE_LOCALE_TYPE_H_ +#define OCEANBASE_LOCALE_TYPE_H_ + +#define MONTH_LENGTH 13 +#define DAY_LENGTH 8 +#define LOCALE_COUNT 111 +#include "lib/ob_define.h" +#include "lib/string/ob_string.h" + +namespace oceanbase { +namespace common { + +typedef struct OB_LOCALE_TYPE { /* Different types saved here */ + unsigned int count_{0}; /* How many types */ + const char *name_{NULL}; /* Name of typelib */ + const char **type_names_{NULL}; + unsigned int *type_lengths_{NULL}; + OB_LOCALE_TYPE(unsigned int count, + const char *name, + const char **type_names, + unsigned int *type_lengths):count_(count), + name_(name), + type_names_(type_names), + type_lengths_(type_lengths){} +} OB_LOCALE_TYPE; + +class OB_LOCALE { + public: + unsigned int number_; + const char *name_; + const char *description_; + const bool is_ascii_; + OB_LOCALE_TYPE *month_names_; + OB_LOCALE_TYPE *ab_month_names_; + OB_LOCALE_TYPE *day_names_; + OB_LOCALE_TYPE *ab_day_names_; + unsigned int max_month_name_length_; + unsigned int max_day_name_length_; + unsigned int decimal_point_; + unsigned int thousand_sep_; + const char *grouping_; + OB_LOCALE(unsigned int number_par, const char *name_par, const char *descr_par, + bool is_ascii_par, OB_LOCALE_TYPE *month_names_par, + OB_LOCALE_TYPE *ab_month_names_par, OB_LOCALE_TYPE *day_names_par, + OB_LOCALE_TYPE *ab_day_names_par, unsigned int max_month_name_length_par, + unsigned int max_day_name_length_par, unsigned int decimal_point_par, + unsigned int thousand_sep_par, const char *grouping_par) + : number_(number_par), + name_(name_par), + description_(descr_par), + is_ascii_(is_ascii_par), + month_names_(month_names_par), + ab_month_names_(ab_month_names_par), + day_names_(day_names_par), + ab_day_names_(ab_day_names_par), + max_month_name_length_(max_month_name_length_par), + max_day_name_length_(max_day_name_length_par), + decimal_point_(decimal_point_par), + thousand_sep_(thousand_sep_par), + grouping_(grouping_par){} +}; + +OB_LOCALE *ob_locale_by_name(const ObString &cs_name); +bool is_valid_ob_locale(const ObString &in_locale_name, ObString &valid_locale_name); + +} // common +} // oceanbase + +#endif /* OCEANBASE_LOCALE_TYPE_ */ diff --git a/deps/oblib/src/lib/timezone/ob_time_convert.cpp b/deps/oblib/src/lib/timezone/ob_time_convert.cpp index 5cc58934d..d23227b61 100644 --- a/deps/oblib/src/lib/timezone/ob_time_convert.cpp +++ b/deps/oblib/src/lib/timezone/ob_time_convert.cpp @@ -26,6 +26,7 @@ #include "rpc/obmysql/ob_mysql_util.h" #include "common/object/ob_object.h" //#include "lib/timezone/ob_timezone_util.h" +#include "lib/locale/ob_locale_type.h" #define STRING_WITH_LEN(X) (X), ((sizeof(X) - 1)) @@ -4744,7 +4745,8 @@ int ObTimeConverter::deduce_max_len_from_oracle_dfm(const ObString &format, } int ObTimeConverter::ob_time_to_str_format(const ObTime &ob_time, const ObString &format, - char *buf, int64_t buf_len, int64_t &pos, bool &res_null) + char *buf, int64_t buf_len, int64_t &pos, bool &res_null, + const ObString &locale_name) { int ret = OB_SUCCESS; if (OB_ISNULL(format.ptr()) || OB_ISNULL(buf) || OB_UNLIKELY(format.length() <= 0 || buf_len <= 0)) { @@ -4758,6 +4760,19 @@ int ObTimeConverter::ob_time_to_str_format(const ObTime &ob_time, const ObString int32_t week_monday = -1; int32_t delta_sunday = -2; int32_t delta_monday = -2; + //used for am/pm conversation in order to avoid if-else tests. + + OB_LOCALE *ob_cur_locale = ob_locale_by_name(locale_name); + OB_LOCALE_TYPE *locale_type_day = ob_cur_locale->day_names_; + OB_LOCALE_TYPE *locale_type_ab_day = ob_cur_locale->ab_day_names_; + OB_LOCALE_TYPE *locale_type_mon = ob_cur_locale->month_names_; + OB_LOCALE_TYPE *locale_type_ab_mon = ob_cur_locale->ab_month_names_; + + const char ** locale_daynames = locale_type_day->type_names_; + const char ** locale_ab_daynames = locale_type_ab_day->type_names_; + const char ** locale_monthnames = locale_type_mon->type_names_; + const char ** locale_ab_monthnames = locale_type_ab_mon->type_names_; + //used for am/pm conversation in order to avoid if-else tests. const int hour_converter[24] = {12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; @@ -4792,8 +4807,11 @@ int ObTimeConverter::ob_time_to_str_format(const ObTime &ob_time, const ObString case 'M': { //Month name (January..December) if (OB_UNLIKELY(0 == parts[DT_MON])) { res_null = true; + } else if (lib::is_mysql_mode()) { + ret = data_fmt_s(buf, buf_len, pos, locale_monthnames[parts[DT_MON]-1]); + } else { + ret = data_fmt_s(buf, buf_len, pos, MON_NAMES[parts[DT_MON]].ptr_); } - ret = data_fmt_s(buf, buf_len, pos, MON_NAMES[parts[DT_MON]].ptr_); break; } case 'm': { //Month, numeric (00..12) @@ -4811,15 +4829,21 @@ int ObTimeConverter::ob_time_to_str_format(const ObTime &ob_time, const ObString case 'a': { //Abbreviated weekday name (Sun..Sat) if (OB_UNLIKELY(0 == parts[DT_WDAY])) { res_null = true; + } else if (lib::is_mysql_mode()) { + ret = data_fmt_s(buf, buf_len, pos, locale_ab_daynames[parts[DT_WDAY]-1]); + } else { + ret = data_fmt_s(buf, buf_len, pos, WDAY_ABBR_NAMES[parts[DT_WDAY]].ptr_); } - ret = data_fmt_s(buf, buf_len, pos, WDAY_ABBR_NAMES[parts[DT_WDAY]].ptr_); break; } case 'b': { //Abbreviated month name (Jan..Dec) if (OB_UNLIKELY(0 == parts[DT_MON])) { res_null = true; + } else if (lib::is_mysql_mode()) { + ret = data_fmt_s(buf, buf_len, pos, locale_ab_monthnames[parts[DT_MON]-1]); + } else { + ret = data_fmt_s(buf, buf_len, pos, MON_ABBR_NAMES[parts[DT_MON]].ptr_); } - ret = data_fmt_s(buf, buf_len, pos, MON_ABBR_NAMES[parts[DT_MON]].ptr_); break; } case 'c': { //Month, numeric (0..12) @@ -4903,8 +4927,11 @@ int ObTimeConverter::ob_time_to_str_format(const ObTime &ob_time, const ObString case 'W': { //Weekday name (Sunday..Saturday) if (OB_UNLIKELY(0 == parts[DT_WDAY])) { res_null = true; + } else if (lib::is_mysql_mode()) { + ret = data_fmt_s(buf, buf_len, pos, locale_daynames[parts[DT_WDAY]-1]); + } else { + ret = data_fmt_s(buf, buf_len, pos, WDAY_NAMES[parts[DT_WDAY]].ptr_); } - ret = data_fmt_s(buf, buf_len, pos, WDAY_NAMES[parts[DT_WDAY]].ptr_); break; } case 'w': { //Day of the week (0=Sunday..6=Saturday) diff --git a/deps/oblib/src/lib/timezone/ob_time_convert.h b/deps/oblib/src/lib/timezone/ob_time_convert.h index 27c5e54b0..c85f94d1c 100644 --- a/deps/oblib/src/lib/timezone/ob_time_convert.h +++ b/deps/oblib/src/lib/timezone/ob_time_convert.h @@ -533,7 +533,8 @@ public: static int deduce_max_len_from_oracle_dfm(const ObString &format, int64_t &max_char_len); static int ob_time_to_str_format(const ObTime &ob_time, const ObString &format, - char *buf, int64_t buf_len, int64_t &pos, bool &res_null); + char *buf, int64_t buf_len, int64_t &pos, bool &res_null, + const ObString &locale_name); static int ob_time_to_datetime(ObTime &ob_time, const ObTimeConvertCtx &cvrt_ctx, int64_t &value); static int ob_time_to_otimestamp(ObTime &ob_time, ObOTimestampData &value); static int32_t ob_time_to_date(ObTime &ob_time); diff --git a/src/observer/CMakeLists.txt b/src/observer/CMakeLists.txt index 0ce7d5666..3aa41958f 100644 --- a/src/observer/CMakeLists.txt +++ b/src/observer/CMakeLists.txt @@ -410,6 +410,7 @@ ob_set_subtarget(ob_server virtual_table virtual_table/ob_all_virtual_nic_info.cpp virtual_table/ob_all_virtual_storage_ha_error_diagnose.cpp virtual_table/ob_all_virtual_storage_ha_perf_diagnose.cpp + virtual_table/ob_all_virtual_sys_variable_default_value.cpp ) ob_server_add_target(ob_server) diff --git a/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.cpp b/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.cpp index 150a0200c..9b2b07518 100644 --- a/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.cpp +++ b/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.cpp @@ -157,6 +157,17 @@ int ObAllVirtualSysParameterStat::inner_sys_get_next_row(ObNewRow *&row) ObCharset::get_default_collation(ObCharset::get_default_charset())); break; } + case DEFAULT_VALUE: { + cells[i].set_varchar(sys_iter_->second->default_str()); + cells[i].set_collation_type( + ObCharset::get_default_collation(ObCharset::get_default_charset())); + break; + } + case ISDEFAULT: { + int isdefault = sys_iter_->second->is_default(sys_iter_->second->str(),sys_iter_->second->default_str(),sizeof(sys_iter_->second->default_str())) ? 1 : 0; + cells[i].set_int(isdefault); + break; + } default : { // TODO: 版本兼容性,多余的列不报错 // ret = OB_ERR_UNEXPECTED; @@ -262,6 +273,17 @@ int ObAllVirtualSysParameterStat::inner_tenant_get_next_row(common::ObNewRow *&r ObCharset::get_default_collation(ObCharset::get_default_charset())); break; } + case DEFAULT_VALUE: { + cells[i].set_varchar(tenant_iter_->second->default_str()); + cells[i].set_collation_type( + ObCharset::get_default_collation(ObCharset::get_default_charset())); + break; + } + case ISDEFAULT: { + int isdefault = tenant_iter_->second->is_default(tenant_iter_->second->str(),tenant_iter_->second->default_str(),sizeof(tenant_iter_->second->default_str())) ? 1 : 0; + cells[i].set_int(isdefault); + break; + } default : { // 版本兼容性,多余列不报错 // ret = OB_ERR_UNEXPECTED; diff --git a/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.h b/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.h index e602dddd0..bf2622d5b 100644 --- a/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.h +++ b/src/observer/virtual_table/ob_all_virtual_sys_parameter_stat.h @@ -49,6 +49,8 @@ private: SCOPE, SOURCE, EDIT_LEVEL, + DEFAULT_VALUE, + ISDEFAULT, }; common::ObConfigContainer::const_iterator sys_iter_; omt::ObTenantConfigGuard tenant_config_; diff --git a/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.cpp b/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.cpp new file mode 100644 index 000000000..a11ce2309 --- /dev/null +++ b/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.cpp @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#include "lib/string/ob_sql_string.h" +#include "lib/mysqlclient/ob_mysql_proxy.h" +#include "share/schema/ob_schema_struct.h" +#include "share/inner_table/ob_inner_table_schema.h" +#include "observer/virtual_table/ob_all_virtual_sys_variable_default_value.h" +#include "sql/session/ob_sql_session_info.h" +#include "share/system_variable/ob_system_variable_factory.h" +#include "share/schema/ob_schema_getter_guard.h" + +using namespace oceanbase::common; +using namespace oceanbase::share; +using namespace oceanbase::share::schema; +using namespace oceanbase::sql; +namespace oceanbase +{ +namespace observer +{ + +ObSysVarDefaultValue::ObSysVarDefaultValue() + : ObVirtualTableScannerIterator() +{ +} + +ObSysVarDefaultValue::~ObSysVarDefaultValue() +{ +} + +void ObSysVarDefaultValue::reset() +{ + ObVirtualTableScannerIterator::reset(); +} + +int ObSysVarDefaultValue::inner_get_next_row(ObNewRow *&row) +{ + int ret = OB_SUCCESS; + if (!((GET_MIN_CLUSTER_VERSION() >= CLUSTER_VERSION_4_2_2_0 && + GET_MIN_CLUSTER_VERSION() < CLUSTER_VERSION_4_3_0_0) || + GET_MIN_CLUSTER_VERSION() >= CLUSTER_VERSION_4_3_1_0)) { + ret = OB_NOT_SUPPORTED; + SERVER_LOG(WARN,"__all_virtual_sys_variable_default_value is only supported\ + when cluster_version in the range [422,430) or [431,~)", K(ret)); + } else if (OB_ISNULL(cur_row_.cells_)) { + ret = OB_NOT_INIT; + SERVER_LOG(WARN, "some data member is NULL", K(ret), K(cur_row_.cells_)); + } else if (OB_UNLIKELY(cur_row_.count_ < output_column_ids_.count())) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "cells count is less than output column count", + K(ret), K(cur_row_.count_), K(output_column_ids_.count())); + } else if (start_to_read_) { + //do nothing + } else if (OB_FAIL(add_row())) { + SERVER_LOG(WARN, "fail to add row", K(ret)); + } else { + scanner_it_ = scanner_.begin(); + start_to_read_ = true; + } + + if (OB_LIKELY(OB_SUCC(ret) && start_to_read_)) { + if (OB_FAIL(scanner_it_.get_next_row(cur_row_))) { + if (OB_UNLIKELY(OB_ITER_END != ret)) { + SERVER_LOG(WARN, "fail to get next row", K(ret)); + } + } else { + row = &cur_row_; + } + } + return ret; +} + +int ObSysVarDefaultValue::add_row() +{ + int ret = OB_SUCCESS; + ObObj *cells = nullptr; + if (OB_ISNULL(cells = cur_row_.cells_)) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(ERROR, "cur row cell is NULL", K(ret)); + } else { + for (int64_t store_idx = 0; OB_SUCC(ret) && store_idx < ObSysVarFactory::ALL_SYS_VARS_COUNT; ++store_idx) { + if (store_idx < 0 || store_idx >= ObSysVarFactory::ALL_SYS_VARS_COUNT) { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "unexpected store idx", K(ret), K(store_idx)); + } else { + for (int64_t j = 0; OB_SUCC(ret) && j < output_column_ids_.count(); ++j) { + uint64_t col_id = output_column_ids_.at(j); + switch(col_id) { + case NAME: { + cells[j].set_varchar(ObSysVariables::get_name(store_idx)); + cells[j].set_collation_type(ObSysVariables::get_default_sysvar_collation()); + break; + } + case DEFAULT_VALUE: { + cells[j].set_varchar(ObSysVariables::get_value(store_idx)); + cells[j].set_collation_type(ObSysVariables::get_default_sysvar_collation()); + break; + } + default: { + ret = OB_ERR_UNEXPECTED; + SERVER_LOG(WARN, "invalid column id", K(ret), K(j), + K(output_column_ids_), K(col_id)); + break; + } + } + } + if (OB_SUCC(ret) && OB_FAIL(scanner_.add_row(cur_row_))) { + SERVER_LOG(WARN, "fail to add row", K(ret), K(cur_row_)); + } + } + } + } + return ret; +} + +} +} diff --git a/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.h b/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.h new file mode 100644 index 000000000..29bc018f7 --- /dev/null +++ b/src/observer/virtual_table/ob_all_virtual_sys_variable_default_value.h @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#ifndef _OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_H_ +#define _OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_H_ +#include "share/ob_virtual_table_scanner_iterator.h" +namespace oceanbase +{ +namespace common +{ +class ObMySQLProxy; +} +namespace share +{ +namespace schema +{ +class ObTenantSchema; +class ObSysVariableSchema; +} +} +namespace sql +{ +class ObSQLSessionInfo; +} +namespace observer +{ +class ObSysVarDefaultValue : public common::ObVirtualTableScannerIterator +{ +public: + ObSysVarDefaultValue(); + virtual ~ObSysVarDefaultValue(); + virtual int inner_get_next_row(common::ObNewRow *&row); + virtual void reset(); + int add_row(); +private: + enum COLUMN_NAME + { + NAME = common::OB_APP_MIN_COLUMN_ID, + DEFAULT_VALUE + }; + DISALLOW_COPY_AND_ASSIGN(ObSysVarDefaultValue); +}; +} +} +#endif /* _OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_H_*/ diff --git a/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.cpp b/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.cpp index eba8aaf20..b1baf7ddf 100644 --- a/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.cpp +++ b/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.cpp @@ -326,6 +326,17 @@ int ObAllVirtualTenantParameterStat::fill_row_(common::ObNewRow *&row, } break; } + case DEFAULT_VALUE: { + cells[i].set_varchar(iter->second->default_str()); + cells[i].set_collation_type( + ObCharset::get_default_collation(ObCharset::get_default_charset())); + break; + } + case ISDEFAULT: { + int isdefault = iter->second->is_default(iter->second->str(),iter->second->default_str(),sizeof(iter->second->default_str())) ? 1 : 0; + cells[i].set_int(isdefault); + break; + } default : { // skip unknown column for version compatibility cells[i].set_null(); diff --git a/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.h b/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.h index 9e96c28dc..b49435e2e 100644 --- a/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.h +++ b/src/observer/virtual_table/ob_all_virtual_tenant_parameter_stat.h @@ -64,6 +64,8 @@ private: SOURCE, EDIT_LEVEL, TENANT_ID, + DEFAULT_VALUE, + ISDEFAULT, }; private: diff --git a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp index d23fe3da9..1ff025a28 100644 --- a/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp +++ b/src/observer/virtual_table/ob_virtual_table_iterator_factory.cpp @@ -225,6 +225,7 @@ #include "observer/virtual_table/ob_all_virtual_kv_connection.h" #include "observer/virtual_table/ob_tenant_show_restore_preview.h" #include "observer/virtual_table/ob_all_virtual_nic_info.h" +#include "observer/virtual_table/ob_all_virtual_sys_variable_default_value.h" namespace oceanbase { @@ -2678,6 +2679,15 @@ int ObVTIterCreator::create_vt_iter(ObVTableScanParam ¶ms, } break; } + case OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TID: { + ObSysVarDefaultValue *sys_var_default_value = NULL; + if (OB_FAIL(NEW_VIRTUAL_TABLE(ObSysVarDefaultValue, sys_var_default_value))) { + SERVER_LOG(ERROR, "fail to new", K(ret), K(pure_tid)); + } else { + vt_iter = static_cast(sys_var_default_value); + } + break; + } END_CREATE_VT_ITER_SWITCH_LAMBDA #define AGENT_VIRTUAL_TABLE_CREATE_ITER diff --git a/src/share/config/ob_config.cpp b/src/share/config/ob_config.cpp index 7fa82aaaf..d43d0de2e 100644 --- a/src/share/config/ob_config.cpp +++ b/src/share/config/ob_config.cpp @@ -189,6 +189,12 @@ const char *ObConfigItem::data_type() const } return type_ptr; } +bool ObConfigItem::is_default(const char *value_str_, + const char *value_default_str_, + int64_t size) const +{ + return 0 == strncasecmp(value_str_, value_default_str_, size); +} // ObConfigIntListItem ObConfigIntListItem::ObConfigIntListItem(ObConfigContainer *container, diff --git a/src/share/config/ob_config.h b/src/share/config/ob_config.h index f3cc2af2c..e5bb7cb11 100644 --- a/src/share/config/ob_config.h +++ b/src/share/config/ob_config.h @@ -194,6 +194,11 @@ public: ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); return ObString::make_string(value_ptr()).case_compare(str); } + const char *default_str() const + { + ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); + return value_default_ptr(); + } virtual const char *spfile_str() const { const char *ret = nullptr; @@ -233,6 +238,9 @@ public: { return attr_.is_static(); } + virtual bool is_default(const char *value_str_, + const char *value_default_str_, + int64_t size) const; virtual bool operator >(const char *) const { return false; } virtual bool operator >=(const char *) const { return false; } virtual bool operator <(const char *) const { return false; } @@ -241,18 +249,14 @@ public: virtual ObConfigItemType get_config_item_type() const { return ObConfigItemType::OB_CONF_ITEM_TYPE_UNKNOWN; } - const char *default_str() const - { - return value_default_ptr(); - } protected: //use current value to do input operation virtual bool set(const char *str) = 0; virtual const char *value_ptr() const = 0; virtual const char *value_reboot_ptr() const = 0; + virtual const char *value_default_ptr() const = 0; virtual uint64_t value_len() const = 0; virtual uint64_t value_reboot_len() const = 0; - virtual const char *value_default_ptr() const = 0; const ObConfigChecker *ck_; int64_t version_; int64_t dumped_version_; @@ -331,13 +335,6 @@ protected: bool valid_; }; - virtual const char *get_default_ptr() const = 0; - - const char *value_default_ptr() const override - { - return get_default_ptr(); - } - struct ObInnerConfigIntListItem value_; static const uint64_t VALUE_BUF_SIZE = 32 * MAX_INDEX_SIZE; char value_str_[VALUE_BUF_SIZE]; @@ -463,13 +460,6 @@ protected: return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - - const char *value_default_ptr() const override - { - return get_default_ptr(); - } - char value_str_[VALUE_BUF_SIZE]; char value_reboot_str_[VALUE_BUF_SIZE]; private: @@ -519,11 +509,6 @@ protected: virtual bool set(const char *str); virtual int64_t parse(const char *str, bool &valid) const = 0; - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } private: int64_t value_; int64_t min_value_; @@ -610,12 +595,6 @@ protected: return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 64UL; char value_str_[VALUE_BUF_SIZE]; char value_reboot_str_[VALUE_BUF_SIZE]; @@ -684,7 +663,7 @@ protected: { return value_str_; } - char const *value_reboot_ptr() const override + const char *value_reboot_ptr() const override { return value_reboot_str_; } @@ -697,13 +676,6 @@ protected: return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - - const char *value_default_ptr() const override - { - return get_default_ptr(); - } - static const uint64_t VALUE_BUF_SIZE = 32UL; char value_str_[VALUE_BUF_SIZE]; char value_reboot_str_[VALUE_BUF_SIZE]; @@ -761,11 +733,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 32UL; char value_str_[VALUE_BUF_SIZE]; @@ -823,11 +790,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 32UL; char value_str_[VALUE_BUF_SIZE]; @@ -902,12 +864,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } - static const uint64_t VALUE_BUF_SIZE = 64UL; char value_str_[VALUE_BUF_SIZE]; char value_reboot_str_[VALUE_BUF_SIZE]; @@ -955,16 +911,10 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 8UL; char value_str_[VALUE_BUF_SIZE]; char value_reboot_str_[VALUE_BUF_SIZE]; - private: bool value_; DISALLOW_COPY_AND_ASSIGN(ObConfigBoolItem); @@ -1033,11 +983,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 65536UL; char value_str_[VALUE_BUF_SIZE]; @@ -1174,13 +1119,6 @@ protected: { return sizeof(value_reboot_str_); } - //if there is subclass from ObConfigLogArchiveOptionsItem, please implement it in - //ob_parameter_macro.h - //virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return NULL; //get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 2048UL; char value_str_[VALUE_BUF_SIZE]; @@ -1260,11 +1198,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } static const uint64_t VALUE_BUF_SIZE = 32UL; // 32 is enough for version like 4.2.0.0 char value_str_[VALUE_BUF_SIZE]; @@ -1361,11 +1294,6 @@ protected: { return sizeof(value_reboot_str_); } - virtual const char *get_default_ptr() const = 0; - const char *value_default_ptr() const override - { - return get_default_ptr(); - } protected: static const uint64_t VALUE_BUF_SIZE = 65536UL; diff --git a/src/share/inner_table/ob_inner_table_schema.12451_12500.cpp b/src/share/inner_table/ob_inner_table_schema.12451_12500.cpp index 2dd93a967..22e98ce24 100644 --- a/src/share/inner_table/ob_inner_table_schema.12451_12500.cpp +++ b/src/share/inner_table/ob_inner_table_schema.12451_12500.cpp @@ -25,6 +25,84 @@ using namespace common; namespace share { +int ObInnerTableSchema::all_virtual_sys_variable_default_value_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_SYS_DATABASE_ID); + table_schema.set_table_id(OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(VIRTUAL_TABLE); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + ObObj variable_name_default; + variable_name_default.set_varchar(ObString::make_string("")); + ADD_COLUMN_SCHEMA_T("variable_name", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + OB_MAX_CONFIG_NAME_LEN, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false, //is_autoincrement + variable_name_default, + variable_name_default); //default_value + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("default_value", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_INVALID, //column_collation_type + OB_MAX_CONFIG_VALUE_LEN, //column_length + -1, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + table_schema.set_index_using_type(USING_HASH); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::all_virtual_transfer_partition_task_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp b/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp index 74a7ed75e..23382ad39 100644 --- a/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp +++ b/src/share/inner_table/ob_inner_table_schema.15401_15450.cpp @@ -4967,6 +4967,289 @@ int ObInnerTableSchema::all_virtual_aux_stat_real_agent_ora_schema(ObTableSchema return ret; } +int ObInnerTableSchema::all_virtual_sys_variable_real_agent_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(3); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(VIRTUAL_TABLE); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCollationType::CS_TYPE_UTF8MB4_BIN); + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("TENANT_ID", //column_name + ++column_id, //column_id + 1, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("ZONE", //column_name + ++column_id, //column_id + 2, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + MAX_ZONE_LENGTH, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("NAME", //column_name + ++column_id, //column_id + 3, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_NAME_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("DATA_TYPE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("VALUE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_VALUE_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("INFO", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_INFO_LEN, //column_length + 2, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("FLAGS", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObNumberType, //column_type + CS_TYPE_INVALID, //column_collation_type + 38, //column_length + 38, //column_precision + 0, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("MIN_VAL", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_VALUE_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("MAX_VAL", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_VALUE_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("GMT_CREATE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObTimestampLTZType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("GMT_MODIFIED", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObTimestampLTZType, //column_type + CS_TYPE_INVALID, //column_collation_type + 0, //column_length + -1, //column_precision + -1, //column_scale + false, //is_nullable + false); //is_autoincrement + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + +int ObInnerTableSchema::all_virtual_sys_variable_default_value_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(VIRTUAL_TABLE); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCollationType::CS_TYPE_UTF8MB4_BIN); + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("VARIABLE_NAME", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_NAME_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + + if (OB_SUCC(ret)) { + ADD_COLUMN_SCHEMA("DEFAULT_VALUE", //column_name + ++column_id, //column_id + 0, //rowkey_id + 0, //index_id + 0, //part_key_pos + ObVarcharType, //column_type + CS_TYPE_UTF8MB4_BIN, //column_collation_type + OB_MAX_CONFIG_VALUE_LEN, //column_length + 2, //column_precision + -1, //column_scale + true, //is_nullable + false); //is_autoincrement + } + table_schema.set_index_using_type(USING_HASH); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::all_virtual_transfer_partition_task_real_agent_ora_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp index 30e6e5e45..bf4e9df3b 100644 --- a/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21201_21250.cpp @@ -960,7 +960,7 @@ int ObInnerTableSchema::gv_ob_parameters_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL FROM oceanbase.__all_virtual_tenant_parameter_stat )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL, DEFAULT_VALUE, CAST (CASE ISDEFAULT WHEN 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.__all_virtual_tenant_parameter_stat )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1010,7 +1010,7 @@ int ObInnerTableSchema::v_ob_parameters_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL FROM oceanbase.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL, DEFAULT_VALUE, CAST (CASE ISDEFAULT WHEN 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp index a09abb3ab..9e2865901 100644 --- a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp @@ -2410,7 +2410,7 @@ int ObInnerTableSchema::cdb_ob_sys_variables_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT GMT_CREATE AS CREATE_TIME, GMT_MODIFIED AS MODIFY_TIME, TENANT_ID, NAME, VALUE, MIN_VAL as MIN_VALUE, MAX_VAL as MAX_VALUE, CASE FLAGS & 0x3 WHEN 1 THEN "GLOBAL_ONLY" WHEN 2 THEN "SESSION_ONLY" WHEN 3 THEN "GLOBAL | SESSION" ELSE NULL END as SCOPE, INFO FROM oceanbase.__all_virtual_sys_variable )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT a.GMT_CREATE AS CREATE_TIME, a.GMT_MODIFIED AS MODIFY_TIME, a.TENANT_ID as TENANT_ID, a.NAME as NAME, a.VALUE as VALUE, a.MIN_VAL as MIN_VALUE, a.MAX_VAL as MAX_VALUE, CASE a.FLAGS & 0x3 WHEN 1 THEN "GLOBAL_ONLY" WHEN 2 THEN "SESSION_ONLY" WHEN 3 THEN "GLOBAL | SESSION" ELSE NULL END as SCOPE, a.INFO as INFO, b.DEFAULT_VALUE as DEFAULT_VALUE, CAST (CASE WHEN a.VALUE = b.DEFAULT_VALUE THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.__all_virtual_sys_variable a join oceanbase.__all_virtual_sys_variable_default_value b where a.name = b.variable_name; )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21501_21550.cpp b/src/share/inner_table/ob_inner_table_schema.21501_21550.cpp index a9770811f..48a2b1a51 100644 --- a/src/share/inner_table/ob_inner_table_schema.21501_21550.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21501_21550.cpp @@ -25,6 +25,56 @@ using namespace common; namespace share { +int ObInnerTableSchema::dba_ob_sys_variables_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_SYS_DATABASE_ID); + table_schema.set_table_id(OB_DBA_OB_SYS_VARIABLES_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_DBA_OB_SYS_VARIABLES_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT a.GMT_CREATE AS CREATE_TIME, a.GMT_MODIFIED AS MODIFY_TIME, a.NAME as NAME, a.VALUE as VALUE, a.MIN_VAL as MIN_VALUE, a.MAX_VAL as MAX_VALUE, CASE a.FLAGS & 0x3 WHEN 1 THEN "GLOBAL_ONLY" WHEN 2 THEN "SESSION_ONLY" WHEN 3 THEN "GLOBAL | SESSION" ELSE NULL END as SCOPE, a.INFO as INFO, b.DEFAULT_VALUE as DEFAULT_VALUE, CAST (CASE WHEN a.VALUE = b.DEFAULT_VALUE THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.__all_sys_variable a join oceanbase.__all_virtual_sys_variable_default_value b where a.name = b.variable_name; )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::dba_ob_transfer_partition_tasks_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp index 6918f6f6d..4b18796bf 100644 --- a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp @@ -860,7 +860,7 @@ int ObInnerTableSchema::gv_ob_parameters_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL FROM SYS.ALL_VIRTUAL_TENANT_PARAMETER_STAT )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL, DEFAULT_VALUE, CAST (CASE ISDEFAULT WHEN 1 THEN 'YES' ELSE 'NO' END AS VARCHAR2(3)) AS ISDEFAULT FROM SYS.ALL_VIRTUAL_TENANT_PARAMETER_STAT )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -910,7 +910,7 @@ int ObInnerTableSchema::v_ob_parameters_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL FROM SYS.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT SVR_IP, SVR_PORT, ZONE, SCOPE, TENANT_ID, NAME, DATA_TYPE, VALUE, INFO, SECTION, EDIT_LEVEL, DEFAULT_VALUE, CAST (CASE ISDEFAULT WHEN '1' THEN 'YES' ELSE 'NO' END AS VARCHAR2(3)) AS ISDEFAULT FROM SYS.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28201_28250.cpp b/src/share/inner_table/ob_inner_table_schema.28201_28250.cpp index 55e8815f2..2e81950e4 100644 --- a/src/share/inner_table/ob_inner_table_schema.28201_28250.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28201_28250.cpp @@ -175,6 +175,56 @@ int ObInnerTableSchema::dba_ob_aux_statistics_ora_schema(ObTableSchema &table_sc return ret; } +int ObInnerTableSchema::dba_ob_sys_variables_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_DBA_OB_SYS_VARIABLES_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_DBA_OB_SYS_VARIABLES_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT A.GMT_CREATE AS CREATE_TIME, A.GMT_MODIFIED AS MODIFY_TIME, A.NAME as NAME, A.VALUE as VALUE, A.MIN_VAL as MIN_VALUE, A.MAX_VAL as MAX_VALUE, CASE BITAND(A.FLAGS,3) WHEN 1 THEN 'GLOBAL_ONLY' WHEN 2 THEN 'SESSION_ONLY' WHEN 3 THEN 'GLOBAL | SESSION' ELSE NULL END as SCOPE, A.INFO as INFO, B.DEFAULT_VALUE as DEFAULT_VALUE, CAST (CASE WHEN A.VALUE = B.DEFAULT_VALUE THEN 'YES' ELSE 'NO' END AS VARCHAR2(3)) AS ISDEFAULT FROM SYS.ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT A, SYS.ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE B WHERE A.NAME = B.VARIABLE_NAME; )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::dba_index_usage_ora_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.h b/src/share/inner_table/ob_inner_table_schema.h index b7f1c26ca..8244bab64 100644 --- a/src/share/inner_table/ob_inner_table_schema.h +++ b/src/share/inner_table/ob_inner_table_schema.h @@ -1006,6 +1006,7 @@ public: static int all_virtual_checkpoint_diagnose_checkpoint_unit_info_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_checkpoint_diagnose_info_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_aux_stat_schema(share::schema::ObTableSchema &table_schema); + static int all_virtual_sys_variable_default_value_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_transfer_partition_task_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_transfer_partition_task_history_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_tenant_snapshot_job_schema(share::schema::ObTableSchema &table_schema); @@ -1271,6 +1272,8 @@ public: static int all_virtual_ls_info_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_cgroup_config_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_aux_stat_real_agent_ora_schema(share::schema::ObTableSchema &table_schema); + static int all_virtual_sys_variable_real_agent_ora_schema(share::schema::ObTableSchema &table_schema); + static int all_virtual_sys_variable_default_value_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_transfer_partition_task_real_agent_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_transfer_partition_task_history_real_agent_ora_schema(share::schema::ObTableSchema &table_schema); static int all_virtual_ls_snapshot_ora_schema(share::schema::ObTableSchema &table_schema); @@ -1650,6 +1653,7 @@ public: static int dba_ob_aux_statistics_schema(share::schema::ObTableSchema &table_schema); static int cdb_ob_aux_statistics_schema(share::schema::ObTableSchema &table_schema); static int dba_index_usage_schema(share::schema::ObTableSchema &table_schema); + static int dba_ob_sys_variables_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_transfer_partition_tasks_schema(share::schema::ObTableSchema &table_schema); static int cdb_ob_transfer_partition_tasks_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_transfer_partition_task_history_schema(share::schema::ObTableSchema &table_schema); @@ -2125,6 +2129,7 @@ public: static int gv_ob_cgroup_config_ora_schema(share::schema::ObTableSchema &table_schema); static int v_ob_cgroup_config_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_aux_statistics_ora_schema(share::schema::ObTableSchema &table_schema); + static int dba_ob_sys_variables_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_index_usage_ora_schema(share::schema::ObTableSchema &table_schema); static int gv_ob_ls_snapshots_ora_schema(share::schema::ObTableSchema &table_schema); static int v_ob_ls_snapshots_ora_schema(share::schema::ObTableSchema &table_schema); @@ -3630,6 +3635,7 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_checkpoint_diagnose_checkpoint_unit_info_schema, ObInnerTableSchema::all_virtual_checkpoint_diagnose_info_schema, ObInnerTableSchema::all_virtual_aux_stat_schema, + ObInnerTableSchema::all_virtual_sys_variable_default_value_schema, ObInnerTableSchema::all_virtual_transfer_partition_task_schema, ObInnerTableSchema::all_virtual_transfer_partition_task_history_schema, ObInnerTableSchema::all_virtual_tenant_snapshot_job_schema, @@ -3905,6 +3911,8 @@ const schema_create_func virtual_table_schema_creators [] = { ObInnerTableSchema::all_virtual_ls_info_ora_schema, ObInnerTableSchema::all_virtual_cgroup_config_ora_schema, ObInnerTableSchema::all_virtual_aux_stat_real_agent_ora_schema, + ObInnerTableSchema::all_virtual_sys_variable_real_agent_ora_schema, + ObInnerTableSchema::all_virtual_sys_variable_default_value_ora_schema, ObInnerTableSchema::all_virtual_transfer_partition_task_real_agent_ora_schema, ObInnerTableSchema::all_virtual_transfer_partition_task_history_real_agent_ora_schema, ObInnerTableSchema::all_virtual_ls_snapshot_ora_schema, @@ -4368,6 +4376,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::dba_ob_aux_statistics_schema, ObInnerTableSchema::cdb_ob_aux_statistics_schema, ObInnerTableSchema::dba_index_usage_schema, + ObInnerTableSchema::dba_ob_sys_variables_schema, ObInnerTableSchema::dba_ob_transfer_partition_tasks_schema, ObInnerTableSchema::cdb_ob_transfer_partition_tasks_schema, ObInnerTableSchema::dba_ob_transfer_partition_task_history_schema, @@ -4843,6 +4852,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::gv_ob_cgroup_config_ora_schema, ObInnerTableSchema::v_ob_cgroup_config_ora_schema, ObInnerTableSchema::dba_ob_aux_statistics_ora_schema, + ObInnerTableSchema::dba_ob_sys_variables_ora_schema, ObInnerTableSchema::dba_index_usage_ora_schema, ObInnerTableSchema::gv_ob_ls_snapshots_ora_schema, ObInnerTableSchema::v_ob_ls_snapshots_ora_schema, @@ -5448,6 +5458,7 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_MEMTABLE_INFO_TID, OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_CHECKPOINT_UNIT_INFO_TID, OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_INFO_TID, + OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TID, OB_ALL_VIRTUAL_TENANT_SNAPSHOT_JOB_TID, OB_ALL_VIRTUAL_LS_SNAPSHOT_TID, OB_ALL_VIRTUAL_TENANT_SNAPSHOT_LS_REPLICA_HISTORY_TID, @@ -5719,6 +5730,8 @@ const uint64_t tenant_space_tables [] = { OB_ALL_VIRTUAL_LS_INFO_ORA_TID, OB_ALL_VIRTUAL_CGROUP_CONFIG_ORA_TID, OB_ALL_VIRTUAL_AUX_STAT_REAL_AGENT_ORA_TID, + OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TID, + OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TID, OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT_ORA_TID, OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT_ORA_TID, OB_ALL_VIRTUAL_LS_SNAPSHOT_ORA_TID, @@ -5993,6 +6006,7 @@ const uint64_t tenant_space_tables [] = { OB_V_OB_CGROUP_CONFIG_TID, OB_DBA_OB_AUX_STATISTICS_TID, OB_DBA_INDEX_USAGE_TID, + OB_DBA_OB_SYS_VARIABLES_TID, OB_DBA_OB_TRANSFER_PARTITION_TASKS_TID, OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_TID, OB_GV_OB_LS_SNAPSHOTS_TID, @@ -6454,6 +6468,7 @@ const uint64_t tenant_space_tables [] = { OB_GV_OB_CGROUP_CONFIG_ORA_TID, OB_V_OB_CGROUP_CONFIG_ORA_TID, OB_DBA_OB_AUX_STATISTICS_ORA_TID, + OB_DBA_OB_SYS_VARIABLES_ORA_TID, OB_DBA_INDEX_USAGE_ORA_TID, OB_GV_OB_LS_SNAPSHOTS_ORA_TID, OB_V_OB_LS_SNAPSHOTS_ORA_TID, @@ -7294,6 +7309,7 @@ const uint64_t all_ora_mapping_virtual_table_org_tables [] = { OB_ALL_VIRTUAL_IMPORT_TABLE_TASK_HISTORY_TID, OB_ALL_VIRTUAL_LS_INFO_TID, OB_ALL_VIRTUAL_CGROUP_CONFIG_TID, + OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TID, OB_ALL_VIRTUAL_LS_SNAPSHOT_TID, OB_ALL_VIRTUAL_NIC_INFO_TID, }; @@ -7435,6 +7451,7 @@ const uint64_t all_ora_mapping_virtual_tables [] = { OB_ALL_VIRTUAL_SQL_AUDIT_O , OB_ALL_VIRTUAL_IMPORT_TABLE_TASK_HISTORY_ORA_TID , OB_ALL_VIRTUAL_LS_INFO_ORA_TID , OB_ALL_VIRTUAL_CGROUP_CONFIG_ORA_TID +, OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TID , OB_ALL_VIRTUAL_LS_SNAPSHOT_ORA_TID , OB_ALL_VIRTUAL_NIC_INFO_ORA_TID , }; @@ -7933,6 +7950,7 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_MEMTABLE_INFO_TNAME, OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_CHECKPOINT_UNIT_INFO_TNAME, OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_INFO_TNAME, + OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TNAME, OB_ALL_VIRTUAL_TENANT_SNAPSHOT_JOB_TNAME, OB_ALL_VIRTUAL_LS_SNAPSHOT_TNAME, OB_ALL_VIRTUAL_TENANT_SNAPSHOT_LS_REPLICA_HISTORY_TNAME, @@ -8204,6 +8222,8 @@ const char* const tenant_space_table_names [] = { OB_ALL_VIRTUAL_LS_INFO_ORA_TNAME, OB_ALL_VIRTUAL_CGROUP_CONFIG_ORA_TNAME, OB_ALL_VIRTUAL_AUX_STAT_REAL_AGENT_ORA_TNAME, + OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TNAME, + OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TNAME, OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT_ORA_TNAME, OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT_ORA_TNAME, OB_ALL_VIRTUAL_LS_SNAPSHOT_ORA_TNAME, @@ -8478,6 +8498,7 @@ const char* const tenant_space_table_names [] = { OB_V_OB_CGROUP_CONFIG_TNAME, OB_DBA_OB_AUX_STATISTICS_TNAME, OB_DBA_INDEX_USAGE_TNAME, + OB_DBA_OB_SYS_VARIABLES_TNAME, OB_DBA_OB_TRANSFER_PARTITION_TASKS_TNAME, OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_TNAME, OB_GV_OB_LS_SNAPSHOTS_TNAME, @@ -8939,6 +8960,7 @@ const char* const tenant_space_table_names [] = { OB_GV_OB_CGROUP_CONFIG_ORA_TNAME, OB_V_OB_CGROUP_CONFIG_ORA_TNAME, OB_DBA_OB_AUX_STATISTICS_ORA_TNAME, + OB_DBA_OB_SYS_VARIABLES_ORA_TNAME, OB_DBA_INDEX_USAGE_ORA_TNAME, OB_GV_OB_LS_SNAPSHOTS_ORA_TNAME, OB_V_OB_LS_SNAPSHOTS_ORA_TNAME, @@ -12466,11 +12488,11 @@ static inline int get_sys_table_lob_aux_schema(const uint64_t tid, const int64_t OB_CORE_TABLE_COUNT = 4; const int64_t OB_SYS_TABLE_COUNT = 284; -const int64_t OB_VIRTUAL_TABLE_COUNT = 788; -const int64_t OB_SYS_VIEW_COUNT = 854; -const int64_t OB_SYS_TENANT_TABLE_COUNT = 1931; +const int64_t OB_VIRTUAL_TABLE_COUNT = 791; +const int64_t OB_SYS_VIEW_COUNT = 856; +const int64_t OB_SYS_TENANT_TABLE_COUNT = 1936; const int64_t OB_CORE_SCHEMA_VERSION = 1; -const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 1934; +const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 1939; } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema.vt.cpp b/src/share/inner_table/ob_inner_table_schema.vt.cpp index a13dd00c5..7c061cb1c 100644 --- a/src/share/inner_table/ob_inner_table_schema.vt.cpp +++ b/src/share/inner_table/ob_inner_table_schema.vt.cpp @@ -742,6 +742,13 @@ bool vt_mapping_init() tmp_vt_mapping.is_real_vt_ = true; } + { + int64_t idx = OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TID - start_idx; + VTMapping &tmp_vt_mapping = vt_mappings[idx]; + tmp_vt_mapping.mapping_tid_ = OB_ALL_SYS_VARIABLE_TID; + tmp_vt_mapping.is_real_vt_ = true; + } + { int64_t idx = OB_ALL_VIRTUAL_TABLEGROUP_REAL_AGENT_ORA_TID - start_idx; VTMapping &tmp_vt_mapping = vt_mappings[idx]; diff --git a/src/share/inner_table/ob_inner_table_schema_constants.h b/src/share/inner_table/ob_inner_table_schema_constants.h index 283fa4f54..f069d5356 100644 --- a/src/share/inner_table/ob_inner_table_schema_constants.h +++ b/src/share/inner_table/ob_inner_table_schema_constants.h @@ -742,6 +742,7 @@ const uint64_t OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_MEMTABLE_INFO_TID = 12437; // const uint64_t OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_CHECKPOINT_UNIT_INFO_TID = 12438; // "__all_virtual_checkpoint_diagnose_checkpoint_unit_info" const uint64_t OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_INFO_TID = 12439; // "__all_virtual_checkpoint_diagnose_info" const uint64_t OB_ALL_VIRTUAL_AUX_STAT_TID = 12447; // "__all_virtual_aux_stat" +const uint64_t OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TID = 12450; // "__all_virtual_sys_variable_default_value" const uint64_t OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_TID = 12451; // "__all_virtual_transfer_partition_task" const uint64_t OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_TID = 12452; // "__all_virtual_transfer_partition_task_history" const uint64_t OB_ALL_VIRTUAL_TENANT_SNAPSHOT_JOB_TID = 12453; // "__all_virtual_tenant_snapshot_job" @@ -1007,6 +1008,8 @@ const uint64_t OB_ALL_VIRTUAL_IMPORT_TABLE_TASK_HISTORY_ORA_TID = 15412; // "ALL const uint64_t OB_ALL_VIRTUAL_LS_INFO_ORA_TID = 15414; // "ALL_VIRTUAL_LS_INFO_ORA" const uint64_t OB_ALL_VIRTUAL_CGROUP_CONFIG_ORA_TID = 15418; // "ALL_VIRTUAL_CGROUP_CONFIG_ORA" const uint64_t OB_ALL_VIRTUAL_AUX_STAT_REAL_AGENT_ORA_TID = 15427; // "ALL_VIRTUAL_AUX_STAT_REAL_AGENT_ORA" +const uint64_t OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TID = 15428; // "ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA" +const uint64_t OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TID = 15429; // "ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA" const uint64_t OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT_ORA_TID = 15430; // "ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT_ORA" const uint64_t OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT_ORA_TID = 15431; // "ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT_ORA" const uint64_t OB_ALL_VIRTUAL_LS_SNAPSHOT_ORA_TID = 15439; // "ALL_VIRTUAL_LS_SNAPSHOT_ORA" @@ -1386,6 +1389,7 @@ const uint64_t OB_V_OB_CGROUP_CONFIG_TID = 21480; // "V$OB_CGROUP_CONFIG" const uint64_t OB_DBA_OB_AUX_STATISTICS_TID = 21497; // "DBA_OB_AUX_STATISTICS" const uint64_t OB_CDB_OB_AUX_STATISTICS_TID = 21498; // "CDB_OB_AUX_STATISTICS" const uint64_t OB_DBA_INDEX_USAGE_TID = 21499; // "DBA_INDEX_USAGE" +const uint64_t OB_DBA_OB_SYS_VARIABLES_TID = 21500; // "DBA_OB_SYS_VARIABLES" const uint64_t OB_DBA_OB_TRANSFER_PARTITION_TASKS_TID = 21501; // "DBA_OB_TRANSFER_PARTITION_TASKS" const uint64_t OB_CDB_OB_TRANSFER_PARTITION_TASKS_TID = 21502; // "CDB_OB_TRANSFER_PARTITION_TASKS" const uint64_t OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_TID = 21503; // "DBA_OB_TRANSFER_PARTITION_TASK_HISTORY" @@ -1861,6 +1865,7 @@ const uint64_t OB_V_OB_PL_CACHE_OBJECT_ORA_TID = 28199; // "V$OB_PL_CACHE_OBJECT const uint64_t OB_GV_OB_CGROUP_CONFIG_ORA_TID = 28200; // "GV$OB_CGROUP_CONFIG_ORA" const uint64_t OB_V_OB_CGROUP_CONFIG_ORA_TID = 28201; // "V$OB_CGROUP_CONFIG_ORA" const uint64_t OB_DBA_OB_AUX_STATISTICS_ORA_TID = 28210; // "DBA_OB_AUX_STATISTICS_ORA" +const uint64_t OB_DBA_OB_SYS_VARIABLES_ORA_TID = 28211; // "DBA_OB_SYS_VARIABLES_ORA" const uint64_t OB_DBA_INDEX_USAGE_ORA_TID = 28214; // "DBA_INDEX_USAGE_ORA" const uint64_t OB_GV_OB_LS_SNAPSHOTS_ORA_TID = 28215; // "GV$OB_LS_SNAPSHOTS_ORA" const uint64_t OB_V_OB_LS_SNAPSHOTS_ORA_TID = 28216; // "V$OB_LS_SNAPSHOTS_ORA" @@ -3350,6 +3355,7 @@ const char *const OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_MEMTABLE_INFO_TNAME = "__al const char *const OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_CHECKPOINT_UNIT_INFO_TNAME = "__all_virtual_checkpoint_diagnose_checkpoint_unit_info"; const char *const OB_ALL_VIRTUAL_CHECKPOINT_DIAGNOSE_INFO_TNAME = "__all_virtual_checkpoint_diagnose_info"; const char *const OB_ALL_VIRTUAL_AUX_STAT_TNAME = "__all_virtual_aux_stat"; +const char *const OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_TNAME = "__all_virtual_sys_variable_default_value"; const char *const OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_TNAME = "__all_virtual_transfer_partition_task"; const char *const OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_TNAME = "__all_virtual_transfer_partition_task_history"; const char *const OB_ALL_VIRTUAL_TENANT_SNAPSHOT_JOB_TNAME = "__all_virtual_tenant_snapshot_job"; @@ -3615,6 +3621,8 @@ const char *const OB_ALL_VIRTUAL_IMPORT_TABLE_TASK_HISTORY_ORA_TNAME = "ALL_VIRT const char *const OB_ALL_VIRTUAL_LS_INFO_ORA_TNAME = "ALL_VIRTUAL_LS_INFO"; const char *const OB_ALL_VIRTUAL_CGROUP_CONFIG_ORA_TNAME = "ALL_VIRTUAL_CGROUP_CONFIG"; const char *const OB_ALL_VIRTUAL_AUX_STAT_REAL_AGENT_ORA_TNAME = "ALL_VIRTUAL_AUX_STAT_REAL_AGENT"; +const char *const OB_ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT_ORA_TNAME = "ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT"; +const char *const OB_ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE_ORA_TNAME = "ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE"; const char *const OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT_ORA_TNAME = "ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT"; const char *const OB_ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT_ORA_TNAME = "ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT"; const char *const OB_ALL_VIRTUAL_LS_SNAPSHOT_ORA_TNAME = "ALL_VIRTUAL_LS_SNAPSHOT"; @@ -3994,6 +4002,7 @@ const char *const OB_V_OB_CGROUP_CONFIG_TNAME = "V$OB_CGROUP_CONFIG"; const char *const OB_DBA_OB_AUX_STATISTICS_TNAME = "DBA_OB_AUX_STATISTICS"; const char *const OB_CDB_OB_AUX_STATISTICS_TNAME = "CDB_OB_AUX_STATISTICS"; const char *const OB_DBA_INDEX_USAGE_TNAME = "DBA_INDEX_USAGE"; +const char *const OB_DBA_OB_SYS_VARIABLES_TNAME = "DBA_OB_SYS_VARIABLES"; const char *const OB_DBA_OB_TRANSFER_PARTITION_TASKS_TNAME = "DBA_OB_TRANSFER_PARTITION_TASKS"; const char *const OB_CDB_OB_TRANSFER_PARTITION_TASKS_TNAME = "CDB_OB_TRANSFER_PARTITION_TASKS"; const char *const OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_TNAME = "DBA_OB_TRANSFER_PARTITION_TASK_HISTORY"; @@ -4469,6 +4478,7 @@ const char *const OB_V_OB_PL_CACHE_OBJECT_ORA_TNAME = "V$OB_PL_CACHE_OBJECT"; const char *const OB_GV_OB_CGROUP_CONFIG_ORA_TNAME = "GV$OB_CGROUP_CONFIG"; const char *const OB_V_OB_CGROUP_CONFIG_ORA_TNAME = "V$OB_CGROUP_CONFIG"; const char *const OB_DBA_OB_AUX_STATISTICS_ORA_TNAME = "DBA_OB_AUX_STATISTICS"; +const char *const OB_DBA_OB_SYS_VARIABLES_ORA_TNAME = "DBA_OB_SYS_VARIABLES"; const char *const OB_DBA_INDEX_USAGE_ORA_TNAME = "DBA_INDEX_USAGE"; const char *const OB_GV_OB_LS_SNAPSHOTS_ORA_TNAME = "GV$OB_LS_SNAPSHOTS"; const char *const OB_V_OB_LS_SNAPSHOTS_ORA_TNAME = "V$OB_LS_SNAPSHOTS"; diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index af9221acd..e2c2cf120 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -13958,8 +13958,19 @@ def_table_schema(**gen_iterate_virtual_table_def( keywords = all_def_keywords['__all_aux_stat'])) # 12448: __all_virtual_detect_lock_info # 12449: __all_virtual_client_to_server_session_info -# 12450: __all_virtual_sys_variable_default_value - +def_table_schema( + owner = 'linzhigang.lzg', + table_name = '__all_virtual_sys_variable_default_value', + table_id = '12450', + table_type = 'VIRTUAL_TABLE', + gm_columns = [], + rowkey_columns = [], + in_tenant_space = True, + normal_columns = [ + ('variable_name', 'varchar:OB_MAX_CONFIG_NAME_LEN', 'false', ''), + ('default_value', 'varchar:OB_MAX_CONFIG_VALUE_LEN', 'true') + ], +) def_table_schema(**gen_iterate_virtual_table_def( table_id = '12451', table_name = '__all_virtual_transfer_partition_task', @@ -14513,8 +14524,8 @@ def_table_schema(**no_direct_access(gen_oracle_mapping_virtual_table_def('15418' # 15425: __all_virtual_wr_sqlstat # 15426: __tenant_virtual_statname def_table_schema(**gen_oracle_mapping_real_virtual_table_def('15427', all_def_keywords['__all_aux_stat'])) -# 15428: __all_sys_variable -# 15429: __all_virtual_sys_variable_default_value +def_table_schema(**gen_oracle_mapping_real_virtual_table_def('15428', all_def_keywords['__all_sys_variable'])) +def_table_schema(**gen_oracle_mapping_virtual_table_def('15429', all_def_keywords['__all_virtual_sys_variable_default_value'])) def_table_schema(**no_direct_access(gen_oracle_mapping_real_virtual_table_def('15430', all_def_keywords['__all_transfer_partition_task']))) def_table_schema(**no_direct_access(gen_oracle_mapping_real_virtual_table_def('15431', all_def_keywords['__all_transfer_partition_task_history']))) # 15432: __all_virtual_wr_sqltext @@ -23110,7 +23121,13 @@ SELECT VALUE, INFO, SECTION, - EDIT_LEVEL + EDIT_LEVEL, + DEFAULT_VALUE, + CAST (CASE ISDEFAULT + WHEN 1 + THEN 'YES' + ELSE 'NO' + END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.__all_virtual_tenant_parameter_stat """.replace("\n", " ") ) @@ -23135,7 +23152,13 @@ def_table_schema( VALUE, INFO, SECTION, - EDIT_LEVEL + EDIT_LEVEL, + DEFAULT_VALUE, + CAST (CASE ISDEFAULT + WHEN 1 + THEN 'YES' + ELSE 'NO' + END AS CHAR(3)) AS ISDEFAULT FROM oceanbase.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() """.replace("\n", " ") @@ -26621,21 +26644,28 @@ def_table_schema( view_definition = """ SELECT - GMT_CREATE AS CREATE_TIME, - GMT_MODIFIED AS MODIFY_TIME, - TENANT_ID, - NAME, - VALUE, - MIN_VAL as MIN_VALUE, - MAX_VAL as MAX_VALUE, - CASE FLAGS & 0x3 + a.GMT_CREATE AS CREATE_TIME, + a.GMT_MODIFIED AS MODIFY_TIME, + a.TENANT_ID as TENANT_ID, + a.NAME as NAME, + a.VALUE as VALUE, + a.MIN_VAL as MIN_VALUE, + a.MAX_VAL as MAX_VALUE, + CASE a.FLAGS & 0x3 WHEN 1 THEN "GLOBAL_ONLY" WHEN 2 THEN "SESSION_ONLY" WHEN 3 THEN "GLOBAL | SESSION" ELSE NULL END as SCOPE, - INFO - FROM oceanbase.__all_virtual_sys_variable + a.INFO as INFO, + b.DEFAULT_VALUE as DEFAULT_VALUE, + CAST (CASE WHEN a.VALUE = b.DEFAULT_VALUE + THEN 'YES' + ELSE 'NO' + END AS CHAR(3)) AS ISDEFAULT + FROM oceanbase.__all_virtual_sys_variable a + join oceanbase.__all_virtual_sys_variable_default_value b + where a.name = b.variable_name; """.replace("\n", " "), ) @@ -32209,7 +32239,42 @@ def_table_schema( """.replace("\n", " "), ) -#21500: DBA_OB_SYS_VARIABLES +def_table_schema( + owner = 'linzhigang.lzg', + table_name = 'DBA_OB_SYS_VARIABLES', + table_id = '21500', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = + """ + SELECT + a.GMT_CREATE AS CREATE_TIME, + a.GMT_MODIFIED AS MODIFY_TIME, + a.NAME as NAME, + a.VALUE as VALUE, + a.MIN_VAL as MIN_VALUE, + a.MAX_VAL as MAX_VALUE, + CASE a.FLAGS & 0x3 + WHEN 1 THEN "GLOBAL_ONLY" + WHEN 2 THEN "SESSION_ONLY" + WHEN 3 THEN "GLOBAL | SESSION" + ELSE NULL + END as SCOPE, + a.INFO as INFO, + b.DEFAULT_VALUE as DEFAULT_VALUE, + CAST (CASE WHEN a.VALUE = b.DEFAULT_VALUE + THEN 'YES' + ELSE 'NO' + END AS CHAR(3)) AS ISDEFAULT + FROM oceanbase.__all_sys_variable a + join oceanbase.__all_virtual_sys_variable_default_value b + where a.name = b.variable_name; + """.replace("\n", " "), +) + def_table_schema( owner = 'msy164651', table_name = 'DBA_OB_TRANSFER_PARTITION_TASKS', @@ -57895,7 +57960,13 @@ SELECT VALUE, INFO, SECTION, - EDIT_LEVEL + EDIT_LEVEL, + DEFAULT_VALUE, + CAST (CASE ISDEFAULT + WHEN 1 + THEN 'YES' + ELSE 'NO' + END AS VARCHAR2(3)) AS ISDEFAULT FROM SYS.ALL_VIRTUAL_TENANT_PARAMETER_STAT """.replace("\n", " ") ) @@ -57912,17 +57983,24 @@ def_table_schema( gm_columns = [], in_tenant_space = True, view_definition = """ - SELECT SVR_IP, - SVR_PORT, - ZONE, - SCOPE, - TENANT_ID, - NAME, - DATA_TYPE, - VALUE, - INFO, - SECTION, - EDIT_LEVEL + SELECT + SVR_IP, + SVR_PORT, + ZONE, + SCOPE, + TENANT_ID, + NAME, + DATA_TYPE, + VALUE, + INFO, + SECTION, + EDIT_LEVEL, + DEFAULT_VALUE, + CAST (CASE ISDEFAULT + WHEN '1' + THEN 'YES' + ELSE 'NO' + END AS VARCHAR2(3)) AS ISDEFAULT FROM SYS.GV$OB_PARAMETERS WHERE SVR_IP = host_ip() AND SVR_PORT = rpc_port() """.replace("\n", " ") @@ -60489,7 +60567,42 @@ def_table_schema( WHERE TENANT_ID = EFFECTIVE_TENANT_ID(); """.replace("\n", " ") ) -# 28211: DBA_OB_SYS_VARIABLES +def_table_schema( + owner = 'linzhigang.lzg', + table_name = 'DBA_OB_SYS_VARIABLES', + name_postfix = '_ORA', + database_id = 'OB_ORA_SYS_DATABASE_ID', + table_id = '28211', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + rowkey_columns = [], + normal_columns = [], + in_tenant_space = True, + view_definition = + """ + SELECT + A.GMT_CREATE AS CREATE_TIME, + A.GMT_MODIFIED AS MODIFY_TIME, + A.NAME as NAME, + A.VALUE as VALUE, + A.MIN_VAL as MIN_VALUE, + A.MAX_VAL as MAX_VALUE, + CASE BITAND(A.FLAGS,3) + WHEN 1 THEN 'GLOBAL_ONLY' + WHEN 2 THEN 'SESSION_ONLY' + WHEN 3 THEN 'GLOBAL | SESSION' + ELSE NULL + END as SCOPE, + A.INFO as INFO, + B.DEFAULT_VALUE as DEFAULT_VALUE, + CAST (CASE WHEN A.VALUE = B.DEFAULT_VALUE + THEN 'YES' + ELSE 'NO' + END AS VARCHAR2(3)) AS ISDEFAULT + FROM SYS.ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT A, SYS.ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE B + WHERE A.NAME = B.VARIABLE_NAME; + """.replace("\n", " "), +) # 28212: GV$OB_ACTIVE_SESSION_HISTORY # 28213: V$OB_ACTIVE_SESSION_HISTORY diff --git a/src/share/inner_table/table_id_to_name b/src/share/inner_table/table_id_to_name index 4b86d4283..3e4a726d4 100644 --- a/src/share/inner_table/table_id_to_name +++ b/src/share/inner_table/table_id_to_name @@ -1062,6 +1062,7 @@ # 12439: __all_virtual_checkpoint_diagnose_info # 12447: __all_virtual_aux_stat # 12447: __all_aux_stat # BASE_TABLE_NAME +# 12450: __all_virtual_sys_variable_default_value # 12451: __all_virtual_transfer_partition_task # 12451: __all_transfer_partition_task # BASE_TABLE_NAME # 12452: __all_virtual_transfer_partition_task_history @@ -1649,6 +1650,10 @@ # 15418: __all_virtual_cgroup_config # BASE_TABLE_NAME # 15427: ALL_VIRTUAL_AUX_STAT_REAL_AGENT # 15427: __all_aux_stat # BASE_TABLE_NAME +# 15428: ALL_VIRTUAL_SYS_VARIABLE_REAL_AGENT +# 15428: __all_sys_variable # BASE_TABLE_NAME +# 15429: ALL_VIRTUAL_SYS_VARIABLE_DEFAULT_VALUE +# 15429: __all_virtual_sys_variable_default_value # BASE_TABLE_NAME # 15430: ALL_VIRTUAL_TRANSFER_PARTITION_TASK_REAL_AGENT # 15430: __all_transfer_partition_task # BASE_TABLE_NAME # 15431: ALL_VIRTUAL_TRANSFER_PARTITION_TASK_HISTORY_REAL_AGENT @@ -2034,6 +2039,7 @@ # 21497: DBA_OB_AUX_STATISTICS # 21498: CDB_OB_AUX_STATISTICS # 21499: DBA_INDEX_USAGE +# 21500: DBA_OB_SYS_VARIABLES # 21501: DBA_OB_TRANSFER_PARTITION_TASKS # 21502: CDB_OB_TRANSFER_PARTITION_TASKS # 21503: DBA_OB_TRANSFER_PARTITION_TASK_HISTORY @@ -2509,6 +2515,7 @@ # 28200: GV$OB_CGROUP_CONFIG # 28201: V$OB_CGROUP_CONFIG # 28210: DBA_OB_AUX_STATISTICS +# 28211: DBA_OB_SYS_VARIABLES # 28214: DBA_INDEX_USAGE # 28215: GV$OB_LS_SNAPSHOTS # 28216: V$OB_LS_SNAPSHOTS diff --git a/src/share/parameter/ob_parameter_macro.h b/src/share/parameter/ob_parameter_macro.h index 935351058..591aeca96 100644 --- a/src/share/parameter/ob_parameter_macro.h +++ b/src/share/parameter/ob_parameter_macro.h @@ -57,14 +57,14 @@ access_specifier: } \ TO_STRING_KV(K_(value_str)) \ protected: \ - const char *value_default_str_ = def; \ - const char *get_default_ptr() const override \ + const char *value_default_ptr() const override \ { \ return value_default_str_; \ } \ + static constexpr const char* value_default_str_ = def; \ } name; -#define _DEF_PARAMETER_RANGE_EASY(access_specifier, param, scope, name, def, args...) \ +#define _DEF_PARAMETER_RANGE_EASY(access_specifier, param, scope, name, def, args...) \ access_specifier: \ class ObConfig ## param ## Item ## _ ## name \ : public common::ObConfig ## param ## Item \ @@ -80,11 +80,11 @@ access_specifier: return *this; \ } \ protected: \ - const char *value_default_str_ = def; \ - const char *get_default_ptr() const override \ + const char *value_default_ptr() const override \ { \ return value_default_str_; \ } \ + static constexpr const char* value_default_str_ = def; \ } name; #define _DEF_PARAMETER_CHECKER_EASY(access_specifier, param, scope, name, def, checker, args...) \ @@ -106,13 +106,12 @@ access_specifier: return *this; \ } \ protected: \ - const char *value_default_str_ = def; \ - const char *get_default_ptr() const override \ + const char *value_default_ptr() const override \ { \ return value_default_str_; \ } \ + static constexpr const char* value_default_str_ = def; \ } name; - #define _DEF_PARAMETER_PARSER_EASY(access_specifier, param, scope, name, def, parser, args...) \ access_specifier: \ class ObConfig ## param ## Item ## _ ## name \ @@ -122,13 +121,13 @@ access_specifier: ObConfig ## param ## Item ## _ ## name() \ : common::ObConfig ## param ## Item( \ local_container(), scope, #name, def, \ - new (std::nothrow) parser(), args) {} \ - protected: \ - const char *value_default_str_ = def; \ - const char *get_default_ptr() const override \ + new (std::nothrow) parser(), args) {} \ + protected: \ + const char *value_default_ptr() const override \ { \ return value_default_str_; \ } \ + static constexpr const char* value_default_str_ = def; \ } name; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/share/system_variable/gen_ob_sys_variables.py b/src/share/system_variable/gen_ob_sys_variables.py index 9125dcf50..831dd76d3 100755 --- a/src/share/system_variable/gen_ob_sys_variables.py +++ b/src/share/system_variable/gen_ob_sys_variables.py @@ -207,6 +207,7 @@ def make_head_file(pdir, head_file_name, sorted_list): head_file.write(" static const common::ObObj &get_default_value(int64_t i);\n") head_file.write(" static const common::ObObj &get_base_value(int64_t i);\n") head_file.write(" static int64_t get_amount();\n"); + head_file.write(" static ObCollationType get_default_sysvar_collation();\n"); head_file.write(" static int set_value(const char *name, const char * new_value);\n"); head_file.write(" static int set_value(const common::ObString &name, const common::ObString &new_value);\n"); head_file.write(" static int set_base_value(const char *name, const char * new_value);\n"); @@ -336,6 +337,7 @@ def make_cpp_file(pdir, cpp_file_name, sorted_list): cpp_file.write("const ObObj &ObSysVariables::get_default_value(int64_t i){ return ObSysVarDefaultValues[i];}\n") cpp_file.write("const ObObj &ObSysVariables::get_base_value(int64_t i){ return ObSysVarBaseValues[i];}\n") cpp_file.write("int64_t ObSysVariables::get_amount(){ return var_amount;}\n") + cpp_file.write("ObCollationType ObSysVariables::get_default_sysvar_collation() { return CS_TYPE_UTF8MB4_GENERAL_CI;}\n") cpp_file.write("\n") cpp_file.write("int ObSysVariables::set_value(const char *name, const char * new_value)\n") cpp_file.write("{\n") @@ -400,11 +402,11 @@ int ObSysVariables::init_default_values() ObObj in_obj; ObObj out_obj; in_obj.set_varchar(sys_var_val_str); - in_obj.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI); + in_obj.set_collation_type(ObSysVariables::get_default_sysvar_collation()); ObObj base_in_obj; ObObj base_out_obj; base_in_obj.set_varchar(base_sys_var_val_str); - base_in_obj.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI); + base_in_obj.set_collation_type(ObSysVariables::get_default_sysvar_collation()); //varchar to others. so, no need to get collation from session ObCastCtx cast_ctx(&ObSysVarAllocator, NULL, diff --git a/src/share/system_variable/ob_system_variable.cpp b/src/share/system_variable/ob_system_variable.cpp index 5745f36a1..bb611fb2b 100644 --- a/src/share/system_variable/ob_system_variable.cpp +++ b/src/share/system_variable/ob_system_variable.cpp @@ -35,6 +35,7 @@ #include "sql/engine/expr/ob_expr_plsql_variable.h" #include "share/resource_manager/ob_resource_manager_proxy.h" #include "sql/engine/expr/ob_expr_uuid.h" +#include "lib/locale/ob_locale_type.h" #ifdef OB_BUILD_ORACLE_PL #include "pl/ob_pl_warning.h" #endif @@ -2437,18 +2438,6 @@ int ObSysVarOnCheckFuncs::check_session_readonly(ObExecContext &ctx, return ret; } -int ObSysVarOnCheckFuncs::check_locale_type_is_valid( - sql::ObExecContext &ctx, - const ObSetVar &set_var, - const ObBasicSysVar &sys_var, - const common::ObObj &in_val, - common::ObObj &out_val) -{ - int ret = OB_NOT_SUPPORTED; - LOG_USER_ERROR(OB_NOT_SUPPORTED, "lc_time_names"); - return ret; -} - int ObSysVarOnCheckFuncs::check_and_convert_plsql_warnings(sql::ObExecContext &ctx, const ObSetVar &set_var, const ObBasicSysVar &sys_var, @@ -2520,6 +2509,28 @@ int ObSysVarOnCheckFuncs::check_runtime_filter_type_is_valid( return ret; } +int ObSysVarOnCheckFuncs::check_locale_type_is_valid( + sql::ObExecContext &ctx, + const ObSetVar &set_var, + const ObBasicSysVar &sys_var, + const common::ObObj &in_val, + common::ObObj &out_val) +{ + int ret = OB_SUCCESS; + const ObString &locale_val = in_val.get_string(); + ObString valid_locale = in_val.get_string(); + if (true == set_var.is_set_default_) { + //do nothing + } else if (!is_valid_ob_locale(locale_val, valid_locale)) { //check if the variable is valid + ret = OB_ERR_WRONG_VALUE_FOR_VAR; + LOG_USER_ERROR(OB_ERR_WRONG_VALUE_FOR_VAR, sys_var.get_name().length(), sys_var.get_name().ptr(), + locale_val.length(), locale_val.ptr()); + } else { + OX(out_val.set_string(in_val.get_type(), valid_locale)); + } + return ret; +} + int ObSysVarOnUpdateFuncs::update_tx_isolation(ObExecContext &ctx, const ObSetVar &set_var, const ObBasicSysVar &sys_var, diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index 83a925e86..66834f1c9 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3447,7 +3447,7 @@ static struct VarsInit{ ObSysVars[244].info_ = "The locale indicated by the lc_time_names system variable controls the language used to display day and month names and abbreviations" ; ObSysVars[244].name_ = "lc_time_names" ; ObSysVars[244].data_type_ = ObVarcharType ; - ObSysVars[244].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[244].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::NEED_SERIALIZE ; ObSysVars[244].on_check_and_convert_func_ = "ObSysVarOnCheckFuncs::check_locale_type_is_valid" ; ObSysVars[244].id_ = SYS_VAR_LC_TIME_NAMES ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LC_TIME_NAMES)) ; @@ -4806,6 +4806,7 @@ ObString ObSysVariables::get_alias(int64_t i){ return ObSysVars[i].alias_;} const ObObj &ObSysVariables::get_default_value(int64_t i){ return ObSysVarDefaultValues[i];} const ObObj &ObSysVariables::get_base_value(int64_t i){ return ObSysVarBaseValues[i];} int64_t ObSysVariables::get_amount(){ return var_amount;} +ObCollationType ObSysVariables::get_default_sysvar_collation() { return CS_TYPE_UTF8MB4_GENERAL_CI;} int ObSysVariables::set_value(const char *name, const char * new_value) { @@ -4870,11 +4871,11 @@ int ObSysVariables::init_default_values() ObObj in_obj; ObObj out_obj; in_obj.set_varchar(sys_var_val_str); - in_obj.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI); + in_obj.set_collation_type(ObSysVariables::get_default_sysvar_collation()); ObObj base_in_obj; ObObj base_out_obj; base_in_obj.set_varchar(base_sys_var_val_str); - base_in_obj.set_collation_type(CS_TYPE_UTF8MB4_GENERAL_CI); + base_in_obj.set_collation_type(ObSysVariables::get_default_sysvar_collation()); //varchar to others. so, no need to get collation from session ObCastCtx cast_ctx(&ObSysVarAllocator, NULL, diff --git a/src/share/system_variable/ob_system_variable_init.h b/src/share/system_variable/ob_system_variable_init.h index c8d42cbc7..eb48b464a 100644 --- a/src/share/system_variable/ob_system_variable_init.h +++ b/src/share/system_variable/ob_system_variable_init.h @@ -80,6 +80,7 @@ public: static const common::ObObj &get_default_value(int64_t i); static const common::ObObj &get_base_value(int64_t i); static int64_t get_amount(); + static ObCollationType get_default_sysvar_collation(); static int set_value(const char *name, const char * new_value); static int set_value(const common::ObString &name, const common::ObString &new_value); static int set_base_value(const char *name, const char * new_value); diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index 577a65577..eb06ce069 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -3483,7 +3483,7 @@ "base_value": "en_US", "data_type": "varchar", "info": "The locale indicated by the lc_time_names system variable controls the language used to display day and month names and abbreviations", - "flags": "GLOBAL | SESSION | MYSQL_ONLY", + "flags": "GLOBAL | SESSION | MYSQL_ONLY | NEED_SERIALIZE", "on_check_and_convert_func": "ObSysVarOnCheckFuncs::check_locale_type_is_valid", "publish_version": "422", "info_cn": "", diff --git a/src/sql/engine/expr/ob_expr_date_format.cpp b/src/sql/engine/expr/ob_expr_date_format.cpp index 5d314a133..4d4840bc5 100644 --- a/src/sql/engine/expr/ob_expr_date_format.cpp +++ b/src/sql/engine/expr/ob_expr_date_format.cpp @@ -83,6 +83,7 @@ int ObExprDateFormat::calc_date_format(const ObExpr &expr, ObEvalCtx &ctx, ObDat ObSolidifiedVarsGetter helper(expr, ctx, ctx.exec_ctx_.get_my_session()); ObSQLMode sql_mode = 0; const common::ObTimeZoneInfo *tz_info = NULL; + ObString locale_name; if (OB_ISNULL(session = ctx.exec_ctx_.get_my_session())) { ret = OB_NOT_INIT; LOG_WARN("session is null", K(ret), K(session)); @@ -117,13 +118,16 @@ int ObExprDateFormat::calc_date_format(const ObExpr &expr, ObEvalCtx &ctx, ObDat } } else if (OB_UNLIKELY(format->get_string().empty())) { expr_datum.set_null(); + } else if (OB_FAIL(session->get_locale_name(locale_name))) { + LOG_WARN("failed to get locale time name", K(expr), K(expr_datum)); } else if (OB_FAIL(ObTimeConverter::ob_time_to_str_format(ob_time, format->get_string(), buf, buf_len, pos, - res_null))) { - LOG_WARN("failed to convert ob time to str with format"); + res_null, + locale_name))) { + LOG_WARN("failed to convert ob time to str with format"); } else if (res_null) { expr_datum.set_null(); } else { diff --git a/src/sql/engine/expr/ob_expr_from_unix_time.cpp b/src/sql/engine/expr/ob_expr_from_unix_time.cpp index 6444486da..3509d54a3 100644 --- a/src/sql/engine/expr/ob_expr_from_unix_time.cpp +++ b/src/sql/engine/expr/ob_expr_from_unix_time.cpp @@ -203,6 +203,7 @@ int ObExprFromUnixTime::eval_fromtime_normal(const ObExpr &expr, ObSolidifiedVarsGetter helper(expr, ctx, ctx.exec_ctx_.get_my_session()); ObSQLMode sql_mode = 0; const common::ObTimeZoneInfo *tz_info = NULL; + ObString locale_name; if (OB_ISNULL(session)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("session is null", K(ret)); @@ -260,11 +261,16 @@ int ObExprFromUnixTime::eval_fromtime_normal(const ObExpr &expr, ob_time, get_cur_time(ctx.exec_ctx_.get_physical_plan_ctx()), 0, false))) { LOG_WARN("failed to cast datum to obtime with date", K(ret)); - } else if (OB_FAIL(ObTimeConverter::ob_time_to_str_format( - ob_time, - param2->get_string(), - buf, BUF_LEN, pos, res_null))) { - LOG_WARN("failed to convert str", K(ret)); + } else if (OB_FAIL(session->get_locale_name(locale_name))) { + LOG_WARN("failed to get locale time name", K(expr), K(expr_datum)); + } else if (OB_FAIL(ObTimeConverter::ob_time_to_str_format(ob_time, + param2->get_string(), + buf, + BUF_LEN, + pos, + res_null, + locale_name))) { + LOG_WARN("failed to convert ob time to str with format"); } else if (res_null) { expr_datum.set_null(); } else { diff --git a/src/sql/engine/expr/ob_expr_time.cpp b/src/sql/engine/expr/ob_expr_time.cpp index d3d6d0439..23861e668 100644 --- a/src/sql/engine/expr/ob_expr_time.cpp +++ b/src/sql/engine/expr/ob_expr_time.cpp @@ -17,6 +17,7 @@ #include "sql/engine/expr/ob_datum_cast.h" #include "sql/engine/expr/ob_expr_day_of_func.h" #include "sql/engine/expr/ob_expr_util.h" +#include "lib/locale/ob_locale_type.h" using namespace oceanbase::common; using namespace oceanbase::sql; @@ -210,6 +211,7 @@ int ObExprTimeBase::calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum expr_datum.set_null(); } else { ObTime ot; + ObString locale_name; if (OB_FAIL(ob_expr_convert_to_time(*param_datum, expr.args_[0]->datum_meta_.type_, expr.args_[0]->datum_meta_.scale_, with_date, is_allow_incomplete_dates, ctx, ot, expr.args_[0]->obj_meta_.has_lob_header(), @@ -230,11 +232,18 @@ int ObExprTimeBase::calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum expr_datum.set_null(); } else { int idx = ot.parts_[type] - 1; - if(0 <= idx && idx < 7) { - const ObString &name = daynames[idx]; - if (OB_FAIL(ObExprUtil::set_expr_ascii_result(expr, ctx, expr_datum, name))) { - LOG_WARN("failed to exec set_expr_ascii_result", K(expr), K(ctx), K(expr_datum), K(name)); - } + if (0 <= idx && idx < 7) { + if (OB_FAIL(session->get_locale_name(locale_name))) { + LOG_WARN("failed to get locale time name", K(expr), K(expr_datum)); + } else { + OB_LOCALE *ob_cur_locale = ob_locale_by_name(locale_name); + OB_LOCALE_TYPE *locale_type = ob_cur_locale->day_names_; + const char ** locale_daynames = locale_type->type_names_; + const ObString &name = locale_daynames[idx]; + if (OB_FAIL(ObExprUtil::set_expr_ascii_result(expr, ctx, expr_datum, name))) { + LOG_WARN("failed to exec set_expr_ascii_result", K(expr), K(ctx), K(expr_datum), K(name)); + } + } } else { ret = OB_ERR_UNEXPECTED; LOG_WARN("the parameter idx should be within a reasonable range", K(idx)); @@ -246,9 +255,16 @@ int ObExprTimeBase::calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum } else { int idx = ot.parts_[type] - 1; if(0 <= idx && idx < 12) { - const ObString &month_name = monthnames[idx]; - if (OB_FAIL(ObExprUtil::set_expr_ascii_result(expr, ctx, expr_datum, month_name))) { - LOG_WARN("failed to exec set_expr_ascii_result", K(expr), K(ctx), K(expr_datum), K(month_name)); + if (OB_FAIL(session->get_locale_name(locale_name))) { + LOG_WARN("failed to get locale time name", K(expr), K(expr_datum)); + } else { + OB_LOCALE *ob_cur_locale = ob_locale_by_name(locale_name); + OB_LOCALE_TYPE *locale_type = ob_cur_locale->month_names_; + const char ** locale_monthnames = locale_type->type_names_; + const ObString &month_name = locale_monthnames[idx]; + if (OB_FAIL(ObExprUtil::set_expr_ascii_result(expr, ctx, expr_datum, month_name))) { + LOG_WARN("failed to exec set_expr_ascii_result", K(expr), K(ctx), K(expr_datum), K(month_name)); + } } } else { ret = OB_ERR_UNEXPECTED; diff --git a/src/sql/resolver/cmd/ob_show_resolver.cpp b/src/sql/resolver/cmd/ob_show_resolver.cpp index e14ec371b..22feaa27b 100644 --- a/src/sql/resolver/cmd/ob_show_resolver.cpp +++ b/src/sql/resolver/cmd/ob_show_resolver.cpp @@ -28,6 +28,19 @@ namespace oceanbase namespace sql { +inline static bool valid_default_parameter_version(int64_t tenant_id) +{ + int ret = OB_SUCCESS; + bool bret = false; + uint64_t data_version = 0; + if(OB_SUCC(GET_MIN_DATA_VERSION(tenant_id, data_version))) + { + bret = ((data_version >= DATA_VERSION_4_2_2_0 && + data_version < DATA_VERSION_4_3_0_0) || + data_version >= DATA_VERSION_4_3_1_0); + } + return bret; +} ObShowResolver::ObShowResolver(ObResolverParams ¶ms) : ObSelectResolver(params) { @@ -1094,9 +1107,9 @@ int ObShowResolver::resolve(const ParseNode &parse_tree) GEN_SQL_STEP_2(ObShowSqlSet::SHOW_PARAMETERS_SEED, REAL_NAME(OB_SYS_DATABASE_NAME, OB_ORA_SYS_SCHEMA_NAME), REAL_NAME(OB_ALL_VIRTUAL_TENANT_PARAMETER_STAT_TNAME, OB_ALL_VIRTUAL_TENANT_PARAMETER_STAT_ORA_TNAME), local_ip, GCONF.self_addr_.get_port()); } - } else if (OB_SYS_TENANT_ID == show_tenant_id) { - GEN_SQL_STEP_1(ObShowSqlSet::SHOW_PARAMETERS); - GEN_SQL_STEP_2(ObShowSqlSet::SHOW_PARAMETERS, + } else if (valid_default_parameter_version(show_tenant_id)) { + GEN_SQL_STEP_1(ObShowSqlSet::SHOW_PARAMETERS_WITH_DEFAULT_VALUE); + GEN_SQL_STEP_2(ObShowSqlSet::SHOW_PARAMETERS_WITH_DEFAULT_VALUE, REAL_NAME(OB_SYS_DATABASE_NAME, OB_ORA_SYS_SCHEMA_NAME), REAL_NAME(OB_ALL_VIRTUAL_TENANT_PARAMETER_STAT_TNAME, OB_ALL_VIRTUAL_TENANT_PARAMETER_STAT_ORA_TNAME), show_tenant_id); @@ -2868,6 +2881,11 @@ DEFINE_SHOW_CLAUSE_SET(SHOW_PARAMETERS, "SELECT zone, svr_type, svr_ip, svr_port, name, data_type, value, info, section, scope, source, edit_level from %s.%s where name not like '\\_%%' and (tenant_id = %ld or tenant_id is null)", R"(SELECT "ZONE", "SVR_TYPE", "SVR_IP", "SVR_PORT", "NAME", "DATA_TYPE", "VALUE", "INFO", "SECTION", "SCOPE", "SOURCE", "EDIT_LEVEL" FROM %s.%s WHERE NAME NOT LIKE '\_%%' ESCAPE '\' and (tenant_id = %ld or tenant_id is null))", "name"); +DEFINE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_WITH_DEFAULT_VALUE, + NULL, + "SELECT zone, svr_type, svr_ip, svr_port, name, data_type, value, info, section,scope, source, edit_level, default_value, isdefault from %s.%s where (name not like '\\_%%' or isdefault=0) and (tenant_id = %ld or tenant_id is null)", + R"(SELECT "ZONE", "SVR_TYPE", "SVR_IP", "SVR_PORT", "NAME", "DATA_TYPE", "VALUE", "INFO", "SECTION", "SCOPE", "SOURCE", "EDIT_LEVEL", "DEFAULT_VALUE", "ISDEFAULT" FROM %s.%s WHERE (NAME NOT LIKE '\_%%' ESCAPE '\' or ISDEFAULT=0) and (tenant_id = %ld or tenant_id is null))", + "name"); DEFINE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_UNSYS, NULL, "SELECT 1 `gmt_create`, 1 `gmt_modified`, 1 `zone`, 1 `svr_type`, 1 `svr_ip`, 1 `svr_port`, 1 `name`, 1 `data_type`, 1 `value`, 1 `info`, 1 `section`, 1 `scope`, 1 `source`, 1 `edit_level` FROM (SELECT 1 FROM DUAL) tmp_table WHERE 1 != 1", diff --git a/src/sql/resolver/cmd/ob_show_resolver.h b/src/sql/resolver/cmd/ob_show_resolver.h index c9f5a020c..ea06a6971 100644 --- a/src/sql/resolver/cmd/ob_show_resolver.h +++ b/src/sql/resolver/cmd/ob_show_resolver.h @@ -127,6 +127,7 @@ struct ObShowResolver::ObShowSqlSet DECLARE_SHOW_CLAUSE_SET(SHOW_ERRORS); DECLARE_SHOW_CLAUSE_SET(SHOW_COUNT_ERRORS); DECLARE_SHOW_CLAUSE_SET(SHOW_PARAMETERS); + DECLARE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_WITH_DEFAULT_VALUE); DECLARE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_UNSYS); DECLARE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_COMPAT); DECLARE_SHOW_CLAUSE_SET(SHOW_PARAMETERS_SEED); diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index 7ac8139c0..eef989890 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -3520,6 +3520,21 @@ int ObBasicSessionInfo::get_init_connect(ObString &str) const return get_string_sys_var(SYS_VAR_INIT_CONNECT, str); } +int ObBasicSessionInfo::get_locale_name(common::ObString &str) const +{ + int ret = OB_SUCCESS; + if (lib::is_mysql_mode()) { + if(OB_FAIL(get_string_sys_var(SYS_VAR_LC_TIME_NAMES, str))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to load sys variables", "var_name",SYS_VAR_LC_TIME_NAMES, K(ret)); + } + } else { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("oracle mode does not support lc_time_names", K(lib::is_oracle_mode()), K(ret)); + } + return ret; +} + int ObBasicSessionInfo::is_transformation_enabled(bool &transformation_enabled) const { return get_bool_sys_var(SYS_VAR_OB_ENABLE_TRANSFORMATION, transformation_enabled); diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index 70729e2bc..f1fa40aef 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -1021,6 +1021,7 @@ public: int is_select_index_enabled(bool &select_index_enabled) const; int get_name_case_mode(common::ObNameCaseMode &case_mode) const; int get_init_connect(common::ObString &str) const; + int get_locale_name(common::ObString &str) const; /// @} ///@{ user variables related: diff --git a/tools/deploy/mysql_test/r/mysql/information_schema.result b/tools/deploy/mysql_test/r/mysql/information_schema.result index a5bd60789..ab250f015 100644 --- a/tools/deploy/mysql_test/r/mysql/information_schema.result +++ b/tools/deploy/mysql_test/r/mysql/information_schema.result @@ -297,6 +297,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | DBA_OB_RESTORE_PROGRESS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_RSRC_IO_DIRECTIVES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_SEQUENCE_OBJECTS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | DBA_OB_SYS_VARIABLES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUPS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUP_PARTITIONS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUP_SUBPARTITIONS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | @@ -797,6 +798,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | __all_virtual_sql_workarea_histogram | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_sql_workarea_history_stat | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_sql_workarea_memory_info | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | __all_virtual_sys_variable_default_value | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_sysstat | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_system_event | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_table | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | @@ -1675,6 +1677,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | DBA_OB_RESTORE_PROGRESS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_RSRC_IO_DIRECTIVES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_SEQUENCE_OBJECTS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | DBA_OB_SYS_VARIABLES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUPS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUP_PARTITIONS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_TABLEGROUP_SUBPARTITIONS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | @@ -2177,6 +2180,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | __all_virtual_sql_workarea_memory_info | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_sysstat | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_system_event | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | __all_virtual_sys_variable_default_value | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_table | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_tablet_compaction_history | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | __all_virtual_tablet_compaction_info | SYSTEM TABLE | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result index 24ca019b9..581eb0cd2 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result @@ -2537,6 +2537,8 @@ VALUE varchar(65536) NO NULL INFO varchar(4096) NO NULL SECTION varchar(128) NO NULL EDIT_LEVEL varchar(128) NO NULL +DEFAULT_VALUE varchar(65536) NO NULL +ISDEFAULT varchar(3) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.GV$OB_PARAMETERS limit 1); cnt 1 @@ -2553,6 +2555,8 @@ VALUE varchar(65536) NO INFO varchar(4096) NO SECTION varchar(128) NO EDIT_LEVEL varchar(128) NO +DEFAULT_VALUE varchar(65536) NO +ISDEFAULT varchar(3) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_PARAMETERS limit 1); cnt 1 @@ -5732,6 +5736,21 @@ LAST_USED varchar(128) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_INDEX_USAGE limit 1); cnt 1 +desc oceanbase.DBA_OB_SYS_VARIABLES; +Field Type Null Key Default Extra +CREATE_TIME timestamp(6) YES +MODIFY_TIME timestamp(6) YES +NAME varchar(128) NO +VALUE varchar(65536) YES NULL +MIN_VALUE varchar(65536) NO +MAX_VALUE varchar(65536) NO +SCOPE varchar(16) NO +INFO varchar(4096) NO NULL +DEFAULT_VALUE varchar(65536) YES NULL +ISDEFAULT varchar(3) NO +select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_OB_SYS_VARIABLES limit 1); +cnt +1 desc oceanbase.DBA_OB_TRANSFER_PARTITION_TASKS; Field Type Null Key Default Extra TASK_ID bigint(20) NO NULL diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result index e55a1c362..74035c6f5 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result @@ -3807,6 +3807,8 @@ VALUE varchar(65536) NO NULL INFO varchar(4096) NO NULL SECTION varchar(128) NO NULL EDIT_LEVEL varchar(128) NO NULL +DEFAULT_VALUE varchar(65536) NO NULL +ISDEFAULT varchar(3) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.GV$OB_PARAMETERS limit 1); cnt 1 @@ -3823,6 +3825,8 @@ VALUE varchar(65536) NO INFO varchar(4096) NO SECTION varchar(128) NO EDIT_LEVEL varchar(128) NO +DEFAULT_VALUE varchar(65536) NO +ISDEFAULT varchar(3) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_PARAMETERS limit 1); cnt 1 @@ -5516,6 +5520,8 @@ MIN_VALUE varchar(65536) NO MAX_VALUE varchar(65536) NO SCOPE varchar(16) NO INFO varchar(4096) NO NULL +DEFAULT_VALUE varchar(65536) YES NULL +ISDEFAULT varchar(3) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.CDB_OB_SYS_VARIABLES limit 1); cnt 1 @@ -8194,6 +8200,21 @@ LAST_USED varchar(128) NO NULL select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_INDEX_USAGE limit 1); cnt 1 +desc oceanbase.DBA_OB_SYS_VARIABLES; +Field Type Null Key Default Extra +CREATE_TIME timestamp(6) YES +MODIFY_TIME timestamp(6) YES +NAME varchar(128) NO +VALUE varchar(65536) YES NULL +MIN_VALUE varchar(65536) NO +MAX_VALUE varchar(65536) NO +SCOPE varchar(16) NO +INFO varchar(4096) NO NULL +DEFAULT_VALUE varchar(65536) YES NULL +ISDEFAULT varchar(3) NO +select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_OB_SYS_VARIABLES limit 1); +cnt +1 desc oceanbase.DBA_OB_TRANSFER_PARTITION_TASKS; Field Type Null Key Default Extra TASK_ID bigint(20) NO NULL diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result index 3db1c694c..a34d87ced 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_mysql.result @@ -4716,6 +4716,13 @@ IF(count(*) >= 0, 1, 0) "oceanbase.__all_virtual_checkpoint_diagnose_info runs in single server" IF(count(*) >= 0, 1, 0) 1 +desc oceanbase.__all_virtual_sys_variable_default_value; +Field Type Null Key Default Extra +variable_name varchar(128) NO +default_value varchar(65536) YES NULL +select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sys_variable_default_value; +IF(count(*) >= 0, 1, 0) +1 desc oceanbase.__all_virtual_tenant_snapshot_job; Field Type Null Key Default Extra tenant_id bigint(20) NO PRI NULL diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result index 721433cc6..9e1a400e0 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_virtual_table_in_sys.result @@ -9175,6 +9175,13 @@ network_speed bigint(20) YES NULL select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_aux_stat; IF(count(*) >= 0, 1, 0) 1 +desc oceanbase.__all_virtual_sys_variable_default_value; +Field Type Null Key Default Extra +variable_name varchar(128) NO +default_value varchar(65536) YES NULL +select /*+QUERY_TIMEOUT(60000000)*/ IF(count(*) >= 0, 1, 0) from oceanbase.__all_virtual_sys_variable_default_value; +IF(count(*) >= 0, 1, 0) +1 desc oceanbase.__all_virtual_transfer_partition_task; Field Type Null Key Default Extra tenant_id bigint(20) NO PRI NULL diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result index f4e52346c..0ae692838 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result @@ -714,6 +714,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 12438 __all_virtual_checkpoint_diagnose_checkpoint_unit_info 2 201001 1 12439 __all_virtual_checkpoint_diagnose_info 2 201001 1 12447 __all_virtual_aux_stat 2 201001 1 +12450 __all_virtual_sys_variable_default_value 2 201001 1 12451 __all_virtual_transfer_partition_task 2 201001 1 12452 __all_virtual_transfer_partition_task_history 2 201001 1 12453 __all_virtual_tenant_snapshot_job 2 201001 1 @@ -1095,6 +1096,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 21497 DBA_OB_AUX_STATISTICS 1 201001 1 21498 CDB_OB_AUX_STATISTICS 1 201001 1 21499 DBA_INDEX_USAGE 1 201001 1 +21500 DBA_OB_SYS_VARIABLES 1 201001 1 21501 DBA_OB_TRANSFER_PARTITION_TASKS 1 201001 1 21502 CDB_OB_TRANSFER_PARTITION_TASKS 1 201001 1 21503 DBA_OB_TRANSFER_PARTITION_TASK_HISTORY 1 201001 1 diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/parameter_data_type.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/parameter_data_type.result index 197d6d000..cf344df29 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/parameter_data_type.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/parameter_data_type.result @@ -1,7 +1,7 @@ =========================== case1: under sys tenant =========================== ===================== [1] prevent data_type UNKNOWN ====================== show parameters where data_type = 'UNKNOWN'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault select * from __all_sys_parameter where data_type = 'UNKNOWN'; gmt_create gmt_modified zone svr_type svr_ip svr_port name data_type value value_strict info need_reboot section visible_level config_version scope source edit_level select * from __tenant_parameter where data_type = 'UNKNOWN'; @@ -15,9 +15,9 @@ tenant_id zone svr_type svr_ip svr_port name data_type value info section scope select * from __all_virtual_tenant_parameter where data_type = 'UNKNOWN'; tenant_id zone svr_type svr_ip svr_port name gmt_create gmt_modified data_type value info section scope source edit_level config_version select * from GV$OB_PARAMETERS where data_type = 'UNKNOWN'; -SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL +SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL DEFAULT_VALUE ISDEFAULT select * from V$OB_PARAMETERS where data_type = 'UNKNOWN'; -SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL +SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL DEFAULT_VALUE ISDEFAULT =============== [2] check data_tpye for __all_sys_parameter =============== select name, data_type from __all_sys_parameter where name = 'enable_sql_audit'; name data_type @@ -308,62 +308,62 @@ name data_type compatible VERSION ================ [10] check data_tpye for show parameters ================= show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'enable_sql_audit'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port enable_sql_audit BOOL value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port enable_sql_audit BOOL value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE true 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'max_string_print_length'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port max_string_print_length INT value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port max_string_print_length INT value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE 500 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'location_cache_cpu_quota'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port location_cache_cpu_quota DOUBLE value info TENANT CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port location_cache_cpu_quota DOUBLE value info TENANT CLUSTER DEFAULT DYNAMIC_EFFECTIVE 5 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'default_row_format'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port default_row_format STRING value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port default_row_format STRING value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE dynamic 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'log_disk_size'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port log_disk_size CAPACITY value info LOGSERVICE CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port log_disk_size CAPACITY value info LOGSERVICE CLUSTER DEFAULT DYNAMIC_EFFECTIVE 0M 0 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'rpc_timeout'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port rpc_timeout TIME value info RPC CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port rpc_timeout TIME value info RPC CLUSTER DEFAULT DYNAMIC_EFFECTIVE 2s 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'config_additional_dir'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port config_additional_dir STR_LIST value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port config_additional_dir STR_LIST value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE etc2;etc3 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'plsql_debug' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port plsql_debug BOOL value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port plsql_debug BOOL value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE False 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'open_cursors' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port open_cursors INT value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port open_cursors INT value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE 50 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'cpu_quota_concurrency' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port cpu_quota_concurrency DOUBLE value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port cpu_quota_concurrency DOUBLE value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE 4 0 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'plsql_code_type' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port plsql_code_type STRING value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port plsql_code_type STRING value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE native 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'range_optimizer_max_mem_size' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port range_optimizer_max_mem_size CAPACITY value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port range_optimizer_max_mem_size CAPACITY value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE 128M 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'merger_check_interval' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port merger_check_interval TIME value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port merger_check_interval TIME value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE 10m 0 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'major_freeze_duty_time' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port major_freeze_duty_time MOMENT value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port major_freeze_duty_time MOMENT value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE 02:00 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'compatible' tenant = sys; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port compatible VERSION value info ROOT_SERVICE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port compatible VERSION value info ROOT_SERVICE TENANT DEFAULT DYNAMIC_EFFECTIVE 4.3.1.0 1 ========================== case2: under mysql tenant ========================== ===================== [1] prevent data_type UNKNOWN ====================== show parameters where data_type = 'UNKNOWN'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault select * from __all_virtual_tenant_parameter_stat where data_type = 'UNKNOWN'; zone svr_type svr_ip svr_port name data_type value info section scope source edit_level tenant_id default_value isdefault select * from __all_virtual_tenant_parameter where data_type = 'UNKNOWN'; tenant_id zone svr_type svr_ip svr_port name gmt_create gmt_modified data_type value info section scope source edit_level config_version select * from GV$OB_PARAMETERS where data_type = 'UNKNOWN'; -SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL +SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL DEFAULT_VALUE ISDEFAULT select * from V$OB_PARAMETERS where data_type = 'UNKNOWN'; -SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL +SVR_IP SVR_PORT ZONE SCOPE TENANT_ID NAME DATA_TYPE VALUE INFO SECTION EDIT_LEVEL DEFAULT_VALUE ISDEFAULT ======= [2] check data_tpye for __all_virtual_tenant_parameter_stat ======= select name, data_type from __all_virtual_tenant_parameter_stat where svr_ip = host_ip() and svr_port = rpc_port() and name = 'enable_sql_audit'; name data_type @@ -530,47 +530,47 @@ name data_type compatible VERSION ================= [6] check data_tpye for show parameters ================= show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'enable_sql_audit'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port enable_sql_audit BOOL value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port enable_sql_audit BOOL value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE true 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'max_string_print_length'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port max_string_print_length INT value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port max_string_print_length INT value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE 500 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'location_cache_cpu_quota'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port location_cache_cpu_quota DOUBLE value info TENANT CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port location_cache_cpu_quota DOUBLE value info TENANT CLUSTER DEFAULT DYNAMIC_EFFECTIVE 5 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'default_row_format'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port default_row_format STRING value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port default_row_format STRING value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE dynamic 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'log_disk_size'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port log_disk_size CAPACITY value info LOGSERVICE CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port log_disk_size CAPACITY value info LOGSERVICE CLUSTER DEFAULT DYNAMIC_EFFECTIVE 0M 0 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'rpc_timeout'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port rpc_timeout TIME value info RPC CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port rpc_timeout TIME value info RPC CLUSTER DEFAULT DYNAMIC_EFFECTIVE 2s 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'config_additional_dir'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port config_additional_dir STR_LIST value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port config_additional_dir STR_LIST value info OBSERVER CLUSTER DEFAULT DYNAMIC_EFFECTIVE etc2;etc3 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'plsql_debug'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port plsql_debug BOOL value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port plsql_debug BOOL value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE False 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'open_cursors'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port open_cursors INT value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port open_cursors INT value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE 50 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'cpu_quota_concurrency'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port cpu_quota_concurrency DOUBLE value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port cpu_quota_concurrency DOUBLE value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE 4 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'plsql_code_type'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port plsql_code_type STRING value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port plsql_code_type STRING value info OBSERVER TENANT DEFAULT DYNAMIC_EFFECTIVE native 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'range_optimizer_max_mem_size'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port range_optimizer_max_mem_size CAPACITY value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port range_optimizer_max_mem_size CAPACITY value info TENANT TENANT DEFAULT DYNAMIC_EFFECTIVE 128M 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'merger_check_interval'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port merger_check_interval TIME value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port merger_check_interval TIME value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE 10m 0 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'major_freeze_duty_time'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port major_freeze_duty_time MOMENT value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port major_freeze_duty_time MOMENT value info DAILY_MERGE TENANT DEFAULT DYNAMIC_EFFECTIVE 02:00 1 show parameters where svr_ip = host_ip() and svr_port = rpc_port() and name = 'compatible'; -zone svr_type svr_ip svr_port name data_type value info section scope source edit_level -zone1 observer server_ip server_port compatible VERSION value info ROOT_SERVICE TENANT DEFAULT DYNAMIC_EFFECTIVE +zone svr_type svr_ip svr_port name data_type value info section scope source edit_level default_value isdefault +zone1 observer server_ip server_port compatible VERSION value info ROOT_SERVICE TENANT DEFAULT DYNAMIC_EFFECTIVE 4.3.1.0 1 diff --git a/unittest/share/CMakeLists.txt b/unittest/share/CMakeLists.txt index 2df92806f..af1b048fa 100644 --- a/unittest/share/CMakeLists.txt +++ b/unittest/share/CMakeLists.txt @@ -12,7 +12,6 @@ storage_unittest(test_log_file_handler redolog/test_log_file_handler.cpp) storage_unittest(test_obj_cast) storage_unittest(test_datum_cmp) #ob_unittest(test_national_encrypt_algorithm) -storage_unittest(test_ob_log_archive_config) storage_unittest(test_ob_tg_mgr) storage_unittest(test_storage_file) storage_unittest(test_cluster_id_hash_conflict) diff --git a/unittest/share/test_ob_log_archive_config.cpp b/unittest/share/test_ob_log_archive_config.cpp deleted file mode 100644 index e56b6e63b..000000000 --- a/unittest/share/test_ob_log_archive_config.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/** - * Copyright (c) 2021 OceanBase - * OceanBase CE is licensed under Mulan PubL v2. - * You can use this software according to the terms and conditions of the Mulan PubL v2. - * You may obtain a copy of Mulan PubL v2 at: - * http://license.coscl.org.cn/MulanPubL-2.0 - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, - * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, - * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - * See the Mulan PubL v2 for more details. - */ - -#define USING_LOG_PREFIX SHARE -#include "lib/utility/ob_print_utils.h" -#include -#include "share/config/ob_config.h" -#include "share/config/ob_common_config.h" -#include "share/ob_define.h" - -using namespace oceanbase::common; -using namespace oceanbase::share; -using namespace oceanbase; -/* using namespace oceanbase::common::hash; */ -/* */ -class TestLogArchiveConfig : public ::testing::Test -{ - -}; - -TEST_F(TestLogArchiveConfig, log_archive) -{ - ObConfigLogArchiveOptionsItem log_archive_item; - bool ret = log_archive_item.set_value("MANDATORY COMPRESSION=lz4_1.0"); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ASSERT_EQ(true, log_archive_item.value_.is_mandatory_); - ASSERT_EQ(true, log_archive_item.value_.is_compress_enabled_); - ASSERT_EQ(LZ4_COMPRESSOR, log_archive_item.value_.compressor_type_); - - ret = log_archive_item.set_value("MANDATORY COMPRESSION=lz4_1.0 yyy"); - ASSERT_EQ(false, log_archive_item.value_.valid_); - - ret = log_archive_item.set_value("COMPRESSION=lz4_1.0"); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ASSERT_EQ(true, log_archive_item.value_.is_mandatory_); - ASSERT_EQ(true, log_archive_item.value_.is_compress_enabled_); - ASSERT_EQ(share::ObBackupEncryptionMode::NONE, log_archive_item.value_.encryption_mode_); - ASSERT_EQ(LZ4_COMPRESSOR, log_archive_item.value_.compressor_type_); - - ret = log_archive_item.set_value("COMPRESSION=lz4_1.0 OPTIONAL "); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ASSERT_EQ(false, log_archive_item.value_.is_mandatory_); - ASSERT_EQ(true, log_archive_item.value_.is_compress_enabled_); - ASSERT_EQ(LZ4_COMPRESSOR, log_archive_item.value_.compressor_type_); - - ret = log_archive_item.set_value("COMPRESSION=disable OPTIONAL "); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ret = log_archive_item.set_value("COMPRESSION=enable OPTIONAL "); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ret = log_archive_item.set_value("COMPRESSION=lz4_1.0 OPTIONAL "); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ret = log_archive_item.set_value("COMPRESSION=zstd_1.3.8 OPTIONAL "); - ASSERT_EQ(true, log_archive_item.value_.valid_); - ret = log_archive_item.set_value("COMPRESSION=snappy_1.0 OPTIONAL "); - ASSERT_EQ(false, log_archive_item.value_.valid_); - - ret = log_archive_item.set_value(""); - ASSERT_EQ(false, log_archive_item.value_.valid_); - - ret = log_archive_item.set_value(" optional COMPRESSION=disable"); - ASSERT_EQ(true, log_archive_item.value_.valid_); - - ret = log_archive_item.set_value("MANDATORY encryption_mode= transparent_encryption ENCRYPTION_ALGORITHM = aes-128"); - ASSERT_EQ(false, log_archive_item.value_.valid_); - -// ret = log_archive_item.set_value("MANDATORY encryption_mode= transparent_encryption ENCRYPTION_ALGORITHM = aes-128"); -// ASSERT_EQ(true, log_archive_item.value_.valid_); -// ASSERT_EQ(true, log_archive_item.value_.is_mandatory_); -// ASSERT_EQ(false, log_archive_item.value_.is_compress_enabled_); -// ASSERT_EQ(ObBackupEncryptionMode::TRANSPARENT_ENCRYPTION, log_archive_item.value_.encryption_mode_); -// ASSERT_EQ(share::ObCipherOpMode::ob_aes_128_ecb, log_archive_item.value_.encryption_algorithm_); -// -// ret = log_archive_item.set_value("MANDATORY encryption_mode= none ENCRYPTION_ALGORITHM = aes-128"); -// ASSERT_EQ(true, log_archive_item.value_.valid_); -// ASSERT_EQ(true, log_archive_item.value_.is_mandatory_); -// ASSERT_EQ(false, log_archive_item.value_.is_compress_enabled_); -// ASSERT_EQ(ObBackupEncryptionMode::NONE, log_archive_item.value_.encryption_mode_); -// ASSERT_EQ(share::ObCipherOpMode::ob_aes_128_ecb, log_archive_item.value_.encryption_algorithm_); -// -// ret = log_archive_item.set_value("MANDATORY encryption_mode= none ENCRYPTION_ALGORITHM = aes-192"); -// ASSERT_EQ(true, log_archive_item.value_.valid_); -// ASSERT_EQ(ObBackupEncryptionMode::NONE, log_archive_item.value_.encryption_mode_); -// ASSERT_EQ(share::ObCipherOpMode::ob_aes_192_ecb, log_archive_item.value_.encryption_algorithm_); -// -// ret = log_archive_item.set_value("MANDATORY encryption_mode= none ENCRYPTION_ALGORITHM = aes-256"); -// ASSERT_EQ(true, log_archive_item.value_.valid_); -// ASSERT_EQ(ObBackupEncryptionMode::NONE, log_archive_item.value_.encryption_mode_); -// ASSERT_EQ(share::ObCipherOpMode::ob_aes_256_ecb, log_archive_item.value_.encryption_algorithm_); -// -// ret = log_archive_item.set_value("MANDATORY encryption_mode= none ENCRYPTION_ALGORITHM = sm4"); -// ASSERT_EQ(true, log_archive_item.value_.valid_); -// ASSERT_EQ(ObBackupEncryptionMode::NONE, log_archive_item.value_.encryption_mode_); -// ASSERT_EQ(share::ObCipherOpMode::ob_sm4_mode, log_archive_item.value_.encryption_algorithm_); -// -// ret = log_archive_item.set_value("encryption_mode= none ENCRYPTION_ALGORITHM = aes-120"); -// ASSERT_EQ(false, ret); -// ASSERT_EQ(false, log_archive_item.value_.valid_); - -} -int main(int argc, char* argv[]) -{ - OB_LOGGER.set_file_name("test_config.log", true); - OB_LOGGER.set_log_level("INFO"); - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -}