summaryrefslogtreecommitdiff
path: root/sql/table.cc
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2004-10-25 17:51:26 +0500
committerunknown <bar@mysql.com>2004-10-25 17:51:26 +0500
commit712326d6846ae718bf5c7c5961ec3173bbf29b06 (patch)
tree7a9462068baaf8b0e98b30d9e65951269bac98e5 /sql/table.cc
parent7df41480849074ad0b1a907d244b5d3b41403f32 (diff)
downloadmariadb-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.cc31
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;
}