diff options
author | Alexander Barkov <bar@mariadb.org> | 2018-03-07 19:52:00 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-02-23 17:43:59 +0400 |
commit | 8036ad541e9da4073a6136052e41c22c758b770e (patch) | |
tree | da5b808faf07b27226e2dcd40927a75923c9693e /sql/sql_load.cc | |
parent | 0ef8848526c117ed8731e42edbb3f28652b168f2 (diff) | |
download | mariadb-git-8036ad541e9da4073a6136052e41c22c758b770e.tar.gz |
Backporting MDEV-15497 Wrong empty value in a GEOMETRY column on LOAD DATA
This is a part of "MDEV-18045 Backporting the MDEV-15497 changes to 10.2 branch"
Diffstat (limited to 'sql/sql_load.cc')
-rw-r--r-- | sql/sql_load.cc | 40 |
1 files changed, 6 insertions, 34 deletions
diff --git a/sql/sql_load.cc b/sql/sql_load.cc index da3aafa58e1..53b43ebb1f5 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -966,26 +966,15 @@ read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, { Field *field= sql_field->field; table->auto_increment_field_not_null= auto_increment_field_not_null; - /* - No fields specified in fields_vars list can be null in this format. - Mark field as not null, we should do this for each row because of - restore_record... - */ - field->set_notnull(); - if (pos == read_info.row_end) { + if (field->load_data_set_no_data(thd, true)) + DBUG_RETURN(1); thd->cuted_fields++; /* Not enough fields */ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, ER_WARN_TOO_FEW_RECORDS, ER_THD(thd, ER_WARN_TOO_FEW_RECORDS), thd->get_stmt_da()->current_row_for_warning()); - /* - Timestamp fields that are NOT NULL are autoupdated if there is no - corresponding value in the data file. - */ - if (!field->maybe_null() && field->type() == FIELD_TYPE_TIMESTAMP) - field->set_time(); } else { @@ -995,13 +984,11 @@ read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, field->field_length) length=field->field_length; save_chr=pos[length]; pos[length]='\0'; // Safeguard aganst malloc - field->store((char*) pos,length,read_info.read_charset); + field->load_data_set_value((char*) pos,length,read_info.read_charset); pos[length]=save_chr; if ((pos+=length) > read_info.row_end) pos= read_info.row_end; /* Fills rest with space */ } - /* Do not auto-update this field. */ - field->set_has_explicit_value(); } if (pos != read_info.row_end) { @@ -1152,12 +1139,8 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, else { Field *field= real_item->field; - field->set_notnull(); read_info.row_end[0]=0; // Safe to change end marker - if (field == table->next_number_field) - table->auto_increment_field_not_null= TRUE; - field->store((char*) pos, length, read_info.read_charset); - field->set_has_explicit_value(); + field->load_data_set_value((char*) pos, length, read_info.read_charset); } } @@ -1192,15 +1175,8 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, else { Field *field= real_item->field; - if (field->reset()) - { - my_error(ER_WARN_NULL_TO_NOTNULL, MYF(0),field->field_name, - thd->get_stmt_da()->current_row_for_warning()); + if (field->load_data_set_no_data(thd, false)) DBUG_RETURN(1); - } - if (!field->maybe_null() && field->type() == FIELD_TYPE_TIMESTAMP) - field->set_time(); - field->set_has_explicit_value(); /* TODO: We probably should not throw warning for each field. But how about intention to always have the same number @@ -1353,11 +1329,7 @@ read_xml_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, { Field *field= ((Item_field *)item)->field; - field->set_notnull(); - if (field == table->next_number_field) - table->auto_increment_field_not_null= TRUE; - field->store((char *) tag->value.ptr(), tag->value.length(), cs); - field->set_has_explicit_value(); + field->load_data_set_value(tag->value.ptr(), tag->value.length(), cs); } } |