Commit graph

40224 commits

Author SHA1 Message Date
Evgeny Potemkin
1db3a684e2 Bug#48508: Crash on prepared statement re-execution.
Actually there is two different bugs.
The first one caused crash on queries with WHERE condition over views
containing WHERE condition. A wrong check for prepared statement phase led
to items for view fields being allocated in the execution memory and freed
at the end of execution. Thus the optimized WHERE condition refers to
unallocated memory on the second execution and server crashed.
The second one caused by the Item_cond::compile function not saving changes
it made to the item tree. Thus on the next execution changes weren't
reverted and server crashed on dereferencing of unallocated space.

The new helper function called is_stmt_prepare_or_first_stmt_execute
is added to the Query_arena class.
The find_field_in_view function now uses
is_stmt_prepare_or_first_stmt_execute() to check whether
newly created view items should be freed at the end of the query execution.
The Item_cond::compile function now saves changes it makes to item tree.
2009-12-01 21:28:45 +03:00
Alexey Kopytov
cba6be7135 Automerge. 2009-11-23 13:05:35 +03:00
Georgi Kodinov
8a69ff07f4 merge 2009-11-20 15:38:21 +02:00
Georgi Kodinov
6b3b2c0cd4 Bug#48864: MySQL fails to compile on 64 bit Fedora 12
Fixed 2 errors in comp_err executable : 
1. Wrong (off by 1) length passed to my_checksum()
2. strmov() was used on overlapping strings. This is
 not legal according to the docs in stpcpy(). Used 
the overlap safe memmove() instead.
2009-11-18 17:24:10 +02:00
Kent Boortz
7f0a3d092e Include the "mysql-test/collections" directory when creating windows ZIP archive 2009-11-17 17:49:24 +01:00
Alexey Kopytov
7f2ba28ef9 Bug #48472: Loose index scan inappropriately chosen for some
WHERE conditions 
 
check_group_min_max() checks if the loose index scan 
optimization is applicable for a given WHERE condition, that is 
if the MIN/MAX attribute participates only in range predicates 
comparing the corresponding field with constants. 
 
The problem was that it considered the whole predicate suitable 
for the loose index scan optimization as soon as it encountered 
a constant as a predicate argument. This is obviously wrong for 
cases when a constant is the first argument of a predicate 
which does not satisfy the above condition. 
 
Fixed check_group_min_max() so that all arguments of the input 
predicate are considered to decide if it passes the test, even 
though a constant has already been encountered.
2009-11-17 17:07:14 +03:00
Alexey Kopytov
e9856e6685 Automerge. 2009-11-12 20:13:08 +03:00
Alexey Kopytov
a5280036a9 Fixed a gcc warning introduced by the patch for bug #48475. 2009-11-12 20:11:33 +03:00
hery.ramilison@sun.com
59951b113f Raise version number after cloning 5.0.88 2009-11-09 19:22:35 +01:00
Georgi Kodinov
48c67b2ca0 Bug #48458: simple query tries to allocate enormous amount of
memory

The server was doing a bad class typecast causing setting of 
wrong value for the maximum number of items in an internal
structure used in equality propagation.
Fixed by not doing the wrong typecast and asserting the type
of the Item where it should be done.
2009-11-09 16:09:46 +02:00
Georgi Kodinov
154c348031 Bug #42760: Select doesn't return desired results when we have null
values
 
 We should re-set the access method functions when changing the access
 method when switching to another index to avoid sorting.
 
 Fixed by doing a little re-engineering : encapsulating all the function
 assignment into a special function and calling it when flipping the 
 indexes.
2009-11-10 10:21:41 +02:00
Alexey Kopytov
5d725601a8 Automerge. 2009-11-06 17:56:51 +03:00
Alexey Kopytov
9fff9acf0c Bug #48475: DISTINCT is ignored with GROUP BY WITH ROLLUP and
only const tables

The problem was caused by two shortcuts in the optimizer that
are inapplicable in the ROLLUP case.

Normally in a case when only const tables are involved in a
query, DISTINCT clause can be safely optimized away since there
may be only one row produced by the join. Similarly, we don't
need to create a temporary table to resolve DISTINCT/GROUP
BY/ORDER BY. Both of these are inapplicable when the WITH
ROLLUP modifier is present.

