When fixing Item_func_plus in ORDER BY clause field c is searched in all
opened tables, but because c is an alias it wasn't found there.
This patch adds a flag to select_lex which allows Item_field::fix_fields()
to look up in select's item_list to find aliased fields.
sql/item.cc:
Fix bug#7672 Unknown column error in order clause
When fixing fields in ORDER BY clause allow Item_field::fix_fields() to look up items in select's item list to find aliased fields.
sql/sql_lex.cc:
Fix bug#7672 Unknown column error in order clause
sql/sql_lex.h:
Fix bug#7672 Unknown column error in order clause
Added flag to select_lex allowing Item_field::fix_fields to look up items in select's item list.
sql/sql_select.cc:
Fix bug#7672 Unknown column error in order clause
mysql-test/t/select.test:
Test case for bug#7672 Unknown column error in order clause
mysql-test/r/select.result:
Test case for bug#7672 Unknown column error in order clause
sql/sql_cache.cc:
block QC using if tables are locked with LOCK
unlock QC
mysql-test/r/query_cache_noembeded.result:
New BitKeeper file ``mysql-test/r/query_cache_noembeded.result''
mysql-test/t/query_cache_noembeded.test:
New BitKeeper file ``mysql-test/t/query_cache_noembeded.test''
Repair crashes mysql when table has fulltext index.
myisam/sort.c:
Use static ft_buf instead of dynamic mergebuf. Latter could be NULL if record has long words.
mysql-test/r/fulltext.result:
Test case for BUG#11684 - repair crashes mysql when table has fulltext index.
mysql-test/t/fulltext.test:
Test case for BUG#11684 - repair crashes mysql when table has fulltext index.
needed to be fixed in earlier versions)
Fixed the iteration of how substrings are handled with negative indexes in
SUBSTRING_INDEX
mysql-test/r/func_str.result:
New results for the fix to substring_index
mysql-test/t/func_str.test:
Added tests for fix to substring_index, various lenth search patterns. Also included
are the queuries the user who reported the bug listed in the bug report
sql/item_strfunc.cc:
Fix to BUG 11104
Took out the offset-=delimiter_length-1 out of the for loop. It was causing
basically this:
select substring_index('the king of the the hill', 'the', -2) to not work.
The first iteration, offset would be initialised to 24, then strstr would
point at 'the king of the the* hill' ('*'means right before the
character following), returning a offset of 16. The for loop would then
decrement offset by two (3 - 1), to 14, now pointing at
"the king of th*e the hill", _skipping_ past the 'e' in the second to last
'the', and therefore strstr would never have a chance of matching the
second to last 'the', then moving on to the 'the' at the begginning of the
string!
In a nutshell, offset was being decremented by too great a value, preventing
the second to last 'the' from being ever found, hence the result of
'king of the the hill' from the query that is reported in the bug report
Analyze table corrupts the state on
data_file_length, records, index_file_length...
by writing the shared state when there is an updated internal
state due to inserts or deletes
Fixed by synching the shared state with the internal state before
writing it to disk
Added test cases of 2 error cases and a normal case in new
analyze test case
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
1.) Added a new option to mysql_lock_tables() for ignoring FLUSH TABLES.
Used the new option in create_table_from_items().
It is necessary to prevent the SELECT table from being reopend.
It would get new storage assigned for its fields, while the
SELECT part of the command would still use the old (freed) storage.
2.) Protected the CREATE TABLE and CREATE TABLE ... SELECT commands
against a global read lock. This prevents a deadlock in
CREATE TABLE ... SELECT in conjunction with FLUSH TABLES WITH READ LOCK
and avoids the creation of new tables during a global read lock.
3.) Replaced set_protect_against_global_read_lock() and
unset_protect_against_global_read_lock() by
wait_if_global_read_lock() and start_waiting_global_read_lock()
in the INSERT DELAYED handling.
mysql-test/r/create.result:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added test results.
mysql-test/t/create.test:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added tests which do not require concurrency.
sql/lock.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added a new option to mysql_lock_tables() for ignoring FLUSH TABLES.
Changed the parameter list.
Removed two unnecessary functions. Their functionality is included in
wait_if_global_read_lock() and start_waiting_global_read_lock().
sql/mysql_priv.h:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Changed the declaration of mysql_lock_tables().
Added definitions for the new options.
sql/sql_acl.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_base.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_handler.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_insert.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Replaced set_protect_against_global_read_lock() and
unset_protect_against_global_read_lock() by
wait_if_global_read_lock() and start_waiting_global_read_lock()
in the INSERT DELAYED handling.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_parse.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Protected the CREATE TABLE and CREATE TABLE ... SELECT commands
against a global read lock. This prevents a deadlock in
CREATE TABLE ... SELECT in conjunction with FLUSH TABLES WITH READ LOCK
and avoids the creation of new tables during a global read lock.
sql/sql_table.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
Used the new option in create_table_from_items().
The problem: base_list::remove didn't modify base_list::last when removing
the last list element.
The fix: If we remove the last element, find the element before it (by walking
from the beginning of the list) and set base_list::last accordingly.
The list gets corrupted in both 4.0 and 4.1. There are no visible problems in
current 4.1 because current 4.1 doesn't call where_cond->fix_fields() after
constant propagation step.
mysql-test/r/select.result:
Testcase for BUG#10095
mysql-test/t/select.test:
Testcase for BUG#10095
sql/sql_list.h:
Fix for BUG#10095: {wrong query results because of incorrect constant propagation}
The problem: base_list::remove didn't modify base_list::last when removing
the last list element.
The fix: If we remove the last element, find the element before it (by walking
from the beginning of the list) and set base_list::last accordingly.
myisam/mi_key.c:
Fixed wrong buffer usage for auto-increment key with blob part that caused
CHECK TABLE to report that the table was wrong. (Bug #10045)
mysql-test/r/auto_increment.result:
New test case
mysql-test/t/auto_increment.test:
New test case
Count null_bits separately from field offsets and adjust them in case of primary key parts.
(Previously a CREATE TABLE with a lot of null fields that was part of a primary key caused MySQL to wrongly count the number of bytes needed to store null bits)
This is a more complete bug fix for #6236
mysql-test/r/alter_table.result:
More test for bug #6236 (CREATE TABLE didn't properly count not null columns for primary keys)
mysql-test/t/alter_table.test:
More test for bug #6236 (CREATE TABLE didn't properly count not null columns for primary keys)
sql/handler.h:
Add counter for null fields
sql/sql_table.cc:
Change create_field->offset to store offset from start of fields, independent of null bits.
Count null_bits separately from field offsets and adjust them in case of primary key parts.
sql/unireg.cc:
Change create_field->offset to store offset from start of fields, independent of null bits.
Count null_bits separately from field offsets and adjust them in case of primary key parts.
Fix bug + include test case.
Enable outfile tests.
mysql-test/t/outfile.test:
Reenable outfile tests
Add test for Bug#8191
sql/sql_yacc.yy:
Fix Bug#8191
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Incomplete ALTER TABLE breaks MERGE compatibility
Fix implicit NOT NULL not set on ALTER of PK columns
mysql-test/r/alter_table.result:
Test for Bug#6236
mysql-test/t/alter_table.test:
Test for Bug#6236
sql/sql_table.cc:
Implicit NOT NULL not set on ALTER of PK columns
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
fail.
mysql-test/r/innodb.result:
Test case for BUG#7709 - Boolean fulltext query against
unsupported engines does not fail added.
mysql-test/t/innodb.test:
Test case for BUG#7709 - Boolean fulltext query against
unsupported engines does not fail added.
sql/item_func.cc:
Check if table supports fulltext.
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
function".
We should not cache queries using CURRENT_USER() function as we do it
for some other functions, e.g. USER() function.
mysql-test/r/query_cache.result:
Let us test that queries with CURRENT_USER() function are not cached.
mysql-test/t/query_cache.test:
Let us test that queries with CURRENT_USER() function are not cached.
sql/item_create.cc:
create_func_current_user():
We should not cache queries which use CURRENT_USER() function.
sql/sql_table.cc: print an error with a function that respects width modifiers (%.64s)
mysql-test/r/drop.result:
bug#3891 - DROP TABLE many-unexistent-tables, was printing an error with %s instead of table names
mysql-test/t/drop.test:
bug#3891 - DROP TABLE many-unexistent-tables, was printing an error with %s instead of table names
sql/share/english/errmsg.txt:
allow longer "table names" as DROP TABLE puts a list here
sql/share/russian/errmsg.txt:
allow longer "table names" as DROP TABLE puts a list here
sql/share/ukrainian/errmsg.txt:
allow longer "table names" as DROP TABLE puts a list here
sql/sql_table.cc:
print an error with a function that respects width modifiers (%.64s)
Fixed Field_timestamp::val_int() so now it works correctly in --new mode
(or for TIMESTAMP(19) columns).
Also removed unused Field_timestamp::fill_and_store() method.
mysql-test/r/type_timestamp.result:
Added test for bug #8894 "TIMESTAMP values scrambled/misaligned when
using --new".
mysql-test/t/type_timestamp.test:
Added test for bug #8894 "TIMESTAMP values scrambled/misaligned when
using --new".
sql/field.cc:
Field_timestamp::fill_and_store()
Removed unused method.
Field_timestamp::val_int()
Even in --new mode integer representation of TIMESTAMP value should
not exceed 14 digits.
sql/field.h:
Removed unused Field_timestamp::fill_and_store() method.
sql/key.cc:
A fix (bug #8942: SUBSTRING_INDEX in UPDATE causes internal loop).
For "partial" key parts (e.g. key(a(20), ...) we create different
key_part->field, see sql/table.cc; so we have to use the eq()
function here to compare fields.
Item_func_equal::not_null_tables() always return 0.
mysql-test/r/join_outer.result:
Testcase for BUG#8711
mysql-test/t/join_outer.test:
Testcase for BUG#8711
sql/item_cmpfunc.h:
Fix for BUG#8711: "<=>" may have true value for NULL arguments, i.e. it can accept NULL-complemented
table rows. This differs from assumptions made in Item_func::not_null_tables(), so add
Item_func_equal::not_null_tables().
Item_func_equal::not_null_tables_cache value doesn't make sense now, but we still let it be
calculated (and ignore it)
Added a test case for bug #8669.
item_strfunc.cc:
Fixed bug #8669.
Function AES_DECRYPT can return NULL value.
sql/item_strfunc.cc:
Fixed bug #8669.
Function AES_DECRYPT can return NULL value.
mysql-test/t/func_str.test:
Added a test case for bug #8669.
mysql-test/r/func_str.result:
Added a test case for bug #8669.
Test case for bug#8522, to test for out of bounds memory access in ft_nlq_find_relevance().
mysql-test/r/fulltext.result:
Test case for bug#8522, to test for out of bounds memory access in ft_nlq_find_relevance().
mysql-test/t/fulltext.test:
Test case for bug#8522, to test for out of bounds memory access in ft_nlq_find_relevance().
Added a test case for bug #8392.
sql_delete.cc:
Fixed bug #8392.
The bug caused a crash for a delete statement with ORDER BY
that explicitly referred to the modified table.
sql/sql_delete.cc:
Fixed bug #8392.
The bug caused a crash for a delete statement with ORDER BY
that explicitly referred to the modified table.
mysql-test/t/delete.test:
Added a test case for bug #8392.
mysql-test/r/delete.result:
Added a test case for bug #8392.
This fixes also the reverse lookup bug introduced by the previous patch
mysql-test/t/group_by.test:
Remove empty line
vio/viosocket.c:
Added function comment
epilogue to an SQL statement should not have an error code even
when the SQL statement itself has an error code.
mysql-test/r/rpl_insert_id.result:
Adding test to ensure that slave handles error statement gracefully.
mysql-test/t/rpl_insert_id.test:
Adding test to ensure that slave handles error statement gracefully.
sql/log.cc:
Setting error code to 0 for SQL statement prologue and epilogue.
Added a test case for bug #7520.
table.cc:
Fixed bug #7520.
The bug was caused by a wrong calculation of the field max_key_length for
a TABLE structure when there was an index on a blob field.
sql/table.cc:
Fixed bug #7520.
The bug was caused by a wrong calculation of the field max_key_length for
a TABLE structure when there was an index on a blob field.
mysql-test/t/select.test:
Added a test case for bug #7520.
mysql-test/r/select.result:
Added a test case for bug #7520.
Call file->extra() with HA_STATUS_CONST in mysqld_show_keys.
The fix will not be merged into 4.1/5.0 because they don't have this problem already.
mysql-test/r/show_check.result:
Testcase for BUG#7519
mysql-test/t/show_check.test:
Testcase for BUG#7519
sql/sql_show.cc:
Fix for BUG#7519: Index statistics is not displayed after ANALYZE for temporary tables:
When handling "SHOW INDEX" the call file->extra(HA_STATUS_CONST | ...) is made for regular tables
but bypassed for temporary tables.
Call file->extra() with HA_STATUS_CONST in mysqld_show_keys to make sure we're always using the
current index cardinality values.
incorrect results when the input was a constant across a multi-row SELECT
statement. (Bug #8248)
sql/item_strfunc.h:
Add tmp_value member
sql/item_strfunc.cc:
Always allocate a new string for QUOTE(), in case the field is being reused
for multiple rows.
mysql-test/t/func_str.test:
Add regression test
mysql-test/r/func_str.result:
Add test results
Fix replication for multi-update
new test - rpl_multi_update2
sql/mysql_priv.h:
Bug#7011
New function mysql_multi_update_lock()
sql/sql_parse.cc:
Bug#7011
New function check_multi_update_lock()
For multi-update on slave, perform an early open&lock
sql/sql_update.cc:
Bug#7011
Split out multi-update locking into its own function,
mysql_multi_update_lock()
Added a test case for bug #7672.
sql_yacc.yy:
Fixed bug #7672.
Made queries of the form (SELECT ...) ORDER BY ... to
be equivalent to SELECT ... ORDER BY ...
sql/sql_yacc.yy:
Fixed bug #7672.
Made queries of the form (SELECT ...) ORDER BY ... to
be equivalent to SELECT ... ORDER BY ...
mysql-test/t/order_by.test:
Added a test case for bug #7672.
mysql-test/r/order_by.result:
Added a test case for bug #7672.
Added a test case for bug #7945.
sql_select.cc:
Fixed bug #7945. If DISTINCT is used only with constants
in a query with GROUP BY, we can apply an optimization
that set LIMIT to 1 only in the case when there is
no SQL_CALC_FOUND_ROWS.
sql/sql_select.cc:
Fixed bug #7945. If DISTINCT is used only with constants
in a query with GROUP BY, we can apply an optimization
that set LIMIT to 1 only in the case when there is
no SQL_CALC_FOUND_ROWS.
mysql-test/t/select_found.test:
Added a test case for bug #7945.
mysql-test/r/select_found.result:
Added a test case for bug #7945.
Version for 4.0. Committed for merge.
If the result table is one of the select tables in INSERT SELECT,
we must not disable the result tables indexes before selecting.
mysql_execute_command() detects the match for other reasons and
adds the flag OPTION_BUFFER_RESULT to the 'select_options'.
In this case the result is put into a temporary table first.
Hence, we can defer the preparation of the insert
table until the result is to be used.
mysql-test/r/insert_select.result:
BUG#6034 - Error code 124: Wrong medium type.
The test results.
mysql-test/t/insert_select.test:
BUG#6034 - Error code 124: Wrong medium type.
The test case.
sql/sql_select.cc:
BUG#6034 - Error code 124: Wrong medium type.
With OPTION_BUFFER_RESULT in the 'select_options',
defer the preparation of the insert table until the
result is to be used. Unfortunately, this happens
at several places.
set to a negative value. (Bug #7700)
sql/field_conv.cc:
Don't treat real fields as identical when destination is unsigned and
the source is not.
mysql-test/t/type_float.test:
Add test for setting double unsigned to a negative value from a signed double
mysql-test/r/type_float.result:
Add test results
the Epoch". (With after review fixes).
mysql-test/r/func_time.result:
Added test for bug #7515 "from_unixtime(0) now returns NULL instead of
the Epoch".
mysql-test/t/func_time.test:
Added test for bug #7515 "from_unixtime(0) now returns NULL instead of
the Epoch".
sql/item_timefunc.cc:
Item_func_from_unixtime:
from_unixtime(0) should return Epoch instead of NULL.
sql/item_timefunc.h:
Item_func_from_unixtime:
- Removed unused method definition.
- fix_length_and_dec() should set maybe_null to true since now
from_unixtime() can return NULL even in case when none of its
arguments is NULL.