Commit graph

24387 commits

Author SHA1 Message Date
He Zhenxing
84187687d3 auto merge 2008-08-14 14:47:48 +08:00
He Zhenxing
316e463cc5 BUG#38290 valgrind warnings in binlog_base64_flag
The problem was because the event allocated in mysql_client_binlog_statement
was not freed when an error occured while applying the event.
2008-08-14 10:42:10 +08:00
Marc Alff
385b4bf7ff Manual merge of mysql-5.0-bugteam -> mysql-5.1-bugteam
Note: NULL merge of sql/sql_yacc.yy, the fix for bug#38296 will be provided separately for 5.1
2008-08-11 16:44:13 -06:00
Marc Alff
e087c05d3d Merge mysql-5.0-bugteam -> local bugfix branch 2008-08-11 15:21:29 -06:00
Marc Alff
394691cd90 Bug#38296 (low memory crash with many conditions in a query)
This fix is for 5.0 only : back porting the 6.0 patch manually

The parser code in sql/sql_yacc.yy needs to be more robust to out of
memory conditions, so that when parsing a query fails due to OOM,
the thread gracefully returns an error.

Before this fix, a new/alloc returning NULL could:
- cause a crash, if dereferencing the NULL pointer,
- produce a corrupted parsed tree, containing NULL nodes,
- alter the semantic of a query, by silently dropping token values or nodes

With this fix:
- C++ constructors are *not* executed with a NULL "this" pointer
when operator new fails.
This is achieved by declaring "operator new" with a "throw ()" clause,
so that a failed new gracefully returns NULL on OOM conditions.

- calls to new/alloc are tested for a NULL result,

- The thread diagnostic area is set to an error status when OOM occurs.
This ensures that a request failing in the server properly returns an
ER_OUT_OF_RESOURCES error to the client.

- OOM conditions cause the parser to stop immediately (MYSQL_YYABORT).
This prevents causing further crashes when using a partially built parsed
tree in further rules in the parser.

No test scripts are provided, since automating OOM failures is not
instrumented in the server.
Tested under the debugger, to verify that an error in alloc_root cause the
thread to returns gracefully all the way to the client application, with
an ER_OUT_OF_RESOURCES error.
2008-08-11 10:10:00 -06:00
Kristofer Pettersson
a3b0b7bbdb Automerge 2008-08-11 13:00:48 +02:00
Kristofer Pettersson
9fc39adfda Bug#38486 Crash when using cursor protocol
Server side cursors were not initialized properly and this caused a reference to
uninitialized memory.
2008-08-11 11:40:54 +02:00
Davi Arnaut
e01cac7d89 Bug#21226 FLUSH PRIVILEGES does not provided feedback when it fails.
Post-merge fix: remove spurious semicolon that caused the function
to return failure regardless of the outcome.
2008-08-06 23:23:58 -03:00
Kristofer Pettersson
6b2bd29ac8 Manual merge 5.0->5.1 2008-08-06 16:20:41 +02:00
Kristofer Pettersson
27a17b251d automerge 2008-08-04 14:37:28 +02:00
Georgi Kodinov
3d215551bb merged 34159 and 37662 5.0-bugteam->5.1-bugteam 2008-07-31 12:50:24 +03:00
Georgi Kodinov
425abb4904 Bug#37662 nested if() inside sum() is parsed in exponential time
min() and max() functions are implemented in MySQL as macros.
This means that max(a,b) is expanded to: ((a) > (b) ? (a) : (b))
Note how 'a' is quoted two times.
Now imagine 'a' is a recursive function call that's several 10s of levels deep.
And the recursive function does max() with a function arg as well to dive into
recursion.
This means that simple function call can take most of the clock time.
Identified and fixed several such calls to max()/min() : including the IF() 
sql function implementation.
2008-07-30 14:07:37 +03:00
Kristofer Pettersson
7b244002a3 Bug#29738 Error message not properly translated to Serbian
Community contribution fix for Serbian translation in error message list.
2008-07-29 15:58:15 +02:00
Kristofer Pettersson
d298e107f7 Bug#37781 mysql_drop_user calls get_current_user() twice for no reason
Fixed typo and removed duplicate call to get_current_user.
2008-07-29 15:37:09 +02:00
Kristofer Pettersson
6033db3671 auto merge 2008-07-29 15:15:04 +02:00
Igor Babaev
47cd6462fd Merge 2008-07-28 01:24:56 -07:00
Igor Babaev
da156dde08 Fixed bug #38191.
Calling List<Cached_item>::delete_elements for the same list twice
caused a crash of the server in the function JOIN::cleaunup.
Ensured that delete_elements() in JOIN::cleanup would be called only once.
2008-07-26 13:44:07 -07:00
Kristofer Pettersson
5c1f8d1836 Bug#38002 table_cache consumes too much memory with blobs
Tables in the table definition cache are keeping a cache buffer for blob
fields which can consume a lot of memory.
    
This patch introduces a maximum size threshold for these buffers.
2008-07-24 22:38:44 +02:00
Davi Arnaut
8ce74569f7 Cherry-pick Bug#33362 from mysql-5.1 2008-07-24 11:14:34 -03:00
Georgi Kodinov
436f1dc49c Bug#37830 : ORDER BY ASC/DESC - no difference
Range scan in descending order for c <= <col> <= c type of
ranges was ignoring the DESC flag.
However some engines like InnoDB have the primary key parts 
as a suffix for every secondary key.
When such primary key suffix is used for ordering ignoring 
the DESC is not valid.
But we generally would like to do this because it's faster.
            
