diff options
author | Sergei Krivonos <sergeikrivonos@gmail.com> | 2021-11-30 18:11:14 -0700 |
---|---|---|
committer | Sergei Krivonos <sergeikrivonos@gmail.com> | 2021-12-04 22:25:46 -0500 |
commit | 2d21917e7db2db0900671aac2e29f49e4ff2acd7 (patch) | |
tree | be7af81e8db1448100f9a4c7cb4510e2ba4cc421 /sql/opt_range.cc | |
parent | 9feaa6be07f8eb91736e51830f754bc99f939a51 (diff) | |
download | mariadb-git-2d21917e7db2db0900671aac2e29f49e4ff2acd7.tar.gz |
MDEV-27036: re-enable my_json_writer-t unit test
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r-- | sql/opt_range.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 06063cb9ae1..2ef30924aa5 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1254,6 +1254,14 @@ void SQL_SELECT::cleanup() close_cached_file(&file); } +int SQL_SELECT::skip_record(THD *thd) +{ + int rc= MY_TEST(!cond || cond->val_int()); + if (thd->is_error()) + rc= -1; + return rc; +} + SQL_SELECT::~SQL_SELECT() { @@ -1872,6 +1880,20 @@ QUICK_RANGE::QUICK_RANGE() min_keypart_map(0), max_keypart_map(0) {} +QUICK_RANGE::QUICK_RANGE(THD *thd, const uchar *min_key_arg, uint min_length_arg, key_part_map min_keypart_map_arg, const uchar *max_key_arg, uint max_length_arg, key_part_map max_keypart_map_arg, uint flag_arg) +: min_key((uchar*) thd->memdup(min_key_arg, min_length_arg + 1)), + max_key((uchar*) thd->memdup(max_key_arg, max_length_arg + 1)), + min_length((uint16) min_length_arg), + max_length((uint16) max_length_arg), + flag((uint16) flag_arg), + min_keypart_map(min_keypart_map_arg), + max_keypart_map(max_keypart_map_arg) +{ +#ifdef HAVE_valgrind + dummy=0; +#endif +} + SEL_ARG::SEL_ARG(SEL_ARG &arg) :Sql_alloc() { type=arg.type; @@ -10848,6 +10870,31 @@ uint SEL_ARG::get_max_key_part() const return max_part; } +SEL_ARG *SEL_ARG::clone_and(THD *thd, SEL_ARG *arg) +{ // Get overlapping range + uchar *new_min,*new_max; + uint8 flag_min,flag_max; + if (cmp_min_to_min(arg) >= 0) + { + new_min=min_value; flag_min=min_flag; + } + else + { + new_min=arg->min_value; flag_min=arg->min_flag; /* purecov: deadcode */ + } + if (cmp_max_to_max(arg) <= 0) + { + new_max=max_value; flag_max=max_flag; + } + else + { + new_max=arg->max_value; flag_max=arg->max_flag; + } + return new (thd->mem_root) SEL_ARG(field, part, new_min, new_max, flag_min, + flag_max, + MY_TEST(maybe_flag && arg->maybe_flag)); +} + /* Remove the SEL_ARG graph elements which have part > max_part. @@ -16568,3 +16615,11 @@ void print_keyparts_name(String *out, const KEY_PART_INFO *key_part, } out->append(STRING_WITH_LEN(")")); } + +bool RANGE_OPT_PARAM::statement_should_be_aborted() const +{ + return thd->killed + || thd->is_fatal_error + || thd->is_error() + || alloced_sel_args > SEL_ARG::MAX_SEL_ARGS; +} |