Commit feb80054 authored by unknown's avatar unknown
Browse files

ndb - bug#16796


storage/ndb/src/ndbapi/NdbBlob.cpp:
  set part id from main table op (may not be complete fix)
storage/ndb/src/ndbapi/NdbOperationSearch.cpp:
  log partition id set/get
parent d9c1d258
Loading
Loading
Loading
Loading
+104 −0
Original line number Diff line number Diff line
drop table if exists t1;
create table t1 (
a mediumint not null,
b text not null,
c int not null,
d longblob,
primary key using hash (a,c),
unique key (c)
)
engine=ndb
partition by range (c)
partitions 3
( partition p1 values less than (200),
partition p2 values less than (300),
partition p3 values less than (400));
insert into t1 values (1, @v1, 101, @v2);
insert into t1 values (1, @v2, 102, @v3);
insert into t1 values (1, @v3, 103, @v4);
insert into t1 values (2, @v4, 201, @v5);
insert into t1 values (2, @v5, 202, @v6);
insert into t1 values (2, @v6, 203, @v7);
insert into t1 values (3, @v7, 301, @v8);
insert into t1 values (3, @v8, 302, @v9);
insert into t1 values (3, @v9, 303, @v1);
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	101	10d3c783026b310218d10b7188da96a2401648c6
1	10d3c783026b310218d10b7188da96a2401648c6	102	a33549d9844092289a58ac348dd59f09fc28406a
1	a33549d9844092289a58ac348dd59f09fc28406a	103	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	201	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	70fc9a7d08beebc522258bfb02000a30c77a8f1d	202	090565c580809efed3d369481a4bbb168b20713e
2	090565c580809efed3d369481a4bbb168b20713e	203	1e0070bec426871a46291de27b9bd6e4255ab4e5
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	301	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	acbaba01bc2e682f015f40e79d9cbe475db3002e	302	9ee30d99162574f79c66ae95cdf132dcf9cbc259
3	9ee30d99162574f79c66ae95cdf132dcf9cbc259	303	1d42dd9090cf78314a06665d4ea938c35cc760f4
select a, sha1(b), c, sha1(d) from t1 where a = 1 and c = 101;
a	sha1(b)	c	sha1(d)
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	101	10d3c783026b310218d10b7188da96a2401648c6
select a, sha1(b), c, sha1(d) from t1 where a = 2 and c = 201;
a	sha1(b)	c	sha1(d)
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	201	70fc9a7d08beebc522258bfb02000a30c77a8f1d
select a, sha1(b), c, sha1(d) from t1 where a = 3 and c = 301;
a	sha1(b)	c	sha1(d)
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	301	acbaba01bc2e682f015f40e79d9cbe475db3002e
update t1 set b = @v3, d = @v4 where a = 1 and c = 102;
update t1 set b = @v6, d = @v7 where a = 2 and c = 202;
update t1 set b = @v9, d = @v1 where a = 3 and c = 302;
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	101	10d3c783026b310218d10b7188da96a2401648c6
1	a33549d9844092289a58ac348dd59f09fc28406a	102	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c
1	a33549d9844092289a58ac348dd59f09fc28406a	103	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	201	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	090565c580809efed3d369481a4bbb168b20713e	202	1e0070bec426871a46291de27b9bd6e4255ab4e5
2	090565c580809efed3d369481a4bbb168b20713e	203	1e0070bec426871a46291de27b9bd6e4255ab4e5
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	301	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	9ee30d99162574f79c66ae95cdf132dcf9cbc259	302	1d42dd9090cf78314a06665d4ea938c35cc760f4
3	9ee30d99162574f79c66ae95cdf132dcf9cbc259	303	1d42dd9090cf78314a06665d4ea938c35cc760f4
update t1 set b = @v4, d = @v5 where c = 103;
update t1 set b = @v7, d = @v8 where c = 203;
update t1 set b = @v1, d = @v2 where c = 303;
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	101	10d3c783026b310218d10b7188da96a2401648c6
1	a33549d9844092289a58ac348dd59f09fc28406a	102	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c
1	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	103	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	201	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	090565c580809efed3d369481a4bbb168b20713e	202	1e0070bec426871a46291de27b9bd6e4255ab4e5
2	1e0070bec426871a46291de27b9bd6e4255ab4e5	203	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	301	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	9ee30d99162574f79c66ae95cdf132dcf9cbc259	302	1d42dd9090cf78314a06665d4ea938c35cc760f4
3	1d42dd9090cf78314a06665d4ea938c35cc760f4	303	10d3c783026b310218d10b7188da96a2401648c6
update t1 set b = @v5, d = @v6;
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
1	70fc9a7d08beebc522258bfb02000a30c77a8f1d	101	090565c580809efed3d369481a4bbb168b20713e
1	70fc9a7d08beebc522258bfb02000a30c77a8f1d	102	090565c580809efed3d369481a4bbb168b20713e
1	70fc9a7d08beebc522258bfb02000a30c77a8f1d	103	090565c580809efed3d369481a4bbb168b20713e
2	70fc9a7d08beebc522258bfb02000a30c77a8f1d	201	090565c580809efed3d369481a4bbb168b20713e
2	70fc9a7d08beebc522258bfb02000a30c77a8f1d	202	090565c580809efed3d369481a4bbb168b20713e
2	70fc9a7d08beebc522258bfb02000a30c77a8f1d	203	090565c580809efed3d369481a4bbb168b20713e
3	70fc9a7d08beebc522258bfb02000a30c77a8f1d	301	090565c580809efed3d369481a4bbb168b20713e
3	70fc9a7d08beebc522258bfb02000a30c77a8f1d	302	090565c580809efed3d369481a4bbb168b20713e
3	70fc9a7d08beebc522258bfb02000a30c77a8f1d	303	090565c580809efed3d369481a4bbb168b20713e
update t1 set b = @v1, d = @v2 where 100 < c and c < 200;
update t1 set b = @v4, d = @v5 where 200 < c and c < 300;
update t1 set b = @v7, d = @v8 where 300 < c and c < 400;
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	101	10d3c783026b310218d10b7188da96a2401648c6
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	102	10d3c783026b310218d10b7188da96a2401648c6
1	1d42dd9090cf78314a06665d4ea938c35cc760f4	103	10d3c783026b310218d10b7188da96a2401648c6
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	201	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	202	70fc9a7d08beebc522258bfb02000a30c77a8f1d
2	daa61c6de36a0526f0d47dc29d6b9de7e6d2630c	203	70fc9a7d08beebc522258bfb02000a30c77a8f1d
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	301	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	302	acbaba01bc2e682f015f40e79d9cbe475db3002e
3	1e0070bec426871a46291de27b9bd6e4255ab4e5	303	acbaba01bc2e682f015f40e79d9cbe475db3002e
delete from t1 where a = 1 and c = 101;
delete from t1 where c = 102;
delete from t1;
select a, sha1(b), c, sha1(d) from t1 order by a;
a	sha1(b)	c	sha1(d)
drop table t1;
+93 −0
Original line number Diff line number Diff line
--source include/have_ndb.inc
-- source include/not_embedded.inc

