Commit graph

46800 commits

Author SHA1 Message Date
kostja@vajra.(none)
747842e10b A fix and a test case for
Bug#21483 "Server abort or deadlock on INSERT DELAYED with another
implicit insert"
Also fixes and adds test cases for bugs:
20497 "Trigger with INSERT DELAYED causes Error 1165"
21714 "Wrong NEW.value and server abort on INSERT DELAYED to a
table with a trigger".
Post-review fixes.

Problem:
In MySQL INSERT DELAYED is a way to pipe all inserts into a
given table through a dedicated thread. This is necessary for
simplistic storage engines like MyISAM, which do not have internal
concurrency control or threading and thus can not
achieve efficient INSERT throughput without support from SQL layer.
DELAYED INSERT works as follows:
For every distinct table, which can accept DELAYED inserts and has
pending data to insert, a dedicated thread is created to write data
to disk. All user connection threads that attempt to
delayed-insert into this table interact with the dedicated thread in
producer/consumer fashion: all records to-be inserted are pushed
into a queue of the dedicated thread, which fetches the records and 
writes them.
In this design, client connection threads never open or lock
the delayed insert table.
This functionality was introduced in version 3.23 and does not take 
into account existence of triggers, views, or pre-locking.
E.g. if INSERT DELAYED is called from a stored function, which,
in turn, is called from another stored function that uses the delayed
table, a deadlock can occur, because delayed locking by-passes
pre-locking. Besides:
 * the delayed thread works directly with the subject table through
   the storage engine API and does not invoke triggers
 * even if it was patched to invoke triggers, if triggers,
   in turn, used other tables, the delayed thread would
   have to open and lock involved tables (use pre-locking).
 * even if it was patched to use pre-locking, without deadlock
   detection the delayed thread could easily lock out user 
   connection threads in case when the same table is used both
   in a trigger and on the right side of the insert query: 
   the delayed thread would not release locks until all inserts 
   are complete, and user connection can not complete inserts 
   without having locks on the tables used on the right side of the
   query.

Solution:

These considerations suggest two general alternatives for the
future of INSERT DELAYED:
 * it is considered a full-fledged alternative to normal INSERT
 * it is regarded as an optimisation that is only relevant 
   for simplistic engines.
Since we missed our chance to provide complete support of new
features when 5.0 was in development, the first alternative
currently renders infeasible.
However, even the second alternative, which is to detect
new features and convert DELAYED insert into a normal insert, 
is not easy to implement.
The catch-22 is that we don't know if the subject table has triggers
or is a view before we open it, and we only open it in the
delayed thread. We don't know if the query involves pre-locking
until we have opened all tables, and we always first create
the delayed thread, and only then open the remaining tables.
This patch detects the problematic scenarios and converts
DELAYED INSERT to a normal INSERT using the following approach:
 * if the statement is executed under pre-locking (e.g. from
   within a stored function or trigger) or the right
   side may require pre-locking, we detect the situation
   before creating a delayed insert thread and convert the statement
   to a conventional INSERT.
  * if the subject table is a view or has triggers, we shutdown
   the delayed thread and convert the statement to a conventional
   INSERT.
2007-05-16 09:51:05 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
bb089cea38 bug #8663 cant use bigint unsigned as input to cast
in the case of the overflow in the decimal->integer conversion
we didn't return the proper boundary value, but just the result
of the conversion we calculated on the moment of the error
2007-05-16 10:12:49 +05:00
igor@olga.mysql.com
8b829fb1ae Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug28272
2007-05-15 14:14:52 -07:00
evgen@moonbone.local
fbb2332628 Bug#28208: Wrong result of a non-const STRING function with a const DATETIME
function.

A wrong  condition was used to check that the
Arg_comparator::can_compare_as_dates() function calculated the value of the
string constant. When comparing a non-const STRING function with a constant
DATETIME function it leads to saving an arbitrary value as a cached value of
the DATETIME function.

