mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +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,
|
||||
col4 varchar(4) not null,
|
||||
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
||||
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);
|
||||
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
||||
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;
|
||||
col1 col2 col3 col4 col5 col6 to_be_deleted
|
||||
2 4 3 5 PENDING 1 7
|
||||
3 4 3 5 PENDING 1 7
|
||||
25 4 3 5 PENDING 1 7
|
||||
26 4 3 5 PENDING 1 7
|
||||
0 4 3 5 PENDING 1 7
|
||||
1 4 3 5 PENDING 1 7
|
||||
7 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
|
||||
add column col4_5 varchar(20) not null after col4,
|
||||
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;
|
||||
select * from t1 order by col1;
|
||||
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
||||
1 2 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 3 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 25 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 26 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 0 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 1 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 7 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');
|
||||
select * from t1 order by col1;
|
||||
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
|
||||
1 2 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 3 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 25 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 26 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 0 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 1 3 4 5 PENDING 0000-00-00 00:00:00
|
||||
1 7 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
|
||||
2 102 4 3 5 99 PENDING EXTRA 2004-01-01 00:00:00
|
||||
drop table t1;
|
||||
|
@ -29,8 +29,9 @@ col2 varchar(30) not null,
|
||||
col3 varchar (20) not null,
|
||||
col4 varchar(4) not null,
|
||||
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
|
||||
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);
|
||||
col6 int not null, to_be_deleted int) ENGINE=ndbcluster;
|
||||
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;
|
||||
alter table t1
|
||||
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
|
||||
if (val <= theFirstTupleId[aTableId]+1)
|
||||
return true;
|
||||
return false;
|
||||
if (val <= theLastTupleId[aTableId])
|
||||
{
|
||||
theFirstTupleId[aTableId] = val - 1;
|
||||
@ -811,7 +811,7 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
||||
NdbOperation* tOperation;
|
||||
Uint64 tValue;
|
||||
NdbRecAttr* tRecAttrResult;
|
||||
|
||||
int result;
|
||||
Uint64 ret;
|
||||
|
||||
CHECK_STATUS_MACRO_ZERO;
|
||||
@ -865,8 +865,8 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
||||
if (tConnection->execute( Commit ) == -1 )
|
||||
goto error_handler;
|
||||
|
||||
theFirstTupleId[aTableId] = ~0;
|
||||
theLastTupleId[aTableId] = ~0;
|
||||
theFirstTupleId[aTableId] = ~(Uint64)0;
|
||||
theLastTupleId[aTableId] = ~(Uint64)0;
|
||||
ret = opValue;
|
||||
break;
|
||||
case 2:
|
||||
@ -876,15 +876,20 @@ Ndb::opTupleIdOnNdb(Uint32 aTableId, Uint64 opValue, Uint32 op)
|
||||
tOperation->read_attr("NEXTID", 2);
|
||||
tOperation->branch_le(2, 1, 0);
|
||||
tOperation->write_attr("NEXTID", 1);
|
||||
tOperation->def_label(0);
|
||||
tOperation->interpret_exit_ok();
|
||||
tOperation->def_label(0);
|
||||
tOperation->interpret_exit_nok(9999);
|
||||
|
||||
if (tConnection->execute( Commit ) == -1 )
|
||||
goto error_handler;
|
||||
|
||||
theFirstTupleId[aTableId] = ~0;
|
||||
theLastTupleId[aTableId] = ~0;
|
||||
ret = opValue;
|
||||
|
||||
if (result == 9999)
|
||||
ret = ~(Uint64)0;
|
||||
else
|
||||
{
|
||||
theFirstTupleId[aTableId] = theLastTupleId[aTableId] = opValue - 1;
|
||||
ret = opValue;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
goto error_handler;
|
||||
|
@ -1281,7 +1281,7 @@ int ha_ndbcluster::define_read_attrs(byte* buf, NdbOperation* op)
|
||||
|
||||
int ha_ndbcluster::write_row(byte *record)
|
||||
{
|
||||
bool has_auto_increment;
|
||||
bool has_auto_increment, auto_increment_field_not_null;
|
||||
uint i;
|
||||
NdbConnection *trans= m_active_trans;
|
||||
NdbOperation *op;
|
||||
@ -1292,7 +1292,8 @@ int ha_ndbcluster::write_row(byte *record)
|
||||
if (table->timestamp_default_now)
|
||||
update_timestamp(record+table->timestamp_default_now-1);
|
||||
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();
|
||||
|
||||
if (!(op= trans->getNdbOperation(m_tabname)))
|
||||
@ -1346,11 +1347,14 @@ int ha_ndbcluster::write_row(byte *record)
|
||||
if (trans->execute(NoCommit) != 0)
|
||||
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;
|
||||
DBUG_PRINT("info", ("Setting next auto increment value to %u", next_val));
|
||||
m_ndb->setAutoIncrementValue(m_tabname, next_val, true);
|
||||
DBUG_PRINT("info",
|
||||
("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);
|
||||
|
Reference in New Issue
Block a user