- Revert the fix for bug 33812
- fixed a win32 warning
client/mysql.cc:
revert the fix for bug 33812
mysql-test/r/mysql.result:
revert the fix for bug 33812
mysql-test/t/mysql_delimiter.sql:
revert the fix for bug 33812
mysys/default.c:
fixed a win32 warning
Range scan in descending order for c <= <col> <= c type of
ranges was ignoring the DESC flag.
However some engines like InnoDB have the primary key parts
as a suffix for every secondary key.
When such primary key suffix is used for ordering ignoring
the DESC is not valid.
But we generally would like to do this because it's faster.
Fixed by performing only reverse scan if the primary key is used.
Removed some dead code in the process.
mysql-test/r/innodb_mysql.result:
Bug#37830 : test case
mysql-test/t/innodb_mysql.test:
Bug#37830 : test case
sql/opt_range.cc:
Bug#37830 :
- preserve and use used_key_parts to
distinguish when a primary key suffix is used
- removed some dead code
sql/opt_range.h:
Bug#37830 :
- preserve used_key_parts
- dead code removed
sql/sql_select.cc:
Bug#37830 : Do only reverse order traversal
if the primary key suffix is used.
mysqltest disconnect/connect-combo could be so
quick that connect would hit the server before
it had processed the disconnect. Since that
resulted in one more concurrent connection than
we meant to have, global or per-user
max-user-connections could be exceeded.
This could lead to "random" failures in tests
that set those limits.
client/mysqltest.c:
Retry max-connect-retries times if connect in
connect_n_handle_errors() unexpectedly fails
on connection-limit as this could be a race.
Break out code that checks for expected --errors
into its own function.
mysql-test/r/mysqltest.result:
show that we throw a warning if test expects a SQL-state from
a command (diff_files, ...) that clearly can't produce one.
mysql-test/t/disabled.def:
re-enable user_limits
mysql-test/t/mysqltest.test:
show that we throw a warning if test expects a SQL-state from
a command (diff_files, ...) that clearly can't produce one.
build)
The crash was caused by freeing the internal parser stack during the parser
execution.
This occured only for complex stored procedures, after reallocating the parser
stack using my_yyoverflow(), with the following C call stack:
- MYSQLparse()
- any rule calling sp_head::restore_lex()
- lex_end()
- x_free(lex->yacc_yyss), xfree(lex->yacc_yyvs)
The root cause is the implementation of stored procedures, which breaks the
assumption from 4.1 that there is only one LEX structure per parser call.
The solution is to separate the LEX structure into:
- attributes that represent a statement (the current LEX structure),
- attributes that relate to the syntax parser itself (Yacc_state),
so that parsing multiple statements in stored programs can create multiple
LEX structures while not changing the unique Yacc_state.
Now, Yacc_state and the existing Lex_input_stream are aggregated into
Parser_state, a structure that represent the complete state of the (Lexical +
Syntax) parser.
mysql-test/r/parser_stack.result:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
mysql-test/t/parser_stack.test:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sp.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sp_head.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_class.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_class.h:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_lex.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_lex.h:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_parse.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_prepare.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_trigger.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_view.cc:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
sql/sql_yacc.yy:
Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on
build)
and value-list
The server returns unexpected results if a right side of the
NOT IN clause consists of NULL value and some constants of
the same type, for example:
SELECT * FROM t WHERE NOT t.id IN (NULL, 1, 2)
may return 3, 4, 5 etc if a table contains these values.
The Item_func_in::val_int method has been modified:
unnecessary resets of an Item_func_case::has_null field
value has been moved outside of an argument comparison
loop. (Also unnecessary re-initialization of the null_value
field has been moved).
mysql-test/r/func_in.result:
Added test case for bug #37761.
mysql-test/t/func_in.test:
Added test case for bug #37761.
sql/item_cmpfunc.cc:
Bug #37761: IN handles NULL differently for table-subquery
and value-list
The Item_func_in::val_int method has been modified:
unnecessary resets of an Item_func_case::has_null field
value has been moved outside of an argument comparison
loop. (Also unnecessary re-initialization of the null_value
field has been moved).
offset for time part in UUIDs was 1/1000 of what it
should be. In other words, offset was off.
Also handle the case where we count into the future
when several UUIDs are generated in one "tick", and
then the next call is late enough for us to unwind
some but not all of those borrowed ticks.
Lastly, handle the case where we keep borrowing and
borrowing until the tick-counter overflows by also
changing into a new "numberspace" by creating a new
random suffix.
mysql-test/r/func_misc.result:
Show that time-part of UUIDs is correct now.
mysql-test/t/func_misc.test:
Show that time-part of UUIDs is correct now
by replicating the C-code's resultin SQL.
Results also decode to expect date-data on
command-line (external validation).
No test for unwinding of borrowed ticks as
this a) is a race and b) depends on what timer
we get.
sql/item_strfunc.cc:
correct offset for date/time-part of UUID.
also make sure that when we counted into
the future earlier (several UUIDs generated
in same tick), we only give back as many
"borrowed" ticks as we can without duplicating
past timestamps. If our tick-counter overflows
before we can give back, or if the system-clock
is set back (by user or Daylight Saving Time),
we create a new random suffix to avoid
collisions and clear the tick-counter.
offset for time part in UUIDs was 1/1000 of what it
should be. In other words, offset was off.
Also handle the case where we count into the future
when several UUIDs are generated in one "tick", and
then the next call is late enough for us to unwind
some but not all of those borrowed ticks.
Lastly, handle the case where we keep borrowing and
borrowing until the tick-counter overflows by also
changing into a new "numberspace" by creating a new
random suffix.
mysql-test/r/func_misc.result:
Show that time-part of UUIDs is correct now.
mysql-test/t/func_misc.test:
Show that time-part of UUIDs is correct now
by replicating the C-code's resultin SQL.
Results also decode to expect date-data on
command-line (external validation).
No test for unwinding of borrowed ticks as
this a) is a race and b) depends on what timer
we get.
sql/item_strfunc.cc:
correct offset for date/time-part of UUID.
also make sure that when we counted into
the future earlier (several UUIDs generated
in same tick), we only give back as many
"borrowed" ticks as we can without duplicating
past timestamps. If our tick-counter overflows
before we can give back, or if the system-clock
is set back (by user or Daylight Saving Time),
we create a new random suffix to avoid
collisions and clear the tick-counter.
The problem is that relying on the output of the 'ls' command is not
portable as its behavior is not the same between systems and it might
even not be available at all in (Windows).
So I added list_files that relies on the portable mysys library instead.
(and also list_files_write_file and list_files_append_file,
since the test was using '--exec ls' in that way.)
client/mysqltest.c:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
To be able to replace the use of '--exec ls' I have added
list_files, list_files_write_file and list_files_append_file.
list_files <dirname> [<filename incl. wild-cards>]
is equivalent to 'ls <dirname>/[<filename incl. wild-cards>]'
list_files_write_file creates/overwrites a file with the content
list_files_append_file creates/appends a file with the content
list_files* return a sorted output.
mysql-test/r/mysqltest.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
result file change, due to added test of the new list_files command.
mysql-test/suite/parts/inc/partition_check_drop.inc:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Using the new list_files instead of 'ls'.
Changed the use of local variables (ls_file, file_list)
and server variable (@aux).
mysql-test/suite/parts/inc/partition_layout.inc:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Using the new list_files instead of 'ls'.
mysql-test/suite/parts/inc/partition_layout_check1.inc:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Using the new list_files instead of 'ls'.
mysql-test/suite/parts/inc/partition_layout_check2.inc:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter1_1_2_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter1_1_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter1_2_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter2_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter3_innodb.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_alter3_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_basic_innodb.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_basic_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_basic_symlink_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_engine_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/suite/parts/r/partition_syntax_myisam.result:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Replaces '--exec ls' with list_files.
Removal of the directory part of file listing.
mysql-test/t/mysqltest.test:
Bug#35736 Test 'parts.partition_basic_symlink_myisam' depends on output of 'ls'
Adding test for the new mysqltest commands list_files,
list_files_write_file and list_files_append_file.
problem was that ha_partition::records was not implemented, thus
using the default handler::records, which is not correct if the engine
does not support HA_STATS_RECORDS_IS_EXACT.
Solution was to implement ha_partition::records as a wrapper around
the underlying partitions records.
The rows column in explain partitions will now include the total
number of records in the partitioned table.
(recommit after removing out-commented code)
enabled)
Before this fix, the lexer and parser would treat the ';' character as a
different token (either ';' or END_OF_INPUT), based on convoluted logic,
which failed in simple cases where a stored procedure is implemented as a
single statement, and used in a multi query.
With this fix:
- the character ';' is always parsed as a ';' token in the lexer,
- parsing multi queries is implemented in the parser, in the 'query:' rules,
- the value of thd->client_capabilities, which is the capabilities
negotiated between the client and the server during bootstrap,
is immutable and not arbitrarily modified during parsing (which was the
root cause of the bug)
- moved the test into a separate file to check for presence of the test variable
mysql-test/r/subselect.result:
Bug#37627: moved the test to a separate file
mysql-test/r/subselect_debug.result:
Bug#37627: moved the test to a separate file
mysql-test/t/subselect.test:
Bug#37627: moved the test to a separate file
mysql-test/t/subselect_debug.test:
Bug#37627: moved the test to a separate file
When there is an error executing EXISTS predicates they return NULL as their string
or decimal value but don't set the NULL value flag.
Fixed by returning 0 (as a decimal or a string) on error exectuting the subquery.
Note that we can't return NULL as EXISTS is not supposed to return NULL.
mysql-test/r/subselect.result:
Bug#37627: test case
mysql-test/t/subselect.test:
Bug#37627: test case
sql/item_subselect.cc:
Bug#37627: return decimal (or string) 0 isntead of a NULL pointer on
error calculating an EXISTS predicate.
Bug#12093 "SP not found on second PS execution if another thread
drops other SP in between" and
Bug#21294 "executing a prepared statement that executes a stored
function which was recreat"
Stored functions are resolved at prepared statement prepare only.
If someone flushes the stored functions cache between prepare and
execute, execution fails.
The fix is to detect the situation of the cache flush and automatically
reprepare the prepared statement after it.
mysql-test/r/ps_ddl.result:
Update results (Bug#12093 and Bug#21294, the test cases are already
in the source tree).
mysql-test/r/ps_ddl1.result:
Update results (Bug#12093 and Bug#21294, the test cases are already
in the source tree).
mysql-test/r/sp-error.result:
Update results (Bug#12093 and Bug#21294, the test cases are already
in the source tree).
mysql-test/t/ps_ddl.test:
Modify the test to not expect an error where there is no error
any more (Bug#12093, Bug#21294).
mysql-test/t/ps_ddl1.test:
Modify the test to not expect an error where there is no error
any more (Bug#12093, Bug#21294).
mysql-test/t/sp-error.test:
Modify the test to not expect an error where there is no error
any more (Bug#12093, Bug#21294).
sql/sp_cache.cc:
Implement sp_cache_version() -- returns the current version of
a stored routines cache.
sql/sp_cache.h:
Declare sp_cache_version().
sql/sql_prepare.cc:
Keep track of stored functions cache version, and invalidate
the statement if it changed between prepared statement
prepare and execute (and the statement actually uses stored routines).
InnoDB table, where all selected columns
belong to the same unique index key, returns
incorrect results
Server executes some queries via QUICK_GROUP_MIN_MAX_SELECT
(MIN/MAX optimization for queries with GROUP BY or DISTINCT
clause) and that optimization implies loose index scan, so all
grouping is done by the QUICK_GROUP_MIN_MAX_SELECT::get_next
method.
The server does not set the precomputed_group_by flag for some
QUICK_GROUP_MIN_MAX_SELECT queries and duplicates grouping by
call to the end_send_group function.
Fix: when the test_if_skip_sort_order function selects loose
index scan as a best way to satisfy an ORDER BY/GROUP BY type
of query, the precomputed_group_by flag has been set to use
end_send/end_write functions instead of end_send_group/
end_write_group functions.
mysql-test/r/group_min_max_innodb.result:
Fixed bug #36632: SELECT DISTINCT from a simple view on an
InnoDB table, where all selected columns
belong to the same unique index key, returns
incorrect results
mysql-test/t/group_min_max_innodb.test:
Fixed bug #36632: SELECT DISTINCT from a simple view on an
InnoDB table, where all selected columns
belong to the same unique index key, returns
incorrect results
sql/sql_select.cc:
Fixed bug #36632: SELECT DISTINCT from a simple view on an
InnoDB table, where all selected columns
belong to the same unique index key, returns
incorrect results
Bug#35658 (An empty binary value leads to mysqld crash)
Before this fix, the following token
b''
caused the parser to crash when reading the binary value from the empty string.
The crash was caused by:
ptr+= max_length - 1;
because max_length is unsigned and was 0, causing an overflow.
With this fix, an empty binary literal b'' is parsed as a binary value 0,
in Item_bin_string.
mysql-test/r/varbinary.result:
Bug#35658 (An empty binary value leads to mysqld crash)
mysql-test/t/varbinary.test:
Bug#35658 (An empty binary value leads to mysqld crash)
sql/item.cc:
Bug#35658 (An empty binary value leads to mysqld crash)
Bug#35658 (An empty binary value leads to mysqld crash)
Before this fix, the following token
b''
caused the parser to crash when reading the binary value from the empty string.
The crash was caused by:
ptr+= max_length - 1;
because max_length is unsigned and was 0, causing an overflow.
With this fix, an empty binary literal b'' is parsed as a binary value 0,
in Item_bin_string.
mysql-test/r/varbinary.result:
Bug#35658 (An empty binary value leads to mysqld crash)
mysql-test/t/varbinary.test:
Bug#35658 (An empty binary value leads to mysqld crash)
sql/item.cc:
Bug#35658 (An empty binary value leads to mysqld crash)
Bug#33812: mysql client incorrectly parsing DELIMITER
Remove unnecessary and incorrect code that tried
to pull delimiter commands out of the middle of
statements.
Remove unnecessary and incorrect code that tried
to pull delimiter commands out of the middle of
statements.
client/mysql.cc:
Remove unnecessary and incorrect code that tried
to pull delimiter commands out of the middle of
statements.
mysql-test/r/mysql.result:
show we no longer parse DELIMITER when
we shouldn't.
mysql-test/t/mysql_delimiter.sql:
show we no longer parse DELIMITER when
we shouldn't.
The value of JOIN::tables must be set to 0 when there
is no matching min/max row.
mysql-test/r/subselect.result:
Added a test case for bug #37004.
mysql-test/t/subselect.test:
Added a test case for bug #37004.
This bugs clarifies a warning message issued when the query cache data
size becomes smaller than the minium allowed size.
mysql-test/r/query_cache.result:
New warning message when a too small value has been set for query cache
size.
sql/set_var.cc:
To avoid poluting the QC API the warning messages are moved into the
QC module.
sql/share/errmsg.txt:
Changed error message so that minimal cache size always is hinted.
sql/sql_cache.cc:
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
sql/sql_cache.h:
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
The problem was that when comparing tables for a possible
fast alter table, the comparison was being performed using
the parsed information and not the final definition.
The solution is to use the possible final table layout to
compare if a fast alter is possible or not.
mysql-test/include/mix1.inc:
Disable test case for Bug 21704 as it hasn't been fixed.
mysql-test/r/alter_table.result:
Add test case result for Bug#33873
mysql-test/r/innodb_mysql.result:
Update test case result
mysql-test/t/alter_table.test:
Add test case for Bug#33873
sql/sql_table.cc:
Use updated (final) information to compare fields.
returns erroneous results
Used the wrong function when fixing 30480 which lead to
no stop on end_key resulting in duplicate results from index scan
Includes test cases for the duplicates 37327 and 37329,
Duplicate rows and bad performance/High Handler_read_next values
Recommit after merge issues
mysql-test/r/partition.result:
Bug#35931 List partition MyISAM table returns erroneous results
added test results.
mysql-test/t/partition.test:
Bug#35931 List partition MyISAM table returns erroneous results
added test for 35931, 37327 and 37329.
sql/ha_partition.cc:
Bug#35931 List partition MyISAM table returns erroneous results
HA_READ_ORDER is a index_flag, not a table_flag.
Error made in 30480.