Merge poseidon.ndb.mysql.com:/home/tomas/mysql-4.1
into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0 sql/ha_ndbcluster.h: Auto merged mysql-test/r/ndb_basic.result: manual merge mysql-test/t/ndb_basic.test: manual merge sql/ha_ndbcluster.cc: manual merge
This commit is contained in:
commit
76d98963c7
@ -671,6 +671,61 @@ CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
|
||||
select * from t1;
|
||||
b
|
||||
drop table t1;
|
||||
create table t1 (a int) engine=ndb;
|
||||
create table t2 (a int) engine=ndb;
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (1);
|
||||
delete t1.* from t1, t2 where t1.a = t2.a;
|
||||
select * from t1;
|
||||
a
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
CREATE TABLE t1 (
|
||||
i INT,
|
||||
j INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
CREATE TABLE t2 (
|
||||
i INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
CREATE TABLE t3 (
|
||||
j INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
INSERT INTO t1 VALUES ( 1, 2,13,14,15);
|
||||
INSERT INTO t2 VALUES ( 1, 3,23,24,25);
|
||||
INSERT INTO t3 VALUES ( 2, 3, 1,34,35), ( 2, 3, 1,34,36);
|
||||
UPDATE t1 AS a
|
||||
INNER JOIN t2 AS b
|
||||
ON a.i = b.i
|
||||
INNER JOIN t3 AS c
|
||||
ON a.j = c.j AND b.k = c.k
|
||||
SET a.x = b.x,
|
||||
a.y = b.y,
|
||||
a.z = (
|
||||
SELECT sum(z)
|
||||
FROM t3
|
||||
WHERE y = 34
|
||||
)
|
||||
WHERE b.x = 23;
|
||||
select * from t1;
|
||||
i j x y z
|
||||
1 2 23 24 71
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
create table atablewithareallylongandirritatingname (a int);
|
||||
insert into atablewithareallylongandirritatingname values (2);
|
||||
select * from atablewithareallylongandirritatingname;
|
||||
|
@ -614,6 +614,72 @@ CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #17249 delete statement with join where clause fails
|
||||
# when table do not have pk
|
||||
#
|
||||
|
||||
create table t1 (a int) engine=ndb;
|
||||
create table t2 (a int) engine=ndb;
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (1);
|
||||
delete t1.* from t1, t2 where t1.a = t2.a;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
||||
#
|
||||
# Bug #17257 update fails for inner joins if tables
|
||||
# do not have Primary Key
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i INT,
|
||||
j INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
|
||||
CREATE TABLE t3 (
|
||||
j INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
) engine=ndb;
|
||||
|
||||
INSERT INTO t1 VALUES ( 1, 2,13,14,15);
|
||||
INSERT INTO t2 VALUES ( 1, 3,23,24,25);
|
||||
INSERT INTO t3 VALUES ( 2, 3, 1,34,35), ( 2, 3, 1,34,36);
|
||||
|
||||
UPDATE t1 AS a
|
||||
INNER JOIN t2 AS b
|
||||
ON a.i = b.i
|
||||
INNER JOIN t3 AS c
|
||||
ON a.j = c.j AND b.k = c.k
|
||||
SET a.x = b.x,
|
||||
a.y = b.y,
|
||||
a.z = (
|
||||
SELECT sum(z)
|
||||
FROM t3
|
||||
WHERE y = 34
|
||||
)
|
||||
WHERE b.x = 23;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -73,8 +73,6 @@ handlerton ndbcluster_hton = {
|
||||
HTON_NO_FLAGS
|
||||
};
|
||||
|
||||
#define NDB_HIDDEN_PRIMARY_KEY_LENGTH 8
|
||||
|
||||
#define NDB_FAILED_AUTO_INCREMENT ~(Uint64)0
|
||||
#define NDB_AUTO_INCREMENT_RETRIES 10
|
||||
|
||||
@ -871,7 +869,7 @@ int ha_ndbcluster::get_ndb_value(NdbOperation *ndb_op, Field *field,
|
||||
}
|
||||
|
||||
// Used for hidden key only
|
||||
m_value[fieldnr].rec= ndb_op->getValue(fieldnr, NULL);
|
||||
m_value[fieldnr].rec= ndb_op->getValue(fieldnr, m_ref);
|
||||
DBUG_RETURN(m_value[fieldnr].rec == NULL);
|
||||
}
|
||||
|
||||
@ -2201,13 +2199,10 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
|
||||
DBUG_PRINT("info", ("Using hidden key"));
|
||||
|
||||
// Require that the PK for this record has previously been
|
||||
// read into m_value
|
||||
uint no_fields= table->s->fields;
|
||||
const NdbRecAttr* rec= m_value[no_fields].rec;
|
||||
DBUG_ASSERT(rec);
|
||||
DBUG_DUMP("key", (char*)rec->aRef(), NDB_HIDDEN_PRIMARY_KEY_LENGTH);
|
||||
// read into m_ref
|
||||
DBUG_DUMP("key", m_ref, NDB_HIDDEN_PRIMARY_KEY_LENGTH);
|
||||
|
||||
if (set_hidden_key(op, no_fields, rec->aRef()))
|
||||
if (set_hidden_key(op, table->fields, m_ref))
|
||||
ERR_RETURN(op->getNdbError());
|
||||
}
|
||||
else
|
||||
@ -2288,11 +2283,8 @@ int ha_ndbcluster::delete_row(const byte *record)
|
||||
{
|
||||
// This table has no primary key, use "hidden" primary key
|
||||
DBUG_PRINT("info", ("Using hidden key"));
|
||||
uint no_fields= table->s->fields;
|
||||
const NdbRecAttr* rec= m_value[no_fields].rec;
|
||||
DBUG_ASSERT(rec != NULL);
|
||||
|
||||
if (set_hidden_key(op, no_fields, rec->aRef()))
|
||||
if (set_hidden_key(op, table->fields, m_ref))
|
||||
ERR_RETURN(op->getNdbError());
|
||||
}
|
||||
else
|
||||
@ -2839,17 +2831,15 @@ void ha_ndbcluster::position(const byte *record)
|
||||
{
|
||||
// No primary key, get hidden key
|
||||
DBUG_PRINT("info", ("Getting hidden key"));
|
||||
int hidden_no= table->s->fields;
|
||||
const NdbRecAttr* rec= m_value[hidden_no].rec;
|
||||
memcpy(ref, (const void*)rec->aRef(), ref_length);
|
||||
#ifndef DBUG_OFF
|
||||
int hidden_no= table->s->fields;
|
||||
const NDBTAB *tab= (const NDBTAB *) m_table;
|
||||
const NDBCOL *hidden_col= tab->getColumn(hidden_no);
|
||||
DBUG_ASSERT(hidden_col->getPrimaryKey() &&
|
||||
hidden_col->getAutoIncrement() &&
|
||||
rec != NULL &&
|
||||
ref_length == NDB_HIDDEN_PRIMARY_KEY_LENGTH);
|
||||
#endif
|
||||
memcpy(ref, m_ref, ref_length);
|
||||
}
|
||||
|
||||
DBUG_DUMP("ref", (char*)ref, ref_length);
|
||||
|
@ -27,6 +27,8 @@
|
||||
|
||||
#include <ndbapi_limits.h>
|
||||
|
||||
#define NDB_HIDDEN_PRIMARY_KEY_LENGTH 8
|
||||
|
||||
class Ndb; // Forward declaration
|
||||
class NdbOperation; // Forward declaration
|
||||
class NdbTransaction; // Forward declaration
|
||||
@ -681,6 +683,7 @@ private:
|
||||
// NdbRecAttr has no reference to blob
|
||||
typedef union { const NdbRecAttr *rec; NdbBlob *blob; void *ptr; } NdbValue;
|
||||
NdbValue m_value[NDB_MAX_ATTRIBUTES_IN_TABLE];
|
||||
byte m_ref[NDB_HIDDEN_PRIMARY_KEY_LENGTH];
|
||||
bool m_use_write;
|
||||
bool m_ignore_dup_key;
|
||||
bool m_primary_key_update;
|
||||
|
Loading…
x
Reference in New Issue
Block a user