Two handler objects were present, one was used for an insert and the other for a select
The state of the statistics was local to the handler object and thus the other handler
object didn't notice the insert.
Fix included:
1) Add a new variable key_stat_version added to whenever statistics was considered in need
of update (previously key_stats_ok= FALSE in those places)
2) Add a new handler variable key_stat_version assigned whenever key_stats_ok= TRUE was set
previously
3) Fix records_in_range to return records if records <= 1
4) Fix records_in_range to add 2 to rec_per_key to ensure we don't specify 0 or 1 when it isn't
and thus invoking incorrect optimisations.
5) Fix unique key handling for HEAP table in records_in_range
transaction while holding the lock. Also test to make sure other binlogging issues
reported in the bug have been addressed.
sql/item_func.cc:
fix for BUG#7947
mysql-test/r/rpl_bug7947.result:
New BitKeeper file ``mysql-test/r/rpl_bug7947.result''
mysql-test/t/rpl_bug7947.test:
New BitKeeper file ``mysql-test/t/rpl_bug7947.test''
Initialized usable_keys from table->keys_in_use instead of ~0
in test_if_skip_sort_order(). It was possible that a disabled
index was used for sorting.
mysql-test/r/myisam.result:
Bug#14616 - Freshly imported table returns error 124 when using LIMIT
The test result.
mysql-test/t/myisam.test:
Bug#14616 - Freshly imported table returns error 124 when using LIMIT
The test case.
Fixing latin1 to cp1252, according to
recent changes in ctype-latin1.c.
Index.xml:
Marking latin1_swedish_ci as "compiled"
to avoid its generating into ctype-extra.c.
ctype-extra.c:
Bug#12076 --with-extra-charsets has no effect
All supported dnamic charsets were generated
from sql/share/charsets/*.xml under #ifdefs.
Compiling is to be activated from "configure"
by adding --with-extra-charsets.
I'm not including auto-recreating of ctype-extra.c
into build process for ease purposes.
strings/ctype-extra.c:
Bug#12076 --with-extra-charsets has no effect
All supported dnamic charsets were generated
from sql/share/charsets/*.xml under #ifdefs.
Compiling is to be activated from "configure"
by adding --with-extra-charsets.
I'm not including auto-recreating of ctype-extra.c
into build process for ease purposes.
sql/share/charsets/Index.xml:
Marking latin1_swedish_ci as "compiled"
to avoid its generating into ctype-extra.c.
sql/share/charsets/latin1.xml:
Fixing latin1 to cp1252, according to
recent changes in ctype-latin1.c.
when calculating table->null_fields.
mysql-test/r/create.result:
Testcase for BUG#14480
mysql-test/t/create.test:
Testcase for BUG#14480
sql/sql_table.cc:
BUG#14480: For CREATE ... SELECT ... a field list passed to mysql_prepare_table() contains
instances of create_field for both create-list and select-list. mysql_prepare_table()
matches elements that refer to the same field, and joins them together. When the "join"
is performed, both of create_field structures has already been counted in "null_fields".
This fix makes sure that "null_fields" contains the correct value after two create_field
structures have been joined.
mysql-test/r/csv.result:
correct result file
mysql-test/t/csv.test:
Add test for a bug
sql/examples/ha_tina.cc:
Add O_APPEND flag to my_open. We should always add rows to the end of file
mysql-test/r/csv.result:
update result file
mysql-test/t/csv.test:
Add test for a bug
sql/examples/ha_tina.cc:
sort function should return reverted values for chains to be sorted in
the right orded. don't do a strange memmove
Version for 4.0.
It fixes two problems:
1. The cause of the bug was that we did not check the table version for
the HANDLER ... READ commands. We did not notice when a table was
replaced by a new one. This can happen during ALTER TABLE, REPAIR
TABLE, and OPTIMIZE TABLE (there might be more cases). I call the fix
for this problem "the primary bug fix".
2. mysql_ha_flush() was not always called with a locked LOCK_open.
Though the function comment clearly said it must.
I changed the code so that the locking is done when required. I call
the fix for this problem "the secondary fix".
mysql-test/r/handler.result:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
The test result.
mysql-test/t/handler.test:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
The test case.
sql/mysql_priv.h:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
Changed a definition for the secondary fix.
sql/sql_base.cc:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
Changed function calls for the secondary fix.
sql/sql_class.cc:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
Changed a function call for the secondary fix.
sql/sql_handler.cc:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
The first two diffs make the primary bug fix.
The rest is for the secondary fix.
sql/sql_table.cc:
Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
Changed function calls for the secondary fix.
Removed wrong fix for bug #14009 (use of abs() on null value causes problems with filesort)
Mark that add_time(), time_diff() and str_to_date() can return null values
myisam/mi_check.c:
keyoffset is not a position (no %lx here)
mysql-test/r/func_sapdb.result:
Fixed test after marking that timediff() can return NULL
sql/item_func.cc:
Removed wrong fix for bug #14009 (use of abs() on null value causes problems with filesort)
sql/item_timefunc.cc:
Mark that add_time and str_to_date() can return null values
sql/item_timefunc.h:
Mark that time_diff can return 0
sql/spatial.cc:
Simple cleanups during review of new code
cause a crash or write to an incorrect memory location. (Bug #14216)
mysql-test/r/union.result:
Update results
mysql-test/t/union.test:
Add regression test
sql/item.cc:
Set max_length for decimal fields correctly
Procedure analyse() redefines select's fields_list. setup_copy_fields() assumes
that fields_list is a part of all_fields_list. Because select have only
3 columns and analyse() redefines it to have 10 columns, int overrun in
setup_copy_fields() occurs and server goes to almost infinite loop.
Because fields_list used not only to send data ad fields types, it's wrong
to allow procedure redefine it. This patch separates select's fileds_list
and procedure's one. Now if procedure is present, copy of fields_list is
created in procedure_fields_list and it is used for sending data and fields.
mysql-test/t/analyse.test:
Test case for bug #14138 ROLLUP and PROCEDURE ANALYSE() hang server
mysql-test/r/analyse.result:
Test case for bug #14138 ROLLUP and PROCEDURE ANALYSE() hang server
sql/sql_select.h:
Fix bug #14138 ROLLUP and PROCEDURE ANALYSE() hang server
To JOIN Added separate fields_list for procedure.
sql/sql_select.cc:
Fix bug #14138 ROLLUP and PROCEDURE ANALYSE() hang server
SELECT's fields_list and procedure's fields_list made split. If procedure is defined
then procedure's fields_list is used to send fields and data.
Date field was declared as not null, thus expression 'datefield is null'
was always false. For SELECT special handling of such cases is used.
There 'datefield is null' converted to 'datefield eq "0000-00-00"'.
In mysql_update() before creation of select added remove_eq_conds() call.
It makes some optimization of conds and in particular performs conversion
from 'is null' to 'eq'.
Also remove_eq_conds() makes some evaluation of conds and if it founds that
conds is always false then update statement is not processed further.
All this allows to perform some update statements process faster due to
optimized conds, and not wasting resources if conds known to be false.
sql/sql_select.cc:
Fix bug#14186 select datefield is null not updated
Remove static from remove_eq_conds()
sql/sql_select.h:
Fix bug#14186 select datefield is null not updated
Added remove_eq_conds() prototype.
mysql-test/r/update.result:
Test case for bug#14186 select datefield is null not updated
mysql-test/t/update.test:
Test case for bug#14186 select datefield is null not updated
sql/sql_update.cc:
Fix bug#14186 select datefield is null not updated
To mysql_update() added call to remove_eq_conds() to optimize conds and convert 'datefield is null' to 'datefield eq 0000-00-00'
include/config-netware.h:
Auto merged
sql/sql_select.cc:
Auto merged
mysql-test/r/select.result:
Manually merged fix for bug#13855
mysql-test/t/select.test:
Manuall merged fix for bug#13855
avoid multiplying length of field_X by charset->mbmaxlen twice when calculating space
required for field_X in the new table.
mysql-test/r/create.result:
Testcase for BUG#14139
mysql-test/t/create.test:
Testcase for BUG#14139
sql/field.cc:
BUG#14139: Make create_length_to_internal_length() save length-in-characters in
create_field::chars_length.
sql/field.h:
BUG#14139: Add create_length::chars_length where we save length-in-characters, added comments.
sql/sql_table.cc:
BUG#14139: When handling "CREATE TABLE(field_X type_spec,...) SELECT smth AS field_X, ...."
we get two instances of create_field: (1) is occurence of field_X in create list, and (2) is
in select list. If we figure they both refer to the same field, we "join" them according to
some rule that is not explicitly specified anywhere.
When we do this "join", create_field::length already contains length-in-bytes for both, so
when we transfer field length (in characters) from (1) to (2), use length-in-characters that
we have saved in create_length::chars_length.
collation
By default constant strings in second parameter of date_time() have case
insensitive collation. Because of this expressions date_format(f,'%m') and
date_format(f,'%M') wrongly becomes equal, which results in choosing wrong
column to sort by.
Now if second parameter of date_format() is constant then it's collation is
changed to case sensitive.
sql/item_timefunc.cc:
Fix bug #14016 date_format() 2nd parameter was compared using case insensitive collation.
If second parameter of date_format() is constant then it's collation is changed to case sensitive.
mysql-test/r/date_formats.result:
Test case for bug#14016 2nd parameter was compared using case insensitive collation
mysql-test/t/date_formats.test:
Test case for bug#14016 2nd parameter was compared using case insensitive collation
VALUES() can only refer to table insert going to.
But Item_insert_value::fix_fields() were passing to it's arg full table list,
This results in finding second column which shouldn't be found, and
failing with error about ambiguous field.
Item_insert_value::fix_fields() now passes only first table of full table
list.
sql/item.cc:
Fix bug #14016 date_format() 2nd parameter was compared using case insensitive collation.
If second parameter of date_format() is constant then it's collation is changed to case sensitive.
mysql-test/r/insert_select.result:
Test case for bug#14016 2nd parameter was compared using case insensitive collation
mysql-test/t/insert_select.test:
Test case for bug#14016 2nd parameter was compared using case insensitive collation
heap/_check.c:
Change arguments to ha_key_cmp
heap/hp_create.c:
Change arguments to ha_key_cmp
include/my_base.h:
Remove SEARCH_RETURN_B_POS and instead always send an array to ha_key_cmp() as last argument
myisam/mi_check.c:
Change arguments to ha_key_cmp
myisam/mi_rnext_same.c:
Change arguments to ha_key_cmp
myisam/mi_search.c:
Change arguments to ha_key_cmp
myisam/mi_write.c:
Change arguments to ha_key_cmp
myisammrg/myrg_queue.c:
Change arguments to ha_key_cmp
mysys/my_handler.c:
Remove SEARCH_RETURN_B_POS and instead always send an array to ha_key_cmp() as last argument
(This removes an if in a loop at the expensive of an int on the stack)
sql/records.cc:
Simplify new rr_index() code
Create common error handling function for rr_() functions.
Remove loop from rr_index() as handler::index_next() can never return HA_ERR_RECORD_DELETED
sql/sql_load.cc:
Simplify
sql/sql_update.cc:
Simplify code
Fixed bug when one is updating an index column that could be used with ORDER BY
sql/structs.h:
Removed not needed structure element
select distinct char(column) fails with utf8
ctype_utf8.result, ctype_utf8.test:
Adding test case
sql_yacc.yy:
Adding new syntax.
item_strfunc.h:
Fixing wrong max_length calculation.
Also, adding CHAR(x USING charset),
for easier migrating from 4.1 to 5.0,
according to Monty's suggestion.
sql/item_strfunc.h:
Bug#13233
select distinct char(column) fails with utf8
Also, adding CHAR(x USING charset),
for easier migrating from 4.1 to 5.0.
sql/sql_yacc.yy:
Adding new syntax.
mysql-test/t/ctype_utf8.test:
Adding test case
mysql-test/r/ctype_utf8.result:
Adding test case
mysql-test/my_manage.c:
Avoid warning: i not used in case of Windows.
mysql-test/mysql_test_run_new.c:
Removed unused variable.
sql/item_func.cc:
Removed unused variables.
strings/ctype-simple.c:
Added cast.
strings/ctype-ucs2.c:
Added cast.
mysql-test/r/func_math.result:
Add new results
mysql-test/t/func_math.test:
Add new regression test
sql/item_func.cc:
Set maybe_null in Item_func_abs::fix_length_and_dec().
mysql-test/r/func_gconcat.result:
result fixed
mysql-test/r/subselect.result:
result fixed
mysql-test/r/type_float.result:
result fixed
mysql-test/t/type_float.test:
testcase added
sql/item_func.cc:
Now we set decimals to NOT_FIXED_DEC if the max_length is longer than
maximum possible double length
because they are used by net_printf() and push_warning(), which can be called if check_connection() fails.
sql/mysqld.cc:
not needed anymore
sql/repl_failsafe.cc:
not needed anymore
sql/slave.cc:
not needed anymore
sql/sql_class.cc:
query_id needs to be inited early (already fixed in 5.0 by Konstantin) and so does client_capabilities (not fixed in 5.0);
because they are used by net_printf() and push_warning(), which may be called if check_connection() fails.