mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Bug#17081 LOAD DATA INFILE" may not load all the data
Bug #17154 load data infile hangs when duplicate key encountered
This commit is contained in:
parent
69ed898ec2
commit
407d98b946
4 changed files with 132 additions and 10 deletions
80
mysql-test/r/ndb_load.result
Normal file
80
mysql-test/r/ndb_load.result
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=NDB;
|
||||||
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1 ;
|
||||||
|
ERROR 23000: Can't write; duplicate key in table 't1'
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL) ENGINE=NDB;
|
||||||
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1 ;
|
||||||
|
SELECT * FROM t1 ORDER BY word;
|
||||||
|
word
|
||||||
|
Aarhus
|
||||||
|
Aarhus
|
||||||
|
Aaron
|
||||||
|
Aaron
|
||||||
|
Ababa
|
||||||
|
Ababa
|
||||||
|
aback
|
||||||
|
aback
|
||||||
|
abaft
|
||||||
|
abaft
|
||||||
|
abandon
|
||||||
|
abandon
|
||||||
|
abandoned
|
||||||
|
abandoned
|
||||||
|
abandoning
|
||||||
|
abandoning
|
||||||
|
abandonment
|
||||||
|
abandonment
|
||||||
|
abandons
|
||||||
|
abandons
|
||||||
|
abase
|
||||||
|
abased
|
||||||
|
abasement
|
||||||
|
abasements
|
||||||
|
abases
|
||||||
|
abash
|
||||||
|
abashed
|
||||||
|
abashes
|
||||||
|
abashing
|
||||||
|
abasing
|
||||||
|
abate
|
||||||
|
abated
|
||||||
|
abatement
|
||||||
|
abatements
|
||||||
|
abater
|
||||||
|
abates
|
||||||
|
abating
|
||||||
|
Abba
|
||||||
|
abbe
|
||||||
|
abbey
|
||||||
|
abbeys
|
||||||
|
abbot
|
||||||
|
abbots
|
||||||
|
Abbott
|
||||||
|
abbreviate
|
||||||
|
abbreviated
|
||||||
|
abbreviates
|
||||||
|
abbreviating
|
||||||
|
abbreviation
|
||||||
|
abbreviations
|
||||||
|
Abby
|
||||||
|
abdomen
|
||||||
|
abdomens
|
||||||
|
abdominal
|
||||||
|
abduct
|
||||||
|
abducted
|
||||||
|
abduction
|
||||||
|
abductions
|
||||||
|
abductor
|
||||||
|
abductors
|
||||||
|
abducts
|
||||||
|
Abe
|
||||||
|
abed
|
||||||
|
Abel
|
||||||
|
Abelian
|
||||||
|
Abelson
|
||||||
|
Aberdeen
|
||||||
|
Abernathy
|
||||||
|
aberrant
|
||||||
|
aberration
|
||||||
|
DROP TABLE t1;
|
24
mysql-test/t/ndb_load.test
Normal file
24
mysql-test/t/ndb_load.test
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
-- source include/have_ndb.inc
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
#
|
||||||
|
# Basic test for different types of loading data
|
||||||
|
#
|
||||||
|
|
||||||
|
# should give duplicate key
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL PRIMARY KEY) ENGINE=NDB;
|
||||||
|
--error 1022
|
||||||
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1 ;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# now without a primary key we should be ok
|
||||||
|
CREATE TABLE t1 (word CHAR(20) NOT NULL) ENGINE=NDB;
|
||||||
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1 ;
|
||||||
|
SELECT * FROM t1 ORDER BY word;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# End of 4.1 tests
|
|
@ -3446,9 +3446,26 @@ int ha_ndbcluster::end_bulk_insert()
|
||||||
"rows_inserted:%d, bulk_insert_rows: %d",
|
"rows_inserted:%d, bulk_insert_rows: %d",
|
||||||
(int) m_rows_inserted, (int) m_bulk_insert_rows));
|
(int) m_rows_inserted, (int) m_bulk_insert_rows));
|
||||||
m_bulk_insert_not_flushed= FALSE;
|
m_bulk_insert_not_flushed= FALSE;
|
||||||
if (execute_no_commit(this,trans) != 0) {
|
if (m_transaction_on)
|
||||||
no_uncommitted_rows_execute_failure();
|
{
|
||||||
my_errno= error= ndb_err(trans);
|
if (execute_no_commit(this, trans) != 0)
|
||||||
|
{
|
||||||
|
no_uncommitted_rows_execute_failure();
|
||||||
|
my_errno= error= ndb_err(trans);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (execute_commit(this, trans) != 0)
|
||||||
|
{
|
||||||
|
no_uncommitted_rows_execute_failure();
|
||||||
|
my_errno= error= ndb_err(trans);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int res= trans->restart();
|
||||||
|
DBUG_ASSERT(res == 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3605,8 +3622,7 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
|
||||||
ERR_RETURN(ndb->getNdbError());
|
ERR_RETURN(ndb->getNdbError());
|
||||||
no_uncommitted_rows_reset(thd);
|
no_uncommitted_rows_reset(thd);
|
||||||
thd_ndb->stmt= trans;
|
thd_ndb->stmt= trans;
|
||||||
if (m_transaction_on)
|
trans_register_ha(thd, FALSE, &ndbcluster_hton);
|
||||||
trans_register_ha(thd, FALSE, &ndbcluster_hton);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3621,8 +3637,7 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
|
||||||
ERR_RETURN(ndb->getNdbError());
|
ERR_RETURN(ndb->getNdbError());
|
||||||
no_uncommitted_rows_reset(thd);
|
no_uncommitted_rows_reset(thd);
|
||||||
thd_ndb->all= trans;
|
thd_ndb->all= trans;
|
||||||
if (m_transaction_on)
|
trans_register_ha(thd, TRUE, &ndbcluster_hton);
|
||||||
trans_register_ha(thd, TRUE, &ndbcluster_hton);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If this is the start of a LOCK TABLE, a table look
|
If this is the start of a LOCK TABLE, a table look
|
||||||
|
@ -6194,7 +6209,7 @@ bool ha_ndbcluster::low_byte_first() const
|
||||||
}
|
}
|
||||||
bool ha_ndbcluster::has_transactions()
|
bool ha_ndbcluster::has_transactions()
|
||||||
{
|
{
|
||||||
return m_transaction_on;
|
return TRUE;
|
||||||
}
|
}
|
||||||
const char* ha_ndbcluster::index_type(uint key_number)
|
const char* ha_ndbcluster::index_type(uint key_number)
|
||||||
{
|
{
|
||||||
|
|
|
@ -384,8 +384,11 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
||||||
error= read_sep_field(thd, info, table_list, fields_vars,
|
error= read_sep_field(thd, info, table_list, fields_vars,
|
||||||
set_fields, set_values, read_info,
|
set_fields, set_values, read_info,
|
||||||
*enclosed, skip_lines, ignore);
|
*enclosed, skip_lines, ignore);
|
||||||
if (table->file->end_bulk_insert())
|
if (table->file->end_bulk_insert() && !error)
|
||||||
error=1; /* purecov: inspected */
|
{
|
||||||
|
table->file->print_error(my_errno, MYF(0));
|
||||||
|
error= 1;
|
||||||
|
}
|
||||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||||
table->next_number_field=0;
|
table->next_number_field=0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue