diff options
author | unknown <vva@eagle.mysql.r18.ru> | 2003-07-22 18:58:30 -0400 |
---|---|---|
committer | unknown <vva@eagle.mysql.r18.ru> | 2003-07-22 18:58:30 -0400 |
commit | 38aa6d1c15e350e22ffbe041bc7fdf7ba5b5414b (patch) | |
tree | e35c64b5be509138b8c9340bbb820dbea0ed787c /sql | |
parent | cd3e15a6f998a74c0f04560bd8243a04e3218d66 (diff) | |
download | mariadb-git-38aa6d1c15e350e22ffbe041bc7fdf7ba5b5414b.tar.gz |
fixed bug 663 and WL 1052 (sql_mode is safe for mysqldump)
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field_conv.cc | 3 | ||||
-rw-r--r-- | sql/handler.cc | 5 | ||||
-rw-r--r-- | sql/mysql_priv.h | 1 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 | ||||
-rw-r--r-- | sql/sql_base.cc | 9 | ||||
-rw-r--r-- | sql/sql_insert.cc | 1 | ||||
-rw-r--r-- | sql/table.h | 1 |
7 files changed, 19 insertions, 3 deletions
diff --git a/sql/field_conv.cc b/sql/field_conv.cc index ec2488f520a..6e4d96ad5af 100644 --- a/sql/field_conv.cc +++ b/sql/field_conv.cc @@ -172,7 +172,10 @@ set_field_to_null_with_conversions(Field *field, bool no_conversions) } field->reset(); if (field == field->table->next_number_field) + { + field->table->auto_increment_field_is_null= true; return 0; // field is set in handler.cc + } if (current_thd->count_cuted_fields) { field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN,ER_WARN_NULL_TO_NOTNULL); diff --git a/sql/handler.cc b/sql/handler.cc index 150a0d5329e..7f4b63e7551 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -697,7 +697,10 @@ void handler::update_auto_increment() longlong nr; THD *thd; DBUG_ENTER("update_auto_increment"); - if (table->next_number_field->val_int() != 0) + if (table->auto_increment_field_is_null) + table->auto_increment_field_is_null= false; + else if (table->next_number_field->val_int() != 0 || + current_thd->variables.sql_mode & MODE_NO_AUTO_VALUE_ON_ZERO) { auto_increment_column_changed=0; DBUG_VOID_RETURN; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 5ad2cc56b8c..205617a910e 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -221,6 +221,7 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset; #define MODE_MYSQL323 32768 #define MODE_MYSQL40 65536 #define MODE_ANSI (MODE_MYSQL40*2) +#define MODE_NO_AUTO_VALUE_ON_ZERO (MODE_ANSI*2) #define RAID_BLOCK_SIZE 1024 diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 0a3985c3ee9..78c02df0daf 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -212,7 +212,7 @@ const char *sql_mode_names[] = "?", "ONLY_FULL_GROUP_BY", "NO_UNSIGNED_SUBTRACTION", "POSTGRESQL", "ORACLE", "MSSQL", "DB2", "SAPDB", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "MYSQL323", "MYSQL40", "ANSI", - NullS + "NO_AUTO_VALUE_ON_ZERO", NullS }; TYPELIB sql_mode_typelib= { array_elements(sql_mode_names)-1,"", sql_mode_names }; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 641ab46e5e0..a7798588d59 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2245,7 +2245,11 @@ fill_record(List<Item> &fields,List<Item> &values, bool ignore_errors) while ((field=(Item_field*) f++)) { value=v++; - if (value->save_in_field(field->field, 0) > 0 && !ignore_errors) + Field *rfield= field->field; + TABLE *table= rfield->table; + if (rfield==table->next_number_field) + table->auto_increment_field_is_null= false; + if (value->save_in_field(rfield, 0) > 0 && !ignore_errors) DBUG_RETURN(1); } DBUG_RETURN(0); @@ -2263,6 +2267,9 @@ fill_record(Field **ptr,List<Item> &values, bool ignore_errors) while ((field = *ptr++)) { value=v++; + TABLE *table= field->table; + if (field==table->next_number_field) + table->auto_increment_field_is_null= false; if (value->save_in_field(field, 0) == 1 && !ignore_errors) DBUG_RETURN(1); } diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 091de9d406f..10f1a2587b4 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -253,6 +253,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, else bulk_insert=0; + table->auto_increment_field_is_null= true; while ((values= its++)) { if (fields.elements || !value_count) diff --git a/sql/table.h b/sql/table.h index 3132e72fb2f..8137f47aa1f 100644 --- a/sql/table.h +++ b/sql/table.h @@ -116,6 +116,7 @@ struct st_table { my_bool crashed; my_bool is_view; my_bool no_keyread; + my_bool auto_increment_field_is_null; Field *next_number_field, /* Set if next_number is activated */ *found_next_number_field, /* Set on open */ *rowid_field; |