Commit graph

71383 commits

Author SHA1 Message Date
sayantan dutta
6868f3460d Bug #16632543 - INCORRECT VALUE OF BOGOMIPS IN MYSQLTEST 2013-04-16 16:26:45 +05:30
Murthy Narkedimilli
ecf40a0efd Merging the changes for Bug 16633169 - MYSQL.INFO CONTAINS OUTDATED INFORMATION. 2013-04-16 12:17:18 +02:00
Murthy Narkedimilli
1ac26c5a9f Bug 16633169 - MYSQL.INFO CONTAINS OUTDATED INFORMATION. 2013-04-16 12:12:18 +02:00
Chaithra Gopalareddy
fcb0ecfae3 Merge from 5.1 to 5.5 2013-04-14 08:09:56 +05:30
Chaithra Gopalareddy
4db726c0fa Bug#16347426:ASSERTION FAILED: (SELECT_INSERT &&
!TABLES->NEXT_NAME_RESOLUTION_TABLE) || !TAB
      
Problem:
The context info of select query gets corrupted when a query
with group_concat having order by is present in an order by
clause of the select query. As a result, server crashes with
an assert.
      
Analysis:
While parsing order by for group_concat, it is presumed that
it is always present before the actual order by for the
select query.
As a result, parser uses select->order_list to populate the
order by items of group_concat and creates a select->gorder_list
to which select->order_list is copied onto. Once this is done,
it empties the select->order_list.
In the case presented in the bugpage, as order by is already
parsed when group_concat's order by is encountered, parser
presumes that it is the second order by in the select query
and creates fake_lex_unit which results in the change of
context info.
      
Solution:
Make group_concat's order by parsing independent of the select
2013-04-14 07:30:49 +05:30
Venkatesh Duggirala
40360f0259 BUG#16615117 MYSQLDUMP PRODUCES A CHANGE MASTER STATEMENT
WITH A PORT NUMBER ENCLOSED IN QUOTES

Problem: mysqldump --dump-slave --include-master-host-port
prints the CHANGE MASTER command in the generated logical
backup. The PORT number that is generated with this command
is a string and should be an integer.

Fix: Remove the Enclosed quotes for port number.
2013-04-12 14:18:21 +05:30
Jorgen Loland
d4dcaea072 Bug#16540042: WRONG QUERY RESULT WHEN USING RANGE OVER
PARTIAL INDEX

Consider the following table definition:

CREATE TABLE t (
  my_col CHAR(10),
  ...
  INDEX my_idx (my_col(1))
)

The my_idx index is not able to distinguish between rows with
equal first-character my_col-values (e.g. "f", "foo", "fee").

Prior to this CS, the range optimizer would translate

"WHERE my_col NOT IN ('f', 'h')" into (optimizer trace syntax)

"ranges": [
  "NULL < my_col < f",
  "f < my_col"
]

But this was not correct because the rows with values "foo" 
and "fee" would not belong to any of those ranges. However, the
predicate "my_col != 'f' AND my_col != 'h'" would translate
to 

"ranges": [
  "NULL < my_col"
]

because get_mm_leaf() changes from "<" to "<=" for partial
keyparts. This CS changes the range optimizer implementation 
for NOT IN to behave like a conjunction of NOT EQUAL: it 
replaces "<" with "<=" for all but the first range when the
keypart is partial.
2013-04-12 09:39:56 +02:00
bin.x.su@oracle.com
9bcc40a710 Bug :#16005310 FIx bug - INNODB_ROW_LOCK_TIME_MAX SEEMS TO HAVE AN OVERFLOW
Solution:Set diff_time to 0 if finish_time < start_time
2013-04-11 10:50:50 +08:00
Tor Didriksen
39a2d148e6 Bug#16395606 SCRIPTS MISSING EXECUTE BIT
Add execute bit for scripts:
 - in build directory
 - in install directory
2013-04-10 16:43:09 +02:00
Thayumanavar
aea3d4b851 BUG#16402143 - STACK CORRUPTION IN DBUG_EXPLAIN
DESCRIPTION AND FIX:
DBUG_EXPLAIN result in buffer overflow when the
DEBUG variable values length exceed 255.
In _db_explain_ function which call macro str_to_buf
incorrectly passes the length of buf avaliable to
strnmov as len+1. The fix calculates the avaliable
space in buf and passes it to strnxmov.
2013-04-10 11:50:41 +05:30
Nirbhay Choubey
c60a9f740c local merge. 2013-04-09 14:03:35 +05:30
Nirbhay Choubey
84b942d103 Backporting patch for bug#15852074. 2013-04-09 14:00:05 +05:30
Gopal Shankar
8619a81a0d null merge 2013-04-08 18:53:24 +05:30
mysql-builder@oracle.com
bb1b9f0f5c 2013-04-08 18:48:57 +05:30
mysql-builder@oracle.com
29d103cef5 2013-04-08 18:14:06 +05:30
mysql-builder@oracle.com
e1e20e1c9a 2013-04-08 18:12:39 +05:30
Raghav Kapoor
b170dff8ba BUG#15978766 - TEST VALGRIND_REPORT FAILS INNODB TESTS
BACKGROUND:
The testcase i_innodb.innodb_bug14036214 when run under valgrind
leaks memory.

