Commit graph

54720 commits

Author SHA1 Message Date
Marc Alff
9b619d2d49 Bug#38296 (low memory crash with many conditions in a query)
This fix is for 5.1 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-12 17:05:19 -06:00
Davi Arnaut
cd4f9115f6 Merge and fix tree name. 2008-08-12 17:08:19 -03:00
Davi Arnaut
084a2c94f4 Merge and fix tree name. 2008-08-12 16:52:52 -03:00
Davi Arnaut
b9a9ae561a Merge mysql-5.0-bugteam into mysql-5.0 2008-08-12 15:51:00 -03:00
Mattias Jonsson
b3cac2e422 merge 2008-08-12 17:45:51 +02:00
Davi Arnaut
0be4d2c0df Merge mysql-5.1-bugteam into mysql-5.1 main. 2008-08-12 11:28:43 -03:00
Mattias Jonsson
f84bf0077d manual merge of bug#37402 2008-08-12 12:26:23 +02:00
He Zhenxing
87b43cf0df Apply tomas's patch to fix rpl_row_basic.test, this can fix BUG#37884,
BUG#38369, enable rpl_row_basic_7ndb test
2008-08-12 17:09:36 +08:00
Mattias Jonsson
4cb12690c7 Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
partition is corrupt

Updated result files after merge
2008-08-12 10:02:30 +02:00
Davi Arnaut
f4313a4d2d Merge mysql-5.0-bugteam into mysql-5.1-bugteam 2008-08-11 21:27:17 -03:00
Davi Arnaut
d5620961a6 Bug#38486: Crash when using cursor protocol
Post-merge fix: mysql_client_test.c is compiled by C compilers
and some C compilers don't support mixed declarations and code
and it's explicitly forbidden by ISO C90.
2008-08-11 20:27:09 -03: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
fd324dd3ff Bug#37302 (missing DBUG_RETURN macro in function "find_key_block" (5.0 only))
Fixed missing DBUG_RETURN in the function find_key_block
2008-08-11 15:08:12 -06:00
Mattias Jonsson
1e73141b65 manual merge of Bug#20129 into 5.1-bugteam 2008-08-11 20:06:08 +02:00
Mattias Jonsson
07e9a6dc2a 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
2008-08-11 20:02:03 +02:00
Chad MILLER
318d288a34 Merge from bugteam 5.0 trunk. 2008-08-11 13:56:54 -04: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
Chad MILLER
cf43a69a39 null-merge of backported changes. 2008-08-11 11:30:29 -04:00
Chad MILLER
fe39a901bb Backport compiler warning fix from 5.1-bugteam. 2008-08-11 11:28:35 -04:00
Mattias Jonsson
854e230707 merge into an updated 5.1-bugteam tree 2008-08-11 16:15:39 +02:00
Davi Arnaut
44a162597f Post-merge fix: Remove Remove unused variable. 2008-08-11 10:13:12 -03:00
Davi Arnaut
bafa07b2c4 Post-merge fix: Silence warning due to type mismatch. 2008-08-11 10:08:21 -03:00
Narayanan V
eaeef49954 WL#4380
Added a comment to the abi_check related
part of configure.in
2008-08-11 16:55:09 +05:30
Kristofer Pettersson
f9e90f188b Null merging 5.0->5.1; Changeset is a back port. 2008-08-11 13:06:16 +02: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
Narayanan V
c5095f77f8 WL#4380
1) Disabled abi_check rule for all compilers except gcc
2) restored the -dI option to retain the header information.
2008-08-08 14:30:05 +05:30
Timothy Smith
8ddc42db21 Up-merge test case for bug 35220 from 5.0 (no real code changes). 2008-08-07 18:33:12 -06:00
Timothy Smith
4ea036f4cb Cherry-pick fix for Bug#35220 from innodb-5.0-ss2475 snapshot.
Bug#35220: ALTER TABLE too picky on reserved word "foreign"

In ALTER TABLE, change the internal parser to search for
``FOREIGN[[:space:]]'' instead of only ``FOREIGN'' when parsing
ALTER TABLE ... DROP FOREIGN KEY ...; otherwise it could be mistaken
with ALTER TABLE ... DROP foreign_col;

(This fix is already present in MySQL 5.1 and higher.)
2008-08-07 18:25:24 -06:00
Chad MILLER
42d878ab29 Merge from bugteam trunk. 2008-08-07 18:08:31 -04:00
Chad MILLER
01aa0a0cd9 merge from local 5.0 fix tree. 2008-08-07 16:27:05 -04:00
Chad MILLER
6c93f05a66 Bug#31605: mysql_upgrade relies on Linux /proc filesystem when not \
running on Windows

