summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <serg@serg.mylan>2003-10-06 20:02:27 +0200
committerunknown <serg@serg.mylan>2003-10-06 20:02:27 +0200
commite86fc82cf27303a0fe165b4567291ae228491302 (patch)
tree053d9dc151c78375331d8f5d7a629f6b115573cf /sql
parent08a08a67dbde78258e46b0d9bcd387c8419b8fcd (diff)
downloadmariadb-git-e86fc82cf27303a0fe165b4567291ae228491302.tar.gz
bug #1434 (and related issues)
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_class.h4
-rw-r--r--sql/sql_insert.cc14
2 files changed, 14 insertions, 4 deletions
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 2ed9cb7b877..bf626eb7d92 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -703,6 +703,7 @@ class select_create: public select_insert {
HA_CREATE_INFO *create_info;
MYSQL_LOCK *lock;
Field **field;
+ my_bool do_not_drop;
public:
select_create (const char *db_name, const char *table_name,
HA_CREATE_INFO *create_info_par,
@@ -711,8 +712,7 @@ public:
List<Item> &select_fields,enum_duplicates duplic)
:select_insert (NULL, &select_fields, duplic), db(db_name),
name(table_name), extra_fields(&fields_par),keys(&keys_par),
- create_info(create_info_par),
- lock(0)
+ create_info(create_info_par), lock(0), do_not_drop(0)
{}
int prepare(List<Item> &list);
bool send_data(List<Item> &values);
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 0a83358e8c6..ad08ad6ccd6 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1438,6 +1438,15 @@ select_create::prepare(List<Item> &values)
if (!table)
DBUG_RETURN(-1); // abort() deletes table
+ if (table->fields < values.elements)
+ {
+ do_not_drop=1;
+ my_printf_error(ER_WRONG_VALUE_COUNT_ON_ROW,
+ ER(ER_WRONG_VALUE_COUNT_ON_ROW),
+ MYF(0),1);
+ DBUG_RETURN(-1);
+ }
+
/* First field to copy */
field=table->field+table->fields - values.elements;
@@ -1498,7 +1507,7 @@ bool select_create::send_eof()
*/
if (!table->tmp_table)
hash_delete(&open_cache,(byte*) table);
- lock=0;
+ lock=0;
table=0;
VOID(pthread_mutex_unlock(&LOCK_open));
}
@@ -1519,7 +1528,8 @@ void select_create::abort()
enum db_type table_type=table->db_type;
if (!table->tmp_table)
hash_delete(&open_cache,(byte*) table);
- quick_rm_table(table_type,db,name);
+ if (!do_not_drop)
+ quick_rm_table(table_type,db,name);
table=0;
}
VOID(pthread_mutex_unlock(&LOCK_open));