Fixed by performing only reverse scan if the primary key is used.
Removed some dead code in the process.
2008-07-23 14:25:00 +03:00
Davi Arnaut
58daa8d50a Silence warning due to unused function. 2008-07-22 14:53:36 -03:00
Sergei Golubchik
821683a19c merge 2008-07-22 16:42:03 +02:00
Kristofer Pettersson
9d83bfb469 merge 5.1->5.1-bugteam 2008-07-22 12:56:36 +02:00
Kristofer Pettersson
de4d31f2ac 2008-07-22 12:41:55 +02:00
Kristofer Pettersson
f5668bc865 Corrected merge misstake. 2008-07-21 16:41:17 +02:00
Kristofer Pettersson
3f332ceae5 Auto merge 2008-07-21 14:00:13 +02:00
Kristofer Pettersson
df89855e70 Auto merge 2008-07-21 12:24:31 +02:00
Kristofer Pettersson
71930db28f Bug#37027 expire_logs_days and missing binlogs cause a crash !
If the server failed to expired log files during start up it could crash.
2008-07-24 14:28:21 +02:00
Sergei Golubchik
50e23ee8ee Bug#34409 LOCK_plugin contention via ha_release_temporary_latches/plugin_foreach
use thread-local data structures in ha_release_temporary_latches()
2008-07-21 12:01:22 +02:00
Kristofer Pettersson
d8eb66127b Manual merge 2008-07-21 11:18:35 +02:00
Sergey Petrunia
19e2ed7642 Automerge 2008-07-17 22:28:42 +04:00
Sergey Petrunia
6cac08bcfb Merge BUG#35478 into mysql-5.1-bugteam 2008-07-17 22:26:55 +04:00
Sergey Petrunia
e8a5662ea9 Automerged 2008-07-17 20:22:39 +04:00
Georgi Kodinov
7f16afccfb merge of bug #37830 to 5.1 2008-07-17 18:51:24 +03:00
Georgi Kodinov
5dfdccab24 Folow-up on Bug#37069: fix a valgrind warning
Don't initalize federated if it's disabled by a command line option.
2008-07-17 17:33:41 +03:00
Georgi Kodinov
66d12592cb auto merged 5.0-bugteam to /Users/kgeorge/B37830-5.0-bugteam 2008-07-17 15:14:35 +03:00
Kristofer Pettersson
e84c8815fa Reverting patch for bug30087 2008-07-17 11:31:22 +02:00
Marc Alff
b8579849f3 Bug#30087 Set query_cache_size, if the value is too small, get a unclear warning
Reverting the previous patch
2008-07-16 16:29:22 -06:00
Kristofer Pettersson
8857b3b716 Auto merged 2008-07-16 16:12:20 +02:00
Kristofer Pettersson
00149f36a5 merge 2008-07-16 14:34:54 +02:00
Georgi Kodinov
59ab9a0872 Bug#37830 : ORDER BY ASC/DESC - no difference
Range scan in descending order for c <= <col> <= c type of
ranges was ignoring the DESC flag.
However some engines like InnoDB have the primary key parts 
as a suffix for every secondary key.
When such primary key suffix is used for ordering ignoring 
the DESC is not valid.
But we generally would like to do this because it's faster.
      
Fixed by performing only reverse scan if the primary key is used.
Removed some dead code in the process.
2008-07-16 12:31:50 +03:00
Sergey Petrunia
63bfaa4634 Merge 2008-07-15 21:49:28 +04:00
Sergey Petrunia
eb8d8d3e3a Merge fix for BUG#35478 into 5.1 2008-07-15 21:46:02 +04:00
Kristofer Pettersson
44b4479541 auto merge 2008-07-15 17:29:26 +02:00
Sergey Petrunia
2951f00be4 BUG#35478: sort_union() returns bad data when sort_buffer_size is hit
- In QUICK_INDEX_MERGE_SELECT::read_keys_and_merge: when we got table->sort from Unique,
  tell init_read_record() not to use rr_from_cache() because a) rowids are already sorted
  and b) it might be that the the data is used by filesort(), which will need record rowids
  (which rr_from_cache() cannot provide).
- Fully de-initialize the table->sort read in QUICK_INDEX_MERGE_SELECT::get_next(). This fixes BUG#35477.
(bk trigger: file as fix for BUG#35478).
2008-07-15 18:13:21 +04:00
Gleb Shchepa
47cf24a166 merge from local tree to 5.1-bugteam 2008-07-15 17:15:11 +05:00
Gleb Shchepa
2f207e4a34 after-push patch: partial rollback of bug #37761 fix.
Note: item->null_value is not updated before a call to
item->store(), item->is_null() is not too (in common case).
2008-07-15 17:12:08 +05:00
Marc Alff
566e3389c2 Bug#35577, manual merge mysql-5.0-bugteam -> mysql-5.1-bugteam 2008-07-14 19:43:12 -06:00
Marc Alff
504f7e2d0f Merge 2008-07-14 15:47:34 -06:00
Marc Alff
0816ee6d34 Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)

The crash was caused by freeing the internal parser stack during the parser
execution.
This occured only for complex stored procedures, after reallocating the parser
stack using my_yyoverflow(), with the following C call stack:
- MYSQLparse()
- any rule calling sp_head::restore_lex()
- lex_end()
- x_free(lex->yacc_yyss), xfree(lex->yacc_yyvs)

The root cause is the implementation of stored procedures, which breaks the
assumption from 4.1 that there is only one LEX structure per parser call.

The solution is to separate the LEX structure into:
- attributes that represent a statement (the current LEX structure),
- attributes that relate to the syntax parser itself (Yacc_state),
so that parsing multiple statements in stored programs can create multiple
LEX structures while not changing the unique Yacc_state.

Now, Yacc_state and the existing Lex_input_stream are aggregated into
Parser_state, a structure that represent the complete state of the (Lexical +
Syntax) parser.
2008-07-14 15:41:30 -06:00