- 16 May, 2007 1 commit
-
-
unknown authored
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. mysql-test/r/insert.result: Update test results. mysql-test/t/insert.test: Add a test case for Bug#21483, Bug#20497, Bug#21714 (INSERT DELAYED and stored routines, triggers). sql/sp_head.cc: Upgrade lock type to TL_WRITE when computing the pre-locking set. sql/sql_base.cc: Use a new method. sql/sql_insert.cc: INSERT DELAYED and pre-locking: - if under pre-locking, upgrade the lock type to TL_WRITE and proceed as a normal write - if DELAYED table has triggers, also request a lock upgrade. - make sure errors in the delayed thread are propagated correctly sql/sql_lex.h: Add a method to check if a parsed tree refers to stored routines.
-
- 10 May, 2007 4 commits
-
-
unknown authored
sql/sql_insert.cc: delayed_insert -> Delayed_insert
-
unknown authored
into vajra.(none):/opt/local/work/mysql-5.0-21483
-
unknown authored
-
unknown authored
of requested lock type and requested table operation from mysql_insert into a separate function. sql/sql_insert.cc: Cleanup: move a number of locking related checks from mysql_insert to a separate function. Add comments.
-
- 08 May, 2007 4 commits
-
-
unknown authored
into adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime mysql-test/r/query_cache.result: Auto merged sql/mysql_priv.h: Auto merged
-
unknown authored
mysql-test/r/query_cache.result: Added 5.0 testcase mysql-test/t/query_cache.test: Added 5.0 test case sql/mysql_priv.h: Added support for div_precision_increment sql/set_var.cc: - Added query cache flush when system variable ft_boolean_syntax is updated since this also invalidates all cached result sets using this variable. sql/sql_cache.cc: - Added the local system variable div_precision_increment as an identification flag for cached queries.
-
unknown authored
into adventure.(none):/home/thek/Development/cpp/bug27792/my50-bug27792 sql/mysql_priv.h: Auto merged mysql-test/r/query_cache.result: Null merge mysql-test/t/query_cache.test: Null merge sql/set_var.cc: Null merge sql/sql_cache.cc: Null merge
-
unknown authored
- Queries in the query cache are identified by the individual characters in the query statement, the current database and the current environment expressed as a set of system variable flags. - Since the set of environment flags didn't properly describe the current environment unexpected results were returned from the query cache. - Query cache is now cleared when the variable ft_boolean_syntax is updated. - An identification flag for the variable default_week_format is added to the query cache record. Thanks to Martin Friebe who has supplied significant parts of this patch. mysql-test/r/query_cache.result: Added test case mysql-test/t/query_cache.test: Added test case sql/mysql_priv.h: - Added missing flags to reflect the significant local environment settings of the cached query. sql/set_var.cc: - Added query cache flush when system variable ft_boolean_syntax is updated since this also invalidates all cached result sets using this variable. sql/sql_cache.cc: - Added another local system variable as an identification flag for cached queries.
-
- 07 May, 2007 2 commits
-
-
unknown authored
into adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
-
unknown authored
- In some cases, flow control optimization implemented in sp::optimize removes hreturn instructions, causing SQL exception handlers to: * never return * execute wrong logic - This patch overrides default short cut optimization on hreturn instructions to avoid this problem. mysql-test/r/sp-code.result: Added test case mysql-test/t/sp-code.test: Added test case sql/sp_head.cc: Override opt_mark to get correct execution paths without jump short cut optimization. sql/sp_head.h: Added override sp_instr_hreturn::opt_shortcut_jump so that jump short cuts aren't performed on hreturn instructions operating on handlers which are set to CONTINUE after interruption.
-
- 02 May, 2007 2 commits
-
-
unknown authored
into weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge mysql-test/t/sp.test: Auto merged sql/item.cc: Auto merged sql/item_func.cc: Auto merged sql/mysql_priv.h: Auto merged sql/sql_lex.cc: Auto merged sql/sql_parse.cc: Auto merged
-
unknown authored
client/Makefile.am: "Makefile" command lines must start with a tab, not with blanks. libmysqld/Makefile.am: "Makefile" command lines must start with a tab, not with blanks. netware/Makefile.am: "Makefile" command lines must start with a tab, not with blanks. scripts/Makefile.am: "Makefile" command lines must start with a tab, not with blanks. win/Makefile.am: After a backslash (to mark a continuation line) there must not be a trailing blank.
-
- 01 May, 2007 2 commits
- 30 Apr, 2007 9 commits
-
-
unknown authored
into damien-katzs-computer.local:/Users/dkatz/mysql50
-
unknown authored
into quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
-
unknown authored
tmpdir has uppercase Fix: don't convert mysql_tmpdir to lower case when building the path to a temporary table mysql-test/include/have_lowercase1.inc: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/include/have_lowercase1.inc mysql-test/r/lowercase1.require: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase1.require mysql-test/r/lowercase_mixed_tmpdir.result: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase_mixed_tmpdir.result mysql-test/t/lowercase_mixed_tmpdir-master.opt: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.opt mysql-test/t/lowercase_mixed_tmpdir-master.sh: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.sh mysql-test/t/lowercase_mixed_tmpdir.test: BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir.test sql/sql_table.cc: When building the path for a temporary table file, do not convert mysql_tmpdir to lower case; lower_case_table_names should not apply to mysql_tmpdir.
-
unknown authored
into damien-katzs-computer.local:/Users/dkatz/50_frm_files
-
unknown authored
into maint1.mysql.com:/data/localhome/tnurnberg/50-27293
-
unknown authored
mysqldump didn't properly handle getting no data on SHOW CREATE PROCEDURE. If S/C/P fails (due to dumping user's insufficient privileges on mysql.proc, say), mysqldump will print a comment to that effect to the output and return an error-code. If the -f (force) option is used, the dump will continue, otherwise, it will abort right there and then. Also fixes Bug#22761, "mysqldump reports no errors when using --routines without mysql.proc privileges" --- Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint into mysql.com:/home/tnurnberg/27293/50-27293 client/mysqldump.c: Bug#27293: mysqldump crashes when dumping procedure defined by different user handle failure of SHOW CREATE PROCEDURE, give user diagnostics, heed -f (force) option mysql-test/r/mysqldump.result: Bug#27293: mysqldump crashes when dumping procedure defined by different user show that trying to mysqldump --routines with insufficient privileges will no longer crash the client --- manual merge mysql-test/t/mysqldump.test: Bug#27293: mysqldump crashes when dumping procedure defined by different user show that trying to mysqldump --routines with insufficient privileges will no longer crash the client --- manual merge
-
unknown authored
-
unknown authored
into olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24856 sql/item_func.h: Auto merged sql/sql_select.cc: Auto merged mysql-test/r/olap.result: Manual merge. mysql-test/t/olap.test: Manual merge.
-
unknown authored
-
- 29 Apr, 2007 14 commits
-
-
unknown authored
some rollup rows (rows with NULLs for grouping attributes) if GROUP BY list contained constant expressions. This happened because the results of constant expressions were not put in the temporary table used for duplicate elimination. In fact a constant item from the GROUP BY list of a ROLLUP query can be replaced for an Item_null_result object when a rollup row is produced . Now the JOIN::rollup_init function wraps any constant item referenced in the GROYP BY list of a ROLLUP query into an Item_func object of a special class that is never detected as constant item. This ensures creation of fields for such constant items in temporary tables and guarantees right results when the result of the rollup operation first has to be written into a temporary table, e.g. in the cases when duplicate elimination is required. mysql-test/r/olap.result: Added a test case for bug #24856. mysql-test/t/olap.test: Added a test case for bug #24856. sql/item_func.h: Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack some rollup rows (rows with NULLs for grouping attributes) if GROUP BY list contained constant expressions. Itroduced class Item_func_rollup_const derived from Item_func. The object of this class are never detected as constant items. We use them for wrapping constant items from the GROUP BY list of any ROLLUP query. This wrapping allows us to ensure writing constant items into temporary tables whenever the result of the ROLLUP operation has to be written into a temporary table, e.g. when ROLLUP is used together with DISTINCT in the SELECT list. sql/sql_select.cc: Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack some rollup rows (rows with NULLs for grouping attributes) if GROUP BY list contained constant expressions. Now the JOIN::rollup_init function wraps any constant item referenced in the GROYP BY list of a ROLLUP query into an Item_func object of a special class that is never detected as constant item. This ensures creation of fields for such constant items in temporary tables and guarantees right results when the result of the rollup operation first has to be written into a temporary table, e.g. in the cases when duplicate elimination is required.
-
unknown authored
into moonbone.local:/mnt/gentoo64/work/16377-bug-5.0-opt-mysql
-
unknown authored
The test case for the bug#27590 is altered. mysql-test/t/type_datetime.test: The test case for the bug#27590 is altered. mysql-test/r/type_datetime.result: The test case for the bug#27590 is altered.
-
unknown authored
into mysql.com:/d2/hf/mrg/mysql-5.0-opt
-
unknown authored
into mysql.com:/d2/hf/mrg/mysql-5.0-opt CMakeLists.txt: Auto merged sql/ha_innodb.cc: Auto merged sql/item_cmpfunc.cc: Auto merged tests/mysql_client_test.c: Auto merged mysql-test/r/innodb_mysql.result: merging mysql-test/t/innodb_mysql.test: merging
-
unknown authored
into mysql.com:/d2/hf/mrg/mysql-4.1-opt
-
unknown authored
If isinf() is not available on a target platform, use our own imlementation via finite() and isnan(). If either of the last two is not available as well, use simple replacements which are platform-neutral, but slower than compiler intrinsics.
-
unknown authored
-
unknown authored
into gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt-13191 sql/key.cc: Patch to eliminate compilation errors under VC after bug #13191 fix.
-
unknown authored
-
unknown authored
into gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt-13191 mysql-test/r/innodb_mysql.result: SCCS merged mysql-test/t/innodb_mysql.test: SCCS merged sql/field.cc: Merge with 4.1, fix of bug #13191. sql/field.h: Merge with 4.1, fix of bug #13191. sql/key.cc: Merge with 4.1, fix of bug #13191.
-
unknown authored
into gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt-13191
-
unknown authored
into gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt
-
unknown authored
-
- 28 Apr, 2007 2 commits
-
-
unknown authored
INSERT...ON DUPLICATE KEY UPDATE may cause error 1032: "Can't find record in ..." if we are inserting into InnoDB table unique index of partial key with underlying UTF-8 string field. This error occurs because INSERT...ON DUPLICATE uses a wrong procedure to copy string fields of multi-byte character sets for index search. mysql-test/t/innodb_mysql.test: Added test case for bug #13191. mysql-test/r/innodb_mysql.result: Added test case for bug #13191. sql/field.h: Fixed bug #13191. Field_string::get_key_image() virtual function was overloaded to implement copying of variable length character (UTF-8) fields. Field::get_key_image() function prototype has been changed to return byte size of copied data. sql/field.cc: Fixed bug #13191. Field_string::get_key_image() virtual function was overloaded to implement copying of variable length character (UTF-8) fields. Field::get_key_image() function prototype has been changed to return byte size of copied data. sql/key.cc: Fixed bug #13191. INSERT...ON DUPLICATE KEY UPDATE may cause error 1032: "Can't find record in ...". This error occurs because INSERT...ON DUPLICATE uses a wrong procedure to copy field parts for index search. key_copy() function has been fixed.
-
unknown authored
into gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt
-