Fixed by disabling the said optimizations for the WITH ROLLUP
case.
2009-11-06 09:44:01 +03:00
Timothy Smith
377c1dc584 auto-merge 2009-11-04 16:06:49 -07:00
Timothy Smith
6d79f4a1e1 Fix for Bug#40700: aclocal warnings for missing cache-id's
Just change mysql_foo to mysql_cv_foo for one cache-id variable name.  There
was only one bad variable name, present in 5.0 and 5.1, but not in the -pe
branch.
2009-11-04 15:34:42 -07:00
Timothy Smith
9a95a85c39 auto-merge 2009-11-04 14:08:31 -07:00
Georgi Kodinov
721d739086 version change 2009-11-04 11:13:55 +02:00
Georgi Kodinov
10ef8dd191 Disabled the rpl_killed_ddl test in 5.0 because of bug #45520 2009-11-04 11:13:22 +02:00
Timothy Smith
3fbed5522a Add a few comments to clarify do_query() return values in mysql_secure_installation.pl 2009-11-03 14:34:01 -07:00
Timothy Smith
3aff1e9570 Bug#48031: mysql_secure_installation -- bash bug regarding passwords with
special chars

This script failed when the user tried passwords with multiple spaces, \, # or
' characters.  Now proper escaping and quoting is used in all contexts.

This problem occurs in the Perl version of this script, too, so fix it in both
places.
2009-11-03 13:50:28 -07:00
Timothy Smith
9e7cd0fbeb Bug#48086: mysql_secure_installation does NOT work on Solaris
Remove a bash-ism (if ! ...).
2009-11-03 13:32:12 -07:00
Davi Arnaut
fc55339e2f Fix compiler warnings -- tag unused parameters. 2009-11-03 16:17:06 -02:00
Konstantin Osipov
d2babeaf3a A fix and a test case for
Bug#41756 "Strange error messages about locks from InnoDB".

In JT_EQ_REF (join_read_key()) access method,
don't try to unlock rows in the handler, unless certain that
a) they were locked
b) they are not used.

Unlocking of rows is done by the logic of the nested join loop,
and is unaware of the possible caching that the access method may
have. This could lead to double unlocking, when a row
was unlocked first after reading into the cache, and then
when taken from cache, as well as to unlocking of rows which
were actually used (but taken from cache).

Delegate part of the unlocking logic to the access method,
and in JT_EQ_REF count how many times a record was actually
used in the join. Unlock it only if it's usage count is 0.

Implemented review comments.
2009-11-03 19:58:54 +03:00
133bfc7fdb BUG#48216 Replication fails on all slaves after upgrade to 5.0.86 on master
When a sessione is closed, all temporary tables of the session are automatically 
dropped and are binlogged. But it will be binlogged with wrong database names when
the length of the temporary tables' database names are greater than the 
length of the current database name or the current database is not set.

Query_log_event's db_len is forgot to set when Query_log_event's db is set.
This patch wrote code to set db_len immediately after db has set.
2009-11-03 17:00:41 +08:00
Davi Arnaut
9a431db024 Bug#44952: Ndbd file system inconsistency error
Backport a ndb patch: fix bug with crash during restart, where
a mbyte incorrectly could be skipped, leading to "end of log
wo/ finding gci".
2009-11-02 18:10:21 -02:00
Timothy Smith
61973d671f Bug#35106: mysql_secure_installation fails on Windows, missing "use
Term::ReadKey"

Add the missing module import.  Also, while here, fix a few glaring problems
with the script, and ensure that it behaves properly.  It seems this script
may have never been working correctly (e.g., reading password didn't chomp()
the result, so password was set with \n at the end; comparing the re-typed
password to original was done with inverted test).

Add END { cleanup(); } block to ensure the script removes temporary working
files.

Add SIG{INT} / SIG{QUIT} handler.

Do a bit of reorganization to make the code easier to understand.

Limit failed connection attempts to 3.

Use ./bin/mysql if it exists, and then fall back on mysql in PATH (before it
assumed 'mysql' in the path).  Print a nicer error if 'mysql' can't be called.

This has been tested on Windows (ActivePerl from cmd.exe, no cygwin needed)
and Linux.
2009-10-30 14:28:33 -06:00
Alexey Kopytov
406e680b25 Automerge. 2009-10-30 19:16:25 +03:00
Alexey Kopytov
23b05d0002 Bug #48131: crash group by with rollup, distinct, filesort,
with temporary tables

There were two problems the test case from this bug was
triggering:

1. JOIN::rollup_init() was supposed to wrap all constant Items
into another object for queries with the WITH ROLLUP modifier
to ensure they are never considered as constants and therefore
are written into temporary tables if the optimizer chooses to
employ them for DISTINCT/GROUP BY handling.

However, JOIN::rollup_init() was called before
make_join_statistics(), so Items corresponding to fields in
const tables could not be handled as intended, which was
causing all kinds of problems later in the query execution. In
particular, create_tmp_table() assumed all constant items
except "hidden" ones to be removed earlier by remove_const()
which led to improperly initialized Field objects for the
temporary table being created. This is what was causing crashes
and valgrind errors in storage engines.

2. Even when the above problem had been fixed, the query from
the test case produced incorrect results due to some
DISTINCT/GROUP BY optimizations being performed by the
optimizer that are inapplicable in the WITH ROLLUP case.

Fixed by disabling inapplicable DISTINCT/GROUP BY optimizations
when the WITH ROLLUP modifier is present, and splitting the
const-wrapping part of JOIN::rollup_init() into a separate
method which is now invoked after make_join_statistics() when
the const tables are already known.
2009-10-30 18:54:53 +03:00
Georgi Kodinov
ea412fc2e0 merge from 5.0-main 2009-10-30 16:34:54 +02:00
Georgi Kodinov
a0bea5eeb1 Bug #48291 : crash with row() operator,select into @var, and
subquery returning multiple rows

Error handling was missing when handling subqueires in WHERE 
and when assigning a SELECT result to a @variable.
This caused crash(es). 

Fixed by adding error handling code to both the WHERE 
condition evaluation and to assignment to an @variable.
2009-10-30 15:15:43 +02:00
Georgi Kodinov
7ba875d6e6 Bug #48293: crash with procedure analyse, view with > 10 columns,
having clause...

The fix for bug 46184 was not very complete. It was not covering
views using temporary tables and multiple tables in a FROM clause.
Fixed by reverting the fix for 46184 and making a more general
check that is checking at the right execution stage and for all
of the non-supported cases.
Now PROCEDURE ANALYZE on non-top level SELECT is also forbidden.
Updated the analyse.test and subselect.test accordingly.
2009-10-30 11:40:44 +02:00
Georgi Kodinov
1d8cceae2b Bug #42116 : Mysql crash on specific query
Queries with nested outer joins may lead to crashes or 
bad results because an internal data structure is not handled
correctly.
The optimizer uses bitmaps of nested JOINs to determine
if certain table can be placed at a certain place in the
JOIN order.
It does maintain a bitmap describing in which JOINs 
last placed table is nested.
When it puts a table it makes sure the bit of every JOIN that
contains the table in question is set (because JOINs can be nested).
It does that by recursively setting the bit for the next enclosing
JOIN when this is the first table in the JOIN and recursively 
resetting the bit if it's the last table in the JOIN.
When it removes a table from the join order it should do the
opposite : recursively unset the bit if it's the only remaining 
table in this join and and recursively set the bit if it's removing
the last table of a JOIN.
There was an error in how the bits was set for the upper levels :
when removing a table it was setting the bit for all the enclosing 
nested JOINs even if there were more tables left in the current JOIN
(which practically means that the upper nested JOINs were not affected).
Fixed by stopping the recursion at the relevant level.
2009-10-29 17:24:29 +02:00
Sergey Glukhov
c1a298d0a4 Bug#41049 does syntax "grant" case insensitive?
test result fix
2009-10-28 13:15:33 +04:00
Georgi Kodinov
95dce2b033 merge from 4.1 2009-10-27 15:11:06 +02:00
Sergey Glukhov
80b79baec0 automerge 2009-10-27 15:02:58 +04:00
Sergey Vojtovich
cf41b43b8e An addition to fix for
BUG#41597 - After rename of user, there are additional grants
            when grants are reapplied.