Now the Arg_comparator::set_cmp_func() function initializes the const_value
variable to the impossible DATETIME value (-1) and this const_value is
cached only if it was changed by the Arg_comparator::can_compare_as_dates()
function.
2007-05-16 00:30:12 +04:00
igor@olga.mysql.com
fea67e6868 Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug28272
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug28272
2007-05-15 13:16:10 -07:00
iggy@amd64.(none)
1a2e798a70 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  amd64.(none):/src/bug24732/my50-bug24732
2007-05-15 15:23:40 -04:00
iggy@amd64.(none)
ceff140d7c Merge bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into  amd64.(none):/src/bug24732/my51-bug24732
2007-05-15 15:22:28 -04:00
msvensson@pilot.blaudden
261ee205bd Merge bk-internal:/home/bk/mysql-5.1-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.1-new-maint
2007-05-15 18:25:28 +02:00
msvensson@pilot.blaudden
a7bc5a413e Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.1-new-maint
2007-05-15 18:23:36 +02:00
joerg@trift2.
ae801bb0ae Fix bug#27833 "Bourne shell string comparison issue in scripts/make_win_bin_dist":
Several string comparisons could never yield true because they had an 'x' guard
added to the variable but not to the constant value. Fix that by guarding both sides.
2007-05-15 18:19:18 +02:00
msvensson@pilot.blaudden
a0b1e5406d Add triggers for detecting bad changesets to mysql-5.0 2007-05-15 17:04:31 +02:00
iggy@amd64.(none)
38d29fc0ec Bug#24732 Executables do not include Vista manifests
- mysqld does not need requireAdministrator rights 
to run.
2007-05-15 10:37:14 -04:00
iggy@amd64.(none)
f9f69d35ea Merge amd64.(none):/src/bug24732/my50-bug24732
into  amd64.(none):/src/bug24732/my51-bug24732
2007-05-15 10:34:09 -04:00
iggy@amd64.(none)
3f4138a519 Bug#24732 Executables do not include Vista manifests
- Manifest requires four part application version.
- mysqld does not need requireAdministrator rights 
to run.
2007-05-15 10:30:11 -04:00
msvensson@pilot.blaudden
c58314d7d9 Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.1-new-maint
2007-05-15 16:26:33 +02:00
kostja@vajra.(none)
b5f3273203 Merge vajra.(none):/opt/local/work/mysql-5.0-runtime
into  vajra.(none):/opt/local/work/mysql-5.1-runtime
2007-05-15 18:05:18 +04:00
msvensson@pilot.blaudden
da8a944dfb Bug#27344 Total failure to start the server
- Give some more protection against "too long socket name by setting the max
   length when to use a tmpdir for sockets to 70
2007-05-15 16:03:38 +02:00
kostja@vajra.(none)
5e184e8eb1 A post-merge fix. 2007-05-15 17:58:26 +04:00
kostja@vajra.(none)
0a061c902b Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  vajra.(none):/opt/local/work/mysql-5.1-runtime
2007-05-15 17:54:11 +04:00
mhansson/martin@linux-st28.site
5bc137ff17 Bug#27573: MIN() on an indexed column which is always NULL sets _other_ results
to NULL

For queries of the form SELECT MIN(key_part_k) FROM t1 
WHERE key_part_1 = const and ... and key_part_k-1 = const,
the opt_sum_query optimization tries to
use an index to substitute MIN/MAX functions with their values according
to the following rules:
1) Insert the minimum non-null values where the WHERE clause still matches, or
3) A row of nulls

However, the correct semantics requires that there is a third case 2)
such that a NULL value is substituted if there are only NULL values for 
key_part_k.

The patch modifies opt_sum_query() to handle this missing case.
2007-05-15 15:29:12 +03:00
tomas@whalegate.ndb.mysql.com
277a5a50b5 Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-15 13:04:49 +02:00
tomas@whalegate.ndb.mysql.com
84f24ce0f8 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-15 12:08:09 +02:00
tomas@whalegate.ndb.mysql.com
17944acee2 add error code to ndb require 2007-05-15 12:07:09 +02:00
tomas@whalegate.ndb.mysql.com
db3fcd8a89 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-15 12:05:20 +02:00
tomas@whalegate.ndb.mysql.com
3083443262 improve error message on corrup schema file 2007-05-15 12:02:58 +02:00
kostja@vajra.(none)
35616ba5c7 Merge vajra.(none):/opt/local/work/mysql-4.1-runtime
into  vajra.(none):/opt/local/work/mysql-5.0-runtime
2007-05-15 13:57:15 +04:00
kostja@vajra.(none)
7ff604eb76 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  vajra.(none):/opt/local/work/mysql-5.0-runtime
2007-05-15 13:56:09 +04:00
kostja@vajra.(none)
21c137dbf1 Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into  vajra.(none):/opt/local/work/mysql-4.1-runtime
2007-05-15 13:39:24 +04:00
tomas@whalegate.ndb.mysql.com
f527479f8c Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-15 09:54:42 +02:00
gluh@mysql.com/eagle.(none)
579cce54ab WL#3823 Modify VARIABLE_VALUE columns to VARCHAR within INFORMATION_SCHEMA STATUS tables 2007-05-15 12:45:50 +05:00
jonas@perch.ndb.mysql.com
7d79641e4b Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into  perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
2007-05-15 09:08:47 +02:00
jonas@perch.ndb.mysql.com
7e8cc53abe ndb - bug#24631
add Dbdict::restartDropObj*
2007-05-15 09:08:16 +02:00
tomas@whalegate.ndb.mysql.com
b027b84afa Bug #26386 ndbd wont start after changing schema
backported error code from 5.1
    split error check when reading schema file
