From: Date: July 31 2008 1:06pm Subject: bzr push into mysql-6.0-falcon branch (vvaintroub:2762 to 2763) List-Archive: http://lists.mysql.com/commits/50774 Message-Id: <200807311106.m6VB61gr020967@mail.mysql.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 2763 Vladislav Vaintroub 2008-07-31 Bug 22161 test case relies on the fact that there will be exactly 3 "specified key too long" messages (while creating index on 1 row).Sometimes there are only 2 of them, no clue why. Disable warnings for "CREATE INDEX", Falcon is not responsible for them. modified: mysql-test/suite/falcon/r/falcon_bug_22161.result mysql-test/suite/falcon/t/falcon_bug_22161.test 2762 Vladislav Vaintroub 2008-07-31 [merge] merge modified: mysql-test/suite/falcon/r/falcon_bug_31295.result mysql-test/suite/falcon/r/falcon_bug_33404.result mysql-test/suite/falcon/t/falcon_bug_31295.test mysql-test/suite/falcon/t/falcon_bug_33404.test mysql-test/suite/funcs_1/r/is_columns_is_falcon.result mysql-test/suite/funcs_1/r/is_tables_is_falcon.result mysql-test/t/information_schema-master.opt mysql-test/t/information_schema_db-master.opt mysql-test/t/mysqlshow-master.opt mysql-test/t/variables-master.opt storage/falcon/StorageHandler.cpp storage/falcon/StorageHandler.h storage/falcon/ha_falcon.cpp storage/falcon/ha_falcon.h === modified file 'mysql-test/suite/falcon/r/falcon_bug_22161.result' --- a/mysql-test/suite/falcon/r/falcon_bug_22161.result 2008-07-14 05:32:03 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_22161.result 2008-07-31 10:37:43 +0000 @@ -9,10 +9,6 @@ CREATE INDEX i1 ON t1 (a); ERROR 42000: BLOB column 'a' can't be used in key specification with the used table type ALTER TABLE t1 MODIFY COLUMN a varchar(30000); CREATE INDEX i1 ON t1 (a); -Warnings: -Warning 1071 Specified key was too long; max key length is 1100 bytes -Warning 1071 Specified key was too long; max key length is 1100 bytes -Warning 1071 Specified key was too long; max key length is 1100 bytes SELECT count(*) FROM t1; count(*) 1 === added file 'mysql-test/suite/falcon/r/falcon_bug_35939.result' --- a/mysql-test/suite/falcon/r/falcon_bug_35939.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/r/falcon_bug_35939.result 2008-07-31 10:04:30 +0000 @@ -0,0 +1,61 @@ +*** Bug #35939 *** +SET @@storage_engine = 'Falcon'; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1(i int); +INSERT INTO t1(i) VALUES (1),(2),(3),(4); +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +4 +UPDATE t1 set i=i+1; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +4 +DELETE FROM t1 WHERE i=2; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +SET AUTOCOMMIT=OFF; +BEGIN; +INSERT INTO t1(i) VALUES(42); +DELETE FROM t1 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +UPDATE t1 SET i=42 WHERE i=4; +UPDATE t1 SET i=4 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +ROLLBACK; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +TABLE_ROWS +3 +SET AUTOCOMMIT=ON; +SELECT count(*) FROM t1; +count(*) +3 +DROP TABLE t1; === modified file 'mysql-test/suite/falcon/t/falcon_bug_22161.test' --- a/mysql-test/suite/falcon/t/falcon_bug_22161.test 2008-02-06 15:21:13 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_22161.test 2008-07-31 10:37:43 +0000 @@ -25,7 +25,9 @@ ALTER TABLE t1 MODIFY COLUMN a text; --error ER_BLOB_USED_AS_KEY CREATE INDEX i1 ON t1 (a); ALTER TABLE t1 MODIFY COLUMN a varchar(30000); +--disable_warnings CREATE INDEX i1 ON t1 (a); +--enable_warnings # ----------------------------------------------------- # # --- Check --- # === added file 'mysql-test/suite/falcon/t/falcon_bug_35939.test' --- a/mysql-test/suite/falcon/t/falcon_bug_35939.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/falcon/t/falcon_bug_35939.test 2008-07-31 10:04:30 +0000 @@ -0,0 +1,86 @@ +--source include/have_falcon.inc + +# +# Bug #35939: Drift in Falcon row count reported by SHOW TABLE STATUS +# +--echo *** Bug #35939 *** + +# ----------------------------------------------------- # +# --- Initialisation --- # +# ----------------------------------------------------- # +let $engine = 'Falcon'; +eval SET @@storage_engine = $engine; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +# ----------------------------------------------------- # +# --- Test --- # +# ----------------------------------------------------- # +CREATE TABLE t1(i int); +INSERT INTO t1(i) VALUES (1),(2),(3),(4); +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Expect 4 rows +UPDATE t1 set i=i+1; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Expect 4 rows, nothing added or deleted +DELETE FROM t1 WHERE i=2; +# One row deleted, expect count=3 +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; + +# insert/delete on the same row, count does not change +SET AUTOCOMMIT=OFF; +# Next tests are transactional +BEGIN; +INSERT INTO t1(i) VALUES(42); +DELETE FROM t1 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +#delete/insert, count does not change +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +# insert/update/delete on the same row, count does not change +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +#delete/insert/update/update, count does not change +BEGIN; +DELETE FROM t1 WHERE i=4; +INSERT INTO t1(i) VALUES(4); +UPDATE t1 SET i=42 WHERE i=4; +UPDATE t1 SET i=4 WHERE i=42; +COMMIT; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +# Count should not be changed,count=3 + +# same as before, but with rollback +BEGIN; +INSERT INTO t1(i) VALUES(42); +UPDATE t1 SET i=43 WHERE i=42; +DELETE FROM t1 WHERE i=43; +ROLLBACK; +SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +SET AUTOCOMMIT=ON; + +# ----------------------------------------------------- # +# --- Check --- # +# ----------------------------------------------------- # +SELECT count(*) FROM t1; + +# ----------------------------------------------------- # +# --- Final cleanup --- # +# ----------------------------------------------------- # +DROP TABLE t1; === modified file 'storage/falcon/Transaction.cpp' --- a/storage/falcon/Transaction.cpp 2008-07-24 08:45:03 +0000 +++ b/storage/falcon/Transaction.cpp 2008-07-31 10:04:30 +0000 @@ -299,10 +299,12 @@ void Transaction::commit() syncActiveTransactions.unlock(); for (RecordVersion *record = firstRecord; record; record = record->nextInTrans) + { if (!record->getPriorVersion()) ++record->format->table->cardinality; - else if (record->state == recDeleted && record->format->table->cardinality > 0) + if (record->state == recDeleted && record->format->table->cardinality > 0) --record->format->table->cardinality; + } transactionManager->committedTransactions.append(this); syncCommitted.unlock(); database->commit(this);