1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-29 00:08:14 +03:00
Commit Graph

225 Commits

Author SHA1 Message Date
Vasil Dimov
4923b866b8 Backport a fix for innodb_bug59641 from mysql-trunk-innodb 2011-04-21 10:48:30 +03:00
Marko Mäkelä
cdba023d9a Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-04-11 17:03:32 +03:00
Marko Mäkelä
1a0dde9206 Bug #11766513 - 59641: Prepared XA transaction in system after hard crash
causes future shutdown hang

InnoDB would hang on shutdown if any XA transactions exist in the
system in the PREPARED state. This has been masked by the fact that
MySQL would roll back any PREPARED transaction on shutdown, in the
spirit of Bug #12161 Xa recovery and client disconnection.

[mysql-test-run] do_shutdown_server: Interpret --shutdown_server 0 as
a request to kill the server immediately without initiating a
shutdown procedure.

xid_cache_insert(): Initialize XID_STATE::rm_error in order to avoid a
bogus error message on XA ROLLBACK of a recovered PREPARED transaction.

innobase_commit_by_xid(), innobase_rollback_by_xid(): Free the InnoDB
transaction object after rolling back a PREPARED transaction.

trx_get_trx_by_xid(): Only consider transactions whose
trx->is_prepared flag is set. The MySQL layer seems to prevent
attempts to roll back connected transactions that are in the PREPARED
state from another connection, but it is better to play it safe. The
is_prepared flag was introduced in the InnoDB Plugin.

trx_n_prepared: A new counter, counting the number of InnoDB
transactions in the PREPARED state.

logs_empty_and_mark_files_at_shutdown(): On shutdown, allow
trx_n_prepared transactions to exist in the system.

trx_undo_free_prepared(), trx_free_prepared(): New functions, to free
the memory objects of PREPARED transactions on shutdown. This is not
needed in the built-in InnoDB, because it would collect all allocated
memory on shutdown. The InnoDB Plugin needs this because of
innodb_use_sys_malloc.

trx_sys_close(): Invoke trx_free_prepared() on all remaining
transactions.
2011-04-07 21:12:54 +03:00
Vasil Dimov
e208984cf2 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-04-05 11:30:38 +03:00
Vasil Dimov
619f684f54 Add the testcase for Bug#59410 to 5.1/builtin
Bug#59410 read uncommitted: unlock row could not find a 3 mode lock
on the record

This bug is present only in 5.6 but I am adding the test case to earlier
versions to ensure it never appears in earlier versions too.
2011-04-05 11:08:36 +03:00
Vasil Dimov
1c6f766624 Merge mysql-5.5-innodb -> mysql-5.5 2011-04-04 09:12:11 +03:00
Bjorn Munch
95a76a3163 upmerge 11762804 2011-03-15 16:11:17 +01:00
Bjorn Munch
aa4bfebaee Bug #11762804 55442: MYSQLD DEBUG CRASHES WHILE RUNNING MYISAM_CRASH_BEFORE_FLUSH_KEYS.TEST
This will cause affected tests to skip if CrashReporter would popup
Found 5 tests that needed modification
2011-03-15 16:06:59 +01:00
kevin.lewis@oracle.com
4bd4f411c7 Bug#60196 / Bug#11831040
Test case cannot run on embedded server.
No need for precautionary cleanup of unique names.
2011-03-09 11:15:55 -06:00
kevin.lewis@oracle.com
d7aee58201 Fix test failure on case-sensitive file systems. 2011-03-08 09:04:13 -06:00
kevin.lewis@oracle.com
d072bb0d7f Bug#60196 / Bug#11831040
Setting lowercase_table_names to 2 on Windows causing Foreign Key problems

