into xiphis.org:/usr/home/antony/work2/p2-bug10109.4
mysql-test/t/insert_update.test:
Auto merged
mysql-test/r/insert_update.result:
Auto merged
sql/sql_class.h:
discard bug10109 changes from 4.1
sql/sql_insert.cc:
merge bug10109 from 4.1 to 5.0
sql/sql_parse.cc:
discard bug10109 changes from 4.1
into mysql.com:/home/psergey/mysql-5.0-bug12228-r5
mysql-test/r/type_bit.result:
Auto merged
mysql-test/t/sp-threads.test:
Auto merged
mysql-test/t/type_bit.test:
Auto merged
sql/sp.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
mysql-test/r/sp-threads.result:
Testcase for BUG#12228
mysql-test/t/sp-threads.test:
Testcase for BUG#12228
sql/sp_cache.cc:
BUG#12228: Post-review fixes: small code cleanup
sql/sp_cache.h:
BUG#12228: Post-review fixes: fixed the comment
sql/sql_parse.cc:
BUG#12228: Post-review fixes: in mysql_parse, flush obsolete SPs from the caches only if
the query hasn't been handled by the query cache.
sql/sql_prepare.cc:
BUG#12228: Post-review fixes: in mysql_stmt_prepare/execute, flush SP caches
"closer to the execution"
cursors (+ commit)" and Bug#11832 "Server crash with InnoDB + Cursors"
See comments to the changed files.
innobase/include/read0read.h:
- add cursor_view_t::n_mysql_tables_in_use
innobase/read/read0read.c:
- maintain cursor_view_t::n_mysql_tables_in_use. InnoDB
maintains trx->n_mysql_tables_in_use to know when it can auto-commit
a read-only statement. When this count drops to zero,
MySQL has ended processing of such statement and InnoDB can commit.
Cursors should not break this invariant, and should exclude the tables
used in a cursor from the count of active tables.
When a cursor is closed, the number of its tables is added back,
to ensure that close_thread_tables->unlock_external->
ha_innobase::external_lock(F_UNLCK) won't drop the count in trx
below zero.
innobase/row/row0sel.c:
- remove the restoration of the global read view from
row_search_for_mysql: MySQL may call row_search_for_mysql
more than once when fetching a row for a cursor (e.g. if there
is a WHERE clause that filters out some rows).
sql/ha_innodb.cc:
- add more verbose printout for the case when we close an InnoDB
connection without priorlly issuing a commit or rollback. The problem
should be investigated.
tests/mysql_client_test.c:
- add a test case for Bug#12243 "MySQL Server crashes with 2 cursors
(+ commit)"
subqry order by server crash": failing DBUG_ASSERT(curr_join == this)
when opening a cursor.
Ensure that for top-level join curr_join == join (always),
and thus fix the failing assert.
curr_join is a hack to ensure that uncacheable subqueries can be
re-evaluated safely, and should be never different from main join
in case of top-level join.
sql/sql_select.cc:
- utilize tmp_join only if we evaluate an uncacheable subquery.
sql/sql_select.h:
- implement JOIN::is_top_level_join()
tests/mysql_client_test.c:
A test case for Bug#11901 "mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY
join in subqry order by server crash"
We should not allow FLUSH statement to be executed inside both triggers
and stored functions.
mysql-test/r/sp-error.result:
Updated test after replacing error, which is thrown when one uses FLUSH
statement inside of stored function, with more specific.
Also now we issue more general error when we barking about USE command
in stored routines.
mysql-test/r/trigger.result:
Added test for bug #12280 "Triggers: crash if flush tables"
mysql-test/t/sp-error.test:
Updated test after replacing error, which is thrown when one uses FLUSH
statement inside of stored function, with more specific.
Also now we issue more general error when we barking about USE command
in stored routines.
mysql-test/t/trigger.test:
Added test for bug #12280 "Triggers: crash if flush tables"
sql/share/errmsg.txt:
Removed ER_SP_NO_USE error. Now we use more general ER_SP_BADSTATEMENT in this
case. Instead added error message for barking about statements which should not
be allowed inside of stored functions or triggers.
It is safe to do this since it is highly unprobable that someone will upgrade
first to the new 5.0 release and then downgrade back to the old one.
sql/sql_parse.cc:
reload_acl_and_cache():
FLUSH TABLES and FLUSH PRIVILEGES should not be allowed if we are inside
of stored function or trigger.
sql/sql_yacc.yy:
We should not allow FLUSH statement inside both triggers and stored
functions. Replaced error which is thrown in this case with more
specific.
Also now we issue more general ER_SP_BADSTATEMENT error when one tries
to use USE command inside of stored routine.
str_alloc had been added but was not added to mysqlclient and strings
libmysql should have had strings as a dependent.
VC++Files/client/mysqlclient.vcproj:
Added missing file
VC++Files/mysql.sln:
Make libmysql dependendent on strings
VC++Files/strings/strings.vcproj:
Added missing file
When PRIMARY KEY is present ha_innobase::cmp_ref() uses it to compare refs.
After comparing part of key it moves pointers to compare next part.
For varchar parts pointers were moved only by length of parts, not including
bytes containig part length itself. This results in wrong comparision and
wrong number of deleted records.
sql/ha_innodb.cc:
Fix bug #12340 ha_innobase::cmp_ref() moves pointers by wrong length.
mysql-test/t/innodb.test:
Test case for bug #12340 ha_innobase::cmp_ref() moves pointers by wrong length.
mysql-test/r/innodb.result:
Test case for bug #12340 ha_innobase::cmp_ref() moves pointers by wrong length.
server-tools/instance-manager/IMService.cpp:
syntax change requested by Petr
server-tools/instance-manager/options.cc:
return 1 instead of -1
server-tools/instance-manager/options.h:
changed return value of setup_windows_defaults to int from void
server-tools/instance-manager/IMService.cpp:
make sure HandleServiceOptions returns 0 on success and 1 on failure
server-tools/instance-manager/mysqlmanager.cc:
default return value is 1.
simplify some code bits by just jumping to err on error.
move options.cleanup inside the err block. In this case, the err block
is more than just an error block. It is the terminating block
for both error and success. You set return_value to 0 for success
or leave it as 1 for failure. This simplies this function a bit.
server-tools/instance-manager/options.cc:
remove the malloc for default password filename on Windows and replace
with statically allocated memory.
default Options:saved_argv to NULL so that we will know if we need
to free it in cleanup()
setup the default config file location for Windows inside the
setup_windows_defaults function and remove this code from load()
rework setup_windows_defaults so that it properly returns 0 on success
and 1 on error and so it fills in the default location for the
log file, password file, and config file.
server-tools/instance-manager/IMService.cpp:
removed \n from log_info calls as these will be added automatically
server-tools/instance-manager/user_map.cc:
added back in support for password files using \r\n, this time
without breaking the const contract.
sql/ha_innodb.cc:
Don't print not critical warning if log_warnings is not set
Use sql_print_warning() instead of fprintf().
(We should not use fprintf() as this causes problems on windows and with the embedded server)
into mysql.com:/home/dlenev/src/mysql-5.0-is
mysql-test/r/information_schema.result:
Auto merged
mysql-test/t/information_schema.test:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp.cc:
Auto merged
sql/sp.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_show.cc:
Auto merged
mysql-test/r/sp.result:
Manual merge
mysql-test/t/sp.test:
Manual merge
sql/sql_class.h:
Manual merge
* Cleanup SP Cache code, now SP Cache only deletes sp_head objects in
sp_cache_flush_obsolete() invalidates all pointers to routines in the cache.
* Use new SP Cache use contract in the code.
There is no test case because it doesn't seem to be possible to cause thread races to end
the same way they end in heavy-load test. This patch removes the crash in heavy test.
mysql-test/r/type_bit.result:
Drop the tables this test tries to create
mysql-test/r/view.result:
Drop function this test creates
mysql-test/t/type_bit.test:
Drop the tables this test tries to create
mysql-test/t/view.test:
Drop function this test creates
sql/sp.cc:
Fix for BUG#12228: When a routine is deleted/modified, invalidate all cached SPs in all
threads. We need to do so because sp_lex_keeper::{prelocking_tables, query_tables_own_last}
in one SP may depend on another SP sp_lex_keeper::m_lex is using.
sql/sp_cache.cc:
Fix for BUG#12228:
* Move class sp_cache to here from sp_cache.h, document the functions.
* sp_cache_insert, sp_cache_remove, sp_cache_invalidate and sp_cache_lookup must not delete
sp_head* objects as they may be called during SP execution when sp_head objects are used.
* Added sp_cache_flush_obsolete() function that may delete sp_head objects.
* Removed sp_cache_remove as there is no need for it now - when we change one SP we should
invalidate all other SPs, because sp_lex_keeper::{prelocking_tables,
query_tables_own_last} from one SP depend on content of another SP (used in
sp_lex_keeper::m_lex).
sql/sp_cache.h:
Fix for BUG#12228:
* Move class sp_cache to sp_cache.cc it is not needed in .h file
* Added comments
sql/sql_parse.cc:
Fix for BUG#12228: Call new sp_cache_flush_obsolete() function before running the query
sql/sql_prepare.cc:
Fix for BUG#12228: Call new sp_cache_flush_obsolete() function before preparing/executing a PS
CURSOR_TYPE_READ_ONLY nested queries corrupt result"
sql/sql_prepare.cc:
If there is a cursor, use its protocol for fetch:
Protocol instances have a state and thd->protocol_prep can't
be used for multiple cursors.
sql/sql_select.cc:
- init Cursor::protocol
sql/sql_select.h:
- add Cursor::protocol
tests/mysql_client_test.c:
A test case for Bug#11909 "mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY
nested queries corrupt result"
result set".
To enable full access to contents of I_S tables from stored functions
or statements that use them, we manipulate with thread's open tables
state and ensure that we won't cause deadlock when we open tables by
ignoring flushes and name-locks.
Building of contents of I_S.TABLES no longer requires locking of tables
since we use use handler::info() method with HA_STATUS_AUTO flag instead
of handler::update_auto_increment() for obtaining information about
auto-increment values. But this also means that handlers have to implement
support for HA_STATUS_AUTO flag (particularly InnoDB needs it).
mysql-test/r/alter_table.result:
Updated test results. This change was caused by the fact that now when
we build contents of I_S tables (and thus output of SHOW INDEX) we
don't use instances of tables which may be already opened and locked
by thread (we always use new instance).
mysql-test/r/information_schema.result:
Added test which checks how information about current auto-increment value for
table is reported in INFORMATION_SCHEMA.TABLES view.
mysql-test/r/sp.result:
Added test for bug #10055 "Using stored function with information_schema causes
empty result set".
mysql-test/t/information_schema.test:
Added test which checks how information about current auto-increment value for
table is reported in INFORMATION_SCHEMA.TABLES view.
mysql-test/t/sp.test:
Added test for bug #10055 "Using stored function with information_schema causes
empty result set".
sql/mysql_priv.h:
close_thread_tables():
Get rid of 'stopper' argument which is no longer used. Now when we need
to open and then close some table without touching tables which are already
opened we use THD::reset_n/restore_backup_open_tables_state() methods.
open_tables()/open_normal_and_derived_tables():
Added 'flags' argument to be able open tables even if some has done
a flush or hold namelock on them.
sql/sp.cc:
close_proc_table/open_proc_table_for_read/db_find_routine():
Replaced push_open_tables_state/pop_open_tables_state() methods which
were saving/restoring current open tables state in/from THD::open_state_list
with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
methods which assume that backup storage for this state is allocated on
stack (or elsewhere) by their caller.
open_proc_table_for_read():
Since now we can have several open tables states stacked up we can't rely
rely on checking whether we have some tables open in previous state.
Instead we always assume that some tables are open and we need to ignore
flush while locking mysql.proc. We don't really need
MYSQL_LOCK_IGNORE_GLOBAL_READ_LOCK in this case since we open mysql.proc table
only for reading.
sql/sp.h:
Added declarations of open_proc_table_for_read()/close_proc_table() to be
able to use them in sql_show.cc.
sql/sql_base.cc:
close_thread_tables():
Get rid of 'stopper' argument which is no longer used. Now when we need
to open and then close some table without touching tables which are already
opened we use THD::reset_n/restore_backup_open_tables_state() methods.
open_tables()/open_normal_and_derived_tables():
Added 'flags' argument to be able open tables even if some has done
a flush or hold namelock on them.
sql/sql_class.cc:
Open_tables_state, THD:
Replaced push_open_tables_state/pop_open_tables_state() methods which
were saving/restoring current open tables state in/from THD::open_state_list
with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
methods which assume that backup storage for this state is allocated on
stack (or elsewhere) by their caller.
sql/sql_class.h:
Open_tables_state, THD:
Replaced push_open_tables_state/pop_open_tables_state() methods which
were saving/restoring current open tables state in/from THD::open_state_list
with reset_n_backup_open_tables_state/restore_backup_open_tables_state()
methods which assume that backup storage for this state is allocated on
stack (or elsewhere) by their caller.
sql/sql_handler.cc:
open_tables()/open_normal_and_derived_tables():
Added 'flags' argument to be able open tables even if some has done
a flush or hold namelock on them.
sql/sql_prepare.cc:
open_tables()/open_normal_and_derived_tables():
Added 'flags' argument to be able open tables even if some has done
a flush or hold namelock on them.
sql/sql_show.cc:
get_all_tables():
Now we use THD::reset_n_/restore_backup_open_tables_state() for
saving/restoring open tables state instead of working with it directly
(This also allows us to have proper content of I_S system tables in
statements with stored functions and in stored functions). We also
ignore possible flushes when opening tables (we may create deadlock
otherwise). Also we do all needed manipulations with LEX in this function
and not in get_schema_tables_result() now.
get_schema_tables_record():
Let us use handler::info() method with HA_STATUS_AUTO flag for obtaining
information about table's auto-increment value. This allows to avoid locking
of tables which is needed when we use handler::update_auto_increment() method.
fill_schema_proc():
Now we use open_proc_table_for_read/close_proc_table() for access to
mysql.proc table (so we won't cause deadlock if we already have some
tables open and locked, this also allows us to have proper content in
ROUTINES system table in statements using stored functions/in stored
functions).
get_schema_tables_result():
Moved all manipulations with Open_tables_state and LEX needed for
safe opening of tables to ST_SCHEMA_TABLE::fill_table functions
(i.e. get_all_tables() and fill_schema_proc()).
sql/sql_update.cc:
open_tables()/open_normal_and_derived_tables():
Added 'flags' argument to be able open tables even if some has done
a flush or hold namelock on them.