- 06 Mar, 2007 1 commit
-
-
unknown authored
Bug 18914 (Calling certain SPs from triggers fail) Bug 20713 (Functions will not not continue for SQLSTATE VALUE '42S02') Bug 21825 (Incorrect message error deleting records in a table with a trigger for inserting) Bug 22580 (DROP TABLE in nested stored procedure causes strange dependency error) Bug 25345 (Cursors from Functions) This fix resolves a long standing issue originally reported with bug 8407, which affect the behavior of Stored Procedures, Stored Functions and Trigger in many different ways, causing symptoms reported by all the bugs listed. In all cases, the root cause of the problem traces back to 8407 and how the server locks tables involved with sub statements. Prior to this fix, the implementation of stored routines would: - compute the transitive closure of all the tables referenced by a top level statement - open and lock all the tables involved - execute the top level statement "transitive closure of tables" means collecting: - all the tables, - all the stored functions, - all the views, - all the table triggers - all the stored procedures involved, and recursively inspect these objects definition to find more references to more objects, until the list of every object referenced does not grow any more. This mechanism is known as "pre-locking" tables before execution. The motivation for locking all the tables (possibly) used at once is to prevent dead locks. One problem with this approach is that, if the execution path the code really takes during runtime does not use a given table, and if the table is missing, the server would not execute the statement. This in particular has a major impact on triggers, since a missing table referenced by an update/delete trigger would prevent an insert trigger to run. Another problem is that stored routines might define SQL exception handlers to deal with missing tables, but the server implementation would never give user code a chance to execute this logic, since the routine is never executed when a missing table cause the pre-locking code to fail. With this fix, the internal implementation of the pre-locking code has been relaxed of some constraints, so that failure to open a table does not necessarily prevent execution of a stored routine. In particular, the pre-locking mechanism is now behaving as follows: 1) the first step, to compute the transitive closure of all the tables possibly referenced by a statement, is unchanged. 2) the next step, which is to open all the tables involved, only attempts to open the tables added by the pre-locking code, but silently fails without reporting any error or invoking any exception handler is the table is not present. This is achieved by trapping internal errors with Prelock_error_handler 3) the locking step only locks tables that were successfully opened. 4) when executing sub statements, the list of tables used by each statements is evaluated as before. The tables needed by the sub statement are expected to be already opened and locked. Statement referencing tables that were not opened in step 2) will fail to find the table in the open list, and only at this point will execution of the user code fail. 5) when a runtime exception is raised at 4), the instruction continuation destination (the next instruction to execute in case of SQL continue handlers) is evaluated. This is achieved with sp_instr::exec_open_and_lock_tables() 6) if a user exception handler is present in the stored routine, that handler is invoked as usual, so that ER_NO_SUCH_TABLE exceptions can be trapped by stored routines. If no handler exists, then the runtime execution will fail as expected. With all these changes, a side effect is that view security is impacted, in two different ways. First, a view defined as "select stored_function()", where the stored function references a table that may not exist, is considered valid. The rationale is that, because the stored function might trap exceptions during execution and still return a valid result, there is no way to decide when the view is created if a missing table really cause the view to be invalid. Secondly, testing for existence of tables is now done later during execution. View security, which consist of trapping errors and return a generic ER_VIEW_INVALID (to prevent disclosing information) was only implemented at very specific phases covering *opening* tables, but not covering the runtime execution. Because of this existing limitation, errors that were previously trapped and converted into ER_VIEW_INVALID are not trapped, causing table names to be reported to the user. This change is exposing an existing problem, which is independent and will be resolved separately. mysql-test/r/information_schema_db.result: Revised the pre-locking code implementation, aligned the tests. mysql-test/r/sp-error.result: Revised the pre-locking code implementation, aligned the tests. mysql-test/r/sp.result: Revised the pre-locking code implementation, aligned the tests. mysql-test/r/trigger.result: Revised the pre-locking code implementation, aligned the tests. mysql-test/r/view.result: Revised the pre-locking code implementation, aligned the tests. mysql-test/t/sp-error.test: Revised the pre-locking code implementation, aligned the tests. mysql-test/t/sp.test: Revised the pre-locking code implementation, aligned the tests. mysql-test/t/trigger.test: Revised the pre-locking code implementation, aligned the tests. sql/lock.cc: table->placeholder now checks for schema_table sql/mysqld.cc: my_message_sql(): invoke internal exception handlers sql/sp_head.cc: exec_open_and_lock_tables(): open and lock tables, or return the continuation destination of this instruction sql/sp_head.h: exec_open_and_lock_tables(): open and lock tables, or return the continuation destination of this instruction sql/sql_base.cc: Prelock_error_handler: delay open table errors until execution sql/sql_class.cc: THD: add internal error handler, as an exception mechanism. sql/sql_class.h: THD: add internal error handler, as an exception mechanism. sql/sql_update.cc: table->placeholder now checks for schema_table sql/table.cc: st_table_list::hide_view_error(): masked more errors for view security sql/table.h: table->placeholder now checks for schema_table, and unopened tables
-
- 25 Jan, 2007 3 commits
-
-
unknown authored
into moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0-bug23527 sql/sql_cache.cc: Auto merged
-
unknown authored
high load MySQL server could crash if two or more threads would initiate query cache resize at the moments very close in time. The problem was introduced with the fix of bug 21051 in 5.0 and 5.1: simultaneous query cache resizes would wait for the first one in progress, but then each thread would try to finish the operation, accessing the data that was already reset (attempt to dereference 'bins' pointer, which may be NULL already). The solution is to check after synchronization if another thread has done the reset already (test 'query_cache_size > 0' again). No test case is provided because the bug is a subject to a race. sql/sql_cache.cc: We release 'structure_guard_mutex' in flush_cache(), so after the call we check if another thread had reset the cache before us.
-
unknown authored
into mockturtle.local:/home/dlenev/src/mysql-5.0-merge
-
- 24 Jan, 2007 16 commits
-
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines mysql-test/t/myisam.test: Auto merged
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines mysql-test/r/symlink.result: Auto merged mysql-test/t/symlink.test: Auto merged sql/table.cc: Auto merged mysql-test/r/myisam.result: Manually merged. mysql-test/t/myisam.test: Manually merged.
-
unknown authored
the team tree for additional investigation.
-
unknown authored
into mockturtle.local:/home/dlenev/src/mysql-5.0-merge mysql-test/t/disabled.def: Auto merged mysql-test/t/ps.test: Auto merged
-
unknown authored
into chilla.local:/home/mydev/mysql-5.0-bug24607 mysql-test/r/myisam.result: Auto merged mysql-test/t/myisam.test: Auto merged
-
unknown authored
After merge fix
-
unknown authored
into chilla.local:/home/mydev/mysql-5.0-bug24607 mysql-test/r/myisam.result: Manual merged mysql-test/t/myisam.test: Manual merged
-
unknown authored
Fixed test. On 32-bit machines which compile without -DBIG_TABLES, MAX_ROWS is truncated to a 32-bit value. Using a value below 4G is portable. mysql-test/r/myisam.result: Bug#24607 - MyISAM pointer size determined incorrectly Fixed test results.
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-5.0-build-work sql/ha_ndbcluster.cc: Auto merged
-
unknown authored
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/BUG24401/mysql-5.0-engines mysql-test/r/myisam.result: Auto merged mysql-test/t/myisam.test: Auto merged
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/BUG24401/mysql-5.0-engines
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/BUG24401/mysql-4.1-engines
-
unknown authored
into willster.(none):/home/stewart/Documents/MySQL/5.0/ndb-work
-
unknown authored
ndb/src/common/util/SocketClient.cpp: fix two problems recently introduced: - HPUX build problem - some connect errors not being detected properly
-
unknown authored
into poseidon.mysql.com:/home/tomas/mysql-5.0-ndb sql/mysqld.cc: Auto merged sql/sql_class.cc: Auto merged
-
- 23 Jan, 2007 12 commits
-
-
unknown authored
into chilla.local:/home/mydev/mysql-4.1-bug24607 mysql-test/r/myisam.result: Auto merged mysql-test/t/myisam.test: Auto merged
-
unknown authored
into chilla.local:/home/mydev/mysql-5.0-bug24607 mysql-test/r/myisam.result: Auto merged mysql-test/t/myisam.test: Auto merged
-
unknown authored
into clam.ndb.mysql.com:/export/space/pekka/ndb/version/my50-ndb
-
unknown authored
into willster.(none):/home/stewart/Documents/MySQL/5.0/bug25487
-
unknown authored
into mockturtle.local:/home/dlenev/src/mysql-5.0-bg24491 sql/item.h: Auto merged mysql-test/r/ps.result: Manual merge. mysql-test/t/ps.test: Manual merge.
-
unknown authored
into mysql.com:/home/svoj/devel/mysql/BUG24401/mysql-5.0-engines myisam/mi_open.c: Auto merged
-
unknown authored
on duplicate key". INSERT ... SELECT ... ON DUPLICATE KEY UPDATE which was used in stored routine or as prepared statement and which in its ON DUPLICATE KEY clause erroneously tried to assign value to a column mentioned only in its SELECT part was properly emitting error on the first execution but succeeded on the second and following executions. Code which is responsible for name resolution of fields mentioned in UPDATE clause (e.g. see select_insert::prepare()) modifies table list and Name_resolution_context used in this process. It uses Name_resolution_context_state::save_state/restore_state() to revert these modifications. Unfortunately those two methods failed to revert properly modifications to TABLE_LIST::next_name_resolution_table and this broke name resolution process for successive executions. This patch fixes Name_resolution_context_state::save_state/restore_state() in such way that it properly handles TABLE_LIST::next_name_resolution_table. mysql-test/r/ps.result: Added test case for bug#24491 "using alias from source table in insert ... on duplicate key" mysql-test/r/sp-error.result: Added test case for bug#24491 "using alias from source table in insert ... on duplicate key" mysql-test/t/ps.test: Added test case for bug#24491 "using alias from source table in insert ... on duplicate key" mysql-test/t/sp-error.test: Added test case for bug#24491 "using alias from source table in insert ... on duplicate key" sql/item.h: Name_resolution_context::save_state/restore_state(): At the moment these methods are used only by code implementing INSERT and INSERT ... SELECT statements. This code doesn't modify 'next_name_resolution_table' member of table list element corresponding to the first table of SELECT clause (pointed by 'first_name_resolution_table'). But it modifies table list element corresponding to the target table of INSERT (pointed by 'table_list') So these methods were changed to reflect this.
-
unknown authored
sql/ha_ndbcluster.cc: bug#25562 use byte-size max_data_length() when setting blob part size
-
unknown authored
ndb/src/common/transporter/Transporter.cpp: change so timeout is rounded up to nearest second
-
unknown authored
aim is to: a) if set_connect_timeout called, timeout connect attempt (for retry on next call) after timeout period b) preserve existing blocking behaviour otherwise (for, e.g. mgmapi) Related to customer issue with long time deleting ndb_cluster_connection object. believe we're hanging on the connect(2) call until timeout (when we then realise we should exit the thread). ndb/include/mgmapi/mgmapi.h: add ndb_mgm_set_connect_timeout ndb/include/util/SocketClient.hpp: add timeout (seconds) for max time to wait for connection ndb/src/common/transporter/Transporter.cpp: set limit on amount of time we'll wait for tcp connect ndb/src/common/util/SocketClient.cpp: only try to connect for a maximum of timeout time ndb/src/mgmapi/mgmapi.cpp: add ndb_mgm_set_connect_timeout
-
unknown authored
Fix bug in event handling wrt early node shutdown ndb/src/mgmsrv/MgmtSrvr.cpp: Fix bug in event handling wrt early node shutdown ndb/src/ndbapi/ClusterMgr.cpp: Fix reportNodeFailed if only connected wo/ having received any API_REGCONF ndb/src/ndbapi/ClusterMgr.hpp: Fix reportNodeFailed if only connected wo/ having received any API_REGCONF ndb/src/ndbapi/SignalSender.cpp: Fix memleak
-
unknown authored
- post review changes
-
- 22 Jan, 2007 8 commits
-
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-5.0-build
-
unknown authored
- make sure keys are copied correctly when varchar has 2 length bytes - test case mysql-test/r/ndb_basic.result: bug#25746 ndb: 4209 error with 2 VARCHAR primary keys - test case mysql-test/t/ndb_basic.test: bug#25746 ndb: 4209 error with 2 VARCHAR primary keys - test case sql/ha_ndbcluster.cc: bug#25746 ndb: 4209 error with 2 VARCHAR primary keys - make sure keys are copied correctly when varchar has 2 length bytes
-
unknown authored
Do not propagate this change into main trees. mysql-test/t/disabled.def: Enbled im_daemon_life_cycle.imtest
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-5.0-build-work BUILD/check-cpu: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/t/myisam.test: Auto merged scripts/mysqld_multi.sh: Auto merged
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-5.0-build-work BUILD/check-cpu: Auto merged
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-5.0-build-work scripts/mysqld_multi.sh: Auto merged
-
unknown authored
into kahlann.erinye.com:/home/df/mysql/build/mysql-4.1-build-work scripts/mysqld_multi.sh: Auto merged
-
unknown authored
-