diff options
author | unknown <heikki@donna.mysql.fi> | 2001-12-11 22:45:32 +0200 |
---|---|---|
committer | unknown <heikki@donna.mysql.fi> | 2001-12-11 22:45:32 +0200 |
commit | a2675d291612f64f47bbccd72f8366065def2c00 (patch) | |
tree | 225aadb08bc235e5b4b323c3a87f1157fa5a09e0 /innobase | |
parent | 2d1e16eb04a3e78830447400a55f7cd2291e566c (diff) | |
download | mariadb-git-a2675d291612f64f47bbccd72f8366065def2c00.tar.gz |
ut0byte.h, ut0byte.c, dict0dict.c:
Make column names non-case-sensitive in referential constraints and put table and database names there in lower case in Windows
innobase/dict/dict0dict.c:
Make column names non-case-sensitive in referential constraints and put table and database names there in lower case in Windows
innobase/ut/ut0byte.c:
Make column names non-case-sensitive in referential constraints and put table and database names there in lower case in Windows
innobase/include/ut0byte.h:
Make column names non-case-sensitive in referential constraints and put table and database names there in lower case in Windows
Diffstat (limited to 'innobase')
-rw-r--r-- | innobase/dict/dict0dict.c | 14 | ||||
-rw-r--r-- | innobase/include/ut0byte.h | 20 | ||||
-rw-r--r-- | innobase/ut/ut0byte.c | 43 |
3 files changed, 74 insertions, 3 deletions
diff --git a/innobase/dict/dict0dict.c b/innobase/dict/dict0dict.c index ba032013baf..bf3e134febb 100644 --- a/innobase/dict/dict0dict.c +++ b/innobase/dict/dict0dict.c @@ -1761,9 +1761,8 @@ dict_scan_col( col = dict_table_get_nth_col(table, i); if (ut_strlen(col->name) == (ulint)(ptr - old_ptr) - && 0 == ut_memcmp(col->name, old_ptr, + && 0 == ut_cmp_in_lower_case(col->name, old_ptr, (ulint)(ptr - old_ptr))) { - /* Found */ *success = TRUE; @@ -1827,11 +1826,20 @@ dict_scan_table_name( break; } } - +#ifdef __WIN__ + ut_cpy_in_lower_case(second_table_name + i, old_ptr, + ptr - old_ptr); +#else ut_memcpy(second_table_name + i, old_ptr, ptr - old_ptr); +#endif second_table_name[i + (ptr - old_ptr)] = '\0'; } else { +#ifdef __WIN__ + ut_cpy_in_lower_case(second_table_name, old_ptr, + ptr - old_ptr); +#else ut_memcpy(second_table_name, old_ptr, ptr - old_ptr); +#endif second_table_name[dot_ptr - old_ptr] = '/'; second_table_name[ptr - old_ptr] = '\0'; } diff --git a/innobase/include/ut0byte.h b/innobase/include/ut0byte.h index 77795ee0708..b45f2160392 100644 --- a/innobase/include/ut0byte.h +++ b/innobase/include/ut0byte.h @@ -220,6 +220,26 @@ 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 */ + 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 */ + char* str1, /* in: string1 */ + char* str2, /* in: string2 */ + ulint len); /* in: length of both strings */ #ifndef UNIV_NONINL diff --git a/innobase/ut/ut0byte.c b/innobase/ut/ut0byte.c index fa0d904a6a7..02bdf2065ee 100644 --- a/innobase/ut/ut0byte.c +++ b/innobase/ut/ut0byte.c @@ -30,3 +30,46 @@ ut_dulint_sort(dulint* arr, dulint* aux_arr, ulint low, ulint 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 */ + 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 */ + char* str1, /* in: string1 */ + char* str2, /* in: string2 */ + ulint len) /* in: length of both strings */ +{ + ulint i; + + for (i = 0; i < len; i++) { + if (tolower(str1[i]) < tolower(str2[i])) { + return(-1); + } + + if (tolower(str1[i]) > tolower(str2[i])) { + return(1); + } + } + + return(0); +} |