Add patch to fix the failing main.variables mysql-test. It started failing
after the variable innodb_use_sys_malloc was added because it matches
'%alloc%' and the test is badly written and expects that no new variables
like that will ever be added.
------------------------------------------------------------------------
r3601 | marko | 2008-12-22 16:05:19 +0200 (Mon, 22 Dec 2008) | 9 lines
branches/5.1: Make
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
a true replacement of SET GLOBAL INNODB_LOCKS_UNSAFE_FOR_BINLOG=1.
This fixes an error that was introduced in r370, causing
semi-consistent read not to not unlock rows in READ COMMITTED mode.
(Bug #41671, Issue #146)
rb://67 approved by Heikki Tuuri
------------------------------------------------------------------------
Merge 2929:3458 from branches/5.1 (resolving conflict in c3257,
note also that r3363 reverted r2933 so there are not changes in
mysql-test/innodb-autoinc.result with the current merge):
------------------------------------------------------------------------
r2933 | calvin | 2008-10-30 02:57:31 +0200 (Thu, 30 Oct 2008) | 10 lines
Changed paths:
M /branches/5.1/mysql-test/innodb-autoinc.result
branches/5.1: correct the result file innodb-autoinc.result
Change the followings:
auto_increment_increment
auto_increment_offset
to
auto-increment-increment
auto-increment-offset
------------------------------------------------------------------------
r2981 | marko | 2008-11-07 14:54:10 +0200 (Fri, 07 Nov 2008) | 5 lines
Changed paths:
M /branches/5.1/row/row0mysql.c
branches/5.0: row_mysql_store_col_in_innobase_format(): Correct a misleading
comment. In the UTF-8 encoding, ASCII takes 1 byte per character, while
the "latin1" character set (normally ISO-8859-1, but in MySQL it actually
refers to the Windows Code Page 1252 a.k.a. CP1252, WinLatin1)
takes 1 to 3 bytes (1 to 2 bytes for the ISO-8859-1 subset).
------------------------------------------------------------------------
r3114 | calvin | 2008-11-14 20:31:48 +0200 (Fri, 14 Nov 2008) | 8 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
branches/5.1: fix bug#40386: Not flushing query cache after truncate
ha_statistics.records can not be 0 unless the table is empty, set to
1 instead. The original problem of bug#29507 is fixed in the server.
Additional test was done with the fix of bug#29507 in the server.
Approved by: Heikki (on IM)
------------------------------------------------------------------------
r3257 | inaam | 2008-11-24 22:06:50 +0200 (Mon, 24 Nov 2008) | 13 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
M /branches/5.1/srv/srv0srv.c
M /branches/5.1/trx/trx0trx.c
branches/5.1 bug#40760
The config param innodb_thread_concurrency is dynamically set and is
read when a thread enters/exits innodb. If the value is changed between
the enter and exit time the behaviour becomes erratic.
The fix is not to use srv_thread_concurrency when exiting, instead use
the flag trx->declared_to_be_inside_innodb.
rb://57
Approved by: Marko
------------------------------------------------------------------------
r3363 | calvin | 2008-12-04 19:00:20 +0200 (Thu, 04 Dec 2008) | 13 lines
Changed paths:
M /branches/5.1/mysql-test/innodb-autoinc.result
branches/5.1: revert the changes in r2933
The changes in r2933 causes test failure on Linux.
More investigation is needed for Windows.
Change the followings in innodb-autoinc.result:
auto-increment-increment
auto-increment-offset
back to:
auto_increment_increment
auto_increment_offset
------------------------------------------------------------------------
r3412 | vasil | 2008-12-05 10:46:18 +0200 (Fri, 05 Dec 2008) | 7 lines
Changed paths:
M /branches/5.1/trx/trx0undo.c
branches/5.1:
Add the traditional 2 spaces after the timestamp so the message does
not look like:
070223 13:26:01InnoDB: Warning: canno....
------------------------------------------------------------------------
r3458 | vasil | 2008-12-09 11:21:08 +0200 (Tue, 09 Dec 2008) | 51 lines
Changed paths:
M /branches/5.1/mysql-test/innodb_bug34300.test
branches/5.1:
Merge a change from MySQL to fix the failing innodb_bug34300 mysql-test:
main.innodb_bug34300 [ fail ]
mysqltest: At line 11: query 'SET @@max_allowed_packet=16777216' failed: 1621: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
Aborting: main.innodb_bug34300 failed in default mode.
The changeset is this:
------------------------------------------------------------
revno: 2709.1.10
committer: Staale Smedseng <staale.smedseng@sun.com>
branch nick: b22891-51-bugteam
timestamp: Thu 2008-11-20 08:51:48 +0100
message:
A fix for Bug#22891 "session level max_allowed_packet can be
set but is ignored".
This patch makes @@session.max_allowed_packed and
@@session.net_buffer_length read-only as suggested in the bug
report. The user will have to use SET GLOBAL (and reconnect)
to alter the session values of these variables.
The error string ER_VARIABLE_IS_READONLY is introduced.
Tests are modified accordingly.
modified:
mysql-test/r/func_compress.result
mysql-test/r/max_allowed_packet_basic.result
mysql-test/r/max_allowed_packet_func.result
mysql-test/r/net_buffer_length_basic.result
mysql-test/r/packet.result
mysql-test/r/union.result
mysql-test/r/variables.result
mysql-test/t/func_compress.test
mysql-test/t/innodb_bug34300.test
mysql-test/t/max_allowed_packet_basic.test
mysql-test/t/max_allowed_packet_func.test
mysql-test/t/net_buffer_length_basic.test
mysql-test/t/packet.test
mysql-test/t/union.test
mysql-test/t/variables.test
sql/set_var.cc
sql/set_var.h
sql/share/errmsg.txt
------------------------------------------------------------
------------------------------------------------------------------------
an index or table. We have to skip this check when loading table definitions
from the data dictionary, because we could otherwise refuse to load old
tables (even uncompressed ones). This addresses Issue #119.
The first "row too large" check was implemented in MySQL 5.0.3
to address MySQL Bug #5682. In the InnoDB Plugin 1.0.2, a more
accurate check was implemented in innodb_strict_mode. We now
make the check unconditional.
dict_create_index_step(): Pass strict=TRUE to dict_index_add_to_cache().
trx_is_strict(), thd_is_strict(): Remove.
innodb-zip.test: Test in innodb_strict_mode=OFF.
innodb_bug36169.test: Ensure that none of the tables can be created.
rb://56 approved by Sunny Bains.
Fix "Bug#40360 Binlog related errors with binlog off" in InnoDB code in order
to have a Bug#40360-free InnoDB Plugin 1.0.2.
The fix does check whether binary logging is enabled in MySQL by accessing the
opt_bin_log global variable that is defined in sql/mysqld.cc.
In case MySQL does develop another solution to this via Bug#40360 then we can
revert this patch (except the mysql-tests).
The windows-plugin part of this fix will be committed as a separate commit to
ease eventual merge into branches/5.1 [note from the future: the separate
commit went into r2936].
Approved by: Marko (https://svn.innodb.com/rb/r/39)
Merge revisions 2837:2852 from branches/5.1:
------------------------------------------------------------------------
r2849 | sunny | 2008-10-22 12:01:18 +0300 (Wed, 22 Oct 2008) | 8 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
M /branches/5.1/include/row0mysql.h
M /branches/5.1/row/row0mysql.c
branches/5.1: Return the actual error code encountered when allocating
a new autoinc value. The change in behavior (bug) was introduced in 5.1.22
when we introduced the new AUTOINC locking model.
rb://31
Bug#40224 New AUTOINC changes mask reporting of deadlock/timeout errors
------------------------------------------------------------------------
r2852 | sunny | 2008-10-23 01:42:24 +0300 (Thu, 23 Oct 2008) | 9 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
M /branches/5.1/handler/ha_innodb.h
branches/5.1: Backport r2724 from branches/zip
Check column value against the col max value before updating the table's
global autoinc counter value. This is part of simplifying the AUTOINC
sub-system. We extract the type info from MySQL data structures at runtime.
This fixes Bug#37788 InnoDB Plugin: AUTO_INCREMENT wrong for compressed tables
------------------------------------------------------------------------
Merge 2744:2837 from branches/5.1 (skipping r2782 and r2826):
------------------------------------------------------------------------
r2832 | vasil | 2008-10-21 10:08:30 +0300 (Tue, 21 Oct 2008) | 10 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
branches/5.1:
In ha_innobase::info():
Replace sql_print_warning() which prints to mysqld error log with
push_warning_printf() which sends the error message to the client.
Suggested by: Marko, Sunny, Michael
Objected by: Inaam
------------------------------------------------------------------------
r2837 | vasil | 2008-10-21 12:07:44 +0300 (Tue, 21 Oct 2008) | 32 lines
Changed paths:
M /branches/5.1/mysql-test/innodb-semi-consistent.result
M /branches/5.1/mysql-test/innodb-semi-consistent.test
M /branches/5.1/mysql-test/innodb.result
M /branches/5.1/mysql-test/innodb.test
branches/5.1:
Merge a change from MySQL (this fixes the failing innodb and
innodb-semi-consistent tests):
revno: 2757
committer: Georgi Kodinov <kgeorge@mysql.com>
branch nick: B39812-5.1-5.1.29-rc
timestamp: Fri 2008-10-03 15:24:19 +0300
message:
Bug #39812: Make statement replication default for 5.1 (to match 5.0)
Make STMT replication default for 5.1.
Add a default of MIXED into the config files
Fix the tests that needed MIXED replication mode.
modified:
mysql-test/include/mix1.inc
mysql-test/r/innodb-semi-consistent.result
mysql-test/r/innodb.result
mysql-test/r/innodb_mysql.result
mysql-test/r/tx_isolation_func.result
mysql-test/t/innodb-semi-consistent.test
mysql-test/t/innodb.test
mysql-test/t/tx_isolation_func.test
sql/mysqld.cc
support-files/my-huge.cnf.sh
support-files/my-innodb-heavy-4G.cnf.sh
support-files/my-large.cnf.sh
support-files/my-medium.cnf.sh
support-files/my-small.cnf.sh
------------------------------------------------------------------------
In ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED, column prefix indexes
require that prefixes of externally stored columns be written to the
undo log. This may make the undo log record bigger than the record on
the B-tree page. The maximum size of an undo log record is the page
size. That must be checked for, in dict_index_add_to_cache().
dict_index_add_to_cache(): Skip the undo log size check for REDUNDANT
and COMPACT tables. These tables store prefixes of externally stored
columns locally within the clustered index record. There are no special
considerations for the undo log record size.
innodb-index.test: Ensure that the check exists for ROW_FORMAT=DYNAMIC,
but not for ROW_FORMAT=COMPACT.
This fixes issue #99. rb://28 approved by Sunny.
@@GLOBAL.innodb_file_per_table can be 0 or 1, while
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='innodb_file_per_table'
can be 'OFF' or 'ON'. For some reason, MySQL evaluates
(0 = 'OFF') to 1 and (1 = 'ON') to 0. Thus, the test would
fail if innodb_file_per_table is set.
type_bit_innodb.diff: Ignore the reported duplicate value. The reported
value depends on the internal workings of the merge sort in
fast index creation. In the built-in InnoDB of MySQL 5.1, the records
are copied to a new temporary table in the order they were selected from
the original table.
information_schema.diff: Account for the INFORMATION_SCHEMA tables that
were added in the InnoDB plugin.
innodb_file_per_table.diff: In the InnoDB plugin, innodb_file_per_table
is a settable global variable.
------------------------------------------------------------------------
r2702 | sunny | 2008-09-30 11:41:56 +0300 (Tue, 30 Sep 2008) | 13 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
branches/5.1: Since handler::get_auto_increment() doesn't allow us
to return the cause of failure we have to inform MySQL using the
sql_print_warning() function to return the cause for autoinc failure.
Previously we simply printed the error code, this patch prints the
text string representing the following two error codes:
DB_LOCK_WAIT_TIMEOUT
DB_DEADLOCK.
Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info
Approved by Marko.
------------------------------------------------------------------------
r2709 | vasil | 2008-10-01 10:13:13 +0300 (Wed, 01 Oct 2008) | 10 lines
Changed paths:
M /branches/5.1/include/lock0lock.h
M /branches/5.1/lock/lock0lock.c
A /branches/5.1/mysql-test/innodb_bug38231.result
A /branches/5.1/mysql-test/innodb_bug38231.test
M /branches/5.1/row/row0mysql.c
branches/5.1:
Fix Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK
In TRUNCATE TABLE and discard tablespace: do not remove table-level S
and X locks and do not assert on such locks not being wait locks.
Leave such locks alone.
Approved by: Heikki (rb://14)
------------------------------------------------------------------------
r2710 | vasil | 2008-10-01 14:13:58 +0300 (Wed, 01 Oct 2008) | 6 lines
Changed paths:
M /branches/5.1/include/sync0sync.ic
branches/5.1:
Silence a compilation warning in UNIV_DEBUG.
Approved by: Marko (via IM)
------------------------------------------------------------------------
r2719 | vasil | 2008-10-03 18:17:28 +0300 (Fri, 03 Oct 2008) | 49 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
A /branches/5.1/mysql-test/innodb_bug39438-master.opt
A /branches/5.1/mysql-test/innodb_bug39438.result
A /branches/5.1/mysql-test/innodb_bug39438.test
branches/5.1:
Fix Bug#39438 Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch
In ha_innobase::info() - do not try to get the free space for a tablespace
which has been discarded with ALTER TABLE ... DISCARD TABLESPACE or if the
.ibd file is missing for some other reason.
ibd_file_missing and tablespace_discarded are manipulated only in
row_discard_tablespace_for_mysql() and in row_import_tablespace_for_mysql()
and the manipulation is protected/surrounded by
row_mysql_lock_data_dictionary()/row_mysql_unlock_data_dictionary() thus we
do the same in ha_innobase::info() when checking the values of those members
to avoid race conditions. I have tested the code-path with UNIV_DEBUG and
UNIV_SYNC_DEBUG.
Looks like it is not possible to avoid mysqld printing warnings in the
mysql-test case and thus this test innodb_bug39438 must be added to the
list of exceptional test cases that are allowed to print warnings. For this,
the following patch must be applied to the mysql source tree:
--- cut ---
=== modified file 'mysql-test/lib/mtr_report.pl'
--- mysql-test/lib/mtr_report.pl 2008-08-12 10:26:23 +0000
+++ mysql-test/lib/mtr_report.pl 2008-10-01 11:57:41 +0000
@@ -412,7 +412,10 @@
# When trying to set lower_case_table_names = 2
# on a case sensitive file system. Bug#37402.
- /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive. Now setting lower_case_table_names to 0 to avoid future problems./
+ /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive. Now setting lower_case_table_names to 0 to avoid future problems./ or
+
+ # this test is expected to print warnings
+ ($testname eq 'main.innodb_bug39438')
)
{
next; # Skip these lines
--- cut ---
The mysql-test is currently somewhat disabled (see inside
innodb_bug39438.test), after the above patch has been applied to the mysql
source tree, the test can be enabled.
rb://20
Reviewed by: Inaam, Calvin
Approved by: Heikki
------------------------------------------------------------------------
r2720 | vasil | 2008-10-03 19:52:39 +0300 (Fri, 03 Oct 2008) | 8 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
branches/5.1:
Print a warning if an attempt is made to get the free space for a table
whose .ibd file is missing or the tablespace has been discarded. This is a
followup to r2719.
Suggested by: Inaam
------------------------------------------------------------------------
r2721 | sunny | 2008-10-04 02:08:23 +0300 (Sat, 04 Oct 2008) | 6 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
branches/5.1: We need to send the messages to the client because
handler::get_auto_increment() doesn't allow a way to return the
specific error for why it failed.
rb://18
------------------------------------------------------------------------
r2722 | sunny | 2008-10-04 02:48:04 +0300 (Sat, 04 Oct 2008) | 18 lines
Changed paths:
M /branches/5.1/dict/dict0mem.c
M /branches/5.1/handler/ha_innodb.cc
M /branches/5.1/include/dict0mem.h
M /branches/5.1/include/row0mysql.h
M /branches/5.1/mysql-test/innodb-autoinc.result
M /branches/5.1/mysql-test/innodb-autoinc.test
M /branches/5.1/row/row0mysql.c
branches/5.1: This bug has always existed but was masked by other errors. The
fix for bug# 38839 triggered this bug. When the offset and increment are > 1
we need to calculate the next value taking into consideration the two
variables. Previously we simply assumed they were 1 particularly offset was
never used. MySQL does its own calculation and that's probably why it seemed
to work in the past. We would return what we thought was the correct next
value and then MySQL would recalculate the actual value from that and return
it to the caller (e.g., handler::write_row()). Several new tests have been
added that try and catch some edge cases. The tests exposed a wrap around
error in MySQL next value calculation which was filed as bug#39828. The tests
will need to be updated once MySQL fix that bug.
One good side effect of this fix is that dict_table_t size has been
reduced by 8 bytes because we have moved the autoinc_increment field to
the row_prebuilt_t structure. See review-board for a detailed discussion.
rb://3
------------------------------------------------------------------------
more generic. The previous pattern could fail if other test cases were run
before this one. Since r2716, the MySQL server is not restarted for this test.
(Bug #36285, rb://9).
innodb-index.test, innodb-index.result: Set innodb_lock_wait_timeout as
a session variable instead of relying on the global value.
innodb-index-master.opt: Remove.
innodb-timeout.test: Test that setting the innodb_lock_wait_timeout
works as advertised.
thd_lock_wait_timeout(): New function, to retrieve the lock wait timeout
for a given MySQL client connection (thd), or the global value (thd==NULL).
srv_lock_wait_timeout, innobase_lock_wait_timeout: Remove.
Replace MYSQL_SYSVAR_LONG(lock_wait_timeout)
with MYSQL_THDVAR_ULONG(lock_wait_timeout).
Change the patch to fix the failing mysql-test index_merge_innodb.
The previous variant is inappropriate because myisam results are different
(2 instead of 4) and then the index_merge_myisam test fails.
Add a patch to fix the failing mysql-test index_merge_innodb. The test
started failing after an optimization, made in r2625, which results in
a different number of rows being returned by EXPLAIN.
the maximum record size will never exceed the B-tree page size limit.
For uncompressed tables, there should always be enough space for two
records in an empty B-tree page. For compressed tables, there should
be enough space for storing two node pointer records or one data
record in an empty page in uncompressed format.
dict_build_table_def_step(): Remove the inaccurate check for table row
size.
dict_index_too_big_for_tree(): New function: check if the index
records would be too big for a B-tree page.
dict_index_add_to_cache(): Add the parameter "strict". Invoke
dict_index_too_big_for_tree() if it is set.
trx_is_strict(), thd_is_strict(): New functions, for determining if
innodb_strict_mode is enabled for the current transaction.
dict_create_index_step(): Pass the new parameter strict of
dict_index_add_to_cache() as trx_is_strict(trx). All other callers
pass it as FALSE.
innodb.test: Enable innodb_strict_mode before attempting to create a
table with a too big record size.
innodb-zip.test: Remove the test of inserting random data. Add tests
for checking that the maximum record lengths are enforced at table
creation time.
ha_innodb.cc: Declare strict_mode as PLUGIN_VAR_OPCMDARG, because we
do want to be able to disable innodb_strict_mode. This is a non-functional
change, because PLUGIN_VAR_NOCMDARG seems to accept an argument as well.
innodb-zip.test: Do not store innodb_strict_mode. It is a session variable.
Add a test case for innodb_strict_mode=off.
there will always be enough space for two node pointer records in an
empty B-tree page. This was reported as Mantis issue #73.
page_zip_rec_needs_ext(): Add the parameter n_fields, for accurate
estimation of the compressed size of the data dictionary information.
Given that this function is only invoked for records on leaf pages,
require that there be enough space for one record in the compressed
page. We check elsewhere that there will be enough room for two node
pointer records on higher-level pages.
btr_cur_optimistic_insert(): Ensure that there will be enough room for
two node pointer records on an empty non-leaf page. The rule for
leaf-page records will be enforced by the callers of
page_zip_rec_needs_ext().
btr_cur_pessimistic_insert(): Remove the insufficient check that the
leaf page record should be compressible by itself. Instead, now we
require that two node pointer records fit on a non-leaf page, and one
record will fit in uncompressed form on the leaf page.
page_zip_write_header(), page_zip_write_rec(): Re-enable the debug
assertions that were violated by the insufficient check in
btr_cur_pessimistic_insert().
innodb_bug36172.test: Use a larger compressed page size.
Add a test case to check that mysqld does not crash when running ANALYZE TABLE
with different values for innodb_stats_sample_pages.
Suggested by: Marko
Approved by: Marko
Merge 2605:2617 from branches/5.1:
------------------------------------------------------------------------
r2609 | sunny | 2008-08-24 01:19:05 +0300 (Sun, 24 Aug 2008) | 12 lines
Changed paths:
M /branches/5.1/handler/ha_innodb.cc
M /branches/5.1/mysql-test/innodb-autoinc.result
M /branches/5.1/mysql-test/innodb-autoinc.test
branches/5.1: Fix for MySQL Bug#38839. Reset the statement level last
value field in prebuilt. This field tracks the last value in an autoincrement
interval. We use this value to check whether we need to update a table's
AUTOINC counter, if the value written to a table is less than this value
then we avoid updating the table's AUTOINC value in order to reduce
mutex contention. If it's not reset (e.g., after a DELETE statement) then
there is the possibility of missing updates to the table's AUTOINC counter
resulting in a subsequent duplicate row error message under certain
conditions (see the test case for details).
Bug #38839 - auto increment does not work properly with InnoDB after update
------------------------------------------------------------------------
r2617 | vasil | 2008-09-09 15:46:17 +0300 (Tue, 09 Sep 2008) | 47 lines
Changed paths:
M /branches/5.1/mysql-test/innodb.result
branches/5.1:
Merge a change from MySQL (fix the failing innodb test):
------------------------------------------------------------
revno: 2646.12.1
committer: Mattias Jonsson <mattiasj@mysql.com>
branch nick: wl4176_2-51-bugteam
timestamp: Mon 2008-08-11 20:02:03 +0200
message:
Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
partition is corrupt
The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR
PARTITION took another code path (over mysql_alter_table instead of
mysql_admin_table) which differs in two ways:
1) alter table opens the tables in a different way than admin tables do
resulting in returning with error before it tried the command
2) alter table does not start to send any diagnostic rows to the client
which the lower admin functions continue to use -> resulting in
assertion crash
The fix:
Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use
the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t.
Adding check in mysql_admin_table to setup the partition list for
which partitions that should be used.
Partitioned tables will still not work with
REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions
to tables, REPAIR TABLE t USE_FRM, and check that the data still
fulfills the partitioning function and then move the table back to
being a partition.
NOTE: I have removed the following functions from the handler
interface:
analyze_partitions, check_partitions, optimize_partitions,
repair_partitions
Since they are not longer needed.
THIS ALTERS THE STORAGE ENGINE API
I have verified that OPTIMIZE TABLE actually rebuilds the table
and calls ANALYZE.
Approved by: Heikki
foreign key constraint, find a truly equivalent index for it.
If none is available, refuse to drop the index. MySQL can drop
an index when creating a "stronger" index.
This was reported as Mantis issue #70 and MySQL Bug #38786.
innodb-index.test: Add a test case.
dict_foreign_find_equiv_index(): New function, to replace the
incorrectly written function dict_table_find_equivalent_index().
dict_table_replace_index_in_foreign_list(): Simplify the implementation.
Fixes issue# 51 - by removing the negative test cases that produce
warnings. The warnings cause mysql-test-run to fail.
Those negative test cases will be moved to separate test/result files.
Approved by: Sunny
Disable part of innodb-index test because MySQL changed its behavior and
is not calling ::add_index() anymore in the following ALTER TABLE:
CREATE TABLE t (a INT) ENGINE=INNODB;
INSERT INTO t VALUES (NULL);
ALTER TABLE t ADD PRIMARY KEY (a); -- adding primary index on non-NULL column
Previously, in ALTER TABLE, MySQL would call ::add_index() which would
fail with a "primary key cannot contain NULL" error.
The change occured in:
mysql-5.1$ bzr log -v -r2667
------------------------------------------------------------
revno: 2667
committer: Davi Arnaut <davi@mysql.com>
branch nick: 33873-5.1
timestamp: Tue 2008-06-17 11:12:21 -0300
message:
Bug#33873: Fast ALTER TABLE doesn't work with multibyte character sets
The problem was that when comparing tables for a possible
fast alter table, the comparison was being performed using
the parsed information and not the final definition.
The solution is to use the possible final table layout to
compare if a fast alter is possible or not.
modified:
mysql-test/include/mix1.inc
mysql-test/r/alter_table.result
mysql-test/r/innodb_mysql.result
mysql-test/t/alter_table.test
sql/sql_table.cc
mysql-5.1$
------------------------------------------------------------------------
r2519 | sunny | 2008-06-26 16:55:43 +0300 (Thu, 26 Jun 2008) | 5 lines
branches/5.1: Add test cases and fix a bug where the last AUTOINC cached value
was not reset to 0 when the table was truncated.
Bug #37531 : After truncate, auto_increment behaves incorrectly for InnoDB
------------------------------------------------------------------------
r2520 | vasil | 2008-06-26 17:38:02 +0300 (Thu, 26 Jun 2008) | 7 lines
branches/5.1:
Fix Bug#36941 Performance problem in ha_print_info (SHOW INNODB STATUS)
by disabling some of the code in ha_print_info() in production builds.
Approved by: Heikki (via IM)
------------------------------------------------------------------------
r2521 | vasil | 2008-06-26 17:39:01 +0300 (Thu, 26 Jun 2008) | 8 lines
branches/5.1:
Fix Bug#36942 Performance problem in lock_get_n_rec_locks (SHOW INNODB STATUS)
by not calling lock_get_n_rec_locks() from lock_print_info_summary() on
production builds.
Approved by: Heikki (via IM)
------------------------------------------------------------------------
r2524 | vasil | 2008-07-01 10:37:34 +0300 (Tue, 01 Jul 2008) | 29 lines
branches/5.1:
Merge a change from MySQL (this fixes the failing innodb-replace test):
revno: 2659
committer: Mattias Jonsson <mattiasj@mysql.com>
branch nick: b31210-51-bugteam
timestamp: Tue 2008-06-03 13:25:41 +0200
message:
Bug#31210: INSERT DELAYED crashes server when used on partitioned tables
Problem was an unclear error message since it could suggest that
MyISAM did not support INSERT DELAYED.
Changed the error message to say that DELAYED is not supported by the
table, instead of the table's storage engine.
The confusion is that a partitioned table is in somewhat sense using
the partitioning storage engine, which in turn uses the ordinary
storage engine. By saying that the table does not support DELAYED we
do not give any extra informantion about the storage engine or if it
is partitioned.
modified:
mysql-test/r/innodb-replace.result
mysql-test/t/innodb-replace.test
mysql-test/t/merge.test
mysql-test/t/partition_hash.test
sql/share/errmsg.txt
sql/sql_insert.cc
------------------------------------------------------------------------
Fixed the issue where an unchanged blob column that is part of the
primary key as well is lost if it is externally stored.
The fix is provided by Marko.
Reviewed by: Sunny
------------------------------------------------------------------------
r2488 | vasil | 2008-06-09 13:53:12 +0300 (Mon, 09 Jun 2008) | 15 lines
Changed paths:
M /branches/5.1/mysql-test/innodb.result
branches/5.1:
Merge change from MySQL (this almost fixes the failing innodb test):
ChangeSet@1.2613, 2008-05-07 09:58:21+04:00, sergefp@mysql.com +5 -0
BUG#35850 "Performance regression in 5.1.23/5.1.24"
- Disable the "prefer full scan on clustered primary key over full scan
of any secondary key" rule introduced by BUG#35850.
- Update test results accordingly
(bk trigger: file this for BUG#35850)
mysql-test/r/innodb.result@1.214, 2008-05-07 09:57:31+04:00, sergefp@mysql.com +15 -15
BUG#35850 "Performance regression in 5.1.23/5.1.24"
- Update test results
------------------------------------------------------------------------
r2489 | vasil | 2008-06-09 14:16:51 +0300 (Mon, 09 Jun 2008) | 20 lines
Changed paths:
M /branches/5.1/mysql-test/innodb.result
branches/5.1:
Merge change from MySQL (this fixes the failing innodb test):
ChangeSet@1.2628 2008-05-13 17:01:02+05:00 gshchepa@host.loc
Merge host.loc:/work/bugs/5.0-bugteam-30059
into host.loc:/work/bk/5.1-bugteam
NOTE: the diff for mysql-test/r/innodb.result in this ChangeSet looks
empty but the line:
Data truncated for column 'c' at row 1
is present in annotated mysql-test/r/innodb.result@1.215 [1]
and not present in annotated mysql-test/r/innodb.result@1.216 [2] so it
must have been deleted in the above ChangeSet.
[1] http://mysql.bkbits.net:8080/mysql-5.1/mysql-test/r/innodb.result?PAGE=anno&REV=4825e033JNz_463Ha9pwInSjqLvIQg
[2] http://mysql.bkbits.net:8080/mysql-5.1/mysql-test/r/innodb.result?PAGE=anno&REV=482982fcUoskWjhU2xMH2BZ4Gyukfg
------------------------------------------------------------------------
page must be big enough to store two records, this is done because compression
later may very well result in two records residing on the same page. This
change handles the case where only one record fits on a page. We don't
split the page in the middle by default if there is only record on the page.
We only split the page if the tuple to be inserted is less than existing
record. That way the existing record is copied over to the right page
during the split and the new tuple is inserted to the left.
Implement the system tablespace tagging described on the wiki:
https://svn.innodb.com/innobase/InnoDB_version_and_feature_compatibility
A brief description of the changes:
* The file format tag will be saved in the trx system page, starting at
(UNIV_PAGE_SIZE - 16) for 8 bytes.
* The configuration parameter innodb_file_format_check is introduced.
This variable can be set to on/off and any of the supported file
formats in the configuration file, but can only be set to any of
the supported file formats during runtime. The default is on.
* During table create/open, check the current file format against
the max in file_format_max. If the current file format is newer,
update file_format_max and tag the system tablespace with the
newer one in a normal mtr.
* During startup, write the tag to the error log and check it against
DICT_TF_FORMAT_MAX. Refuse to start with error, if
-- DICT_TF_FORMAT_MAX < the tag, and
-- innodb_file_format_check is ON
Print out a warning , if
-- DICT_TF_FORMAT_MAX < the tag, but
-- innodb_file_format_check is off
* The system tablespace tag is re-settable using:
set innodb_file_format_check = <file_format>
Approved by: Sunny
------------------------------------------------------------------------
r2386 | vasil | 2008-03-27 07:45:02 +0200 (Thu, 27 Mar 2008) | 22 lines
branches/5.1:
Merge change from MySQL (this fixes the failing innodb test):
ChangeSet@1.1810.3601.4, 2008-02-07 02:33:21+04:00, gshchepa@host.loc +9 -0
Fixed bug#30059.
Server handles truncation for assignment of too-long values
into CHAR/VARCHAR/TEXT columns in a different ways when the
truncated characters are spaces:
1. CHAR(N) columns silently ignore end-space truncation;
2. TEXT columns post a truncation warning/error in the
non-strict/strict mode.
3. VARCHAR columns always post a truncation note in
any mode.
Space truncation processing has been synchronised over
CHAR/VARCHAR/TEXT columns: current behavior of VARCHAR
columns has been propagated as standard.
Binary-encoded string/BLOB columns are not affected.
------------------------------------------------------------------------
r2387 | vasil | 2008-03-27 08:49:05 +0200 (Thu, 27 Mar 2008) | 8 lines
branches/5.1:
Check whether *trx->mysql_query_str is != NULL in addition to
trx->mysql_query_str. This adds more safety.
This may or may not fix Bug#35226 RBR event crashes slave.
------------------------------------------------------------------------
r2388 | vasil | 2008-03-27 14:02:34 +0200 (Thu, 27 Mar 2008) | 7 lines
branches/5.1:
Swap the order in which mysql_thd, mysql_query_str and *mysql_query_str
are checked for non-NULL.
Suggested by: Marko
------------------------------------------------------------------------
r2419 | vasil | 2008-04-23 19:08:06 +0300 (Wed, 23 Apr 2008) | 9 lines
branches/5.1:
Change the fix for Bug#32440 to show bytes instead of kilobytes in
INFORMATION_SCHEMA.TABLES.DATA_FREE.
Suggested by: Domas Mituzas <domas@mysql.com>
Approved by: Heikki
------------------------------------------------------------------------
r2420 | calvin | 2008-04-24 15:25:30 +0300 (Thu, 24 Apr 2008) | 4 lines
branches/5.1: Fix bug#29507 TRUNCATE shows to many rows effected
In InnoDB, the row count is only a rough estimate used by SQL
optimization. InnoDB is now return row count 0 for TRUNCATE operation.
------------------------------------------------------------------------
r2421 | calvin | 2008-04-24 15:32:30 +0300 (Thu, 24 Apr 2008) | 6 lines
branches/5.1: Fix bug#35537 - Innodb doesn't increment handler_update
and handler_delete
Add the calls to ha_statistic_increment() in ha_innobase::delete_row()
and ha_innobase::update_row().
------------------------------------------------------------------------
r2422 | vasil | 2008-04-24 16:00:30 +0300 (Thu, 24 Apr 2008) | 11 lines
branches/5.1:
Fix Bug#36169 create innodb compressed table with too large row size crashed
Sometimes it is possible that
row_drop_table_for_mysql(index->table_name, trx, FALSE); is invoked in
row_create_index_for_mysql() when the index object is freed so copy the
table name to a safe place beforehand and use the copy.
Approved by: Sunny
------------------------------------------------------------------------
Fix Bug#36169 create innodb compressed table with too large row size crashed
Sometimes it is possible that
row_drop_table_for_mysql(index->table_name, trx, FALSE); is invoked in
row_create_index_for_mysql() when the index object is freed, so copy the
table name to a safe place beforehand and use the copy.
Approved by: Sunny
described in Mantis#30. Specifically:
- Allow innodb_file_format to take string arguments
- Make innodb_file_format system variable a string instead of a number
- Implement the callback functions
- Update warning messages
Three new functions are implemented:
file_format_name_lookup(): Validate the file format name and return
its corresponding id.
innodb_file_format_check(): Check if it is a valid file format. This
function is registered as a callback with MySQL.
innodb_file_format_update(): Update the global variable using the
"saved" value. This functions is registered as a callback with MySQL.
Introduced a new session level config param innodb_strict_mode.
If it is set we do extra checking at time of table creation
and fail if any invalid combination of KEY_BLOCK_SIZE
or ROW_FORMAT is specified.
Reviewed by: Sunny