Loading mysql-test/r/ndb_replace.result +22 −1 Original line number Diff line number Diff line drop table if exists t1; drop table if exists t1,t2; CREATE TABLE t1 ( gesuchnr int(11) DEFAULT '0' NOT NULL, benutzer_id int(11) DEFAULT '0' NOT NULL, Loading Loading @@ -31,3 +31,24 @@ SELECT * from t1 ORDER BY i; i j k 3 1 42 17 2 24 CREATE TABLE t2 (a INT(11) NOT NULL, b INT(11) NOT NULL, c INT(11) NOT NULL, x TEXT, y TEXT, z TEXT, id INT(10) unsigned NOT NULL AUTO_INCREMENT, i INT(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY a (a,b,c) ) ENGINE=ndbcluster; REPLACE INTO t2 (a,b,c,x,y,z,i) VALUES (1,1,1,'a','a','a',1),(1,1,1,'b','b','b',2), (1,1,1,'c','c','c',3); SELECT * FROM t2 ORDER BY id; a b c x y z id i 1 1 1 c c c 3 3 REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'a','a','a',1); REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'b','b','b',2); SELECT * FROM t2 ORDER BY id; a b c x y z id i 1 1 1 b b b 5 2 DROP TABLE t2; mysql-test/t/ndb_replace.test +28 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # --disable_warnings drop table if exists t1; drop table if exists t1,t2; --enable_warnings CREATE TABLE t1 ( Loading @@ -27,6 +27,8 @@ replace into t1 (gesuchnr,benutzer_id) values (1,1); select * from t1 order by gesuchnr; drop table t1; # End of 4.1 tests # bug#17431 CREATE TABLE t1(i INT PRIMARY KEY AUTO_INCREMENT, j INT, Loading @@ -38,4 +40,28 @@ REPLACE INTO t1 (j,k) VALUES (1,42); REPLACE INTO t1 (i,j) VALUES (17,2); SELECT * from t1 ORDER BY i; # End of 4.1 tests # bug#19906 CREATE TABLE t2 (a INT(11) NOT NULL, b INT(11) NOT NULL, c INT(11) NOT NULL, x TEXT, y TEXT, z TEXT, id INT(10) unsigned NOT NULL AUTO_INCREMENT, i INT(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY a (a,b,c) ) ENGINE=ndbcluster; REPLACE INTO t2 (a,b,c,x,y,z,i) VALUES (1,1,1,'a','a','a',1),(1,1,1,'b','b','b',2), (1,1,1,'c','c','c',3); SELECT * FROM t2 ORDER BY id; REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'a','a','a',1); REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'b','b','b',2); SELECT * FROM t2 ORDER BY id; DROP TABLE t2; sql/ha_ndbcluster.cc +8 −2 Original line number Diff line number Diff line Loading @@ -771,10 +771,11 @@ int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg) if (ndb_blob->blobsNextBlob() != NULL) DBUG_RETURN(0); ha_ndbcluster *ha= (ha_ndbcluster *)arg; DBUG_RETURN(ha->get_ndb_blobs_value(ndb_blob)); DBUG_RETURN(ha->get_ndb_blobs_value(ndb_blob, ha->m_blobs_offset)); } int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob) int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob, my_ptrdiff_t ptrdiff) { DBUG_ENTER("get_ndb_blobs_value"); Loading Loading @@ -807,7 +808,10 @@ int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob) if (ndb_blob->readData(buf, len) != 0) DBUG_RETURN(-1); DBUG_ASSERT(len == blob_len); // Ugly hack assumes only ptr needs to be changed field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; } offset+= blob_size; } Loading Loading @@ -870,6 +874,7 @@ int ha_ndbcluster::get_ndb_value(NdbOperation *ndb_op, Field *field, if (ndb_blob != NULL) { // Set callback m_blobs_offset= buf - (byte*) table->record[0]; void *arg= (void *)this; DBUG_RETURN(ndb_blob->setActiveHook(g_get_ndb_blobs_value, arg) != 0); } Loading Loading @@ -4552,6 +4557,7 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg): m_ops_pending(0), m_skip_auto_increment(TRUE), m_blobs_pending(0), m_blobs_offset(0), m_blobs_buffer(0), m_blobs_buffer_size(0), m_dupkey((uint) -1), Loading sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -629,7 +629,7 @@ static void set_tabname(const char *pathname, char *tabname); int set_ndb_value(NdbOperation*, Field *field, uint fieldnr, bool *set_blob_value= 0); int get_ndb_value(NdbOperation*, Field *field, uint fieldnr, byte*); 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, my_ptrdiff_t ptrdiff); int set_primary_key(NdbOperation *op, const byte *key); int set_primary_key_from_record(NdbOperation *op, const byte *record); int set_index_key_from_record(NdbOperation *op, const byte *record, Loading Loading @@ -706,6 +706,7 @@ static void set_tabname(const char *pathname, char *tabname); ha_rows m_ops_pending; bool m_skip_auto_increment; bool m_blobs_pending; my_ptrdiff_t m_blobs_offset; // memory for blobs in one tuple char *m_blobs_buffer; uint32 m_blobs_buffer_size; Loading Loading
mysql-test/r/ndb_replace.result +22 −1 Original line number Diff line number Diff line drop table if exists t1; drop table if exists t1,t2; CREATE TABLE t1 ( gesuchnr int(11) DEFAULT '0' NOT NULL, benutzer_id int(11) DEFAULT '0' NOT NULL, Loading Loading @@ -31,3 +31,24 @@ SELECT * from t1 ORDER BY i; i j k 3 1 42 17 2 24 CREATE TABLE t2 (a INT(11) NOT NULL, b INT(11) NOT NULL, c INT(11) NOT NULL, x TEXT, y TEXT, z TEXT, id INT(10) unsigned NOT NULL AUTO_INCREMENT, i INT(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY a (a,b,c) ) ENGINE=ndbcluster; REPLACE INTO t2 (a,b,c,x,y,z,i) VALUES (1,1,1,'a','a','a',1),(1,1,1,'b','b','b',2), (1,1,1,'c','c','c',3); SELECT * FROM t2 ORDER BY id; a b c x y z id i 1 1 1 c c c 3 3 REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'a','a','a',1); REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'b','b','b',2); SELECT * FROM t2 ORDER BY id; a b c x y z id i 1 1 1 b b b 5 2 DROP TABLE t2;
mysql-test/t/ndb_replace.test +28 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ # --disable_warnings drop table if exists t1; drop table if exists t1,t2; --enable_warnings CREATE TABLE t1 ( Loading @@ -27,6 +27,8 @@ replace into t1 (gesuchnr,benutzer_id) values (1,1); select * from t1 order by gesuchnr; drop table t1; # End of 4.1 tests # bug#17431 CREATE TABLE t1(i INT PRIMARY KEY AUTO_INCREMENT, j INT, Loading @@ -38,4 +40,28 @@ REPLACE INTO t1 (j,k) VALUES (1,42); REPLACE INTO t1 (i,j) VALUES (17,2); SELECT * from t1 ORDER BY i; # End of 4.1 tests # bug#19906 CREATE TABLE t2 (a INT(11) NOT NULL, b INT(11) NOT NULL, c INT(11) NOT NULL, x TEXT, y TEXT, z TEXT, id INT(10) unsigned NOT NULL AUTO_INCREMENT, i INT(11) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY a (a,b,c) ) ENGINE=ndbcluster; REPLACE INTO t2 (a,b,c,x,y,z,i) VALUES (1,1,1,'a','a','a',1),(1,1,1,'b','b','b',2), (1,1,1,'c','c','c',3); SELECT * FROM t2 ORDER BY id; REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'a','a','a',1); REPLACE INTO t2(a,b,c,x,y,z,i) values (1,1,1,'b','b','b',2); SELECT * FROM t2 ORDER BY id; DROP TABLE t2;
sql/ha_ndbcluster.cc +8 −2 Original line number Diff line number Diff line Loading @@ -771,10 +771,11 @@ int g_get_ndb_blobs_value(NdbBlob *ndb_blob, void *arg) if (ndb_blob->blobsNextBlob() != NULL) DBUG_RETURN(0); ha_ndbcluster *ha= (ha_ndbcluster *)arg; DBUG_RETURN(ha->get_ndb_blobs_value(ndb_blob)); DBUG_RETURN(ha->get_ndb_blobs_value(ndb_blob, ha->m_blobs_offset)); } int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob) int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob, my_ptrdiff_t ptrdiff) { DBUG_ENTER("get_ndb_blobs_value"); Loading Loading @@ -807,7 +808,10 @@ int ha_ndbcluster::get_ndb_blobs_value(NdbBlob *last_ndb_blob) if (ndb_blob->readData(buf, len) != 0) DBUG_RETURN(-1); DBUG_ASSERT(len == blob_len); // Ugly hack assumes only ptr needs to be changed field_blob->ptr+= ptrdiff; field_blob->set_ptr(len, buf); field_blob->ptr-= ptrdiff; } offset+= blob_size; } Loading Loading @@ -870,6 +874,7 @@ int ha_ndbcluster::get_ndb_value(NdbOperation *ndb_op, Field *field, if (ndb_blob != NULL) { // Set callback m_blobs_offset= buf - (byte*) table->record[0]; void *arg= (void *)this; DBUG_RETURN(ndb_blob->setActiveHook(g_get_ndb_blobs_value, arg) != 0); } Loading Loading @@ -4552,6 +4557,7 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg): m_ops_pending(0), m_skip_auto_increment(TRUE), m_blobs_pending(0), m_blobs_offset(0), m_blobs_buffer(0), m_blobs_buffer_size(0), m_dupkey((uint) -1), Loading
sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -629,7 +629,7 @@ static void set_tabname(const char *pathname, char *tabname); int set_ndb_value(NdbOperation*, Field *field, uint fieldnr, bool *set_blob_value= 0); int get_ndb_value(NdbOperation*, Field *field, uint fieldnr, byte*); 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, my_ptrdiff_t ptrdiff); int set_primary_key(NdbOperation *op, const byte *key); int set_primary_key_from_record(NdbOperation *op, const byte *record); int set_index_key_from_record(NdbOperation *op, const byte *record, Loading Loading @@ -706,6 +706,7 @@ static void set_tabname(const char *pathname, char *tabname); ha_rows m_ops_pending; bool m_skip_auto_increment; bool m_blobs_pending; my_ptrdiff_t m_blobs_offset; // memory for blobs in one tuple char *m_blobs_buffer; uint32 m_blobs_buffer_size; Loading