we now have exclusive name lock on the table name in mysql_rm_table_part2,
we still should keep LOCK_open - some storage engines are not
ready for locking scope change and assume that LOCK_open is kept.
Still, the binary logging and query cache invalidation calls
moved out of LOCK_open scope.
Fixes some of the broken 5.1-runtime tests (tests break on asserts).
sql/ha_ndbcluster.cc:
Do not lock LOCK_open for mysql_rm_table_part2 - it does that
for us now.
sql/mysql_priv.h:
Remove an unused flag.
sql/sql_class.h:
Fix an unrelated compiler warning.
sql/sql_db.cc:
Adjust to the changed signature.
sql/sql_table.cc:
mysql_rm_table_part2: we need to keep LOCK_open while calling
storage engine functions, even though now
we have an exclusive lock on the table name. Some of them assume that it's
kept and attempt to unlock it.
Minor fix for test case of bug #29325 to make emb test happy.
mysql-test/t/symlink.test:
Minor fix for test case of bug #29325 to make emb test happy.
mysql-test/r/symlink.result:
Minor fix for test case of bug #29325 to make emb test happy.
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-maint
mysql-test/suite/ndb/t/ndb_multi.test:
Auto merged
mysql-test/suite/ndb/t/ndb_multi_row.test:
Auto merged
Problem: the data file changes made during delete/update are not visible to
other threads as the file is reopened, so reading data
with old descriptors might miss the changes.
Fix: reopen the data file before reading if it was reopened during
delete/update to ensure there's no data behind.
Note: there's no simple test case.
storage/csv/ha_tina.cc:
Fix for bug #29253: csv table reportedly marked as crashed
- use the data file version technic to ensure we always see changes
made by other threads:
a) increase share->data_file_version each time we reopen the data
file, i.e. at the end of update/delete.
b) compare the local data file version with the shared one each time
we want to read data, reopen it if they differ.
storage/csv/ha_tina.h:
Fix for bug #29253: csv table reportedly marked as crashed
- use the data file version technic to ensure we always see changes
made by other threads:
a) increase share->data_file_version each time we reopen the data
file, i.e. at the end og update/delete.
b) compare the local data file version with shared one each time
we want to read data, reopen it if they differ.
gettimeofday() can fail and presumably, so can time().
Keep an eye on it.
Since we have no data on this at all so far, we just
retry on failure (and log the event), assuming that
this is just an intermittant failure. This might of
course hang the threat until we succeed. Once we know
more about these failures, an appropriate more clever
scheme may be picked (only try so many times per thread,
etc., if that fails, return last "good" time() we got or
some such). Using sql_print_information() to log as this
probably only occurs in high load scenarios where the debug-
trace likely is disabled (or might interfere with testing
the effect). No test-case as this is a non-deterministic
issue.
sql/mysql_priv.h:
Bug#27198: Error returns from time() are ignored
move declarations for log.cc to before inclusion of
sql_class.h as we now use sql_print_information() in
there.
sql/sql_class.h:
Bug#27198: Error returns from time() are ignored
gettimeofday() can fail and presumably, so can time().
Keep an eye on it.
- return HA_KEY_SCAN_NOT_ROR flag for HASH indexes;
- Fix ha_heap::cmp_ref() to work with BTREE index scans.
mysql-test/r/index_merge.result:
BUG#29740: testcase
mysql-test/t/index_merge.test:
BUG#29740: testcase
sql/ha_heap.h:
BUG#29740: Wrong query results for index_merge/union over HEAP table.
- make HEAP table engine return HA_KEY_SCAN_NOT_ROR flag for HASH
indexes,as HASH index does not guarantee any ordering for rows
within the hash bucket.
- Fix BTREE indexes: make ha_heap::cmp_ref() compare the rowids in the
same way as ha_key_cmp() does.
sql/opt_range.cc:
BUG#29740: Fix comment about ROR scans.
into gleb.loc:/home/uchum/work/bk/5.1-opt
mysql-test/r/create_not_windows.result:
Auto merged
mysql-test/r/join_nested.result:
Auto merged
mysql-test/r/symlink.result:
Auto merged
mysql-test/r/type_ranges.result:
Auto merged
mysql-test/r/type_time.result:
Auto merged
mysql-test/t/create.test:
Auto merged
mysql-test/t/create_not_windows.test:
Auto merged
mysql-test/t/symlink.test:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/create.result:
Merge with 5.0-opt.
mysql-test/r/type_enum.result:
Merge with 5.0-opt.
mysql-test/t/type_enum.test:
Merge with 5.0-opt.
sql/field_conv.cc:
Merge with 5.0-opt.
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-maint
sql/ha_ndbcluster.h:
Auto merged
sql/set_var.cc:
Auto merged
storage/ndb/tools/restore/restore_main.cpp:
Auto merged
mysql-test/include/have_ndb.inc:
manual merge
mysql-test/t/disabled.def:
manual merge
client/mysqltest.c:
When opening a new connecgtion, changed mysqltest to prefer a brand new connection slot over an existing, closed slot. Fixes a problem with reused slots that can cause tests to fail.
into damien-katzs-computer.local:/Users/dkatz/mysql51
extra/yassl/include/yassl_int.hpp:
Auto merged
extra/yassl/src/yassl_int.cpp:
Auto merged
mysql-test/r/mysqltest.result:
Auto merged
mysql-test/t/mysqltest.test:
Auto merged
BitKeeper/deleted/.del-ssl_big.test:
Delete: mysql-test/t/ssl_big.test
extra/yassl/include/yassl_int.hpp:
added comment
extra/yassl/src/yassl_int.cpp:
Changed init order to fix a compiler warning.
mysql-test/r/mysqltest.result:
There is no limit to connections anymore.
mysql-test/t/mysqltest.test:
There is no limit to connections anymore.
into damien-katzs-computer.local:/Users/dkatz/mysql51
client/mysqltest.c:
Auto merged
extra/yassl/include/openssl/ssl.h:
Auto merged
extra/yassl/include/yassl_int.hpp:
Auto merged
extra/yassl/src/ssl.cpp:
Auto merged
extra/yassl/src/yassl_int.cpp:
Auto merged
sql/slave.cc:
Auto merged
vio/viossl.c:
SCCS merged
Added an option to yassl to allow "quiet shutdown" like openssl does. This option causes the SSL libs to NOT perform the close_notify handshake during shutdown. This fixes a hang we experience because we hold a lock during socket shutdown.
mysql-test/t/ssl_big.test:
BitKeeper file /Users/dkatz/50/mysql-test/t/ssl_big.test
mysql-test/r/ssl-big.result:
BitKeeper file /Users/dkatz/50/mysql-test/r/ssl-big.result
client/mysqltest.c:
Added new command to mysqltest to send a quit command to the server, but to not close the actual socket on our end.
Also changed code to reuse connection slots, so that the tests can open and close sockets in a loop.
extra/yassl/include/openssl/ssl.h:
Added C accessors to the quietShutdown option.
extra/yassl/include/yassl_int.hpp:
Added quietShutdown_ member and accessor methods to the SSL class.
extra/yassl/src/ssl.cpp:
Added accessors to get/set the quietShutdown option and to not perform the shutdown handshake if quietShutdown is set.
extra/yassl/src/yassl_int.cpp:
Added quietShutdown_ member and accessor methods to the SSL class.
vio/viossl.c:
Added line to set the quiet_shutdown option before shutting down the socket.
mysql-test/t/ssl-big.test:
Added a test that causes an unpatched server to hang during SSL socket shutdown.
hangs 100% cpu
Moved a test case for BUG#29464 into fulltext3.test, since it requires big5
character set.
mysql-test/r/fulltext.result:
Moved a test case for BUG#29464 into fulltext3.test, since it requires big5
character set.
mysql-test/r/fulltext3.result:
Moved a test case for BUG#29464 into fulltext3.test, since it requires big5
character set.
mysql-test/t/fulltext.test:
Moved a test case for BUG#29464 into fulltext3.test, since it requires big5
character set.
mysql-test/t/fulltext3.test:
Moved a test case for BUG#29464 into fulltext3.test, since it requires big5
character set.
Part 2:
Searching fulltext index for a word with boolean mode truncation
operator may cause infinite loop.
The problem was that "smarter index merge" was used with "trunc-words",
which must never happen.
Affects 5.1 only.
mysql-test/r/fulltext.result:
Addition to a test case for BUG#29445.
mysql-test/t/fulltext.test:
Addition to a test case for BUG#29445.
storage/myisam/ft_boolean_search.c:
Fulltext "smarter index merge" optimization assumes that rows
it gets are ordered by doc_id. That is not the case when we
search for a word with truncation operator. It may return
rows in random order. Thus we may not use "smarter index merge"
optimization with "trunc-words".
Also fixed compiler warning introduced by Part 1 patch.
incomplete in 5.0 (and review fixes).
When in 5.0.13 I introduced class Prepared_statement and methods
::prepare and ::execute, general logging was left out of this class.
This was good for stored procedures, since in stored procedures
we do not log sub-statements, but introduced a regression in case of SQL
syntax for prepared statements, as previously we would log the actual
statements to the log, and after the change we would log only
COM_QUERY text.
Restore the old behavior, but still suppress logging if inside a stored
procedure.
Based on a community contributed patch from Vladimir Shebordaev.
No test case since we do not have a mechanism to test output
of the general log.
sql/sql_prepare.cc:
Apply community contributed fix for Bug#13326 SQLPS statement logging is
incomplete in 5.0 (and review fixes).
Time values were compared by the BETWEEN function as strings. This led to a
wrong result in cases when some of arguments are less than 100 hours and other
are greater.
Now if all 3 arguments of the BETWEEN function are of the TIME type then
they are compared as integers.
mysql-test/t/type_time.test:
Added a tes tcase for the bug#29739: Incorrect time comparison in BETWEEN.
mysql-test/r/type_time.result:
Added a tes tcase for the bug#29739: Incorrect time comparison in BETWEEN.
sql/item_cmpfunc.cc:
Bug#29739: Incorrect time comparison in BETWEEN.
Now if all 3 arguments of the BETWEEN function are of the TIME type then
they are compared as integers.
causes full table lock on innodb table.
Also fixes Bug#28502 Triggers that update another innodb table
will block on X lock unnecessarily (duplciate).
Code review fixes.
Both bugs' synopses are misleading: InnoDB table is
not X locked. The statements, however, cannot proceed concurrently,
but this happens due to lock conflicts for tables used in triggers,
not for the InnoDB table.
If a user had an InnoDB table, and two triggers, AFTER UPDATE and
AFTER INSERT, competing for different resources (e.g. two distinct
MyISAM tables), then these two triggers would not be able to execute
concurrently. Moreover, INSERTS/UPDATES of the InnoDB table would
not be able to run concurrently.
The problem had other side-effects (see respective bug reports).
This behavior was a consequence of a shortcoming of the pre-locking
algorithm, which would not distinguish between different DML operations
(e.g. INSERT and DELETE) and pre-lock all the tables
that are used by any trigger defined on the subject table.
The idea of the fix is to extend the pre-locking algorithm to keep track,
for each table, what DML operation it is used for and not
load triggers that are known to never be fired.
mysql-test/r/trigger-trans.result:
Update results (Bug#26141)
mysql-test/r/trigger.result:
Update results (Bug#28502)
mysql-test/t/trigger-trans.test:
Add a test case for Bug#26141 mixing table types in trigger causes
full table lock on innodb table.
mysql-test/t/trigger.test:
Add a test case for Bug#28502 Triggers that update another innodb
table will block echo on X lock unnecessarily. Add more test
coverage for triggers.
sql/item.h:
enum trg_event_type is needed in table.h
sql/sp.cc:
Take into account table_list->trg_event_map when determining
what tables to pre-lock.
After this change, if we attempt to fire a
trigger for which we had not pre-locked any tables, error
'Table was not locked with LOCK TABLES' will be printed.
This, however, should never happen, provided the pre-locking
algorithm has no programming bugs.
Previously a trigger key in the sroutines hash was based on the name
of the table the trigger belongs to. This was possible because we would
always add to the pre-locking list all the triggers defined for a table when
handling this table.
Now the key is based on the name of the trigger, owing
to the fact that a trigger name must be unique in the database it
belongs to.
sql/sp_head.cc:
Generate sroutines hash key in init_spname(). This is a convenient
place since there we have all the necessary information and can
avoid an extra alloc.
Maintain and merge trg_event_map when adding and merging elements
of the pre-locking list.
sql/sp_head.h:
Add ,m_sroutines_key member, used when inserting the sphead for a
trigger into the cache of routines used by a statement.
Previously the key was based on the table name the trigger belonged
to, since for a given table we would add to the sroutines list
all the triggers defined on it.
sql/sql_lex.cc:
Introduce a new lex step: set_trg_event_type_for_tables().
It is called when we have finished parsing but before opening
and locking tables. Now this step is used to evaluate for each
TABLE_LIST instance which INSERT/UPDATE/DELETE operation, if any,
it is used in.
In future this method could be extended to aggregate other information
that is hard to aggregate during parsing.
sql/sql_lex.h:
Add declaration for set_trg_event_type_for_tables().
sql/sql_parse.cc:
Call set_trg_event_type_for_tables() after MYSQLparse(). Remove tabs.
sql/sql_prepare.cc:
Call set_trg_event_type_for_tables() after MYSQLparse().
sql/sql_trigger.cc:
Call set_trg_event_type_for_tables() after MYSQLparse().
sql/sql_trigger.h:
Remove an obsolete member.
sql/sql_view.cc:
Call set_trg_event_type_for_tables() after MYSQLparse().
sql/sql_yacc.yy:
Move assignment of sp_head::m_type before calling sp_head::init_spname(),
one is now used inside another.
sql/table.cc:
Implement TABLE_LIST::set_trg_event_map() - a method that calculates
wh triggers may be fired on this table when executing a statement.
sql/table.h:
Add missing declarations.
Move declaration of trg_event_type from item.h (it will be needed for
trg_event_map bitmap when we start using Bitmap template instead
of uint8).
causing wrong error message in Falcon
An error message about a duplicate key could show a wrong key
value when not all columns of the key were used to select the
rows for update.
Some storage engines return a record with only the selected
columns filled.
This is fixed by re-reading the record with a read_set which
includes all columns of the duplicate key after a duplicate key
error happens and before the error message is printed.
mysql-test/r/ndb_update.result:
Bug#28158 - table->read_set is set incorrectly,
causing wrong error message in Falcon
Added test result.
mysql-test/t/ndb_update.test:
Bug#28158 - table->read_set is set incorrectly,
causing wrong error message in Falcon
Added test from falcon_bug_28158.
sql/sql_update.cc:
Bug#28158 - table->read_set is set incorrectly,
causing wrong error message in Falcon
Added a function for re-reading a record with a read_set
that contains all fields used by a duplicate key.
Called the function before every call to handler::print_error(),
which could print a duplicate key value.
into adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
mysql-test/t/query_cache.test:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/handler.h:
Auto merged
mysql-test/r/query_cache.result:
SCCS merged
A race condition in the integration between MyISAM and the query cache code
caused the query cache to fail to invalidate itself on concurrently inserted
data.
This patch fix this problem by using the existing handler interface which, upon
each statement cache attempt, compare the size of the table as viewed from the
cache writing thread and with any snap shot of the global table state. If the
two sizes are different the global table size is unknown and the current
statement can't be cached.
mysql-test/r/query_cache.result:
Added test case
mysql-test/t/query_cache.test:
Added test case
sql/ha_myisam.cc:
- Implemented handler interface for ha_myisam class to dermine if the table
belonging to the currently processed statement can be cached or not.
sql/ha_myisam.h:
- Implemented handler interface for ha_myisam class to dermine if the table
belonging to the currently processed statement can be cached or not.
sql/handler.h:
- Documented register_query_cache_table method in the handler interface.