summaryrefslogtreecommitdiff
path: root/sql/sql_class.h
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2021-02-15 01:39:37 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2021-03-16 21:11:21 +0530
commite15a5ca9e89153db7cc9ce978bb789a4038b7c25 (patch)
tree9c33fb2d815210f032e887af5da0f28c9d8c5301 /sql/sql_class.h
parenta1542f8a57390bbad916ddfd335e1c751ffb3de5 (diff)
downloadmariadb-git-10.6-rucha-mdev-8334.tar.gz
MDEV-8334: Rename utf8 to utf8mb310.6-rucha-mdev-8334
This patch changes the main name of 3 byte character set from utf8 to utf8mb3. New old_mode UTF8_IS_UTF8MB3 is added and set TRUE by default, so that utf8 would mean utf8mb3. If not set, utf8 would mean utf8mb4.
Diffstat (limited to 'sql/sql_class.h')
-rw-r--r--sql/sql_class.h35
1 files changed, 33 insertions, 2 deletions
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 50b746fe514..15aa9ca8199 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -189,6 +189,7 @@ enum enum_binlog_row_image {
#define OLD_MODE_NO_DUP_KEY_WARNINGS_WITH_IGNORE (1 << 0)
#define OLD_MODE_NO_PROGRESS_INFO (1 << 1)
#define OLD_MODE_ZERO_DATE_TIME_CAST (1 << 2)
+#define OLD_MODE_UTF8_IS_UTF8MB3 (1 << 3)
extern char internal_table_name[2];
extern char empty_c_string[1];
@@ -1007,6 +1008,36 @@ inline void update_global_memory_status(int64 size)
my_atomic_add64_explicit(ptr, size, MY_MEMORY_ORDER_RELAXED);
}
+inline const char* get_alias_collation_or_charset_name(const char* name,
+ bool utf8_is_utf8mb3)
+{
+ char *copy_of_name= (char*)name;
+ char start[6], result[64];
+ char *temp_cs_name;
+
+ if (!strchr(name,'_'))
+ {
+ if (!strcasecmp("utf8",name))
+ name = utf8_is_utf8mb3 ? "utf8mb3" : "utf8mb4";
+ return name;
+ }
+ else
+ {
+ strncpy(start, name, 5);
+ temp_cs_name= (char *)(utf8_is_utf8mb3 ? "utf8mb3_":"utf8mb4_");
+ if (!strncasecmp("utf8_", start,5))
+ {
+ copy_of_name+= 5;
+ result[63]='\0';
+ strcpy(result, temp_cs_name);
+ strcat(result, copy_of_name);
+ result[strlen(copy_of_name)+strlen(temp_cs_name)]='\0';
+ strcpy((char*)name,result);
+ }
+ }
+ return name;
+}
+
/**
Get collation by name, send error to client on failure.
@param name Collation name
@@ -1016,12 +1047,13 @@ inline void update_global_memory_status(int64 size)
@retval Pointter to CHARSET_INFO with the given name on success
*/
inline CHARSET_INFO *
-mysqld_collation_get_by_name(const char *name,
+mysqld_collation_get_by_name(const char *name, bool utf8_is_utf8mb3,
CHARSET_INFO *name_cs= system_charset_info)
{
CHARSET_INFO *cs;
MY_CHARSET_LOADER loader;
my_charset_loader_init_mysys(&loader);
+ name =get_alias_collation_or_charset_name(name,utf8_is_utf8mb3);
if (!(cs= my_collation_get_by_name(&loader, name, MYF(0))))
{
ErrConvString err(name, name_cs);
@@ -5247,7 +5279,6 @@ public:
Item *sp_fix_func_item(Item **it_addr);
Item *sp_prepare_func_item(Item **it_addr, uint cols= 1);
bool sp_eval_expr(Field *result_field, Item **expr_item_ptr);
-
};