- 01 Nov, 2006 1 commit
-
-
unknown authored
This is a performance issue for queries with subqueries evaluation of which requires filesort. Allocation of memory for the sort buffer at each evaluation of a subquery may take a significant amount of time if the buffer is rather big. With the fix we allocate the buffer at the first evaluation of the subquery and reuse it at each subsequent evaluation. mysql-test/r/subselect.result: Added a test case for bug #21727. mysql-test/t/subselect.test: Added a test case for bug #21727. sql/item_subselect.h: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added an implementation for Item_subselect::is_uncacheable() returning TRUE if the engine if the subselect is uncacheable. sql/mysql_priv.h: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added a new boolean parameter to the filesort_free_buffers procedure. If the value of this parameter is TRUE the procedure frees the sort_keys buffpek buffers. sql/records.cc: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added a new boolean parameter to the filesort_free_buffers procedure. If the value of this parameter is TRUE the procedure frees the sort_keys buffpek buffers. sql/sql_base.cc: Fixed bug #21727. Made sure that st_table::pos_in_table_list would be always initialized. sql/sql_select.cc: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added a new boolean parameter to the filesort_free_buffers procedure. If the value of this parameter is TRUE the procedure frees the sort_keys buffpek buffers. sql/sql_show.cc: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added a new boolean parameter to the filesort_free_buffers procedure. If the value of this parameter is TRUE the procedure frees the sort_keys buffpek buffers. sql/sql_table.cc: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Cleanup. sql/table.cc: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added st_table_list::in_subselect() returning for a table the subselect that contains the FROM list this table is taken from (if there is any). sql/table.h: Fixed bug #21727. This is a performance issue for queries with subqueries evaluation of which requires filesort. Added fields for sort_keys and buffpek buffers to the FILESORT_INFO structure.
-
- 16 Oct, 2006 2 commits
-
-
unknown authored
account predicates that become sargable after reading const tables. In some cases this resulted in choosing non-optimal execution plans. Now info of such potentially saragable predicates is saved in an array and after reading const tables we check whether this predicates has become saragable. mysql-test/r/select.result: Added a test case for bug #19579. mysql-test/t/select.test: Added a test case for bug #19579. sql/item_cmpfunc.cc: Fixed bug #19579: at range analysis optimizer did not take into account predicates that become sargable after reading const tables. Added a counter of between predicates. sql/sql_base.cc: Fixed bug #19579: at range analysis optimizer did not take into account predicates that become sargable after reading const tables. Added a counter of between predicates. sql/sql_lex.cc: Fixed bug #19579: at range analysis optimizer did not take into account predicates that become sargable after reading const tables. Added a counter of between predicates. sql/sql_lex.h: Fixed bug #19579: at range analysis optimizer did not take into account predicates that become sargable after reading const tables. Added a counter of between predicates. sql/sql_select.cc: Fixed bug #19579: at range analysis optimizer did not take into account predicates that become sargable after reading const tables. Now info of such potentially saragable predicates is saved in an array and after reading const tables we check whether this predicates has become saragable.
-
unknown authored
When resolving unqualified name references MySQL was not checking what is the item type for the reference. Thus e.g a string literal item that has by convention a name equal to its string value will also work as a reference to a SELECT list item or a table field. Fixed by allowing only Item_ref or Item_field to referenced by (unqualified) name. mysql-test/r/func_gconcat.result: Bug #14019: group by converts literal string to column name - removed undeterministic testcase : order by a constant means no order. mysql-test/r/group_by.result: Bug #14019: group by converts literal string to column name - test case mysql-test/t/func_gconcat.test: Bug #14019: group by converts literal string to column name - removed undeterministic testcase : order by a constant means no order. mysql-test/t/group_by.test: Bug #14019: group by converts literal string to column name - test case sql/sql_base.cc: Bug #14019: group by converts literal string to column name - resolve unqualified by name refs only for real references
-
- 28 Sep, 2006 1 commit
-
-
unknown authored
On an INSERT into an updatable but non-insertable view an error message was issued stating the view being not updatable. This can lead to a confusion of a user. A new error message is introduced. Is is showed when a user tries to insert into a non-insertable view. sql/sql_base.cc: Fixed bug#5505: Wrong error message on INSERT into a view The update_non_unique_table_error() function now issues proper error for an INSERT. sql/sql_insert.cc: Fixed bug#5505: Wrong error message on INSERT into a view Issue the ER_NON_INSERTABLE_TABLE error instead of the ER_NON_UPDATABLE_TABLE on insert into a view. sql/sql_view.cc: Fixed bug#5505: Wrong error message on INSERT into a view Issue the ER_NON_INSERTABLE_TABLE error instead of the ER_NON_UPDATABLE_TABLE on insert into a view. mysql-test/r/view.result: Added the test case for bug#5505: Wrong error message on INSERT into a view Corrected a few test cases after fixing bug#5505 mysql-test/t/view.test: Added the test case for bug#5505: Wrong error message on INSERT into a view Corrected a few test cases after fixing bug#5505 sql/share/errmsg.txt: Fixed bug#5505: Wrong error message on INSERT into a view Added the ER_NON_INSERTABLE_TABLE error definition.
-
- 12 Sep, 2006 1 commit
-
-
unknown authored
The cause of the bug was an incomplete fix for bug 18080. The problem was that setup_tables() unconditionally reset the name resolution context to its 'tables' argument, which pointed to the first table of an SQL statement. The bug fix limits resetting of the name resolution context in setup_tables() only in the cases when the context was not set by earlier parser/optimizer phases. mysql-test/r/insert_select.result: Test for BUG#21774. mysql-test/t/insert_select.test: Test for BUG#21774. sql/sql_base.cc: Do not reset the name resolution contect unconditionally. Instead set the context to 'tables' only if it was not set before calling setup_tables(). sql/sql_insert.cc: Added asserts to make sure that in the case of INSERT ... VALUES ... statements it is not necessary to reset the name resolution context to the first table, because there is only one table in the list of tables anyway. The actual code is not removed in order not to confuse it with the actual bug fix. sql/sql_parse.cc: Removed unnecessary reset of the name resolution context. The context is anyway unconditionally reset in mysql_insert() and mysql_prepare_insert().
-
- 21 Aug, 2006 1 commit
-
-
unknown authored
the problem is described and resolved by 20919 which fix happened not to have got to the release tree. Applying the patch of the parent bug. sql/sql_base.cc: BUG#21582 mysql server crashes in close_temporary_tables appeared to be a dup of 20919. Applying the patch of the latter to fix this but in specific mysql-5.0-release tree.
-
- 15 Aug, 2006 1 commit
-
-
unknown authored
SELECT right instead of INSERT right was required for an insert into to a view. This wrong behaviour appeared after the fix for bug #20989. Its intention was to ask only SELECT right for all tables except the very first for a complex INSERT query. But that patch has done it in a wrong way and lead to asking a wrong access right for an insert into a view. The setup_tables_and_check_access() function now accepts two want_access parameters. One will be used for the first table and the second for other tables. mysql-test/t/view.test: Added a test case for bug#21261: Wrong access rights was required for an insert into a view mysql-test/r/view.result: Added a test case for bug#21261: Wrong access rights was required for an insert into a view sql/sql_update.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view Modified to use updated setup_tables_and_check_access() function. sql/sql_select.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view Modified to use updated setup_tables_and_check_access() function. sql/sql_load.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view Modified to use updated setup_tables_and_check_access() function. sql/sql_insert.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view Modified to use updated setup_tables_and_check_access() function. sql/sql_delete.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view Modified to use updated setup_tables_and_check_access() function. sql/sql_base.cc: Fixed bug#21261: Wrong access rights was required for an insert into a view The setup_tables_and_check_access() function now accepts two want_access parameters. One will be used for the first table and the second for other tables. sql/mysql_priv.h: Fixed bug#21261: Wrong access rights was required for an insert into a view The setup_tables_and_check_access() function now accepts two want_access parameters.
-
- 08 Aug, 2006 1 commit
-
-
unknown authored
Correct memory leak fix sql/unireg.h: Correct memory leak fix sql/table.cc: Correct memory leak fix sql/sql_view.h: Correct memory leak fix sql/sql_view.cc: Correct memory leak fix sql/sql_lex.h: Correct memory leak fix sql/sql_base.cc: Correct memory leak fix
-
- 25 Jul, 2006 1 commit
-
-
unknown authored
When executing INSERT over a view with calculated columns it was assuming all elements of the fields collection are actually Item_field instances. This may not be true when inserting into a view and that view has columns that are such expressions that allow updating (like setting a collation for example). Corrected to access field information through the filed_for_view_update() function and retrieve correctly the field info even for "update-friendly" non-Item_field items. mysql-test/r/view.result: Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called - test suite mysql-test/t/view.test: Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called - test suite sql/item_strfunc.h: Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called - obvious typo fixed sql/sql_base.cc: Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE clause is called - must access field information through the filed_for_view_update() function to retrieve correctly the field info even for "update-friendly" non-Item_field items.
-
- 21 Jul, 2006 1 commit
-
-
unknown authored
The problem was that store_top_level_join_columns() incorrectly assumed that the left/right neighbor of a nested join table reference can be only at the same level in the join tree. The fix checks if the current nested join table reference has no immediate left/right neighbor, and if so chooses the left/right neighbors of the nearest upper level, where these references are != NULL. mysql-test/r/group_min_max.result: Test for BUG#21007. mysql-test/t/group_min_max.test: Test for BUG#21007. sql/sql_base.cc: After computing and materializing the columns of all NATURAL joins in a FROM clause, the procedure store_top_level_join_columns() has to change the current natural join into a leaf table reference for name resolution. For this it needs to make the left neighbor point to the natural join table reference, and the natural join itself point to its left neighbor. This fix correctly determines the left/right neighbors of a table reference, even if the neghbors are at higher levels in the nested join tree. The rule is that if a table reference has no immediate left/right neighbors, we recursively pick the left/right neighbor of the level(s) above.
-
- 09 Jul, 2006 1 commit
-
-
unknown authored
closing temp tables through end_thread had a flaw in binlog-off branch of close_temporary_tables where next table to close was reset via table->next for (table= thd->temporary_tables; table; table= table->next) which was wrong since the current table instance got destoyed at close_temporary(table, 1); The fix adapts binlog-on branch method to engage the loop's internal 'next' variable which holds table->next prior table's destoying. sql/sql_base.cc: no-binlog branch is fixed: scanning across temporary_tables must be careful to save next table since the current is being destroyed inside of close_temporary. binlog-is-open case is ok.
-
- 26 Jun, 2006 1 commit
-
-
unknown authored
Addendum fixes after changing the condition variable for the global read lock. The stress test suite revealed some deadlocks. Some were related to the new condition variable (COND_global_read_lock) and some were general problems with the global read lock. It is now necessary to signal COND_global_read_lock whenever COND_refresh is signalled. We need to wait for the release of a global read lock if one is set before every operation that requires a write lock. But we must not wait if we have locked tables by LOCK TABLES. After setting a global read lock a thread waits until all write locks are released. mysql-test/r/lock_multi.result: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Added test results. mysql-test/t/lock_multi.test: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Added tests for possible deadlocks that did not occur with the stress test suite. mysys/thr_lock.c: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Added a protection against an infinite loop that occurs with the test case for Bug #20662. sql/lock.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Signal COND_global_read_lock whenever COND_refresh is signalled by using the new function broadcast_refresh(). Added the definition of a new function that signals COND_global_read_lock whenever COND_refresh is signalled. sql/mysql_priv.h: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Added a declaration for a new function that signals COND_global_read_lock whenever COND_refresh is signalled. sql/sql_base.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Signal COND_global_read_lock whenever COND_refresh is signalled by using the new function broadcast_refresh(). sql/sql_handler.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Signal COND_global_read_lock whenever COND_refresh is signalled by using the new function broadcast_refresh(). sql/sql_insert.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Removed global read lock handling from inside of INSERT DELAYED. It is handled on a higher level now. sql/sql_parse.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Wait for the release of a global read lock if one is set before every operation that requires a write lock. But don't wait if locked tables exist already. sql/sql_table.cc: Bug#16986 - Deadlock condition with MyISAM tables Addendum fixes after changing the condition variable for the global read lock. Removed global read lock handling from inside of CREATE TABLE. It is handled on a higher level now. Signal COND_global_read_lock whenever COND_refresh is signalled by using the new function broadcast_refresh().
-
- 21 Jun, 2006 1 commit
-
-
unknown authored
schemas The function check_one_table_access() called to check access to tables in SELECT/INSERT/UPDATE was doing additional checks/modifications that don't hold in the context of setup_tables_and_check_access(). That's why the check_one_table() was split into two : the functionality needed by setup_tables_and_check_access() into check_single_table_access() and the rest of the functionality stays in check_one_table_access() that is made to call the new check_single_table_access() function. mysql-test/r/view_grant.result: Bug #20482: failure on Create join view with sources views/tables in different schemas - test suite for the bug mysql-test/t/view_grant.test: Bug #20482: failure on Create join view with sources views/tables in different schemas - test suite for the bug sql/mysql_priv.h: Bug #20482: failure on Create join view with sources views/tables in different schemas - check_one_table_access split into 2 sql/sql_base.cc: Bug #20482: failure on Create join view with sources views/tables in different schemas - the new sub-function called sql/sql_parse.cc: Bug #20482: failure on Create join view with sources views/tables in different schemas - check_one_table_access() split into two : check_single_table_access() to actually check access to the table(ro) and check_one_table_access() that calls check_single_table_access() and checks also the tables belonging to sub selects or implicitly opened tables.
-
- 08 Jun, 2006 1 commit
-
-
unknown authored
query Problem: There was a wrong context assigned to the columns that were added in insert_fields() when expanding a '*'. When this is done in a prepared statement it causes fix_fields() to fail to find the table that these columns reference. Actually the right context is set in setup_natural_join_row_types() called at the end of setup_tables(). However when executed in a context of a prepared statement setup_tables() resets the context, but setup_natural_join_row_types() was not setting it to the correct value assuming it has already done so. Solution: The top-most, left-most NATURAL/USING join must be set as a first_name_resolution_table in context even when operating on prepared statements. mysql-test/r/join.result: testsuite for the bug mysql-test/t/join.test: testsuite for the bug sql/sql_base.cc: The context must be set even when executed as prepared statement.
-
- 01 Jun, 2006 1 commit
-
-
unknown authored
-
- 30 May, 2006 1 commit
-
-
unknown authored
refers to a column name. mysql-test/r/select.result: Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX refers to a column name. Added a new test case. mysql-test/t/select.test: Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX refers to a column name. Added a new test case. sql/share/czech/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/danish/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/dutch/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/english/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/estonian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/french/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/german/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/greek/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead.\ sql/share/hungarian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/italian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/japanese-sjis/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead.\ sql/share/japanese/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/korean/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/norwegian-ny/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/norwegian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/polish/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/portuguese/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/romanian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/russian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/serbian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/slovak/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/spanish/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/swedish/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead. sql/share/ukrainian/errmsg.txt: Removed error message ER_INDEX_DOES_NOT_EXIST, used ER_KEY_DOES_NOT_EXITS instead.
-
- 28 May, 2006 1 commit
-
-
unknown authored
refers to a column name. Added a new error message ER_INDEX_DOES_NOT_EXIST. include/mysqld_error.h: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. include/sql_state.h: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. mysql-test/r/explain.result: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. mysql-test/r/key_cache.result: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. mysql-test/r/preload.result: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. mysql-test/r/select.result: Added a test case for bug #17873. mysql-test/t/explain.test: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. mysql-test/t/select.test: Added a test case for bug #17873. sql/share/czech/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/danish/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/dutch/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/english/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/estonian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/french/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/german/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/greek/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/hungarian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/italian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/japanese-sjis/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/japanese/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/korean/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/norwegian-ny/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/norwegian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/polish/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/portuguese/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/romanian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/russian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/serbian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/slovak/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/spanish/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/swedish/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST. sql/share/ukrainian/errmsg.txt: Fixed bug #17873. Added a new error message ER_INDEX_DOES_NOT_EXIST.
-
- 26 May, 2006 1 commit
-
-
unknown authored
The check for view security was lacking several points : 1. Check with the right set of permissions : for each table ref that participates in a view there were the right credentials to use in it's security_ctx member, but these weren't used for checking the credentials. This makes hard enforcing the SQL SECURITY DEFINER|INVOKER property consistently. 2. Because of the above the security checking for views was just ruled out in explicit ways in several places. 3. The security was checked only for the columns of the tables that are brought into the query from a view. So if there is no column reference outside of the view definition it was not detecting the lack of access to the tables in the view in SQL SECURITY INVOKER mode. The fix below tries to fix the above 3 points. mysql-test/r/grant.result: removed nondeterminism (unspecified order) in some test output mysql-test/r/view_grant.result: Somewhat extended test case for the bug and similar queries. mysql-test/t/grant.test: removed nondeterminism (unspecified order) in some test output mysql-test/t/view_grant.test: Somewhat extended test case for the bug and similar queries. sql/mysql_priv.h: A wrapper for setup_tables that also checks access to the tables sql/sql_acl.cc: removed artificial security check stop and used the table ref's credentials. sql/sql_base.cc: a wrapper for setup_tables to check access to the tables sql/sql_delete.cc: wrapper called. sql/sql_insert.cc: wrapper called sql/sql_load.cc: wrapper called sql/sql_parse.cc: wrapper called and artificial check stop removed sql/sql_select.cc: wrapper called sql/sql_update.cc: wrapper called sql/table.cc: Mask table access to the view error as well.
-
- 24 May, 2006 1 commit
-
-
unknown authored
Replaced COND_refresh with COND_global_read_lock becasue of a bug in NTPL threads when using different mutexes as arguments to pthread_cond_wait() The original code caused a hang in FLUSH TABLES WITH READ LOCK in some circumstances because pthread_cond_broadcast() was not delivered to other threads. This fixes: Bug#16986: Deadlock condition with MyISAM tables Bug#20048: FLUSH TABLES WITH READ LOCK causes a deadlock mysql-test/r/flush.result: Added test case for deadlock with FLUSH TABLES WITH READ LOCK mysql-test/r/lock_multi.result: Test for bug in LOCK TABLE + optimize table mysql-test/t/flush.test: Added test case for deadlock with FLUSH TABLES WITH READ LOCK mysql-test/t/lock_multi.test: Test for bug in LOCK TABLE + optimize table sql/lock.cc: Replaced COND_refresh with COND_global_read_lock becasue of a bug in NTPL threads when using different mutexes as arguments to pthread_cond_wait() The original code caused a hang in FLUSH TABLES WITH READ LOCK in some circumstances because pthread_cond_broadcast() was not delivered to other threads sql/mysql_priv.h: Added COND_global_read_lock sql/mysqld.cc: Added COND_global_read_lock sql/sql_base.cc: More DBUG statements Added a broadcast in remove_table_from_cache() to release any threads waiting in open
-
- 15 May, 2006 1 commit
-
-
unknown authored
specific to 5.0 version of the patch is motivated by the fact that a wrapper over MYSQLLOG::write can not help in 5.0 where query's charset is embedded into event instance in the constructor. sql/mysql_priv.h: this 4.1 specific code does not help in 5.0 sql/sql_base.cc: No wrapper similar to 4.1's version is done since Query_log_event constructor takes care of encodings in 5.0 whereas log::write method does it in 4.1. We can introduce an additional constuctor for Query_log_event to pass desired (i.e system_character_info) charset different from THD's version. But I am delaying this while there are not more bugs similar to this one reported.
-
- 14 May, 2006 1 commit
-
-
unknown authored
manual merge to account 5.0 specific names of TABLE class sql/mysql_priv.h: manual merge: changing to 5.0's TABLE class names sql/sql_base.cc: manual merge: whitespaces and 5.0 TABLE's names
-
- 12 May, 2006 1 commit
-
-
unknown authored
A pattern to generate binlog for DROPped temp table in close_temporary_tables was buggy: could not deal with a grave-accent-in-name table. The fix exploits `append_identifier()' for quoting and duplicating accents. mysql-test/r/rpl_temporary.result: results changed mysql-test/t/rpl_temporary.test: more correct internal table emulation; typo of @@session in bug#17263. sql/mysql_priv.h: bool is_user_table(TABLE * table) is added to answer wheather temporary table was created explicitly. sql/sql_base.cc: Utilizing `append_identifier' to quote. `close_temporary_tables' once again recoded I hope to become much simplier than previously. No-binlog branch is separated completely the rest that adopts String's methods.
-
- 09 May, 2006 2 commits
-
-
unknown authored
Binlog lacks encoding info about DROPped temporary table. Idea of the fix is to switch temporary to system_charset_info when a temporary table is DROPped for binlog. Since that is the server, that automatically, but not the client, who generates the query the binlog should be updated on the server's encoding for the coming DROP. The `write_binlog_with_system_charset()' is introduced to replace similar problematic places in the code. mysql-test/r/drop_temp_table.result: results changed mysql-test/r/mix_innodb_myisam_binlog.result: results changed mysql-test/r/mysqlbinlog.result: results changed mysql-test/r/rpl_temporary.result: results changed mysql-test/t/mysqlbinlog.test: Check roll-forward recovery from binlog where there are DROP temporary tables created in koi8r. mysql-test/t/rpl_temporary.test: Check slave digests binlog with DROP temporary tables created in koi8r. sql/mysql_priv.h: `write_binlog_with_system_charset()' is added to be called when a binlog event is created "implicitly" like DROP temporary table is case of closing connection. sql/sql_base.cc: Idea of the fix is to switch temporary to system_charset_info when a temporary table is DROPped for binlog. Since that is the server, not the client, who generates the query the binlog should be updated on server's encoding for the coming DROP.
-
unknown authored
or implicitly uses stored function gives "Table not locked" error' CREATE TABLE ... SELECT ... statement which was explicitly or implicitly (through view) using stored function gave "Table not locked" error. The actual bug resides in the current locking scheme of CREATE TABLE SELECT code, which first opens and locks tables of the SELECT statement itself, and then, having SELECT tables locked, creates the .FRM, opens the .FRM and acquires lock on it. This scheme opens a possibility for a deadlock, which was present and ignored since version 3.23 or earlier. This scheme also conflicts with the invariant of the prelocking algorithm -- no table can be open and locked while there are tables locked in prelocked mode. The patch makes an exception for this invariant when doing CREATE TABLE ... SELECT, thus extending the possibility of a deadlock to the prelocked mode. We can't supply a better fix in 5.0. mysql-test/r/sp.result: Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly or implicitly uses stored function gives "Table not locked" error' mysql-test/t/sp.test: Added tests for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly or implicitly uses stored function gives "Table not locked" error' sql/mysql_priv.h: Added flag which can be passed to open_table() routine in order to ignore set of locked tables and prelocked mode. We don't need declaration of create_table_from_items() any longer as it was moved into sql_insert.cc and made static. sql/sql_base.cc: open_table(): Added flag which allows open table ignoring set of locked tables and prelocked mode. sql/sql_insert.cc: Moved create_table_from_items() from sql_table.cc to sql_insert.cc as it was not used outside of sql_insert.cc and contains code which is specific for CREATE TABLE ... SELECT. Also now when we are executing CREATE TABLE ... SELECT ... statement which SELECT part requires execution in prelocked mode we ignore set of locked tables in order to get access to the table we just have created. We probably don't want to do this if we are under real LOCK TABLES since it will widen window for deadlock too much. sql/sql_table.cc: Moved create_table_from_items() routine into sql_insert.cc, since it was not used anywhere outside of this file and contains logic which is specific for CREATE TABLE ... SELECT statement.
-
- 23 Apr, 2006 4 commits
-
-
unknown authored
The fix refines the algorithm of generating DROPs for binlog. Temp tables with common pseudo_thread_id are clustered into one query. Consequently one replication event per pseudo_thread_id is generated. mysql-test/r/rpl_temporary.result: results mysql-test/t/rpl_temporary.test: Creating temp tables associated with a set of pseudo_thread_id values within a connection. The aim is to see that slave digest master's binlog consisting of DROP temprorary tables. sql/sql_base.cc: close_temporary_tables is rewritten to generate sequence of DROP temprorary tables with common preudo_thread_id stored in temp table definition.
-
unknown authored
accounting non-ai32 in tmpkeyval. This changeset is supposed to be specifically for 4.1. Another changeset is going to push into 5. sql/sql_base.cc: correction due to uint4korr definition: can not sizeof on not ia32.
-
unknown authored
-
unknown authored
Backporting a changeset made for 5.0. Comments from there: The fix refines the algorithm of generating DROPs for binlog. Temp tables with common pseudo_thread_id are clustered into one query. Consequently one replication event per pseudo_thread_id is generated. mysql-test/r/rpl_temporary.result: results changed mysql-test/t/rpl_temporary.test: test to generate problematic drop in binlog to feed it to restarting slave to see no stop. sql/sql_base.cc: change in drop temprorary tables alg in close_temporary_tables.
-
- 19 Apr, 2006 3 commits
-
-
unknown authored
fixlet corrects return to DBUG_RETURN to restore the balance. sql/sql_base.cc: DBUG_ENTER without DBUG_RETURN in open_table()
-
unknown authored
-
unknown authored
fixlet corrects return to DBUG_RETURN to restore the balance. sql/sql_base.cc: DBUG_ENTER without DBUG_RETURN in open_table()
-
- 02 Mar, 2006 1 commit
-
-
unknown authored
The cause of this bug was a design flaw due to which the list of natural join columns was incorrectly computed and stored for nested joins that are not natural joins, but are operands (possibly indirect) of nested joins. The patch corrects the flaw in a such a way, that the result columns of a table reference are materialized only if it is a leaf table (that is, only if it is a view, stored table, or natural/using join). mysql-test/r/join.result: Added test for BUG#15229 and uncommented failing test cases of BUG#15357 (now fixed by this patch). mysql-test/t/join.test: Added test for BUG#15229 and uncommented failing test cases of BUG#15357 (now fixed by this patch). sql/sql_base.cc: - Do not materialize the result columns of regular nested joins (that are not natural/using joins). - Moved most of the code that creates/adds new natural join column references to the method 'get_or_create_column_ref', and simplified 'mark_common_columns'. - Replaced a call to 'get_or_create_column_ref' with 'get_natural_column_ref' where it is for sure all columns are alredy created. sql/table.cc: - Modified the method 'get_or_create_column_ref' so that it adds itself the newly created natural join columns to the respective table reference. sql/table.h: - Modified the method 'get_or_create_column_ref' so that it adds itself the newly created natural join columns to the respective table reference.
-
- 25 Feb, 2006 1 commit
-
-
unknown authored
- Added empty constructors and virtual destructors to many classes and structs - Removed some usage of the offsetof() macro to instead use C++ class pointers configure.in: Added comment ndb/include/ndbapi/NdbDictionary.hpp: Fixed compiler warnings from gcc 4.0.2 sql/field.cc: Fixed compiler warnings from gcc 4.0.2 sql/handler.h: Fixed compiler warnings from gcc 4.0.2 sql/item.h: Fixed compiler warnings from gcc 4.0.2 sql/item_cmpfunc.h: Fixed compiler warnings from gcc 4.0.2 sql/log_event.h: Fixed compiler warnings from gcc 4.0.2 sql/mysql_priv.h: Fixed compiler warnings from gcc 4.0.2 For find_table_in_list I fixed it to use proper C++ class pointers instead of C style pointers sql/opt_range.cc: Fixed compiler warnings from gcc 4.0.2 sql/parse_file.h: Fixed compiler warnings from gcc 4.0.2 sql/sp_rcontext.h: Fixed compiler warnings from gcc 4.0.2 sql/spatial.h: Fixed compiler warnings from gcc 4.0.2 sql/sql_base.cc: Fixed compiler warnings from gcc 4.0.2 sql/sql_cache.h: Fixed compiler warnings from gcc 4.0.2 sql/sql_class.h: Fixed compiler warnings from gcc 4.0.2 sql/sql_parse.cc: Fixed compiler warnings from gcc 4.0.2 (Not pretty, but seams to work...) sql/sql_select.h: Fixed compiler warnings from gcc 4.0.2 sql/sql_update.cc: Fixed compiler warnings from gcc 4.0.2 sql/table.h: Fixed compiler warnings from gcc 4.0.2 sql/tztime.cc: Fixed compiler warnings from gcc 4.0.2 sql/tztime.h: Fixed compiler warnings from gcc 4.0.2
-
- 24 Feb, 2006 1 commit
-
-
unknown authored
(Needed for "list of pushes" web page and autopush) include/mysql.h: Fix to embedded server to be able to run tests on it libmysql/libmysql.c: Fix to embedded server to be able to run tests on it libmysqld/emb_qcache.cc: Fix to embedded server to be able to run tests on it libmysqld/embedded_priv.h: Fix to embedded server to be able to run tests on it libmysqld/lib_sql.cc: Fix to embedded server to be able to run tests on it libmysqld/libmysqld.c: Fix to embedded server to be able to run tests on it mysql-test/mysql-test-run.sh: Fix to embedded server to be able to run tests on it mysql-test/r/binlog.result: Updated test for embedded server mysql-test/r/ctype_cp932.result: Updated test for embedded server mysql-test/r/innodb.result: Updated test for embedded server mysql-test/r/mysqltest.result: Updated test for embedded server mysql-test/r/query_cache.result: Updated test for embedded server mysql-test/r/query_cache_notembe...
-
- 23 Feb, 2006 1 commit
-
-
unknown authored
sql/sql_base.cc: Cleanup, remove a warning. sql/sql_select.h: Cleanup: remove a warning.
-
- 16 Feb, 2006 1 commit
-
-
unknown authored
trigger starts trigger". In short, the deadlock/crash happened when execution of statement, which used stored functions or activated triggers, coincided with alteration of the tables used by these functions or triggers (in highly concurrent environment). Bug was caused by the incorrect handling of tables from prelocked set in open_tables() functions in situations when refresh happened. This fix replaces old smart but not very robust way of handling tables after refresh (which was closing only old tables), with new one which simply closes all tables opened so far and restarts open_tables(). Also fixed handling of temporary tables in close_tables_for_reopen(). No test case present since bug manifests itself only in concurrent environment. sql/mysql_priv.h: In order to handle correctly case when table list completely consists from tables from prelocked set close_tables_for_reopen() have to accept table list as in/out parameter. sql/sql_base.cc: open_tables(): Removed part of comment which was out of date. Changed handling of case when refresh happens during opening of tables, now instead of having code which decides for each table if it should be closed we simply close all tables. Old code also incorrectly handled tables from prelocked set in this situation which resulted in bug #16593 "Deadlock or crash in stress test for case where triggers starting trigger". close_tables_for_reopen(): Now we correctly handle the case when table list completely consists from tables from prelocked set. Also now we simply close all tables instead leaving temporary tables non-closed (such approach allows easily handle correctly tables from prelocked set). sql/sql_prepare.cc: In order to handle correctly case when table list completely consists from tables from prelocked set close_tables_for_reopen() have to accept table list as in/out parameter. sql/sql_update.cc: In order to handle correctly case when table list completely consists from tables from prelocked set close_tables_for_reopen() have to accept table list as in/out parameter.
-
- 03 Feb, 2006 1 commit
-
-
unknown authored
Fixed that fulltext query + union results in unexpected behaviour. sql/item_func.h: Remove access to table object from cleanup() as the table object may have been dropped earlier (In case of temporary tables or of close_thread_tables() is run before cleanup()) This fixed a bug with access to already freed memory sql/sql_base.cc: Reset variables used by fulltext
-
- 25 Jan, 2006 1 commit
-
-
unknown authored
Small fix after merge of fix for bug#16510 sql/sql_base.cc: Small fix after merge of fix for bug#16510
-
- 23 Jan, 2006 1 commit
-
-
unknown authored
When setup_fields() function finds field named '*' it expands it to the list of all table fields. It does so by checking that the first char of field_name is '*', but it doesn't checks that the '* is the only char. Due to this, when updating table with a field named like '*name', such field is wrongly treated as '*' and expanded. This leads to making list of fields to update being longer than list of the new values. Later, the fill_record() function crashes by dereferencing null when there is left fields to update, but no more values. Added check in the setup_fields() function which ensures that the field expanding will be done only when '*' is the only char in the field name. mysql-test/t/update.test: Added test case for bug#16510: Updating field named like '*name' caused server crash mysql-test/r/update.result: Added test case for bug#16510: Updating field named like '*name' caused server crash sql/sql_base.cc: Fixed bug #16510: Updating field named like '*name' caused server crash. Added check in the setup_fields() function which ensures that the field expanding will be done only when '*' is the only char in the field name.
-
- 10 Jan, 2006 1 commit
-
-
unknown authored
sql/sql_base.cc: Added more comments sql/sql_handler.cc: Re-run fix-fields on condition if table was reopened
-