mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug fix for bug#3912
This commit is contained in:
@ -15,14 +15,20 @@ col2 varchar(30) not null,
|
|||||||
col3 varchar (20) not null,
|
col3 varchar (20) not null,
|
||||||
col4 varchar(4) not null,
|
col4 varchar(4) not null,
|
||||||
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
||||||
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
||||||
insert into t1 values (2,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7), (25, 4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7);
|
insert into t1 values
|
||||||
|
(0,4,3,5,"PENDING",1,7),(NULL,4,3,5,"PENDING",1,7),(31,4,3,5,"PENDING",1,7), (7,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7), (100,4,3,5,"PENDING",1,7), (99,4,3,5,"PENDING",1,7), (8,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7);
|
||||||
select * from t1 order by col1;
|
select * from t1 order by col1;
|
||||||
col1 col2 col3 col4 col5 col6 to_be_deleted
|
col1 col2 col3 col4 col5 col6 to_be_deleted
|
||||||
2 4 3 5 PENDING 1 7
|
0 4 3 5 PENDING 1 7
|
||||||
3 4 3 5 PENDING 1 7
|
1 4 3 5 PENDING 1 7
|
||||||
25 4 3 5 PENDING 1 7
|
7 4 3 5 PENDING 1 7
|
||||||
26 4 3 5 PENDING 1 7
|
8 4 3 5 PENDING 1 7
|
||||||
|
31 4 3 5 PENDING 1 7
|
||||||
|
32 4 3 5 PENDING 1 7
|
||||||
|
99 4 3 5 PENDING 1 7
|
||||||
|
100 4 3 5 PENDING 1 7
|
||||||
|
101 4 3 5 PENDING 1 7
|
||||||
alter table t1
|
alter table t1
|
||||||
add column col4_5 varchar(20) not null after col4,
|
add column col4_5 varchar(20) not null after col4,
|
||||||
add column col7 varchar(30) not null after col5,
|
add column col7 varchar(30) not null after col5,
|
||||||
@ -31,16 +37,26 @@ change column col2 fourth varchar(30) not null after col3,
|
|||||||
modify column col6 int not null first;
|
modify column col6 int not null first;
|
||||||
select * from t1 order by col1;
|
select * from t1 order by col1;
|
||||||
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
||||||
1 2 3 4 5 PENDING 0000-00-00 00:00:00
|
1 0 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 3 3 4 5 PENDING 0000-00-00 00:00:00
|
1 1 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 25 3 4 5 PENDING 0000-00-00 00:00:00
|
1 7 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 26 3 4 5 PENDING 0000-00-00 00:00:00
|
1 8 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 31 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 32 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 99 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 100 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 101 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
insert into t1 values (2, NULL,4,3,5,99,"PENDING","EXTRA",'2004-01-01 00:00:00');
|
insert into t1 values (2, NULL,4,3,5,99,"PENDING","EXTRA",'2004-01-01 00:00:00');
|
||||||
select * from t1 order by col1;
|
select * from t1 order by col1;
|
||||||
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
||||||
1 2 3 4 5 PENDING 0000-00-00 00:00:00
|
1 0 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 3 3 4 5 PENDING 0000-00-00 00:00:00
|
1 1 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 25 3 4 5 PENDING 0000-00-00 00:00:00
|
1 7 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
1 26 3 4 5 PENDING 0000-00-00 00:00:00
|
1 8 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
2 27 4 3 5 99 PENDING EXTRA 2004-01-01 00:00:00
|
1 31 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 32 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 99 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 100 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
1 101 3 4 5 PENDING 0000-00-00 00:00:00
|
||||||
|
2 102 4 3 5 99 PENDING EXTRA 2004-01-01 00:00:00
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -29,8 +29,9 @@ col2 varchar(30) not null,
|
|||||||
col3 varchar (20) not null,
|
col3 varchar (20) not null,
|
||||||
col4 varchar(4) not null,
|
col4 varchar(4) not null,
|
||||||
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
||||||
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
||||||
insert into t1 values (2,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7), (25, 4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7);
|
insert into t1 values
|
||||||
|
(0,4,3,5,"PENDING",1,7),(NULL,4,3,5,"PENDING",1,7),(31,4,3,5,"PENDING",1,7), (7,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7), (100,4,3,5,"PENDING",1,7), (99,4,3,5,"PENDING",1,7), (8,4,3,5,"PENDING",1,7), (NULL,4,3,5,"PENDING",1,7);
|
||||||
select * from t1 order by col1;
|
select * from t1 order by col1;
|
||||||
alter table t1
|
alter table t1
|
||||||
add column col4_5 varchar(20) not null after col4,
|
add column col4_5 varchar(20) not null after col4,
|
||||||
|
@ -788,7 +788,7 @@ Ndb::setTupleIdInNdb(Uint32 aTableId, Uint64 val, bool increase )
|
|||||||
{
|
{
|
||||||
// We have a cache sequence
|
// We have a cache sequence
|
||||||
if (val <= theFirstTupleId[aTableId]+1)
|
if (val <= theFirstTupleId[aTableId]+1)
|
||||||
return true;
|
return false;
|
||||||
if (val <= theLastTupleId[aTableId])
|
if (val <= theLastTupleId[aTableId])
|
||||||
{
|
{
|
||||||
theFirstTupleId[aTableId] = val - 1;
|
theFirstTupleId[aTableId] = val - 1;
|
||||||
@ -811,7 +811,7 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
|||||||
NdbOperation* tOperation;
|
NdbOperation* tOperation;
|
||||||
Uint64 tValue;
|
Uint64 tValue;
|
||||||
NdbRecAttr* tRecAttrResult;
|
NdbRecAttr* tRecAttrResult;
|
||||||
|
int result;
|
||||||
Uint64 ret;
|
Uint64 ret;
|
||||||
|
|
||||||
CHECK_STATUS_MACRO_ZERO;
|
CHECK_STATUS_MACRO_ZERO;
|
||||||
@ -865,8 +865,8 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
|||||||
if (tConnection->execute( Commit ) == -1 )
|
if (tConnection->execute( Commit ) == -1 )
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
|
|
||||||
theFirstTupleId[aTableId] = ~0;
|
theFirstTupleId[aTableId] = ~(Uint64)0;
|
||||||
theLastTupleId[aTableId] = ~0;
|
theLastTupleId[aTableId] = ~(Uint64)0;
|
||||||
ret = opValue;
|
ret = opValue;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
@ -876,15 +876,20 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
|||||||
tOperation->read_attr("NEXTID", 2);
|
tOperation->read_attr("NEXTID", 2);
|
||||||
tOperation->branch_le(2, 1, 0);
|
tOperation->branch_le(2, 1, 0);
|
||||||
tOperation->write_attr("NEXTID", 1);
|
tOperation->write_attr("NEXTID", 1);
|
||||||
tOperation->def_label(0);
|
|
||||||
tOperation->interpret_exit_ok();
|
tOperation->interpret_exit_ok();
|
||||||
|
tOperation->def_label(0);
|
||||||
|
tOperation->interpret_exit_nok(9999);
|
||||||
|
|
||||||
if (tConnection->execute( Commit ) == -1 )
|
if (tConnection->execute( Commit ) == -1 )
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
|
|
||||||
theFirstTupleId[aTableId] = ~0;
|
if (result == 9999)
|
||||||
theLastTupleId[aTableId] = ~0;
|
ret = ~(Uint64)0;
|
||||||
ret = opValue;
|
else
|
||||||
|
{
|
||||||
|
theFirstTupleId[aTableId] = theLastTupleId[aTableId] = opValue - 1;
|
||||||
|
ret = opValue;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto error_handler;
|
goto error_handler;
|
||||||
|
@ -1281,7 +1281,7 @@ int ha_ndbcluster::define_read_attrs(byte* buf, NdbOperation* op)
|
|||||||
|
|
||||||
int ha_ndbcluster::write_row(byte *record)
|
int ha_ndbcluster::write_row(byte *record)
|
||||||
{
|
{
|
||||||
bool has_auto_increment;
|
bool has_auto_increment, auto_increment_field_not_null;
|
||||||
uint i;
|
uint i;
|
||||||
NdbConnection *trans= m_active_trans;
|
NdbConnection *trans= m_active_trans;
|
||||||
NdbOperation *op;
|
NdbOperation *op;
|
||||||
@ -1292,7 +1292,8 @@ int ha_ndbcluster::write_row(byte *record)
|
|||||||
if (table->timestamp_default_now)
|
if (table->timestamp_default_now)
|
||||||
update_timestamp(record+table->timestamp_default_now-1);
|
update_timestamp(record+table->timestamp_default_now-1);
|
||||||
has_auto_increment= (table->next_number_field && record == table->record[0]);
|
has_auto_increment= (table->next_number_field && record == table->record[0]);
|
||||||
if (has_auto_increment)
|
auto_increment_field_not_null= table->auto_increment_field_not_null;
|
||||||
|
if ((has_auto_increment) && (!auto_increment_field_not_null))
|
||||||
update_auto_increment();
|
update_auto_increment();
|
||||||
|
|
||||||
if (!(op= trans->getNdbOperation(m_tabname)))
|
if (!(op= trans->getNdbOperation(m_tabname)))
|
||||||
@ -1346,11 +1347,14 @@ int ha_ndbcluster::write_row(byte *record)
|
|||||||
if (trans->execute(NoCommit) != 0)
|
if (trans->execute(NoCommit) != 0)
|
||||||
DBUG_RETURN(ndb_err(trans));
|
DBUG_RETURN(ndb_err(trans));
|
||||||
}
|
}
|
||||||
if ( (has_auto_increment) && (!auto_increment_column_changed) )
|
if ((has_auto_increment) && (auto_increment_field_not_null))
|
||||||
{
|
{
|
||||||
Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1;
|
Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1;
|
||||||
DBUG_PRINT("info", ("Setting next auto increment value to %u", next_val));
|
DBUG_PRINT("info",
|
||||||
m_ndb->setAutoIncrementValue(m_tabname, next_val, true);
|
("Trying to set next auto increment value to %u", next_val));
|
||||||
|
if (m_ndb->setAutoIncrementValue(m_tabname, next_val, true))
|
||||||
|
DBUG_PRINT("info",
|
||||||
|
("Setting next auto increment value to %u", next_val));
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
Reference in New Issue
Block a user