2007-05-15 09:03:00 +02:00
igor@olga.mysql.com
268be06874 Fixed bug #28272: crash that occurs when running an EXPLAIN command
for a query over an empty table right after its creation. 
The crash is the result of an attempt made by JOIN::optimize to evaluate
the WHERE condition when no records have been actually read.
The added test case can reproduce the crash only with InnoDB tables and
only with 5.0.x.
2007-05-14 23:55:18 -07:00
tomas@whalegate.ndb.mysql.com
60e28cc9aa Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-15 08:36:21 +02:00
tomas@whalegate.ndb.mysql.com
e53efba0e5 #26906 No message slogan found
- added errormessage and code for "declaring node dead"
2007-05-15 08:34:39 +02:00
igor@olga.mysql.com
22dfb9f0f7 Post-merge fix. 2007-05-14 18:26:00 -07:00
igor@olga.mysql.com
25f5e7d999 Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug27937
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug27937
2007-05-14 17:06:05 -07:00
igor@olga.mysql.com
d71043b889 Fixed bug #27937: crash for the the second execution of a prepared
statement from a UNION query with ORDER BY an expression containing
RAND().
The crash happened because the global order by list in the union query
was not re-initialized for execution.
(Local order by lists were re-initialized though).
2007-05-14 16:41:09 -07:00
dlenev@mockturtle.local
3209aa1e50 Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  mockturtle.local:/home/dlenev/src/mysql-5.1-cts-3
2007-05-15 00:22:42 +04:00
dlenev@mockturtle.local
d748e4dedd Fix for bug #28415 "Some ALTER TABLE statements no longer work under LOCK
TABLES" and failures of alter_table.test on Windows which occured after
pushing fix for bugs #20662, #20903, #24508, #24738 (various problems
with CREATE TABLE SELECT).

ALTER TABLE statements which were handled using "fast" alter table
optimization were not properly working under LOCK TABLES if table
was transactional (for all table types under Windows).

Code implementing "fast" version of ALTER TABLE tried to open and
lock table using open_ltable() after renaming .FRM files (which
corresponds to renaming tables in normal case) in some cases
(for transactional tables or on Windows). This caused problems
under LOCK TABLES and conflicted with name-lock taken by 
ALTER TABLE RENAME on target tables.

This patch solves this issue by using reopen_name_locked_table()
instead of open_ltable().
2007-05-14 22:38:26 +04:00
joerg@trift2.
dbe2ca27c4 Merge jbruehe@bk-internal.mysql.com:/home/bk/mysql-5.1-build
into  trift2.:/MySQL/M51/push-5.1
2007-05-14 18:24:08 +02:00
joerg@trift2.
bbdb3bf9fb Merge trift2.:/MySQL/M51/mysql-5.1
into  trift2.:/MySQL/M51/push-5.1
2007-05-14 17:53:51 +02:00
mhansson@dl145s.mysql.com
10ab91447d Merge mhansson@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  dl145s.mysql.com:/users/mhansson/mysql/autopush/5.0o-5.0o-bug28273
2007-05-14 17:28:10 +02:00
anozdrin/alik@ibm.
dcf7be8cf3 Disable im_life_cycle in 5.0. 2007-05-14 19:25:03 +04:00
df@pippilotta.erinye.com
496ca71350 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
2007-05-14 15:17:48 +02:00
df@pippilotta.erinye.com
c608256243 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
2007-05-14 15:15:38 +02:00
df@pippilotta.erinye.com
fd8f890ad7 import of fix for bug#28240 2007-05-14 15:11:29 +02:00
df@pippilotta.erinye.com
1409b8f573 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build-work-28358
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.42
2007-05-14 15:09:04 +02:00
dfischer/mysqldev@mysql.com/production.mysql.com
c4cbae6eef Raise version number after cloning 5.0.42 2007-05-14 14:59:23 +02:00