--disable_warnings
drop table if exists t1;
--enable_warnings

#
# Minimal NDB blobs test with range partitions.
#

create table t1 (
  a mediumint not null,
  b text not null,
  c int not null,
  d longblob,
  primary key using hash (a,c),
  unique key (c)
)
  engine=ndb
  partition by range (c)
  partitions 3
  ( partition p1 values less than (200),
    partition p2 values less than (300),
    partition p3 values less than (400));

--disable_query_log
sleep 1;

# length 61
set @s0 = 'rggurloniukyehuxdbfkkyzlceixzrehqhvxvxbpwizzvjzpucqmzrhzxzfau';
set @s1 = 'ykyymbzqgqlcjhlhmyqelfoaaohvtbekvifukdtnvcrrjveevfakxarxexomz';
set @s2 = 'dbnfqyzgtqxalcrwtfsqabknvtfcbpoonxsjiqvmhnfikxxhcgoexlkoezvah';

set @v1 = repeat(@s0, 100); -- 1d42dd9090cf78314a06665d4ea938c35cc760f4
set @v2 = repeat(@s1, 200); -- 10d3c783026b310218d10b7188da96a2401648c6
set @v3 = repeat(@s2, 300); -- a33549d9844092289a58ac348dd59f09fc28406a
set @v4 = repeat(@s0, 400); -- daa61c6de36a0526f0d47dc29d6b9de7e6d2630c
set @v5 = repeat(@s1, 500); -- 70fc9a7d08beebc522258bfb02000a30c77a8f1d
set @v6 = repeat(@s2, 600); -- 090565c580809efed3d369481a4bbb168b20713e
set @v7 = repeat(@s0, 700); -- 1e0070bec426871a46291de27b9bd6e4255ab4e5
set @v8 = repeat(@s1, 800); -- acbaba01bc2e682f015f40e79d9cbe475db3002e
set @v9 = repeat(@s2, 900); -- 9ee30d99162574f79c66ae95cdf132dcf9cbc259
--enable_query_log

