summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2003-07-23 17:36:56 +0300
committerunknown <Sinisa@sinisa.nasamreza.org>2003-07-23 17:36:56 +0300
commitd289accb0af491ae0d241fa801c291da07fabd77 (patch)
treec86141acb72a64939e0945c908f3b8a6b6027840 /sql
parentb3021da20a193b297b1c592cf05a475ff5e94a32 (diff)
downloadmariadb-git-d289accb0af491ae0d241fa801c291da07fabd77.tar.gz
Fuller implementation of lower case table names.
Bug record #828
Diffstat (limited to 'sql')
-rw-r--r--sql/mysql_priv.h6
-rw-r--r--sql/sql_class.h12
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_table.cc2
-rw-r--r--sql/sql_yacc.yy4
5 files changed, 23 insertions, 3 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 0a4728ef325..adbf344fda6 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -862,3 +862,9 @@ inline void mark_as_null_row(TABLE *table)
table->status|=STATUS_NULL_ROW;
bfill(table->null_flags,table->null_bytes,255);
}
+
+inline void table_case_convert(char * name, uint length)
+{
+ if (lower_case_table_names)
+ casedn(name, length);
+}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index dcc839e13b1..5e4e6184328 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -33,7 +33,7 @@ enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_IGNORE };
enum enum_log_type { LOG_CLOSED, LOG_TO_BE_OPENED, LOG_NORMAL, LOG_NEW, LOG_BIN};
enum enum_delay_key_write { DELAY_KEY_WRITE_NONE, DELAY_KEY_WRITE_ON,
DELAY_KEY_WRITE_ALL };
-
+extern inline void table_case_convert(char * name, uint length);
/* log info errors */
#define LOG_INFO_EOF -1
#define LOG_INFO_IO -2
@@ -758,7 +758,6 @@ typedef struct st_sort_buffer {
SORT_FIELD *sortorder;
} SORT_BUFFER;
-
/* Structure for db & table in sql_yacc */
class Table_ident :public Sql_alloc {
@@ -772,8 +771,15 @@ class Table_ident :public Sql_alloc {
db.str=0;
else
db= db_arg;
+ if (db.str)
+ table_case_convert(db.str,db.length);
+ table_case_convert(table.str,table.length);
+ }
+ inline Table_ident(LEX_STRING table_arg) :table(table_arg)
+ {
+ db.str=0;
+ table_case_convert(table.str,table.length);
}
- inline Table_ident(LEX_STRING table_arg) :table(table_arg) {db.str=0;}
inline void change_db(char *db_name)
{ db.str= db_name; db.length=(uint) strlen(db_name); }
};
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 70c0f772d7d..509f3ee5736 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3385,8 +3385,10 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias,
}
ptr->alias= alias_str;
+#ifdef TO_BE_DELETED
if (lower_case_table_names)
casedn_str(table->table.str);
+#endif
ptr->real_name=table->table.str;
ptr->real_name_length=table->table.length;
ptr->lock_type= lock_type;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index cf430aec35d..b2b8c7d7140 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1459,8 +1459,10 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
{
strmov(new_name_buff,new_name);
fn_same(new_name_buff,table_name,3);
+#ifdef TO_BE_DELETED
if (lower_case_table_names)
casedn_str(new_name);
+#endif
if ((lower_case_table_names &&
!my_strcasecmp(new_name_buff,table_name)) ||
(!lower_case_table_names &&
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index b07dca91a20..d67f76ea66b 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -3221,16 +3221,20 @@ simple_ident:
| ident '.' ident
{
SELECT_LEX *sel=Select;
+ table_case_convert($1.str, $1.length);
$$ = !sel->create_refs || sel->in_sum_expr > 0 ? (Item*) new Item_field(NullS,$1.str,$3.str) : (Item*) new Item_ref(NullS,$1.str,$3.str);
}
| '.' ident '.' ident
{
SELECT_LEX *sel=Select;
+ table_case_convert($2.str,$2.length);
$$ = !sel->create_refs || sel->in_sum_expr > 0 ? (Item*) new Item_field(NullS,$2.str,$4.str) : (Item*) new Item_ref(NullS,$2.str,$4.str);
}
| ident '.' ident '.' ident
{
SELECT_LEX *sel=Select;
+ table_case_convert($1.str,$1.length);
+ table_case_convert($3.str,$3.length);
$$ = !sel->create_refs || sel->in_sum_expr > 0 ? (Item*) new Item_field((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
};