Skip to content

Commit 1b8063d

Browse files
author
Tor Didriksen
committed
Bug#35976922 Get character sets/collations by name rather than by global pointers
Fix this TODO: // TODO(tdidriks) check name rather than address: extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_gb18030_chinese_ci; extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf16le_general_ci; Character sets/collations should always be loaded/initialized properly with get_collation_number() or some other defined function in the mysys/strings API. Change-Id: Ifa89308481d9a3db7428c1f3ed4ba375d1681209
1 parent 3dd0ec4 commit 1b8063d

File tree

7 files changed

+15
-21
lines changed

7 files changed

+15
-21
lines changed

include/my_sys.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ extern bool resolve_collation(const char *cl_name,
898898
const CHARSET_INFO *default_cl,
899899
const CHARSET_INFO **cl);
900900
extern char *get_charsets_dir(char *buf);
901-
extern bool init_compiled_charsets(myf flags);
901+
902902
extern size_t escape_string_for_mysql(const CHARSET_INFO *charset_info,
903903
char *to, size_t to_length,
904904
const char *from, size_t length);

include/mysql/strings/m_ctype.h

-3
Original file line numberDiff line numberDiff line change
@@ -485,9 +485,6 @@ extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf8mb3_unicode_ci;
485485
extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf8mb3_bin;
486486
extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf8mb4_bin;
487487
extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf8mb4_general_ci;
488-
// TODO(tdidriks) check name rather than address:
489-
extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_gb18030_chinese_ci;
490-
extern MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf16le_general_ci;
491488

492489
/**
493490
@note Deprecated function, please call cs->coll->wildcmp(cs...) instead.

sql/mysqld.cc

+8
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,7 @@ MySQL clients support the protocol:
816816
#include "sql/query_options.h"
817817
#include "sql/range_optimizer/range_optimizer.h" // range_optimizer_init
818818
#include "sql/reference_caching_setup.h" // Event_reference_caching_channels
819+
#include "sql/regexp/regexp_facade.h" // regexp::regexp_lib_charset
819820
#include "sql/replication.h" // thd_enter_cond
820821
#include "sql/resourcegroups/resource_group_mgr.h" // init, post_init
821822
#ifdef _WIN32
@@ -6966,6 +6967,13 @@ int init_common_variables() {
69666967
"--character-set-filesystem");
69676968
global_system_variables.character_set_filesystem = character_set_filesystem;
69686969

6970+
#ifdef WORDS_BIGENDIAN
6971+
regexp::regexp_lib_charset = get_charset_by_name("utf16_general_ci", MYF(0));
6972+
#else
6973+
regexp::regexp_lib_charset =
6974+
get_charset_by_name("utf16le_general_ci", MYF(0));
6975+
#endif
6976+
69696977
while (!(my_default_lc_time_names = my_locale_by_name(
69706978
nullptr, lc_time_names_name, strlen(lc_time_names_name)))) {
69716979
LogErr(ERROR_LEVEL, ER_FAILED_TO_FIND_LOCALE_NAME, lc_time_names_name);

sql/regexp/regexp_engine.h

-12
Original file line numberDiff line numberDiff line change
@@ -30,29 +30,17 @@
3030
#include <string>
3131
#include <utility>
3232

33-
#include "my_config.h" // WORDS_BIGENDIAN
34-
#include "mysql/strings/m_ctype.h" // CHARSET_INFO.
3533
#include "sql/current_thd.h"
3634
#include "sql/regexp/errors.h"
3735
#include "sql/sql_class.h" // THD
3836
#include "template_utils.h"
3937

40-
extern CHARSET_INFO my_charset_utf16le_general_ci;
41-
extern CHARSET_INFO my_charset_utf16_general_ci;
42-
4338
namespace regexp_engine_unittest {
4439
class Mock_regexp_engine;
4540
}
4641

4742
namespace regexp {
4843

49-
static constexpr CHARSET_INFO *regexp_lib_charset =
50-
#ifdef WORDS_BIGENDIAN
51-
&::my_charset_utf16_general_ci;
52-
#else
53-
&::my_charset_utf16le_general_ci;
54-
#endif
55-
5644
const char *icu_version_string();
5745

5846
/**

sql/regexp/regexp_facade.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,17 @@
2727
#include <tuple>
2828

2929
#include "my_pointer_arithmetic.h"
30+
#include "mysql/strings/m_ctype.h" // CHARSET_INFO.
3031
#include "sql/item_func.h"
3132
#include "sql/mysqld.h" // make_unique_destroy_only
3233
#include "sql/regexp/regexp_engine.h"
3334
#include "sql_string.h"
3435
#include "template_utils.h"
3536

36-
struct CHARSET_INFO;
37-
3837
namespace regexp {
3938

39+
CHARSET_INFO *regexp_lib_charset = nullptr;
40+
4041
/**
4142
When dealing with the binary character set, we tell ICU that we're using
4243
CP-1252. This way, comparisons will happen as the user expects; each octet

sql/regexp/regexp_facade.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@
3838
#include "sql/regexp/regexp_engine.h"
3939
#include "sql_string.h"
4040

41-
extern int32_t opt_regexp_time_limit;
42-
extern int32_t opt_regexp_stack_limit;
43-
4441
namespace regexp {
4542

43+
extern CHARSET_INFO *regexp_lib_charset;
44+
4645
/**
4746
This class handles
4847

unittest/gunit/regexp_engine-t.cc

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
#include "sql/parse_tree_items.h"
3434
#include "sql/regexp/regexp_engine.h"
35+
#include "sql/regexp/regexp_facade.h"
3536

3637
namespace regexp_engine_unittest {
3738

0 commit comments

Comments
 (0)