1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00
Commit Graph

68578 Commits

Author SHA1 Message Date
Jorgen Loland
44b41979bd BUG#11762751: UPDATE STATEMENT THROWS AN ERROR, BUT STILL
UPDATES THE TABLE ENTRIES (formerly 55385)
BUG#11764529: MULTI UPDATE+INNODB REPORTS ER_KEY_NOT_FOUND 
              IF A TABLE IS UPDATED TWICE (formerly 57373)
            
If multiple-table update updates a row through two aliases and
the first update physically moves the row, the second update will
fail to locate the row. This results in different errors
depending on storage engine:
  * MyISAM: Got error 134 from storage engine
  * InnoDB: Can't find record in 'tbl'
None of these errors accurately describe the problem. 
      
Furthermore, since MyISAM is non-transactional, the update
executed first will be performed while the second will not.
In addition, for two equal multiple-table update statements,
one could succeed and the other fail based on whether or not
the record actually moved or not. This was inconsistent.
      
Two update operations may physically move a row:
  1) Update of a column in a clustered primary key
  2) Update of a column used to calculate which partition the 
     row belongs to
           
BUG#11764529 is about case 1) above, BUG#11762751 was about case 2).
      
The fix for these bugs is to return with an error if multiple-table 
update is about to:
  a) Update a table through multiple aliases, and
  b) Perform an update that may physically more the row 
     in at least one of these aliases
    
This avoids 
  * partial updates as described for MyISAM above,
  * provides the same error message that describes the actual problem
    for all SEs
  * inconsistent behavior where a statement fails or succeeds based on
    e.g. the partitioning algorithm of the table.
2011-02-21 16:49:03 +01:00
Magnus Blåudd
c960184584 Merge 2011-02-21 12:47:27 +01:00
Jon Olav Hauglid
5d42003fbd Bug #11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG
The problem was that doing ALTER TABLE on a table which had a key
on a TEXT/BLOB column with a prefix longer than the maximum number
of characteres in this column (as per the character set), by mistake,
caused an error (Error 1170 - ER_BLOB_KEY_WITHOUT_LENGTH).

This bug not repeatable in 5.5.

This patch adds a regression test to alter_table.test and
contains no code changes.
2011-02-21 12:30:08 +01:00
Magnus Blåudd
6ae9c15048 Remove last traces of HAVE_NDBCLUSTER_DB define - it has not had an effect in a long time and is just confusing.
At the same time backport the removal of OPT_NDB_CONNECTSTRING and OPT_NDBCLUSTER values from "enum options_client"
2011-02-21 11:15:29 +01:00
Sergey Vojtovich
549f63abb7 Merge. 2011-02-21 11:17:56 +03:00
Nirbhay Choubey
000a390e81 Merge of fix for bug#11766310 from mysql-5.1 -> mysql-5.5. 2011-02-21 12:42:27 +05:30
Nirbhay Choubey
a8e6f7c67b Bug#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH
("-") IN DATABASE NAMES IN ALTER DATABASE.

mysqldump did not quote database name in 'ALTER DATABASE'
statements in its output. This can further cause a failure
while loading if database name contains a hyphen '-'.

This happened as, while printing the 'ALTER DATABASE'
statements, the database name was not quoted.

Fixed by quoting the database name.
2011-02-21 12:37:24 +05:30
Alexander Barkov
4da300dae9 Merging from 5.1 2011-02-18 17:19:55 +03:00
Alexander Barkov
cd3a8131c6 A post-fix for b58036. 2011-02-18 17:17:37 +03:00
Alexander Barkov
ef99776830 Null-merging Bug#11765108 (Bug#58036) from 5.1. 2011-02-18 16:24:03 +03:00
Alexander Barkov
8a96012922 Bug#11765108 (Bug#58036) client utf32, utf16, ucs2 should be disallowed, they crash server
A separate fix for 5.1 (as 5.1 and 5.5 have seriously
differged in the related pieces of the code).
A patch for 5.5 was approved earlier.

Problem: ucs2 was correctly disallowed in "SET NAMES" only,
while mysql_real_connect() and mysql_change_user() still allowed
to use ucs2, which made server crash.

Fix: disallow ucs2 in mysql_real_connect() and mysql_change_user().

  @ sql/sql_priv.h
    - changing return type for thd_init_client_charset() to bool,
      to return errors to the caller

  @ sql/sql_var.cc
    - using new function

  @ sql/sql_connect.cc
    - thd_client_charset_init:
      in case of unsupported client character set send error and return true;
      in case of success return false
    - check_connection:
      Return error if character set initialization failed

  @ sql/sql_parse.cc
    - check charset in the very beginnig of the CMD_CHANGE_USER handling code

  @ tests/mysql_client_test.c
    - adding tests
