diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_load.cc | 15 | ||||
-rw-r--r-- | sql/sql_show.cc | 16 | ||||
-rw-r--r-- | sql/sql_string.cc | 6 |
3 files changed, 28 insertions, 9 deletions
diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 274b1814674..9d3b899d31b 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -71,6 +71,8 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, String *field_term=ex->field_term,*escaped=ex->escaped, *enclosed=ex->enclosed; bool is_fifo=0; + bool using_transactions; + DBUG_ENTER("mysql_load"); if (escaped->length() > 1 || enclosed->length() > 1) @@ -239,8 +241,13 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, free_blobs(table); /* if pack_blob was used */ table->copy_blobs=0; thd->count_cuted_fields=0; /* Don`t calc cuted fields */ + using_transactions = table->file->has_transactions(); if (error) - DBUG_RETURN(-1); // Error on read + { + if (using_transactions) + ha_autocommit_or_rollback(thd,error); + DBUG_RETURN(-1); // Error on read + } sprintf(name,ER(ER_LOAD_INFO),info.records,info.deleted, info.records-info.copied,thd->cuted_fields); send_ok(&thd->net,info.copied+info.deleted,0L,name); @@ -248,7 +255,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, if(!thd->slave_thread) mysql_update_log.write(thd,thd->query,thd->query_length); - if (!table->file->has_transactions()) + if (!using_transactions) thd->options|=OPTION_STATUS_NO_TRANS_UPDATE; if (!read_file_from_client && mysql_bin_log.is_open()) { @@ -257,7 +264,9 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, handle_duplicates); mysql_bin_log.write(&qinfo); } - DBUG_RETURN(0); + if (using_transactions) + error=ha_autocommit_or_rollback(thd,error); + DBUG_RETURN(error); } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 71ee60e1eca..5869feefdc3 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -182,6 +182,8 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, TABLE_LIST table_list; DBUG_ENTER("mysql_find_files"); + if (wild && !wild[0]) + wild=0; bzero((char*) &table_list,sizeof(table_list)); if (!(dirp = my_dir(path,MYF(MY_WME | (dir ? MY_WANT_STAT : 0))))) @@ -200,7 +202,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, #endif { if (file->name[0] == '.' || !MY_S_ISDIR(file->mystat.st_mode) || - (wild && wild[0] && wild_compare(file->name,wild))) + (wild && wild_compare(file->name,wild))) continue; } } @@ -211,8 +213,16 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path, is_prefix(file->name,tmp_file_prefix)) continue; *ext=0; - if (wild && wild[0] && wild_compare(file->name,wild)) - continue; + if (wild) + { + if (lower_case_table_names) + { + if (wild_case_compare(file->name,wild)) + continue; + } + else if (wild_compare(file->name,wild)) + continue; + } } /* Don't show tables where we don't have any privileges */ if (db && !(col_access & TABLE_ACLS)) diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 174d07d8ec4..e6cdd089bf1 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -542,8 +542,8 @@ String *copy_if_not_alloced(String *to,String *from,uint32 from_length) #endif int wild_case_compare(const char *str,const char *str_end, - const char *wildstr,const char *wildend, - char escape) + const char *wildstr,const char *wildend, + char escape) { int result= -1; // Not found, using wildcards #ifdef USE_MB @@ -677,7 +677,7 @@ int wild_case_compare(String &match,String &wild, char escape) */ int wild_compare(const char *str,const char *str_end, - const char *wildstr,const char *wildend,char escape) + const char *wildstr,const char *wildend,char escape) { int result= -1; // Not found, using wildcards while (wildstr != wildend) |