ANALYSIS:
In the code path of mysql_update, a temporary file is opened
using open_cached_file().
When an error has occured in that code path, this temporary
file was not closed since call to close_cached_file() was 
missing.
This problem exists in 5.5 but it does not exists in 5.6 and 
trunk. 
This is because in 5.6 and trunk, when we issue the update
statement in the test case, it does not take the same code path
as in 5.5. The code path is different because a different plan 
is chosen by optimizer. 
See Bug#14036214 for details.
However, the problem can still be examined in 5.6 and trunk
by code inspection.

FIX:
The file opened by open_cached_file() has been closed by calling
close_cached_file() when an error occurs so that it does not 
results in a memory leak.
2013-04-08 15:25:45 +05:30
sayantan dutta
7ffee64f2d Bug #16401597 - MTR V1 RETURNS INCORRECT PATH TO VARIABLE @@BASEDIR 2013-04-04 14:54:16 +05:30
Murthy Narkedimilli
152fe9e9c4 Bug 16534721 - MYSQL_INSTALL_DB RUNS AGAIN DURING UPGRADE EVEN DATA DIRECTORY EXISTS 2013-04-03 18:09:37 +02:00
Tor Didriksen
3b9185793d merge 5.1 => 5.5 2013-04-02 16:20:49 +02:00
Tor Didriksen
559af20ca4 Bug#14700180 CRASH IN COPY_FUNCS
This is a backport of the fix for
Bug#13966809 CRASH IN COPY_FUNCS WHEN GROUPING BY OUTER QUERY BLOB FIELD IN SUBQUERY
2013-04-02 16:05:10 +02:00
Tor Didriksen
7d7ed956b4 Bug#11765629 CMAKE: CAN SUPPRESS INSTALLATION OF SQL-BENCH, BUT NOT MYSQL-TEST
Don't try to install anything into INSTALL_MYSQLTESTDIR
if it is explicitly set empty on the cmake command line.
2013-04-02 11:14:39 +02:00
mysql-builder@oracle.com
f2f97429ba 2013-04-02 11:17:06 +05:30
mysql-builder@oracle.com
abe53f6c4b 2013-04-02 11:16:26 +05:30
mysql-builder@oracle.com
09e2c5b81b 2013-04-01 13:45:27 +05:30
mysql-builder@oracle.com
8061f44555 2013-04-01 12:26:55 +05:30
Chaithra Gopalareddy
260fce8f8c Merge from 5.1 to 5.5 2013-03-31 06:52:16 +05:30
Chaithra Gopalareddy
94346a8b6c Bug #16347343 : CRASH, GROUP_CONCAT, DERIVED TABLES
Problem:
A select query inside a group_concat function having an 
outer reference results in a crash.
      
Analysis:
In function Item_group_concat::add, we do not check if 
return value of get_tmp_table_field can be NULL for 
a non-const item. This can happen for a query with a 
outer reference.
While resolving the outer reference in the query present
inside group_concat function, we set the "const_item_cache" 
to false. As a result in the call to const_item() from 
Item_func_group_concat::add, it returns false and goes on 
to check if this can be NULL resulting in the crash.
get_tmp_table_field does not return NULL for Items of type 
Item_field, Item_result_field and Item_ref. 
For all other items, it returns NULL. 
     
Solution:
Check for the return value of get_tmp_table_field before we 
access field contents.
2013-03-31 06:48:30 +05:30
Chaithra Gopalareddy
4a3708a4f6 Bug#14261010: ON DUPLICATE KEY UPDATE CRASHES THE SERVER
Problem:
Insert with 'on duplicate key update' on a view,
crashes the server.
      
Analysis:
During an insert on to a view, we do the following:
      
For insert fields and values -
1. Resolve insert values.
2. Resolve insert fields.
3. Check if the fields and values are all from a 
   single table of a view in case of INSERT VALUES.
   Do not check the same in case of INSERT SELECT,
   as the values can be read from different table than
   that of the view.
      