Fixed build failure on Windows. Added missing cast.
2009-10-27 12:37:57 +04:00
Sergey Glukhov
58b7761ed8 Bug#41049 does syntax "grant" case insensitive?
Problem 1:
column_priv_hash uses utf8_general_ci collation
for the key comparison. The key consists of user name,
db name and table name. Thus user with privileges on table t1
is able to perform the same operation on T1
(the similar situation with user name & db name, see acl_cache).
So collation which is used for column_priv_hash and acl_cache
should be case sensitive.
The fix:
replace system_charset_info with my_charset_utf8_bin for
column_priv_hash and acl_cache
Problem 2:
The same situation with proc_priv_hash, func_priv_hash,
the only difference is that Routine name is case insensitive.
So the fix is to use my_charset_utf8_bin for
proc_priv_hash & func_priv_hash and convert routine name into lower
case before writing the element into the hash and
before looking up the key.
Additional fix: mysql.procs_priv Routine_name field collation
is changed to utf8_general_ci.
It's necessary for REVOKE command
(to find a field by routine hash element values).
Note: 
It's safe for lower-case-table-names mode too because
db name & table name are converted into lower case
(see GRANT_NAME::GRANT_NAME).
2009-10-27 12:09:19 +04:00
karen.langford@sun.com
8f27f46c1a Merge from mysql-5.0.87-release 2009-10-26 19:20:02 +01:00
Georgi Kodinov
dd02c4a12b Bug #47780: crash when comparing GIS items from subquery
If the first argument to GeomFromWKB function is a geometry
field then the function just returns its value.
However in doing so it's not preserving first argument's 
null_value flag and this causes unexpected null value to
be returned to the calling function.
      
Fixed by updating the null_value of the GeomFromWKB function
in such cases (and all other cases that return a NULL e.g.
because of not enough memory for the return buffer).
2009-10-21 11:43:45 +03:00
Ramil Kalimullin
24885e815f Fix for bug#48258: Assertion failed when using a spatial index
Problem: involving a spatial index for "non-spatial" queries
(that don't containt MBRXXX() functions) may lead to failed assert.

Fix: don't use spatial indexes in such cases.
2009-10-23 16:26:48 +05:00
Ramil Kalimullin
256e3ec03b Fix for bug#47019: Assertion failed: 0, file .\rt_mbr.c,
line 138 when forcing a spatial index

Problem: "Spatial indexes can be involved in the search 
for queries that use a function such as MBRContains() 
or MBRWithin() in the WHERE clause".
Using spatial indexes for JOINs with =, <=> etc.
predicates is incorrect.

Fix: disable spatial indexes for such queries.
2009-10-21 14:04:08 +05:00
Tatiana A. Nurnberg
6af83cbc31 auto-merge 2009-10-20 20:38:56 -07:00
Georgi Kodinov
90d32d8bc8 Bug #47320: OpenSSL client does not check YaSSL server certificate
Removed the verify callback, as it's not needed to verify even self
signed certificates and is a security problem.
2009-10-20 13:09:16 +03:00
Satya B
607abec50a merge to mysql-5.0-bugteam 2009-10-20 12:21:58 +05:30
Satya B
b2cd0a0f15 Fix for Bug #41597 - After rename of user, there are additional grants when
grants are reapplied.


After renaming a user and trying to re-apply grants results in additional
grants.

This is because we use username as part of the key for GRANT_TABLE structure.
When the user is renamed, we only change the username stored and the hash key
still contains the old user name and this results in the extra privileges

Fixed by rebuilding the hash key and updating the column_priv_hash structure
when the user is renamed
2009-10-20 11:47:57 +05:30
Tatiana A. Nurnberg
3f42e4bd24 Bug#28141: Control C on query waiting on lock causes ERROR 1053 (server shutdown)
If a thread is killed in the server, we throw "shutdown" only if one is actually in
progress; otherwise, we throw "query interrupted".

Control-C in the mysql command-line client is "incremental" now.
First Control-C sends KILL QUERY (when connected to 5.0+ server, otherwise, see next)
Next  Control-C sends KILL CONNECTION
Next  Control-C aborts client.

As the first two steps only pertain to an existing query,
Control-C will abort the client right away if no query is running.

client will give more detailed/consistent feedback on Control-C now.
2009-10-19 21:42:10 -07:00
Joerg Bruehe
f359b258ee Merge 5.0-bugteam (compile fix) into main 5.0 2009-10-16 14:29:41 +02:00
Joerg Bruehe
11d4eb352d Merge the Windows compile fix into the push tree. 2009-10-16 14:09:31 +02:00
Joerg Bruehe
9ceeabd9b2 Compile fix for Windows:
Use "#ifdef", not plain "#if".
2009-10-16 14:06:33 +02:00
Joerg Bruehe
1cd95b6a44 Merge bug fix into push tree. 2009-10-15 20:14:07 +02:00