We used two OS-specific methods of looking up the executable 
name, which don't work outside of those two kinds of OSes 
(Linux+Solaris and Windows).

We assume that if the user ran this program with a certain 
name, we can run the other sibling programs with a similar name.

(re-patch in bzr)
2008-08-07 12:24:39 -04: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
Chad MILLER
297593c5d3 Better fix of build-tags, merged from local 5.0-bugteam . 2008-08-06 16:45:15 -04:00
Chad MILLER
b94519a154 Bug#37201: make tags doesn't work in bazaar server trees
Fall back to "find" if bzr is unavailable.

Don't fail for paths that have spaces in them.
2008-08-06 16:25:25 -04:00
Chad MILLER
17badbd9a5 Merge from local 5.0-bugteam. 2008-08-06 15:29:41 -04:00
Chad MILLER
15beb38f9f Bug#37201: make tags doesn't work in bazaar server trees
bk sfiles -> bzr ls
2008-08-06 15:27:28 -04:00
Narayanan V
a9775e8507 WL#4380
1) Remove solaris sparc specific output produced by the
   pre-processor in the .out files
2) Ensure compatibility of preprocessor options for solaris/sparc
   platform.
2008-08-06 23:43:37 +05:30
Kristofer Pettersson
6b2bd29ac8 Manual merge 5.0->5.1 2008-08-06 16:20:41 +02:00
Sven Sandberg
2c6d9c62ca merged 5.1 main -> 5.1-rpl-testfixes
all files automerged without conflict
2008-08-06 15:49:03 +02:00
Chad MILLER
a308c9e3fa Bug#30129: mysql_install_db appears to run normally, but the databases \
are not created  {Netware}

The init and test sql files were not created at cross-compilation time.

Now, make them in the default build rule.  Additionally, remove the "fix" 
SQL instructions, which are unnecessary for newly initialized databases.
Also, clean up the english in an error message, and BZRify nwbootstrap.
2008-08-06 09:25:03 -04:00
Kristofer Pettersson
27a17b251d automerge 2008-08-04 14:37:28 +02:00
Davi Arnaut
9f550e6fbd Bug#37003: Tests sporadically crashes with embedded server
Post-merge fix: Alter linking order so that the thread linking
flags appear last in the list. This needs to be done this way
because some linkers will not search the thread archive again
if a undefined symbol (pthread_kill in this case) appears later.
2008-08-01 12:10:06 -03:00
Timothy Smith
004c642880 NULL MERGE of innodb-5.0-ss2475 snapshot cherry-pick (bugs: 34286, 35352, 36600)
These changes, where applicable, are available in 5.1-specific snapshots for MySQL 5.1+.
2008-07-31 16:39:03 -06:00
Timothy Smith
021d7d72f8 Cherry-pick InnoDB fixes for Bug#34286, Bug#35352, and Bug#36600 from snapshot
innodb-5.0-ss2475.

Bug #34286  Assertion failure in thread 2816 in file .\row\row0sel.c line 3500
Since autoinc init performs a MySQL SELECT query to determine the auto-inc
value, set prebuilt->sql_stat_start = TRUE so that it is performed like any
normal SELECT, regardless of the context in which it was invoked.


Bug #35352  If InnoDB crashes with UNDO slots full error the error persists on restart
We've added a heuristic that checks the size of the UNDO slots cache lists
(insert and upate). If either of cached lists has more than 500 entries then we
add any UNDO slots that are freed, to the common free list instead of the cache
list, this is to avoid the case where all the free slots end up in only one of
the lists on startup after a crash.

Tested with test case for 26590 and passes all mysql-test(s).

Bug #36600  SHOW STATUS takes a lot of CPU in buf_get_latched_pages_number
Fixed by removing the Innodb_buffer_pool_pages_latched variable from SHOW
STATUS output in non-UNIV_DEBUG compilation.
2008-07-31 15:47:57 -06:00
Narayanan V
10aa617276 merging mysql-5.1 -> mysql-5.1-sea 2008-07-31 16:59:41 +05:30
Georgi Kodinov
3d215551bb merged 34159 and 37662 5.0-bugteam->5.1-bugteam 2008-07-31 12:50:24 +03:00
Georgi Kodinov
a0768d32c2 Bug#34159: mysql_install_db fails with sql_mode=TRADITIONAL
Reset session sql_mode before creating system tables as it
is done in the mysql_fix_privilege_tables.sql script.
2008-07-31 12:28:04 +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