diff options
author | unknown <bar@mysql.com> | 2004-10-25 17:51:26 +0500 |
---|---|---|
committer | unknown <bar@mysql.com> | 2004-10-25 17:51:26 +0500 |
commit | 712326d6846ae718bf5c7c5961ec3173bbf29b06 (patch) | |
tree | 7a9462068baaf8b0e98b30d9e65951269bac98e5 /sql/table.cc | |
parent | 7df41480849074ad0b1a907d244b5d3b41403f32 (diff) | |
download | mariadb-git-712326d6846ae718bf5c7c5961ec3173bbf29b06.tar.gz |
Bug#6202: ENUMs are not case sensitive even if declared BINARY
Diffstat (limited to 'sql/table.cc')
-rw-r--r-- | sql/table.cc | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/sql/table.cc b/sql/table.cc index 7b64ef7a48c..3ae3d668407 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -356,6 +356,24 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag, fix_type_pointers(&int_array,&outparam->fieldnames,1,&names); fix_type_pointers(&int_array,outparam->intervals,interval_count, &names); + + { + /* Set ENUM and SET lengths */ + TYPELIB *interval; + for (interval= outparam->intervals; + interval < outparam->intervals + interval_count; + interval++) + { + uint count= (uint) (interval->count + 1) * sizeof(uint); + if (!(interval->type_lengths= (uint *) alloc_root(&outparam->mem_root, + count))) + goto err_not_open; + for (count= 0; count < interval->count; count++) + interval->type_lengths[count]= strlen(interval->type_names[count]); + interval->type_lengths[count]= 0; + } + } + if (keynames) fix_type_pointers(&int_array,&outparam->keynames,1,&keynames); VOID(my_close(file,MYF(MY_WME))); @@ -1007,14 +1025,19 @@ TYPELIB *typelib(List<String> &strings) return 0; result->count=strings.elements; result->name=""; - if (!(result->type_names=(const char **) sql_alloc(sizeof(char *)* - (result->count+1)))) + uint nbytes= (sizeof(char*) + sizeof(uint)) * (result->count + 1); + if (!(result->type_names= (const char**) sql_alloc(nbytes))) return 0; + result->type_lengths= (uint*) (result->type_names + result->count + 1); List_iterator<String> it(strings); String *tmp; for (uint i=0; (tmp=it++) ; i++) - result->type_names[i]=tmp->ptr(); - result->type_names[result->count]=0; // End marker + { + result->type_names[i]= tmp->ptr(); + result->type_lengths[i]= tmp->length(); + } + result->type_names[result->count]= 0; // End marker + result->type_lengths[result->count]= 0; return result; } |