This problem was exposed by the fix for Bug#55222.  There was a codepath in dict0load.c,
dict_load_foreigns() that made sure the table name matched case sensitive in order to
load a referenced table into the dictionary as needed.  If an engine is rebooted which
accesses a table with foreign keys, and lower_case_table_names=2, then the table with
foreign keys will get an error when it is changed (insert/updated/delete).
Once the referenced tables are loaded into the dictionary cache by a select statement
on those tables, the same change would succeed because the affected code path would
not get followed.
2011-03-07 09:42:07 -06:00
Vasil Dimov
95d02c5c2d Merge mysql-5.5-innodb -> mysql-5.5 2011-02-18 14:57:50 +02:00
Marko Mäkelä
7e6f3517a0 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 22:27:56 +02:00
Marko Mäkelä
db55cf8526 Allow 30 seconds for slow shutdown in the Bug #60049 test. 2011-02-17 22:25:33 +02:00
Vasil Dimov
f19a4c0d76 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-02-17 19:14:41 +02:00
Vasil Dimov
60a8407231 Merge mysql-5.5-innodb -> mysql-5.5 2011-02-17 13:57:26 +02:00
Marko Mäkelä
778e700d1c Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-17 09:48:01 +02:00
Marko Mäkelä
e428f0ed9d Disable the Bug #60049 test on embedded, as it requires server restart. 2011-02-17 09:45:07 +02:00
Marko Mäkelä
11cbe8743b Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-16 15:41:46 +02:00
Marko Mäkelä
afda842f02 Make the implicit unpack parameter explicit in the Bug #60049 test. 2011-02-16 15:34:16 +02:00
Marko Mäkelä
cfc9176bce Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 12:18:15 +02:00
Marko Mäkelä
518a4440ea Add a test for suspected Bug#60049. 2011-02-15 12:12:27 +02:00
Marko Mäkelä
53cfea3911 Merge mysql-5.1-innodb to mysql-5.5-innodb. 2011-02-15 11:29:56 +02:00
Jimmy Yang
801d018411 Merge a fix for Bug #53756 ALTER TABLE ADD PRIMARY KEY affects crash recovery
This was already pushed to mysql-5.1-innodb some time ago
(revision id jimmy.yang@oracle.com-20100907054137-tpuior7hez4f5ghl)
but it was not merged to the 5.5 trees.
2011-02-10 00:58:23 -08:00
Vasil Dimov
54002d0a49 Merge mysql-5.5 -> mysql-5.5-innodb 2011-01-24 09:42:07 +02:00
Jimmy Yang
c4c90d912a Merge from mysql-5.1-innodb to mysql-5.5-innodb 2011-01-14 23:24:47 -08:00
Jimmy Yang
669ce69483 Fix Bug#30423 "InnoDBs treatment of NULL in index stats causes bad
"rows examined" estimates". This change implements "innodb_stats_method"
with options of "nulls_equal", "nulls_unequal" and "null_ignored".
      
rb://553 approved by Marko
2011-01-14 09:02:28 -08:00
Vasil Dimov
8c95b3c3d4 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2011-01-12 17:59:45 +02:00
Vasil Dimov
f6acea697e Suppress InnoDB warning about long semaphore wait if running under Valgrind
Sometimes Valgrind could be extremely slow and could trigger the InnoDB
diagnostic message making the test to fail.
2011-01-12 17:53:05 +02:00
Jonathan Perkin
d06e324e66 Merge from mysql-5.5.9-release 2011-02-08 14:59:03 +01:00
Georgi Kodinov
7fd0c36b7b merge 2011-01-10 15:09:57 +02:00
Vasil Dimov
1d3fd9d931 Merge mysql-5.5-innodb -> mysql-5.5 2011-01-08 17:00:48 +02:00
Matthias Leich
d09ed4e08c Fix for Bug#47745 innodb.innodb-timeout fails sporadically
- Second scenario checked:
  Ensure via wait routines that the commit comes after the
  processing of the statement which should get finally
  the ER_LOCK_WAIT_TIMEOUT
  --> This should prevent the current bug.
- First scenario checked:
  Ensure via wait routines that the statement is already waiting
  for getting the lock before the commit is given.
  --> No effect on the current bug, but ensure that the right
      scenario is reached.
- Take care that disconnects are finished before the test ends.
  --> Reduce the potential to harm succeeding tests.
- "Mangle" the printout of the current default innodb_lock_wait_timeout value
  --> No need to adjust the test in case the default gets changed in future.
2011-01-07 14:16:28 +01:00
Vasil Dimov
18e211279d Merge mysql-5.5-bugteam -> mysql-5.5-innodb 2010-12-27 19:24:05 +02:00
Vasil Dimov
90e38f3636 Merge mysql-5.1-bugteam -> mysql-5.1-innodb 2010-12-27 19:21:21 +02:00
Georgi Kodinov
457441bf1e merge 2010-12-23 12:40:40 +02:00
Marko Mäkelä
85d668b45c Merge mysql-5.1-innodb to mysql-5.5-innodb. 2010-12-21 14:05:10 +02:00
Bjorn Munch
b986ec32a0 new merge from 5.5 2010-12-20 12:56:02 +01:00
Georgi Kodinov
24a40d0b77 merge 2010-12-17 15:10:40 +02:00
Bjorn Munch
11746c8000 some more if stmt simplifications 2010-12-17 11:30:59 +01:00
Alexander Nozdrin
a72186103f Manual merge from mysql-5.5. 2010-12-16 21:43:21 +03:00
Vasil Dimov
f3501a3c44 Merge mysql-5.1-innodb -> mysql-5.5-innodb 2010-12-14 11:41:21 +02:00
Vasil Dimov
66c518dcef Speed up innodb_bug57255.test
Submitted by:	Stewart Smith (via internals@lists.mysql.com)
2010-12-14 11:38:19 +02:00
Sergey Glukhov
cd36a6a5d5 Fixed following problems:
--Bug#52157 various crashes and assertions with multi-table update, stored function
--Bug#54475 improper error handling causes cascading crashing failures in innodb/ndb
--Bug#57703 create view cause Assertion failed: 0, file .\item_subselect.cc, line 846
--Bug#57352 valgrind warnings when creating view
--Recently discovered problem when a nested materialized derived table is used
  before being populated and it leads to incorrect result

