448 lines
16 KiB
Plaintext
448 lines
16 KiB
Plaintext
########################################
|
|
# Author: JBM
|
|
# Date: 2006-01-12
|
|
# Purpose: To test using ndb memory and
|
|
# disk tables together.
|
|
########################################
|
|
|
|
-- source include/have_ndb.inc
|
|
|
|
############ Test Setup Section #############
|
|
-- echo **** Test Setup Section ****
|
|
|
|
CREATE LOGFILE GROUP log_group1
|
|
ADD UNDOFILE './log_group1/undofile.dat'
|
|
INITIAL_SIZE 16M
|
|
UNDO_BUFFER_SIZE = 1M
|
|
ENGINE=NDB;
|
|
|
|
CREATE TABLESPACE table_space1
|
|
ADD DATAFILE './table_space1/datafile.dat'
|
|
USE LOGFILE GROUP log_group1
|
|
INITIAL_SIZE 28M
|
|
EXTENT_SIZE 256K
|
|
ENGINE NDB;
|
|
|
|
|
|
CREATE TABLE test.t1
|
|
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
|
TABLESPACE table_space1 STORAGE DISK
|
|
ENGINE=NDB;
|
|
|
|
CREATE TABLE test.t2
|
|
(pk2 INT NOT NULL PRIMARY KEY, b2 INT NOT NULL, c2 INT NOT NULL)
|
|
ENGINE=NDB;
|
|
|
|
--echo
|
|
##################### Data load for first test ####################
|
|
--echo **** Data load for first test ****
|
|
|
|
INSERT INTO test.t1 VALUES
|
|
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
|
|
(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),
|
|
(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15),
|
|
(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20),
|
|
(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25),
|
|
(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30),
|
|
(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35),
|
|
(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40),
|
|
(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45),
|
|
(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50),
|
|
(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55),
|
|
(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60),
|
|
(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65),
|
|
(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70),
|
|
(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75);
|
|
|
|
|
|
INSERT INTO test.t2 VALUES
|
|
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
|
|
(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),
|
|
(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15),
|
|
(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20),
|
|
(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25),
|
|
(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30),
|
|
(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35),
|
|
(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40),
|
|
(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45),
|
|
(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50),
|
|
(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55),
|
|
(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60),
|
|
(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65),
|
|
(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70),
|
|
(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75);
|
|
|
|
--echo
|
|
##################### Test 1 Section Begins ###############
|
|
--echo *** Test 1 Section Begins ***
|
|
SELECT COUNT(*) FROM test.t2 LEFT JOIN test.t1 ON pk2=pk1 WHERE b2 IN (4);
|
|
SELECT * FROM test.t2 LEFT JOIN test.t1 ON pk2=pk1 WHERE b2 IN (4);
|
|
SELECT COUNT(*) FROM test.t1 LEFT JOIN test.t2 ON pk1=pk2 WHERE b IN (4);
|
|
SELECT COUNT(*) FROM test.t1 LEFT JOIN test.t2 ON b=b2 WHERE pk1 IN (75);
|
|
SELECT b, c FROM test.t1 LEFT JOIN test.t2 ON pk1=pk2 ORDER BY b;
|
|
--echo
|
|
####################### Test 1 Section End ################
|
|
|
|
##################### Setup for test 2 ####################
|
|
--echo *** Setup for test 2 ****
|
|
DELETE FROM test.t1;
|
|
INSERT INTO test.t1 VALUES
|
|
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
|
|
(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),
|
|
(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15),
|
|
(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20),
|
|
(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25),
|
|
(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30),
|
|
(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35),
|
|
(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40),
|
|
(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45);
|
|
--echo
|
|
############################# Test Section 2 ###############
|
|
--echo **** Test Section 2 ****
|
|
SELECT b, c FROM test.t1 LEFT JOIN test.t2 ON pk1=pk2 ORDER BY b;
|
|
SELECT COUNT(*) FROM test.t1 LEFT JOIN test.t2 ON b=b2;
|
|
SELECT COUNT(*) FROM test.t1 RIGHT JOIN test.t2 ON b=b2;
|
|
--disable_warnings
|
|
SHOW CREATE TABLE test.t2;
|
|
SHOW CREATE TABLE test.t1;
|
|
--enable_warnings
|
|
ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK
|
|
ENGINE=NDB;
|
|
--disable_warnings
|
|
SHOW CREATE TABLE test.t2;
|
|
--enable_warnings
|
|
ALTER TABLE test.t1 STORAGE MEMORY ENGINE=NDBCLUSTER;
|
|
--disable_warnings
|
|
SHOW CREATE TABLE test.t1;
|
|
--enable_warnings
|
|
--echo
|
|
######################### End Test Section 2 #################
|
|
DROP TABLE test.t1;
|
|
DROP TABLE test.t2;
|
|
##################### Setup for Test Section 3 ###############
|
|
--echo *** Setup for Test Section 3 ***
|
|
CREATE TABLE test.t1 (
|
|
usr_id INT unsigned NOT NULL,
|
|
uniq_id INT unsigned NOT NULL AUTO_INCREMENT,
|
|
start_num INT unsigned NOT NULL DEFAULT 1,
|
|
increment INT unsigned NOT NULL DEFAULT 1,
|
|
PRIMARY KEY (uniq_id),
|
|
INDEX usr_uniq_idx (usr_id, uniq_id),
|
|
INDEX uniq_usr_idx (uniq_id, usr_id))
|
|
TABLESPACE table_space1 STORAGE DISK
|
|
ENGINE=NDB;
|
|
|
|
|
|
CREATE TABLE test.t2 (
|
|
id INT unsigned NOT NULL DEFAULT 0,
|
|
usr2_id INT unsigned NOT NULL DEFAULT 0,
|
|
max INT unsigned NOT NULL DEFAULT 0,
|
|
c_amount INT unsigned NOT NULL DEFAULT 0,
|
|
d_max INT unsigned NOT NULL DEFAULT 0,
|
|
d_num INT unsigned NOT NULL DEFAULT 0,
|
|
orig_time INT unsigned NOT NULL DEFAULT 0,
|
|
c_time INT unsigned NOT NULL DEFAULT 0,
|
|
active ENUM ("no","yes") NOT NULL,
|
|
PRIMARY KEY (id,usr2_id),
|
|
INDEX id_idx (id),
|
|
INDEX usr2_idx (usr2_id))
|
|
ENGINE=NDB;
|
|
|
|
INSERT INTO test.t1 VALUES (3,NULL,0,50),(3,NULL,0,200),(3,NULL,0,25),(3,NULL,0,84676),(3,NULL,0,235),(3,NULL,0,10),(3,NULL,0,3098),(3,NULL,0,2947),(3,NULL,0,8987),(3,NULL,0,8347654),(3,NULL,0,20398),(3,NULL,0,8976),(3,NULL,0,500),(3,NULL,0,198);
|
|
|
|
--echo
|
|
###################### Test Section 3 ######################
|
|
--echo **** Test Section 3 ****
|
|
SELECT test.t1.usr_id,test.t1.uniq_id,test.t1.increment,
|
|
test.t2.usr2_id,test.t2.c_amount,test.t2.max
|
|
FROM test.t1
|
|
LEFT JOIN test.t2 ON test.t2.id = test.t1.uniq_id
|
|
WHERE test.t1.uniq_id = 4
|
|
ORDER BY test.t2.c_amount;
|
|
|
|
INSERT INTO test.t2 VALUES (2,3,3000,6000,0,0,746584,837484,'yes');
|
|
INSERT INTO test.t2 VALUES (4,3,3000,6000,0,0,746584,837484,'yes');
|
|
INSERT INTO test.t2 VALUES (7,3,1000,2000,0,0,746294,937484,'yes');
|
|
|
|
SELECT test.t1.usr_id,test.t1.uniq_id,test.t1.increment,
|
|
test.t2.usr2_id,test.t2.c_amount,test.t2.max
|
|
FROM test.t1
|
|
LEFT JOIN test.t2 ON test.t2.id = test.t1.uniq_id
|
|
WHERE test.t1.uniq_id = 4
|
|
ORDER BY test.t2.c_amount;
|
|
--echo
|
|
####################### End Section 3 #########################
|
|
DROP TABLE test.t1;
|
|
DROP TABLE test.t2;
|
|
|
|
########## Test that use to be in ndb_dd_advance.test #########
|
|
########## ndb_dd_advance.test is now ndb_dd_alter.test #######
|
|
#### Use group by asc and dec; Use having; Use order by. ####
|
|
|
|
CREATE TABLE test.t1 (
|
|
a1 smallint NOT NULL,
|
|
a2 int NOT NULL,
|
|
a3 bigint NOT NULL,
|
|
a4 char(10),
|
|
a5 decimal(5,1),
|
|
a6 time,
|
|
a7 date,
|
|
a8 datetime,
|
|
a9 VARCHAR(255),
|
|
a10 blob,
|
|
PRIMARY KEY(a1)
|
|
) TABLESPACE table_space1 STORAGE DISK ENGINE=NDB;
|
|
|
|
CREATE TABLE test.t2 (
|
|
b1 smallint NOT NULL,
|
|
b2 int NOT NULL,
|
|
b3 bigint NOT NULL,
|
|
b4 char(10),
|
|
b5 decimal(5,1),
|
|
b6 time,
|
|
b7 date,
|
|
b8 datetime,
|
|
b9 VARCHAR(255),
|
|
b10 blob,
|
|
PRIMARY KEY(b1)
|
|
) ENGINE=NDB;
|
|
|
|
### ADD Some DATA to tables ######
|
|
|
|
|
|
let $1=20;
|
|
--disable_query_log
|
|
while ($1)
|
|
{
|
|
eval insert into test.t1 values($1, $1+1, $1+2000000000, "aaa$1", 34.2, '4:3:2', '2006-1-1', '1971-5-28 16:55:03', "bbbbbbbbbbbbb$1", "binary data");
|
|
eval insert into test.t2 values($1+2, $1+3, $1+3000000000, "aaa$1", 35.2, '4:3:2', '2006-1-1', '1971-5-28 16:55:03', "bbbbbbbbbbbbb$1", "binary data");
|
|
dec $1;
|
|
}
|
|
--enable_query_log
|
|
|
|
ALTER TABLE test.t1 ADD INDEX (a2), ADD INDEX (a3), ADD INDEX (a8);
|
|
ALTER TABLE test.t2 ADD INDEX (b2), ADD INDEX (b3), ADD INDEX (b8);
|
|
--disable_warnings
|
|
SHOW CREATE TABLE test.t1;
|
|
SHOW CREATE TABLE test.t2;
|
|
--enable_warnings
|
|
SELECT * FROM test.t1 order by a1;
|
|
SELECT * FROM test.t2 order by b1;
|
|
SELECT COUNT(a1), a1, COUNT(a1)*a1 FROM test.t1 GROUP BY a1;
|
|
SELECT COUNT(a2), (a2+1), COUNT(a2)*(a2+0) FROM test.t1 GROUP BY a2;
|
|
|
|
DROP TABLE test.t1;
|
|
DROP TABLE test.t2;
|
|
|
|
CREATE TABLE test.t1 (a INT NOT NULL,
|
|
b CHAR(5), c TEXT, d INT NOT NULL PRIMARY KEY) TABLESPACE
|
|
table_space1 STORAGE DISK ENGINE=NDB;
|
|
|
|
insert into test.t1 (a,b,c,d) values (1,'a','Jonas',1),(2,'b','Tomas',2),
|
|
(3,'c','Pekka',3),(4,'d','Martin',4),(5,'e','Stewart',5),(6,'f','Jeb',6),
|
|
(7,'g','Serge',7),(8,'h','Clavin',8);
|
|
select distinct a from test.t1 group by b,a having a > 4 order by a desc;
|
|
select distinct a,c from test.t1 group by b,c,a having a > 2 order by a desc;
|
|
select distinct a from test.t1 group by b,a having a > 1 order by a asc;
|
|
select distinct a,c from test.t1 group by b,c,a having a > 3 order by a asc;
|
|
drop table test.t1;
|
|
|
|
create table test.t1 (a char(1), key(a)) TABLESPACE table_space1
|
|
STORAGE DISK ENGINE=NDB;
|
|
insert into test.t1 values('1'),('1'),('1'),('2'),('2'),('3'),('3');
|
|
select * from test.t1 where a >= '1' order by a;
|
|
select distinct a from test.t1 order by a desc;
|
|
select distinct a from test.t1 where a >= '1' order by a desc;
|
|
select distinct a from test.t1 where a >= '1' order by a asc;
|
|
drop table test.t1;
|
|
|
|
CREATE TABLE test.t1 (email varchar(50), infoID BIGINT, dateentered DATETIME)
|
|
TABLESPACE table_space1 STORAGE DISK ENGINE=NDB;
|
|
CREATE TABLE test.t2 (infoID BIGINT, shipcode varchar(10)) ENGINE=NDB;
|
|
|
|
INSERT INTO test.t1 (email, infoID, dateentered) VALUES
|
|
('test1@testdomain.com', 1, '2002-07-30 22:56:38'),
|
|
('test1@testdomain.com', 1, '2002-07-27 22:58:16'),
|
|
('test2@testdomain.com', 1, '2002-06-19 15:22:19'),
|
|
('test2@testdomain.com', 2, '2002-06-18 14:23:47'),
|
|
('test3@testdomain.com', 1, '2002-05-19 22:17:32');
|
|
|
|
INSERT INTO test.t2(infoID, shipcode) VALUES
|
|
(1, 'Z001'),
|
|
(2, 'R002');
|
|
|
|
SELECT DISTINCTROW email, shipcode FROM test.t1, test.t2
|
|
WHERE t1.infoID=t2.infoID order by email, shipcode;
|
|
|
|
# Change sql_mode to allow the two queries below
|
|
# which uses "DISTINCT with an ORDER BY on column which
|
|
# is not in the select list"
|
|
--source include/turn_off_only_full_group_by.inc
|
|
SELECT DISTINCTROW email FROM test.t1 ORDER BY dateentered DESC;
|
|
SELECT DISTINCTROW email, shipcode FROM test.t1, test.t2
|
|
WHERE test.t1.infoID=test.t2.infoID ORDER BY dateentered DESC;
|
|
--source include/restore_sql_mode_after_turn_off_only_full_group_by.inc
|
|
|
|
DROP TABLE test.t1,test.t2;
|
|
|
|
|
|
#####################################################
|
|
# Testing In-Memory Dynamic Columns with Disk Columns
|
|
####################################################
|
|
|
|
--echo #
|
|
--echo # Bug#22195588 : SETTING NULL TO A DYNAMIC IN-MEMORY COLUMN CORRUPTS DISK COLUMN VALUES
|
|
--echo #
|
|
|
|
--echo # Setting up tables
|
|
create table t1(
|
|
a int unsigned auto_increment primary key,
|
|
b int,
|
|
c int default null column_format dynamic storage memory,
|
|
d varchar(100) default null column_format dynamic storage memory
|
|
)tablespace table_space1 storage disk engine=ndbcluster;
|
|
|
|
--echo # Populate t1
|
|
--echo # Setting all the dynamic columns to NULL and varying disk parts
|
|
insert into t1 () values();
|
|
insert into t1 (b) values (10);
|
|
|
|
--echo # Populating values to single dynamic column and varying disk parts
|
|
insert into t1 (c) values (20);
|
|
insert into t1 (b, c) values (10, 20);
|
|
|
|
insert into t1 (d) values (repeat('0123456789', 3));
|
|
insert into t1 (d) values (repeat('0123456789', 10));
|
|
insert into t1 (b, d) values (10, repeat('0123456789',3));
|
|
insert into t1 (b, d) values (10, repeat('0123456789',10));
|
|
|
|
--echo # Both dynamic columns have non NULL values and disk columns varied
|
|
insert into t1 (c, d) values (20, repeat('0123456789',3));
|
|
insert into t1 (c, d) values (20, repeat('0123456789',10));
|
|
insert into t1 (b, c, d) values (10, 20, repeat('0123456789',3));
|
|
insert into t1 (b, c, d) values (10, 20, repeat('0123456789',10));
|
|
|
|
--echo # Verify that they are properly stored and retrieved
|
|
select * from t1 order by a;
|
|
|
|
--echo # Update some rows to verify that the varpart is reallocating properly
|
|
--echo # Updating NULL dynamic columns and assigning NON-NULL values
|
|
update t1 set c = 10 where a in (1,2);
|
|
select * from t1 where a in (1,2) order by a;
|
|
|
|
--echo # Updating and setting NULL to NON-NULL dynamic columns
|
|
update t1 set c = null where a in (1,2);
|
|
select * from t1 where a in (1,2) order by a;
|
|
|
|
--echo # Updating NULL dynamic var columns and assigning NON-NULL values
|
|
update t1 set d = repeat('0123456789', 5) where a in (1,2);
|
|
select * from t1 where a in (1,2) order by a;
|
|
|
|
--echo # Updating NULL to NON-NULL and vice versa in dynamic columns
|
|
update t1 set c = null, d = repeat('0123456789', 10) where a in (3,4);
|
|
select * from t1 where a in (3,4) order by a;
|
|
|
|
--echo # Updating and setting NULL to NON-NULL dynamic var columns
|
|
update t1 set c = 20, d = null where a in (5,6,7,8);
|
|
select * from t1 where a in (5,6,7,8) order by a;
|
|
|
|
--echo # Update all dynamic columns to NULL
|
|
update t1 set c = null, d = null where a > 8;
|
|
select * from t1 where a > 8 order by a;
|
|
|
|
--echo # Update all dynamic columns to NON-NULL values
|
|
update t1 set c = 20, d = '0123456789' where a > 8;
|
|
select * from t1 where a > 8 order by a;
|
|
|
|
select * from t1 order by a;
|
|
|
|
--echo # Now do some transactions with multiple operations
|
|
|
|
# Record var memory usage at start
|
|
--source ndb_var_mem_usage.inc
|
|
|
|
--echo # Add more data to dynamic varchar and then set to NULL
|
|
--echo # Meanwhile insert value into int column
|
|
--echo # This should reduce the var memory usage
|
|
select * from t1 where a = 1;
|
|
begin;
|
|
update t1 set d = repeat('0123456789', 10) where a = 1;
|
|
update t1 set b = 20 where a = 1;
|
|
update t1 set d = NULL where a = 1;
|
|
update t1 set c = 30 where a = 1;
|
|
commit;
|
|
select * from t1 where a = 1;
|
|
|
|
--echo # Check if the var mem has decreased
|
|
--source ndb_var_mem_usage.inc
|
|
--disable_query_log
|
|
select if (@old_var_used_bytes > @var_used_bytes, 'Yes', 'No')
|
|
as 'Has var part memory usage decreased?';
|
|
--enable_query_log
|
|
|
|
--echo # Setting up next transaction - make dynamic columns NULL
|
|
update t1 set c = NULL where a = 1;
|
|
|
|
--echo # Checking var memory and number of var parts before transaction
|
|
--source ndb_var_mem_usage.inc
|
|
|
|
--echo # Insert and later set null to dynamic columns in the same transaction
|
|
--echo # This should not change memory usage
|
|
select * from t1 where a = 1;
|
|
begin;
|
|
update t1 set c = 30 where a = 1;
|
|
update t1 set b = 30 where a = 1;
|
|
update t1 set d = repeat('0123456789', 10) where a = 1;
|
|
update t1 set b = 45 where a = 1;
|
|
update t1 set d = repeat('0123456789', 5) where a = 1;
|
|
update t1 set c = NULL where a = 1;
|
|
update t1 set d = NULL where a = 1;
|
|
commit;
|
|
select * from t1 where a = 1;
|
|
|
|
--echo # Checking if the var mem is the same
|
|
--source ndb_var_mem_usage.inc
|
|
--disable_query_log
|
|
select if (@old_var_used_bytes = @var_used_bytes, 'Yes', 'No')
|
|
as 'Is var part memory usage unchanged?';
|
|
--enable_query_log
|
|
|
|
--echo # Grow the dynamic varchar and then shrink it but still having more data than when it was at start.
|
|
--echo # Insert alternatively the other dynamic column with NULL but back to a NON-NULL value at end
|
|
--echo # This should be reflected correctly in the memory
|
|
select * from t1 where a = 12;
|
|
begin;
|
|
update t1 set c = 42 where a = 12;
|
|
update t1 set d = repeat('0123456789', 5) where a = 12;
|
|
update t1 set c = NULL where a = 12;
|
|
update t1 set d = repeat('0123456789', 10) where a = 12;
|
|
update t1 set c = 30 where a = 12;
|
|
update t1 set d = repeat('0123456789', 2) where a = 12;
|
|
commit;
|
|
select * from t1 where a = 12;
|
|
|
|
--echo # Check if the var mem has increased
|
|
--source ndb_var_mem_usage.inc
|
|
--disable_query_log
|
|
select if (@old_var_used_bytes < @var_used_bytes, 'Yes', 'No')
|
|
as 'Has var part memory usage increased?';
|
|
--enable_query_log
|
|
|
|
--echo # Cleanup
|
|
drop table t1;
|
|
|
|
#################
|
|
# Test Cleanup
|
|
#################
|
|
|
|
ALTER TABLESPACE table_space1
|
|
DROP DATAFILE './table_space1/datafile.dat';
|
|
|
|
DROP TABLESPACE table_space1;
|
|
|
|
DROP LOGFILE GROUP log_group1
|
|
ENGINE =NDB;
|
|
|
|
#End 5.1 test case
|
|
|