mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
bug#5349 ALTER TABLE corrupts TEXT (and blob?)
This commit is contained in:
@@ -377,3 +377,24 @@ count(*)
|
|||||||
0
|
0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
|
set autocommit=1;
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b text,
|
||||||
|
PRIMARY KEY (a)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1,'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(2,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB');
|
||||||
|
select * from t1 order by a;
|
||||||
|
a b
|
||||||
|
1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
alter table t1 engine=ndb;
|
||||||
|
select * from t1 order by a;
|
||||||
|
a b
|
||||||
|
1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
2 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
||||||
|
drop table t1;
|
||||||
|
@@ -308,3 +308,21 @@ rollback;
|
|||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
|
|
||||||
|
set autocommit=1;
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a int,
|
||||||
|
b text,
|
||||||
|
PRIMARY KEY (a)
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(1,'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(2,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB');
|
||||||
|
|
||||||
|
select * from t1 order by a;
|
||||||
|
alter table t1 engine=ndb;
|
||||||
|
select * from t1 order by a;
|
||||||
|
drop table t1;
|
||||||
|
@@ -389,7 +389,7 @@ int ha_ndbcluster::set_ndb_key(NdbOperation *ndb_op, Field *field,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
|
int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
|
||||||
uint fieldnr)
|
uint fieldnr, bool *set_blob_value)
|
||||||
{
|
{
|
||||||
const byte* field_ptr= field->ptr;
|
const byte* field_ptr= field->ptr;
|
||||||
uint32 pack_len= field->pack_length();
|
uint32 pack_len= field->pack_length();
|
||||||
@@ -434,6 +434,8 @@ int ha_ndbcluster::set_ndb_value(NdbOperation *ndb_op, Field *field,
|
|||||||
(unsigned)blob_ptr, blob_len));
|
(unsigned)blob_ptr, blob_len));
|
||||||
DBUG_DUMP("value", (char*)blob_ptr, min(blob_len, 26));
|
DBUG_DUMP("value", (char*)blob_ptr, min(blob_len, 26));
|
||||||
|
|
||||||
|
if (set_blob_value)
|
||||||
|
*set_blob_value= true;
|
||||||
// No callback needed to write value
|
// No callback needed to write value
|
||||||
DBUG_RETURN(ndb_blob->setValue(blob_ptr, blob_len) != 0);
|
DBUG_RETURN(ndb_blob->setValue(blob_ptr, blob_len) != 0);
|
||||||
}
|
}
|
||||||
@@ -1583,11 +1585,12 @@ int ha_ndbcluster::write_row(byte *record)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set non-key attribute(s)
|
// Set non-key attribute(s)
|
||||||
|
bool set_blob_value= false;
|
||||||
for (i= 0; i < table->fields; i++)
|
for (i= 0; i < table->fields; i++)
|
||||||
{
|
{
|
||||||
Field *field= table->field[i];
|
Field *field= table->field[i];
|
||||||
if (!(field->flags & PRI_KEY_FLAG) &&
|
if (!(field->flags & PRI_KEY_FLAG) &&
|
||||||
set_ndb_value(op, field, i))
|
set_ndb_value(op, field, i, &set_blob_value))
|
||||||
{
|
{
|
||||||
skip_auto_increment= true;
|
skip_auto_increment= true;
|
||||||
ERR_RETURN(op->getNdbError());
|
ERR_RETURN(op->getNdbError());
|
||||||
@@ -1606,7 +1609,7 @@ int ha_ndbcluster::write_row(byte *record)
|
|||||||
bulk_insert_not_flushed= true;
|
bulk_insert_not_flushed= true;
|
||||||
if ((rows_to_insert == 1) ||
|
if ((rows_to_insert == 1) ||
|
||||||
((rows_inserted % bulk_insert_rows) == 0) ||
|
((rows_inserted % bulk_insert_rows) == 0) ||
|
||||||
uses_blob_value(false) != 0)
|
set_blob_value)
|
||||||
{
|
{
|
||||||
THD *thd= current_thd;
|
THD *thd= current_thd;
|
||||||
// Send rows to NDB
|
// Send rows to NDB
|
||||||
|
@@ -210,7 +210,7 @@ class ha_ndbcluster: public handler
|
|||||||
uint fieldnr, const byte* field_ptr);
|
uint fieldnr, const byte* field_ptr);
|
||||||
int set_ndb_key(NdbOperation*, Field *field,
|
int set_ndb_key(NdbOperation*, Field *field,
|
||||||
uint fieldnr, const byte* field_ptr);
|
uint fieldnr, const byte* field_ptr);
|
||||||
int set_ndb_value(NdbOperation*, Field *field, uint fieldnr);
|
int set_ndb_value(NdbOperation*, Field *field, uint fieldnr, bool *set_blob_value= 0);
|
||||||
int get_ndb_value(NdbOperation*, Field *field, uint fieldnr, byte*);
|
int get_ndb_value(NdbOperation*, Field *field, uint fieldnr, byte*);
|
||||||
friend int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg);
|
friend int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg);
|
||||||
int get_ndb_blobs_value(NdbBlob *last_ndb_blob);
|
int get_ndb_blobs_value(NdbBlob *last_ndb_blob);
|
||||||
|
Reference in New Issue
Block a user