We have several modes when we should disable subquery evaluation.
The reasons for disabling are different. It could be
uselessness of the evaluation as in case of 'CREATE VIEW'
or 'PREPARE stmt', or we should disable subquery evaluation
if tables are not locked yet as it happens in bug#54475, or
too early evaluation of subqueries can lead to wrong result
as it happened in Bug#19077.
Main problem is that if subquery items are treated as const
they are evaluated in ::fix_fields(), ::fix_length_and_dec()
of the parental items as a lot of these methods have
Item::val_...() calls inside.
We have to make subqueries non-const to prevent unnecessary
subquery evaluation. At the moment we have different methods
for this. Here is a list of these modes:

1. PREPARE stmt;
We use UNCACHEABLE_PREPARE flag.
It is set during parsing in sql_parse.cc, mysql_new_select() for
each SELECT_LEX object and cleared at the end of PREPARE in
sql_prepare.cc, init_stmt_after_parse(). If this flag is set
subquery becomes non-const and evaluation does not happen.

2. CREATE|ALTER VIEW, SHOW CREATE VIEW, I_S tables which
   process FRM files
We use LEX::view_prepare_mode field. We set it before
view preparation and check this flag in
::fix_fields(), ::fix_length_and_dec().
Some bugs are fixed using this approach,
some are not(Bug#57352, Bug#57703). The problem here is
that we have a lot of ::fix_fields(), ::fix_length_and_dec()
where we use Item::val_...() calls for const items.

3. Derived tables with subquery = wrong result(Bug19077)
The reason of this bug is too early subquery evaluation.
It was fixed by adding Item::with_subselect field
The check of this field in appropriate places prevents
const item evaluation if the item have subquery.
The fix for Bug19077 fixes only the problem with
convert_constant_item() function and does not cover
other places(::fix_fields(), ::fix_length_and_dec() again)
where subqueries could be evaluated.

Example:
CREATE TABLE t1 (i INT, j BIGINT);
INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
SELECT * FROM (SELECT MIN(i) FROM t1
WHERE j = SUBSTRING('12', (SELECT * FROM (SELECT MIN(j) FROM t1) t2))) t3;
DROP TABLE t1;

4. Derived tables with subquery where subquery
   is evaluated before table locking(Bug#54475, Bug#52157)

Suggested solution is following:

-Introduce new field LEX::context_analysis_only with the following
 possible flags:
 #define CONTEXT_ANALYSIS_ONLY_PREPARE 1
 #define CONTEXT_ANALYSIS_ONLY_VIEW    2
 #define CONTEXT_ANALYSIS_ONLY_DERIVED 4
-Set/clean these flags when we perform
 context analysis operation
-Item_subselect::const_item() returns
 result depending on LEX::context_analysis_only.
 If context_analysis_only is set then we return
 FALSE that means that subquery is non-const.
 As all subquery types are wrapped by Item_subselect
 it allow as to make subquery non-const when
 it's necessary.
2010-12-14 12:33:03 +03:00
Sergey Glukhov
0e77c3295a Bug#39828 : Autoinc wraps around when offset and increment > 1
Auto increment value wraps when performing a bulk insert with
auto_increment_increment and auto_increment_offset greater than
one.
The fix:
If overflow happened then return MAX_ULONGLONG value as an
indication of overflow and check this before storing the
value into the field in update_auto_increment().
2010-12-13 14:48:12 +03:00
Sergey Glukhov
a2aa73d92a 5.1-bugteam->5.5-bugteam merge 2010-12-14 13:46:00 +03:00
Sergey Glukhov
92c303ced6 5.1-bugteam->5.5-bugteam merge 2010-12-13 15:11:16 +03:00
kevin.lewis@oracle.com
a53845ca45 Bug#55222 - RB://517 - Approved by Sunny
InnoDB does not attempt to handle lower_case_table_names == 2 when looking
up foreign table names and referenced table name.  It turned that server
variable into a boolean and ignored the possibility of it being '2'.  

The setting lower_case_table_names == 2 means that it should be stored and
displayed in mixed case as given, but compared internally in lower case.
Normally the server deals with this since it stores table names.  But
InnoDB stores referential constraints for the server, so it needs to keep
track of both lower case and given names.

This solution creates two table name pointers for each foreign and referenced
table name.  One to display the name, and one to look it up.  Both pointers
point to the same allocated string unless this setting is 2.  So the overhead
added is not too much.

Two functions are created in dict0mem.c to populate the ..._lookup versions
of these pointers.  Both dict_mem_foreign_table_name_lookup_set() and
dict_mem_referenced_table_name_lookup_set() are called 5 times each.
2010-11-30 12:25:52 -06:00
Sunny Bains
e07c6806a3 Merge from mysql-5.1-security to mysql-5.5-security. 2010-11-30 21:44:06 +11:00
Vasil Dimov
ab710966a5 Merge mysql-5.5-bugteam -> mysql-5.5-innodb 2010-11-29 09:08:23 +02:00