# -- insert --
insert into t1 values (1, @v1, 101, @v2);
insert into t1 values (1, @v2, 102, @v3);
insert into t1 values (1, @v3, 103, @v4);
insert into t1 values (2, @v4, 201, @v5);
insert into t1 values (2, @v5, 202, @v6);
insert into t1 values (2, @v6, 203, @v7);
insert into t1 values (3, @v7, 301, @v8);
insert into t1 values (3, @v8, 302, @v9);
insert into t1 values (3, @v9, 303, @v1);
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- pk read --
select a, sha1(b), c, sha1(d) from t1 where a = 1 and c = 101;
select a, sha1(b), c, sha1(d) from t1 where a = 2 and c = 201;
select a, sha1(b), c, sha1(d) from t1 where a = 3 and c = 301;

# -- pk update --
update t1 set b = @v3, d = @v4 where a = 1 and c = 102;
update t1 set b = @v6, d = @v7 where a = 2 and c = 202;
update t1 set b = @v9, d = @v1 where a = 3 and c = 302;
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- hash index update --
update t1 set b = @v4, d = @v5 where c = 103;
update t1 set b = @v7, d = @v8 where c = 203;
update t1 set b = @v1, d = @v2 where c = 303;
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- full scan update --
update t1 set b = @v5, d = @v6;
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- range scan update
update t1 set b = @v1, d = @v2 where 100 < c and c < 200;
update t1 set b = @v4, d = @v5 where 200 < c and c < 300;
update t1 set b = @v7, d = @v8 where 300 < c and c < 400;
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- delete --
delete from t1 where a = 1 and c = 101;
delete from t1 where c = 102;
# delete from t1 where c < 300; # XXX coredump
delete from t1;
select a, sha1(b), c, sha1(d) from t1 order by a;

# -- clean up --
drop table t1;
+2 −0
Original line number Diff line number Diff line
@@ -535,6 +535,8 @@ NdbBlob::setTableKeyValue(NdbOperation* anOp)
      pos += (len + 3) / 4;
    }
  }
  if (theNdbOp->theDistrKeyIndicator_)
    anOp->setPartitionId(theNdbOp->getPartitionId());
  assert(pos == theKeyBuf.size / 4);
  DBUG_RETURN(0);
}
+4 −0
Original line number Diff line number Diff line
@@ -640,10 +640,14 @@ NdbOperation::setPartitionId(Uint32 value)
{
  theDistributionKey = value;
  theDistrKeyIndicator_ = 1;
  DBUG_PRINT("info", ("NdbOperation::setPartitionId: %u",
                       theDistributionKey));
}

Uint32
NdbOperation::getPartitionId() const 
{
  DBUG_PRINT("info", ("NdbOperation::getPartitionId: %u ind=%d",
                      theDistributionKey, theDistrKeyIndicator_));
  return theDistributionKey;
}