summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-10-19 11:00:02 +0300
committerunknown <marko@hundin.mysql.fi>2004-10-19 11:00:02 +0300
commitb42ab12527094c0aac220d1948fc0d411e50f108 (patch)
tree47e7c3a70baadae433468442fd435c88afdef491
parent5d14a6eef401d3b214c041224c335b61169c4436 (diff)
parent0cef3945a447be357d478e105175e7be971bb575 (diff)
downloadmariadb-git-b42ab12527094c0aac220d1948fc0d411e50f108.tar.gz
Merge marko@bk-internal.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/marko/j/mysql-4.1
-rw-r--r--innobase/dict/dict0dict.c59
-rw-r--r--innobase/include/ut0byte.h19
-rw-r--r--innobase/ut/ut0byte.c48
-rw-r--r--sql/ha_innodb.cc56
4 files changed, 72 insertions, 110 deletions
diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c
index f670c0dc16d..c3d0d8d9ac1 100644
--- a/innobase/dict/dict0dict.c
+++ b/innobase/dict/dict0dict.c
@@ -53,6 +53,30 @@ rw_lock_t dict_operation_lock; /* table create, drop, etc. reserve
/* Identifies generated InnoDB foreign key names */
static char dict_ibfk[] = "_ibfk_";
+/**********************************************************************
+Compares NUL-terminated UTF-8 strings case insensitively.
+
+NOTE: the prototype of this function is copied from ha_innodb.cc! If you change
+this function, you MUST change also the prototype here! */
+extern
+int
+innobase_strcasecmp(
+/*================*/
+ /* out: 0 if a=b, <0 if a<b, >1 if a>b */
+ const char* a, /* in: first string to compare */
+ const char* b); /* in: second string to compare */
+
+/**********************************************************************
+Makes all characters in a NUL-terminated UTF-8 string lower case.
+
+NOTE: the prototype of this function is copied from ha_innodb.cc! If you change
+this function, you MUST change also the prototype here! */
+extern
+void
+innobase_casedn_str(
+/*================*/
+ char* a); /* in/out: string to put in lower case */
+
/**************************************************************************
Adds a column to the data dictionary hash table. */
static
@@ -2066,7 +2090,7 @@ dict_foreign_find_index(
break;
}
- if (0 != ut_cmp_in_lower_case(columns[i],
+ if (0 != innobase_strcasecmp(columns[i],
col_name)) {
break;
}
@@ -2436,7 +2460,7 @@ dict_scan_col(
col = dict_table_get_nth_col(table, i);
- if (0 == ut_cmp_in_lower_case(col->name, *name)) {
+ if (0 == innobase_strcasecmp(col->name, *name)) {
/* Found */
*success = TRUE;
@@ -2528,30 +2552,19 @@ dict_scan_table_name(
table_name_len = strlen(table_name);
+ /* Copy database_name, '/', table_name, '\0' */
ref = mem_heap_alloc(heap, database_name_len + table_name_len + 2);
-
-#ifdef __WIN__
- ut_cpy_in_lower_case(ref, database_name, database_name_len);
-#else
- if (srv_lower_case_table_names) {
- ut_cpy_in_lower_case(ref, database_name, database_name_len);
- } else {
- memcpy(ref, database_name, database_name_len);
- }
-#endif
- (ref)[database_name_len] = '/';
-
-#ifdef __WIN__
- ut_cpy_in_lower_case(ref + database_name_len + 1,
- table_name, table_name_len + 1);
-#else
+ memcpy(ref, database_name, database_name_len);
+ ref[database_name_len] = '/';
+ memcpy(ref + database_name_len + 1, table_name, table_name_len + 1);
+#ifndef __WIN__
if (srv_lower_case_table_names) {
- ut_cpy_in_lower_case(ref + database_name_len + 1,
- table_name, table_name_len + 1);
- } else {
- strcpy(ref + database_name_len + 1, table_name);
+#endif /* !__WIN__ */
+ /* The table name is always put to lower case on Windows. */
+ innobase_casedn_str(ref);
+#ifndef __WIN__
}
-#endif
+#endif /* !__WIN__ */
*success = TRUE;
*ref_name = ref;
diff --git a/innobase/include/ut0byte.h b/innobase/include/ut0byte.h
index fed6a23d144..a62c2e2e318 100644
--- a/innobase/include/ut0byte.h
+++ b/innobase/include/ut0byte.h
@@ -229,25 +229,6 @@ ut_bit_set_nth(
ulint a, /* in: ulint */
ulint n, /* in: nth bit requested */
ibool val); /* in: value for the bit to set */
-/****************************************************************
-Copies a string to a memory location, setting characters to lower case. */
-
-void
-ut_cpy_in_lower_case(
-/*=================*/
- char* dest, /* in: destination */
- const char* source, /* in: source */
- ulint len); /* in: string length */
-/****************************************************************
-Compares two strings when converted to lower case. */
-
-int
-ut_cmp_in_lower_case(
-/*=================*/
- /* out: -1, 0, 1 if str1 < str2, str1 == str2,
- str1 > str2, respectively */
- const char* str1, /* in: string1 */
- const char* str2); /* in: string2 */
#ifndef UNIV_NONINL
#include "ut0byte.ic"
diff --git a/innobase/ut/ut0byte.c b/innobase/ut/ut0byte.c
index 8764103dc36..cc83aacc90b 100644
--- a/innobase/ut/ut0byte.c
+++ b/innobase/ut/ut0byte.c
@@ -29,51 +29,3 @@ ut_dulint_sort(dulint* arr, dulint* aux_arr, ulint low, ulint high)
UT_SORT_FUNCTION_BODY(ut_dulint_sort, arr, aux_arr, low, high,
ut_dulint_cmp);
}
-
-/****************************************************************
-Copies a string to a memory location, setting characters to lower case. */
-
-void
-ut_cpy_in_lower_case(
-/*=================*/
- char* dest, /* in: destination */
- const char* source, /* in: source */
- ulint len) /* in: string length */
-{
- ulint i;
-
- for (i = 0; i < len; i++) {
- dest[i] = tolower(source[i]);
- }
-}
-
-/****************************************************************
-Compares two strings when converted to lower case. */
-
-int
-ut_cmp_in_lower_case(
-/*=================*/
- /* out: -1, 0, 1 if str1 < str2, str1 == str2,
- str1 > str2, respectively */
- const char* str1, /* in: string1 */
- const char* str2) /* in: string2 */
-{
- for (;;) {
- int c1, c2;
- if (!*str1) {
- return(*str2 ? -1 : 0);
- } else if (!*str2) {
- return 1;
- }
- c1 = tolower(*str1++);
- c2 = tolower(*str2++);
- if (c1 < c2) {
- return(-1);
- }
- if (c1 > c2) {
- return(1);
- }
- }
-
- return(0);
-}
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index 28f95611ae7..35a51837449 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -429,6 +429,36 @@ innobase_mysql_print_thd(
putc('\n', f);
}
+/**********************************************************************
+Compares NUL-terminated UTF-8 strings case insensitively.
+
+NOTE that the exact prototype of this function has to be in
+/innobase/dict/dict0dict.c! */
+extern "C"
+int
+innobase_strcasecmp(
+/*================*/
+ /* out: 0 if a=b, <0 if a<b, >1 if a>b */
+ const char* a, /* in: first string to compare */
+ const char* b) /* in: second string to compare */
+{
+ return(my_strcasecmp(system_charset_info, a, b));
+}
+
+/**********************************************************************
+Makes all characters in a NUL-terminated UTF-8 string lower case.
+
+NOTE that the exact prototype of this function has to be in
+/innobase/dict/dict0dict.c! */
+extern "C"
+void
+innobase_casedn_str(
+/*================*/
+ char* a) /* in/out: string to put in lower case */
+{
+ my_casedn_str(system_charset_info, a);
+}
+
/*************************************************************************
Creates a temporary file. */
extern "C"
@@ -687,14 +717,7 @@ innobase_query_caching_of_table_permitted(
separator between db and table */
norm_name[full_name_len] = '\0';
#ifdef __WIN__
- /* Put to lower case */
-
- char* ptr = norm_name;
-
- while (*ptr != '\0') {
- *ptr = tolower(*ptr);
- ptr++;
- }
+ innobase_casedn_str(norm_name);
#endif
/* The call of row_search_.. will start a new transaction if it is
not yet started */
@@ -1539,14 +1562,7 @@ normalize_table_name(
norm_name[name_ptr - db_ptr - 1] = '/';
#ifdef __WIN__
- /* Put to lower case */
-
- ptr = norm_name;
-
- while (*ptr != '\0') {
- *ptr = tolower(*ptr);
- ptr++;
- }
+ innobase_casedn_str(norm_name);
#endif
}
@@ -3559,9 +3575,9 @@ create_index(
field = form->field[j];
- if (0 == ut_cmp_in_lower_case(
- (char*)field->field_name,
- (char*)key_part->field->field_name)) {
+ if (0 == innobase_strcasecmp(
+ field->field_name,
+ key_part->field->field_name)) {
/* Found the corresponding column */
break;
@@ -4003,7 +4019,7 @@ innobase_drop_database(
namebuf[len] = '/';
namebuf[len + 1] = '\0';
#ifdef __WIN__
- my_casedn_str(system_charset_info, namebuf);
+ innobase_casedn_str(namebuf);
#endif
trx = trx_allocate_for_mysql();
trx->mysql_thd = current_thd;