For the update fields (if DUP UPDATE is used)
1. Create a name resolution context with 'table_list' only.
2. Resolve update fields in this context.
3. Check if update fields and values are from the same
   table as the insert fields.
4. Get the next name resolution context. Concatinate this
   with the previous one.
5. Resolve update values in this context as we can refer
   to other tables in the values clause.
      
Note that at step 3(of update fields), we check for
'used_tables map' of update values, without resolving them
first. Hence the crash.
      
Fix:
At step 3, do not pass the update values to check if its a
single table view update, as update values can refer other table.
      
Code has been re-organized to function like check_insert_fields.
2013-03-30 19:24:54 +05:30
Annamalai Gurusami
7fbd770c7c Merge from mysql-5.1 to mysql-5.5 2013-03-29 22:11:33 +05:30
Annamalai Gurusami
b00e1446dd Bug #16244691 SERVER GONE AWAY ERROR OCCURS DEPENDING ON THE NUMBER OF
TABLE/KEY RELATIONS

The DICT_FK_MAX_RECURSIVE_LOAD was reduced from 250 to 33 in rb#2058.
But in optimized build, this recursive depth is still too deep and
resulted in stack overflow.  So reducing this depth to 20 now.
2013-03-29 22:01:10 +05:30
sayantan dutta
673a93efa1 Bug #16402124 - MTR PROCESSES CERTAIN ASSIGNED VARDIR VALUES WRONG 2013-03-29 16:33:33 +05:30
mysql-builder@oracle.com
002850707d 2013-03-29 15:14:38 +05:30
mysql-builder@oracle.com
a19c3dce6f 2013-03-29 15:09:14 +05:30
mysql-builder@oracle.com
0e3433b0a3 2013-03-29 11:44:42 +05:30
Venkatesh Duggirala
6f3e77e516 Bug#15948818-SEMI-SYNC ENABLED MASTER CRASHES WHEN EVENT
SCHEDULER DROPS EVENTS

Problem: On a semi sync enabled server (Master/Slave),
if event scheduler drops an event after completion,
server crashes.

Analaysis: If an event is created with "ON COMPLETION
NOT PRESERVE" clause, event scheduler deletes the event
upon event completion(expiration) and the thread object
will be destroyed. In the destructor of the thread object,
mysys_var member is set to zero explicitly. Later from
the same destructor call(same execution path),
incase of semi sync enabled server, while cleanup is called,
THD::mysys_var member is accessed by THD::enter_cond()
function which causes server to crash.

Fix: mysys_var should not be explicitly set to zero and
also it is not required.
2013-03-29 09:28:31 +05:30
Georgi Kodinov
7c2a140911 merge 2013-03-28 17:41:22 +02:00
Georgi Kodinov
2739ee3848 Addendum #1 to the fix for bug #16451878 : GEOMETRY QUERY CRASHES SERVER
Fixed the get_data_size() methods for multi-point features to check properly for end 
of their respective data arrays.
Extended the point checking function to take a 3d optional argument so cases where
there's additional data in each array element (besides the point data itself) can be
covered by the helper function.
Fixed the 3 cases where such offset was present to use the proper checking helper 
function.
Test cases added.
Fixed review comments.
2013-03-28 17:37:29 +02:00
Nisha Gopalakrishnan
65b3449391 Merge from 5.1 to 5.5 2013-03-28 19:17:28 +05:30
Nisha Gopalakrishnan
0de3047952 BUG#11753852: IF() VALUES ARE EVALUATED DIFFERENTLY IN A
REGULAR SQL VS PREPARED STATEMENT

Analysis:
---------

When passing user variables as parameters to the
prepared statements, the IF() function evaluation
turns out to be incorrect.

Consider the example:

SET @var1='0.038687';
SELECT @var1 , IF( @var1 = 0 , 1 ,@var1 ) AS sqlif ;
+----------+----------+
| @var1    | sqlif    |
+----------+----------+
| 0.038687 | 0.038687 |
+----------+----------+

Executing a prepared statement where the parameters are
supplied:

PREPARE fail_stmt FROM "SELECT ? ,
IF( ? = 0 , 1 , ? ) AS ps_if_fail" ;
EXECUTE fail_stmt USING @var1 ,@var1 , @var1 ;
+----------+------------+
| ?        | ps_if_fail |
+----------+------------+
| 0.038687 | 1          |
+----------+------------+
1 row in set (0.00 sec)

In the regular statement or while executing the prepared
statements without passing parameters, the decimal
precision is set for the user variable of type string.
The comparison function used for evaluation considered
the precision while comparing the values.