2011-02-18 16:12:36 +03:00
Vasil Dimov
91ef7b5d24 Merge mysql-5.1 -> mysql-5.5 (empty) 2011-02-18 14:59:19 +02:00
Vasil Dimov
95d02c5c2d Merge mysql-5.5-innodb -> mysql-5.5 2011-02-18 14:57:50 +02:00
Vasil Dimov
f912dcd82e Merge mysql-5.1-innodb -> mysql-5.1 2011-02-18 14:57:11 +02:00
Martin Hansson
8ab3e4f3a1 Merge of fix for Bug#11766675. 2011-02-18 11:55:24 +01:00
Martin Hansson
cd4c263dc4 Bug#11766675 - 59839: Aggregation followed by subquery yields wrong result
The loop that was looping over subqueries' references to outer field used a
local boolean variable to tell whether the field was grouped or not. But the
implementor failed to reset the variable after each iteration. Thus a field
that was not directly aggregated appeared to be.

Fixed by resetting the variable upon each new iteration.
2011-02-18 11:50:06 +01:00
Alexander Barkov
b97cdadbe8 Bug#11765108 (Bug#58036) client utf32, utf16, ucs2 should be disallowed, they crash server
Problem: ucs2 was correctly disallowed in "SET NAMES" only,
while mysql_real_connect() and mysql_change_user() still allowed
to use ucs2, which made server crash.

Fix: disallow ucs2 in mysql_real_connect() and mysql_change_user().

  @ sql/set_var.cc
    Using new function.

  @ sql/sql_acl.cc
    - Return error if character set initialization failed
    - Getting rid of pointer aliasing:
      Initialize user_name to NULL, to avoid double free().

  @ sql/sql_connect.cc
    - in case of unsupported client character set send error and return true
    - in case of success return false

  @ sql/sql_connect.h
    - changing return type for thd_init_client_charset() to bool,
      to return errors to the caller

  @ sql/sql_parse.h
    - introducing a new function, to reuse in all places where we need
    to check client character set.

  @ tests/mysql_client_test.c
    Adding test
2011-02-18 12:46:55 +03:00
Sergey Vojtovich
4daaa02880 BUG#11766720 - setting storage engine to null segfaults mysqld
MONTHNAME(0) claims that it is about to return NOT NULL
value, whereas it actually returns NULL.

As a result storage_engine variable (which cannot be NULL)
protection was bypassed and NULL value was accepted, causing
server crash.

Fixed MONTHNAME(0) to report valid NULL flag.
2011-02-18 11:10:30 +03:00
Alexander Barkov
498ff4468d Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
Problem:
  IF() did not copy collation derivation and repertoire from
  an argument if the opposite argument was NULL:
    IF(cond, res1, NULL)
    IF(cond, NULL, res2)
  only CHARSET_INFO pointer was copied.
  This resulted in illegal mix of collations error.

Fix:
  copy all collation parameters from the non-NULL argument:
  CHARSET_INFO pointer, derivation, repertoire.
2011-02-18 10:32:40 +03: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
5e7d354326 Fix the non-determinism in innodb_information_schema.test
Thanks to Kristian Nielsen for finding out the root cause for the
failure, see: https://bugs.launchpad.net/maria/+bug/677407
2011-02-17 19:09:53 +02:00
Vasil Dimov
782176af29 Merge mysql-5.1 -> mysql-5.5 (empty) 2011-02-17 14:09:31 +02:00
Vasil Dimov
7581b94a6c Merge mysql-5.1 from bk-internal into my local repo 2011-02-17 14:07:39 +02:00
Vasil Dimov
d679c3976c Merge mysql-5.5 from bk-internal into my local repo 2011-02-17 14:06:32 +02:00
Vasil Dimov
3f6d62307f Merge mysql-5.1 -> mysql-5.5 (empty) 2011-02-17 14:00:27 +02:00
Vasil Dimov
60a8407231 Merge mysql-5.5-innodb -> mysql-5.5 2011-02-17 13:57:26 +02:00
Vasil Dimov
0a3e7beb1e Merge mysql-5.1-innodb -> mysql-5.1 2011-02-17 13:56:05 +02:00
Magne Mahre
2a3456597b Merge from 5.1 2011-02-17 12:53:09 +01:00
Magne Mahre
f2a42aee2e Bug#48053 String::c_ptr has a race and/or does an invalid
memory reference

There are two issues present here.
  1) There is a possibility that we test a byte beyond the
     allocated buffer

  2) We compare a byte that might never have been
     initalized to see if it's 0.

The first issue is not triggered by existing code, but an
ASSERT has been added to safe-guard against introducing
new code that triggers it.

The second issue is what triggers the Valgrind warnings
reported in the bug report. A buffer is allocated in
class String to hold the value. This buffer is populated
by the character data constituting the string, but is not
zero-terminated in most cases.  Testing if it is indeed
zero-terminated means that we check a byte that has never
been explicitly set, thus causing Valgrind to trigger.

Note that issue 2 is not a serious problem.  The variable
is read, and if it's not zero, we will set it to zero.
There are no further consequences.

Note that this patch does not fix the underlying problems
with issue 1, as it is deemed too risky to fix at this
point (as noted in the bug report).  As discussed in
the report, the c_ptr() method should probably be
replaced, but this requires a thorough analysis of the
~200 calls to the method.
2011-02-17 12:43:53 +01: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
Tor Didriksen
26077d8dcb Disable this test when running 'mtr --mem'
With --mem if fails with
+UNEXPECTED ERROR NUMBER: 1290

