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).
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.
A bug in the restore_prev_nj_state function allowed interleaving
inner tables of outer join operations with outer tables. With the
current implementation of the nested loops algorithm it could lead
to wrong result sets for queries with nested outer joins.
Another bug in this procedure effectively blocked evaluation of some
valid execution plans for queries with nested outer joins.
mysql-test/r/join_nested.result:
Added a test case for bug #29604.
mysql-test/t/join_nested.test:
Added a test case for bug #29604.
Fix the parser to make the database options not optional.
mysql-test/r/information_schema.result:
Update results (Bug#25859)
mysql-test/t/information_schema.test:
Add a test case for Bug#25859 "ALTER DATABASE works w/o parameters"
sql/sql_yacc.yy:
Fix Bug#25859 ALTER DATABASE works w/o parameters - require
parameters in the parser.
Time values were compared as strings. This led to a wrong comparison
result when comparing values one of which is under 100 hours and another is
over 100 hours.
Now when the Arg_comparator::set_cmp_func function sees that both items to
compare are of the TIME type it sets the comparator to the
Arg_comparator::compare_e_int or the Arg_comparator::compare_int_unsigned
functions.
sql/item_cmpfunc.cc:
Bug#29555: Comparing time values as strings may lead to a wrong result.
Now when the Arg_comparator::set_cmp_func function sees that both items to
compare are of the TIME type it sets the comparator to the
Arg_comparator::compare_e_int or the Arg_comparator::compare_int_unsigned
functions.
mysql-test/r/type_time.result:
Added a test case for the bug#29555: Comparing time values as strings may
lead to a wrong result.
mysql-test/t/type_time.test:
Added a test case for the bug#29555: Comparing time values as strings may
lead to a wrong result.
The special `zero' enum value was coerced to the normal
empty string enum value during a field-to-field copy.
This bug affected CREATE ... SELECT statements and
SELECT aggregate GROUP BY enum field statements.
Also this bug made unnecessary warnings during
the execution of CREATE ... SELECT statements:
Warning 1265 Data truncated for column...
sql/field_conv.cc:
Fixed bug #29360.
The field_conv function has been modified to properly convert
the special `zero' enum value between enum fields.
mysql-test/t/type_enum.test:
Updated test case for bug #29360.
mysql-test/r/type_enum.result:
Updated test case for bug #29360.
mysql-test/r/type_ranges.result:
Updated test case for bug #29360.
In case of out-of-memory error received from the master, print the corresponding message to the error log and stop slave I/O thread to avoid reconnecting with a wrong binary log position.
sql/slave.cc:
In case of out-of-memory error received from the master, print the corresponding message to the error log and stop slave I/O thread to avoid reconnecting with a wrong binary log position.
By default MyISAM overwrites .MYD and .MYI files no
DATA DIRECTORY option is used. This can lead to two tables
using the same .MYD and .MYI files (that can't be dropped).
To prevent CREATE TABLE from overwriting a file a new option
is introduced : keep_files_on_create
When this is on the CREATE TABLE throws an error if either
the .MYD or .MYI exists for a MyISAM table.
The option is off by default (resulting in compatible behavior).
include/my_base.h:
Bug #29325: introduce keep_files_on_create
myisam/mi_create.c:
Bug #29325: introduce keep_files_on_create
mysql-test/r/create.result:
Bug #29325: test case
mysql-test/t/create.test:
Bug #29325: test case
sql/ha_myisam.cc:
Bug #29325: introduce keep_files_on_create
sql/set_var.cc:
Bug #29325: introduce keep_files_on_create
sql/sql_class.h:
Bug #29325: introduce keep_files_on_create
sql/sql_table.cc:
Bug #29325: introduce keep_files_on_create
sql/unireg.cc:
Bug #29325: introduce keep_files_on_create
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Fixes:
Bug#9709: InnoDB inconsistensy causes "Operating System Error 32/33"
Bug#22819: SHOW INNODB STATUS crashes the server with an assertion failure under high load
Bug#25645: Assertion failure in file srv0srv.c
Bug#27294: insert into ... select ... causes crash with innodb_locks_unsafe_for_binlog=1
Bug#28138: indexing column prefixes produces corruption in InnoDB
innobase/btr/btr0btr.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1547:
branches/5.0: Merge r1546 from trunk:
When buffering an insert to a prefix index of a variable-length column,
do not incorrectly mark the column as fixed-length. (Bug #28138)
ibuf_entry_build(): Instead of prefix_len, pass fixed_len to
dtype_new_store_for_order_and_null_size(). Add debug assertions.
btr_index_rec_validate(): Correct a comment about prefix indexes.
rec_get_converted_size_new(), rec_convert_dtuple_to_rec_new(): Add
debug assertions and comments.
dict_col_type_assert_equal(): New debug function.
innobase/buf/buf0buf.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1502:
branches/5.0: Add debug code for Bug 26081. This change has some debug
assertions that have been promoted to normal assertions. These will need
to be undone once we've nailed this bug.
innobase/buf/buf0lru.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1502:
branches/5.0: Add debug code for Bug 26081. This change has some debug
assertions that have been promoted to normal assertions. These will need
to be undone once we've nailed this bug.
innobase/ibuf/ibuf0ibuf.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1547:
branches/5.0: Merge r1546 from trunk:
When buffering an insert to a prefix index of a variable-length column,
do not incorrectly mark the column as fixed-length. (Bug #28138)
ibuf_entry_build(): Instead of prefix_len, pass fixed_len to
dtype_new_store_for_order_and_null_size(). Add debug assertions.
btr_index_rec_validate(): Correct a comment about prefix indexes.
rec_get_converted_size_new(), rec_convert_dtuple_to_rec_new(): Add
debug assertions and comments.
dict_col_type_assert_equal(): New debug function.
innobase/include/buf0buf.ic:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1502:
branches/5.0: Add debug code for Bug 26081. This change has some debug
assertions that have been promoted to normal assertions. These will need
to be undone once we've nailed this bug.
innobase/include/buf0lru.h:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1502:
branches/5.0: Add debug code for Bug 26081. This change has some debug
assertions that have been promoted to normal assertions. These will need
to be undone once we've nailed this bug.
innobase/include/dict0dict.h:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1547:
branches/5.0: Merge r1546 from trunk:
When buffering an insert to a prefix index of a variable-length column,
do not incorrectly mark the column as fixed-length. (Bug #28138)
ibuf_entry_build(): Instead of prefix_len, pass fixed_len to
dtype_new_store_for_order_and_null_size(). Add debug assertions.
btr_index_rec_validate(): Correct a comment about prefix indexes.
rec_get_converted_size_new(), rec_convert_dtuple_to_rec_new(): Add
debug assertions and comments.
dict_col_type_assert_equal(): New debug function.
innobase/include/dict0dict.ic:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1547:
branches/5.0: Merge r1546 from trunk:
When buffering an insert to a prefix index of a variable-length column,
do not incorrectly mark the column as fixed-length. (Bug #28138)
ibuf_entry_build(): Instead of prefix_len, pass fixed_len to
dtype_new_store_for_order_and_null_size(). Add debug assertions.
btr_index_rec_validate(): Correct a comment about prefix indexes.
rec_get_converted_size_new(), rec_convert_dtuple_to_rec_new(): Add
debug assertions and comments.
dict_col_type_assert_equal(): New debug function.
innobase/include/dict0mem.h:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1537:
branches/5.0: merge r1536 and partially r1535
Change the comment to a more appropriate one. Discussed with Heikki on IM.
Document that DICT_MAX_INDEX_COL_LEN should not be changed.
innobase/include/os0file.h:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1417:
branches/5.0: Fix Bug#9709 by retrying (forever) if ERROR_SHARING_VIOLATION or
ERROR_LOCK_VIOLATION is encountered during file operation.
This is caused by backup software, so InnoDB should retry while the backup
software is done with the file.
Approved by: Heikki
innobase/include/trx0trx.h:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1463:
branches/5.0: merge r1462 from trunk:
Fix typo in comment.
innobase/lock/lock0lock.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1458:
branches/5.0: Fix Bug#22819, remove assertion. (http://bugs.mysql.com/bug.php?id=22819)
innobase/log/log0log.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1520:
Patch to allow monitor threads to stop before proceeding with normal shutdown.
Also have a separate time counter for tablespace monitor.
reviewed by: Heikki
Revision r1525:
backport of r1524
Log:
Undo bad space formatting introduced in earlier commit r1521
spotted by: Marko
innobase/mtr/mtr0mtr.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1502:
branches/5.0: Add debug code for Bug 26081. This change has some debug
assertions that have been promoted to normal assertions. These will need
to be undone once we've nailed this bug.
innobase/os/os0file.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1417:
branches/5.0: Fix Bug#9709 by retrying (forever) if ERROR_SHARING_VIOLATION or
ERROR_LOCK_VIOLATION is encountered during file operation.
This is caused by backup software, so InnoDB should retry while the backup
software is done with the file.
Approved by: Heikki
innobase/rem/rem0rec.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1547:
branches/5.0: Merge r1546 from trunk:
When buffering an insert to a prefix index of a variable-length column,
do not incorrectly mark the column as fixed-length. (Bug #28138)
ibuf_entry_build(): Instead of prefix_len, pass fixed_len to
dtype_new_store_for_order_and_null_size(). Add debug assertions.
btr_index_rec_validate(): Correct a comment about prefix indexes.
rec_get_converted_size_new(), rec_convert_dtuple_to_rec_new(): Add
debug assertions and comments.
dict_col_type_assert_equal(): New debug function.
innobase/row/row0sel.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1456:
branches/5.0: merge r1452 from trunk:
Fix phantom reads (http://bugs.mysql.com/27197) following Heikki's
patch in the bug followup.
innobase/srv/srv0srv.c:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1460:
branches/5.0: Merge r1459 from trunk:
Fix typo in the comment.
Revision r1520:
Patch to allow monitor threads to stop before proceeding with normal shutdown.
Also have a separate time counter for tablespace monitor.
reviewed by: Heikki
sql/ha_innodb.cc:
Apply innodb-5.0-* snapshots: ss1489 and ss1547.
Revision r1436:
branches/5.0: Fix Bug#27294 by using trx returned by check_trx_exists()
instead of prebuilt->trx. This has been fixed in 5.1 in r782.
Approved by: Heikki
Revision r1443:
branches/5.0: merge r1442 from trunk:
Potential fix for Bug#25645:
"Move innobase_release_stat_resources(trx) outside the 'if' in
ha_innobase::external_lock(). That would add more safety that whatever
MySQL does at a query end, there would be no risk of a hang on the btr
search latch."
Also call innobase_release_temporary_latches() in the beginning of
ha_innobase::close().
Approved by: Heikki
Revision r1454:
branches/5.0: merge r1453 from trunk:
Bugfix: only call innobase_release_temporary_latches() in case of current_thd
is not NULL, otherwise we get NULL pointer dereferencing.
Revision r1504:
branches/5.0: Apply patch for Bug 27650 from MySQL.
Revision r1539:
Backport of r1538 from 5.1
Do not return error in ha_innobase::info if srv_force_recovery >= 4. This is to allow for
normal processing of the query by MySQL instead of generating an error.
Reviewed by: Heikki
dollin' it up for Guilhem ;) -- test streamlined,
better comments, faster code, add'l assert.
mysql-test/r/binlog.result:
Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
streamlined test
mysql-test/t/binlog.test:
Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
streamlined test
sql/log.cc:
Bug#22540: Incorrect value in column End_log_pos of SHOW BINLOG EVENTS using InnoDB
comment clarified
An assertion abort could occur for some grouping queries that employed
decimal user variables with assignments to them.
The problem appeared the constructors of the class Field_new_decimal
because the function my_decimal_length_to_precision did not guarantee
returning decimal precision not greater than DECIMAL_MAX_PRECISION.
mysql-test/r/type_newdecimal.result:
Added a test case for bug #29417.
mysql-test/t/type_newdecimal.test:
Added a test case for bug #29417.
sql/field.cc:
Fixed bug #29417.
An assertion abort could occur for some grouping queries that employed
decimal user variables with assignments to them.
The problem appeared the constructors of the class Field_new_decimal
because the function my_decimal_length_to_precision did not guarantee
returning decimal precision not greater than DECIMAL_MAX_PRECISION.
Now if the precision returned by calls to my_decimal_length_to_precision
in the constructors of the class Field_new_decimal is greater than
DECIMAL_MAX_PRECISION the precision is set to this value.
The cast operation ignored the cases when the precision and/or the scale exceeded
the limits, 65 and 30 respectively. No errors were reported in these cases.
For some queries this may lead to an assertion abort.
Fixed by throwing errors for such cases.
mysql-test/r/type_newdecimal.result:
Added a test case for bug #29415.
mysql-test/t/type_newdecimal.test:
Added a test case for bug #29415.
For GCov builds, if the server crashes, the normal exit handler for writing
coverage information is not executed due to the abnormal termination.
Fix this by explicitly calling the __gcov_flush function in our crash handler.
The need arose when working on Bug 26141, where it became
necessary to replace TABLE_LIST with its forward declaration in a few
headers, and this involved a lot of s/TABLE_LIST/st_table_list/.
Although other workarounds exist, this patch is in line
with our general strategy of moving away from typedef-ed names.
Sometime in future we might also rename TABLE_LIST to follow the
coding style, but this is a huge change.
sql/item.cc:
st_table_list -> TABLE_LIST
sql/item.h:
st_table_list -> TABLE_LIST
sql/mysql_priv.h:
st_table_list -> TABLE_LIST
sql/sql_base.cc:
st_table_list -> TABLE_LIST
sql/sql_lex.cc:
st_table_list -> TABLE_LIST
sql/sql_lex.h:
st_table_list -> TABLE_LIST
sql/sql_select.cc:
st_table_list -> TABLE_LIST
sql/sql_show.cc:
st_table_list -> TABLE_LIST
sql/sql_udf.h:
Was not needed.
sql/table.cc:
st_table_list -> TABLE_LIST
sql/table.h:
st_table_list -> TABLE_LIST
into labbari.dsl.inet.fi:/home/my/bk/mysql-5.0-marvel
libmysql/libmysql.c:
Auto merged
mysql-test/r/innodb_mysql.result:
Manual merge from main 5.1 to 5.1-marvel.
mysql-test/t/innodb_mysql.test:
Manual merge from main 5.1 to 5.1-marvel.
The SELECT INTO OUTFILE FIELDS ENCLOSED BY digit or minus sign,
followed by the same LOAD DATA INFILE statement, used wrond encoding
of non-string fields contained the enclosed character in their text
representation.
Example:
SELECT 15, 9 INTO OUTFILE 'text' FIELDS ENCLOSED BY '5';
Old encoded result in the text file:
5155 595
^ was decoded as the 1st enclosing character of the 2nd field;
^ was skipped as garbage;
^ ^ was decoded as a pair of englosing characters of the 1st field;
^ was decoded as traling space of the first field;
^^ was decoded as a doubled enclosed character.
New encoded result in the text file:
51\55 595
^ ^ pair of enclosing characters of the 1st field;
^^ escaped enclosed character.
sql/sql_class.h:
Fixed bug #29442.
The NUMERIC_CHARS macro constant has been defined to enumerate
all possible characters of a numeric value text representation.
The select_export::is_unsafe_field_sep boolean flag has been added
to apply the encoding algorithm to non-string values when it is
necessary.
sql/sql_class.cc:
Fixed bug #29442.
The select_export::send_data method has been modified to encode text
representation of fields of all data types like string fields.
mysql-test/t/loaddata.test:
Updated test case for bug #29442.
mysql-test/r/loaddata.result:
Updated test case for bug #29442.