But while executing the prepared statement with the
parameters supplied, the decimal precision was not
set. Thus the comparison function chosen was different
which looked at the absolute values for comparison.

Fix:
----

The fix is to set 'decimals' field of Item_param to the
default value which is nothing but the maximum number of
decimals(NOT_FIXED_DEC). This is set for cases where the
strings are converted to the numeric form within certain
functions. Thus the value is not rounded off during
comparison, ensuring correct evaluation.
2013-03-28 19:11:26 +05:30
Sujatha Sivakumar
5c6611b546 Merge from mysql-5.1 to mysql-5.5 2013-03-28 14:18:51 +05:30
Sujatha Sivakumar
c78c1fe52d Bug#14324766:PARTIALLY WRITTEN INSERT STATEMENT IN BINLOG
NO ERRORS REPORTED
      
Problem:
=======
Errors from my_b_fill are ignored. MYSQL_BIN_LOG::write_cache
code assumes that 0 returned from my_b_fill always means
end-of-cache, but that is incorrect. It can result in error
and the error is ignored. Other callers of my_b_fill don't
check for error: my_b_copy_to_file, maybe my_b_gets.
      
Fix:
===
An error handler is already present to check the "cache"
error that is reported during "MYSQL_BIN_LOG::write_cache"
call. Hence error handlers are added for "my_b_copy_to_file"
and "my_b_gets".
During my_b_fill() function call, when the cache read fails
info->error= -1 is set. Hence a check for "info->error"
is added for the above to callers upon their return.
2013-03-28 14:14:39 +05:30
sayantan dutta
61bb634be6 Bug #16403186 - MTR ON WINDOWS SHOULD NOT TRY TO START CDB IF RUNNING WITH PARALLEL 2013-03-28 11:47:43 +05:30
Annamalai Gurusami
b2eb666e4b Null merge from mysql-5.1 to mysql-5.5 2013-03-28 10:43:50 +05:30
Annamalai Gurusami
9d7f333a62 Bug #16244691 SERVER GONE AWAY ERROR OCCURS DEPENDING ON THE NUMBER OF
TABLE/KEY RELATIONS

Problem:

When there are many tables, linked together through the foreign key
constraints, then loading one table will recursively open other tables.  This
can sometimes lead to thread stack overflow.  In such situations the server
will exit.

I see the stack overflow problem when the thread_stack is 196608 (the default
value for 32-bit systems).  I don't see the problem when the thread_stack is
set to 262144 (the default value for 64-bit systems).

Solution:

Currently, in InnoDB, there is a macro DICT_FK_MAX_RECURSIVE_LOAD which defines
the maximum number of tables that will be loaded recursively because of foreign
key relations.  This is currently set to 250.  We can reduce this number to 33
(anything more than 33 does not solve the problem for the default value).  We
can keep it small enough so that thread stack overflow does not happen for the
default values.  Reducing the DICT_FK_MAX_RECURSIVE_LOAD will not affect the
functionality of InnoDB.  The tables will eventually be loaded. 

rb#2058 approved by Marko
2013-03-28 10:42:42 +05:30
Annamalai Gurusami
28f26d3e86 Merge from mysql-5.1 to mysql-5.5 2013-03-28 10:25:23 +05:30
Georgi Kodinov
3c358724d6 merge 5.1->5.5 2013-03-27 16:06:33 +02:00
Georgi Kodinov
0f31bfeaab Bug #16451878: GEOMETRY QUERY CRASHES SERVER
The GIS WKB reader was checking for the presence of
enough data by first multiplying the number read (where
it could overflow) and only then comparing it to the
number of bytes available.
This can overflow and effectively turn off the check.
Fixed by:
1. Introducing a new function that does division only so
no overflow is possible.
2. Using the proper macros and parenthesizing them.
3. Doing an in-line division check in the only place where
the boundary check is done over a data structure other
than a dense points array.
2013-03-27 16:03:00 +02:00
Nuno Carvalho
accc5d9274 BUG#16541422: LOG-SLAVE-UPDATES + REPLICATE-WILD-IGNORE-TABLE FAILS FOR USER VARIABLES
Merge from mysql-5.1 into mysql-5.5.
2013-03-27 11:22:25 +00:00
Nuno Carvalho
daa3ab6ff8 BUG#16541422: LOG-SLAVE-UPDATES + REPLICATE-WILD-IGNORE-TABLE FAILS FOR USER VARIABLES
Fixed possible uninitialized variable.
2013-03-27 11:19:29 +00:00