summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_load.cc15
-rw-r--r--sql/sql_show.cc16
-rw-r--r--sql/sql_string.cc6
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)