In var/log/mysqld.2.err we have:
[ERROR] LOAD DATA INFILE in the slave SQL Thread can only read from --slave-load-tmpdir. Please, report a bug.
[ERROR] Slave SQL: Error 'The MySQL server is running with the --slave-load-tmpdir option so it cannot execute this statement' on query. Default database: 'test'. Query: 'LOAD DATA INFILE '../../tmp/SQL_LOAD-2-1-1.data' INTO  TABLE `t1` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, `b`)', Error_code: 1290

getcwd() in the server yields something like: /dev/shm/var_auto_iv5Q/mysqld.2/data
2011-02-17 08:27:24 +01:00
Jonathan Perkin
8920df10ad Merge to mysql-5.5 2011-02-16 14:46:01 -08:00
Jonathan Perkin
1ce649d59c Merge to mysql-5.1 2011-02-16 14:43:56 -08:00
Jonathan Perkin
edcdc79e5a Updated README file. 2011-02-16 14:42:44 -08:00
Bjorn Munch
81b4be1819 Simple fix of suppress pattern in test insert_select 2011-02-16 21:45:52 +01:00
Bjorn Munch
378ddd475f Simple fix of suppress pattern in test insert_select 2011-02-16 21:43:12 +01:00
Jon Olav Hauglid
3eb84136db Merge from mysql-5.1 to mysql-5.5
No conflicts
2011-02-16 18:24:38 +01:00
Jon Olav Hauglid
d1192eb8ee Followup to Bug #11752069 (former bug 43152)
Assertion `bitmap_is_set_all(&table->s->all_set)' failed in
handler::ha_reset

This followup fixes the compilation warning
  'test_bit' may be used uninitialized in this function
introduced by the previous patch.
2011-02-16 18:19:10 +01:00
Sven Sandberg
d4674ca897 WL#5670: Proposal: Remove SHOW NEW MASTER statement
Removes SHOW NEW MASTER statement and all related code.
Also removes the unused function update_slave_list from repl_failsafe.cc.
2011-02-16 17:27:35 +01:00
Jon Olav Hauglid
4a348c5656 Merge from mysql-5.1 to mysql-5.5
Text conflict in include/my_bit.h
Text conflict in include/my_bitmap.h
Text conflict in mysys/my_bitmap.c
2011-02-16 16:33:02 +01:00
Jon Olav Hauglid
ba5b97343c Bug #11752069 (former bug 43152)
Assertion `bitmap_is_set_all(&table->s->all_set)' failed in
handler::ha_reset

This assertion could be triggered if two connections simultaneously
executed two bitmap test functions on the same bitmap. For example,
the assertion could be triggered if one connection executed UPDATE
while a second connection executed SELECT on the same table.

Even if bitmap test functions have read-only semantics and have
const bitmaps as parameter, several of them modified the internal
state of the bitmap. With interleaved execution of two such functions
it was possible for one function to modify the state of the same
bitmap that the other function had just modified. This lead to an
inconsistent state and could trigger the assert.

Internally the bitmap uses 32 bit words for storage. Since bitmaps
can contain any number of bits, the last word in the bitmap may
not be fully used. A 32 bit mask is maintained where a bit is set
if the corresponding bit in the last bitmap word is unused.
The problem was that several test functions applied this mask to
the last word. Sometimes the mask was negated and used to zero out
the remainder of the last word and sometimes the mask was used as-is
to fill the remainder of the last word with 1's. This meant that if
a function first used the negated mask and another function then
used the mask as-is (or vice-versa), the first function would then
get the wrong result.

This patch fixes the problem by changing the implementation of
9 bitmap functions that modified the bitmap state even if the 
bitmap was declared const. These functions now preserve the
internal state of the bitmap. This makes it possible for
two connections to concurrently execute two of these functions
on the same bitmap without issues.

The patch also removes dead testing code from my_bitmap.c.
These tests have already been moved to unittest/mysys/bitmap-t.c.
Existing test coverage of my_bitmap has been extended.

No MTR test case added as this would require adding several sync
points to the bitmap functions. The patch has been tested with
a non-deterministic test case posted on the bug report.
2011-02-16 16:26:19 +01:00
Tor Didriksen
f9b50b9026 Bug #11766729 59906: 5.5 DEBUG BUILDS BROKEN BY EXTRA/COMP_ERR.C 2011-02-16 14:48:30 +01: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
Tor Didriksen
749945c1fd Bug #11751935 42969: PLEASE ADD A MANIFEST TO EACH BUILD
post-push fix: make it work in out-of-source builds.
2011-02-16 13:44:28 +01:00
Bjorn Munch
3e3fd17cd7 Removed unused code accidentally pushed with Bug @58122 2011-02-16 12:24:17 +01:00
Dmitry Lenev
b2089dc80a Merged recent changes from mysql-5.5 tree with
fix for bug @59888.
2011-02-15 15:19:30 +03:00