1350
1356
# End of 4.1 tests
1359
# Test CONCURRENT INSERT (5.1)
1362
CREATE TABLE test_concurrent_insert ( val integer not null ) ENGINE = CSV;
1364
connect (con1,localhost,root,,);
1365
connect (con2,localhost,root,,);
1368
# obtain TL_READ lock on the table
1369
LOCK TABLES test_concurrent_insert READ LOCAL;
1372
# should pass despite of the lock
1373
INSERT INTO test_concurrent_insert VALUES (1);
1374
SELECT * FROM test_concurrent_insert;
1377
# first connection should not notice the changes
1378
SELECT * FROM test_concurrent_insert;
1382
# Now check that we see our own changes
1384
LOCK TABLES test_concurrent_insert WRITE;
1385
INSERT INTO test_concurrent_insert VALUES (2);
1386
SELECT * FROM test_concurrent_insert;
1390
DROP TABLE test_concurrent_insert;
1393
# Test REPAIR/CHECK TABLE (5.1)
1396
# Check that repair on the newly created table works fine
1398
CREATE TABLE test_repair_table ( val integer not null ) ENGINE = CSV;
1400
CHECK TABLE test_repair_table;
1401
REPAIR TABLE test_repair_table;
1403
DROP TABLE test_repair_table;
1406
# Check autorepair. Here we also check that we can work w/o metafile
1407
# restore the meta-file
1410
CREATE TABLE test_repair_table2 ( val integer not null ) ENGINE = CSV;
1411
--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table2.CSM
1413
# Should give a warning and perform autorepair. We also disable ps-protocol
1414
# here, as mysql-test eats up warnings in ps-protocol mode
1416
--disable_ps_protocol
1417
SELECT * from test_repair_table2;
1418
--enable_ps_protocol
1419
# this should work ok, as the table is already repaired
1420
SELECT * from test_repair_table2;
1421
# check that the metafile appeared again.
1422
--file_exists $MYSQLTEST_VARDIR/master-data/test/test_repair_table2.CSM
1423
CHECK TABLE test_repair_table2;
1424
DROP TABLE test_repair_table2;
1427
# Corrupt csv file and see if we can repair it
1428
CREATE TABLE test_repair_table3 ( val integer not null ) ENGINE = CSV;
1429
--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table3.CSV
1430
--write_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table3.CSV
1435
CHECK TABLE test_repair_table3;
1436
REPAIR TABLE test_repair_table3;
1437
SELECT * FROM test_repair_table3;
1438
DROP TABLE test_repair_table3;
1440
# Test with more sophisticated table
1442
CREATE TABLE test_repair_table4 (
1444
magic_no int DEFAULT 0 NOT NULL,
1445
company_name char(30) DEFAULT '' NOT NULL,
1446
founded char(4) DEFAULT '' NOT NULL
1449
--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table4.CSM
1450
--disable_ps_protocol
1451
SELECT * FROM test_repair_table4;
1452
--enable_ps_protocol
1453
SELECT * FROM test_repair_table4;
1454
CHECK TABLE test_repair_table4;
1456
INSERT INTO test_repair_table4 VALUES (2,101,'SAP','1972');
1457
INSERT INTO test_repair_table4 VALUES (1,101,'Microsoft','1978');
1458
INSERT INTO test_repair_table4 VALUES (2,101,'MySQL','1995');
1460
# list table content
1461
SELECT * FROM test_repair_table4;
1462
CHECK TABLE test_repair_table4;
1463
REPAIR TABLE test_repair_table4;
1464
# check that nothing changed
1465
SELECT * FROM test_repair_table4;
1466
# verify that check/repair did non corrupt the table itself
1467
CHECK TABLE test_repair_table4;
1468
REPAIR TABLE test_repair_table4;
1469
SELECT * FROM test_repair_table4;
1470
DROP TABLE test_repair_table4;
1472
# Run CHECK/REPAIR on the CSV file with a single row, which misses a column.
1474
CREATE TABLE test_repair_table5 (
1476
magic_no int DEFAULT 0 NOT NULL,
1477
company_name char(30) DEFAULT '' NOT NULL,
1478
founded char(4) DEFAULT '' NOT NULL
1481
# Corrupt a table -- put a file with wrong # of columns
1482
--remove_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV
1483
--write_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV
1487
CHECK TABLE test_repair_table5;
1488
REPAIR TABLE test_repair_table5;
1489
SELECT * FROM test_repair_table5;
1490
INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT", 1876);
1491
SELECT * FROM test_repair_table5;
1493
# Corrupt a table -- put a row with wrong # of columns at end of file
1494
--append_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV
1499
CHECK TABLE test_repair_table5;
1500
REPAIR TABLE test_repair_table5;
1501
# The correct record inserted should still be in the file
1502
SELECT * FROM test_repair_table5;
1503
INSERT INTO test_repair_table5 VALUES (1, 102, "CORRECT2", 1876);
1504
SELECT * FROM test_repair_table5;
1506
# Corrupt table again -- put a row with wrong # of columns at end of file
1507
--append_file $MYSQLTEST_VARDIR/master-data/test/test_repair_table5.CSV
1512
CHECK TABLE test_repair_table5;
1513
REPAIR TABLE test_repair_table5;
1514
# The two correct records inserted should still be in the file
1515
SELECT * FROM test_repair_table5;
1516
DROP TABLE test_repair_table5;
1353
1519
# BUG#13406 - incorrect amount of "records deleted"
1356
create temporary table t1 (a int not null) engine=csv;
1522
create table t1 (a int not null) engine=csv;
1357
1523
insert t1 values (1);
1359
1525
delete from t1; # delete_row
1550
# Some additional tests for new, faster alter table. Note that most of the
1551
# whole alter table code is being tested all around the test suite already.
1554
create table t1 (v varchar(32) not null);
1555
insert into t1 values ('def'),('abc'),('hij'),('3r4f');
1557
# Fast alter, no copy performed
1558
alter table t1 change v v2 varchar(32);
1560
# Fast alter, no copy performed
1561
alter table t1 change v2 v varchar(64);
1563
update t1 set v = 'lmn' where v = 'hij';
1565
# Regular alter table
1566
alter table t1 add i int auto_increment not null primary key first;
1568
update t1 set i=5 where i=3;
1570
alter table t1 change i i bigint;
1572
alter table t1 add unique key (i, v);
1573
select * from t1 where i between 2 and 4 and v in ('def','3r4f','lmn');
1384
1577
# Bug #15205 Select from CSV table without the datafile causes crash
1386
1579
# NOTE: the bug is not deterministic
1408
1601
#drop table bug15205;
1409
1602
#drop table bug15205_2;
1606
# Bug#22080 "CHECK fails to identify some corruption"
1609
create table bug22080_1 (id int not null,string varchar(64) not null) Engine=CSV;
1610
create table bug22080_2 (id int not null,string varchar(64) not null) Engine=CSV;
1611
create table bug22080_3 (id int not null,string varchar(64) not null) Engine=CSV;
1612
insert into bug22080_1 values(1,'string');
1613
insert into bug22080_1 values(2,'string');
1614
insert into bug22080_1 values(3,'string');
1616
# Create first corrupt file as described in bug report
1617
--remove_file $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
1618
--write_file $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
1624
# Create second corrupt file as described in bug report
1625
--remove_file $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
1626
--write_file $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
1632
check table bug22080_2;
1634
check table bug22080_3;
1636
drop tables bug22080_1,bug22080_2,bug22080_3;
1412
1639
# Testing float type
1414
create temporary table float_test (id float not null,string varchar(64) not null) Engine=CSV;
1641
create table float_test (id float not null,string varchar(64) not null) Engine=CSV;
1415
1642
insert into float_test values(1.0,'string');
1416
1643
insert into float_test values(2.23,'serg.g');
1417
1644
insert into float_test values(0.03,'string');
1472
1714
# Bug #31473: does not work with NULL value in datetime field
1474
create temporary table t1(a datetime not null) engine=csv;
1476
insert into t1 values();
1479
create temporary table t1(a varchar(32) not null) engine=csv;
1481
insert into t1 values();
1484
create temporary table t1(a int not null) engine=csv;
1486
insert into t1 values();
1489
create temporary table t1(a blob not null) engine=csv;
1716
create table t1(a datetime not null) engine=csv;
1718
insert into t1 values();
1721
create table t1(a varchar(32) not null) engine=csv;
1723
insert into t1 values();
1726
create table t1(a int not null) engine=csv;
1728
insert into t1 values();
1731
create table t1(a blob not null) engine=csv;
1491
1733
insert into t1 values();
1492
1734
select * from t1;
1494
1736
# We prevent creation of table with nullable ENUM
1495
1737
--error ER_CHECK_NOT_IMPLEMENTED
1496
create temporary table t1(a enum('foo','bar') default null) engine=csv;
1738
create table t1(a enum('foo','bar') default null) engine=csv;
1497
1739
--error ER_CHECK_NOT_IMPLEMENTED
1498
create temporary table t1(a enum('foo','bar') default 'foo') engine=csv;
1740
create table t1(a enum('foo','bar') default 'foo') engine=csv;
1499
1741
# Enum columns must be specified as NOT NULL
1500
create temporary table t1(a enum('foo','bar') default 'foo' not null) engine=csv;
1742
create table t1(a enum('foo','bar') default 'foo' not null) engine=csv;
1501
1743
insert into t1 values();
1502
1744
select * from t1;