localhost/default port
When creating federated table that points to unspecified host or
localhost on unspecified port or port is 0, small memory leak occurs.
This happens because we make a copy of unix socket path, which is
never freed.
With this fix we do not make a copy of unix socket path, instead
share->socket points to MYSQL_UNIX_ADDR constant directly.
This fix is covered by a test case for BUG34788.
Affects 5.0 only.
mysql-test/t/federated.test:
A test case for BUG#35509.
sql/ha_federated.cc:
When creating federated table we call parse_url() to check if connect
string is correct. parse_url() may make a copy of unix socket path if
port is not specified or 0 and host is not specified or 'localhost'.
This copy is never freed.
As there is no need to make a copy of unix socket path, let
share->socket point to MYSQL_UNIX_ADDR directly.
correctly - crashes server !
Creating federated table with connect string containing empty
(zero-length) host name and port is evaluated as 0 (port is
incorrect, omitted or 0) crashes server.
This happens because federated calls strcmp() with NULL pointer.
Fixed by avoiding strcmp() call if hostname is set to NULL.
mysql-test/r/federated.result:
A test case for BUG#34788.
mysql-test/t/federated.test:
A test case for BUG#34788.
sql/ha_federated.cc:
Fixed that parse_url() may call strcmp() with NULL pointer.
into pcg5ppc.xiphis.org:/Network/Servers/anubis.xiphis.org/home/antony/work/merge.20080307/mysql-5.0
mysql-test/r/func_misc.result:
Auto merged
mysql-test/r/myisam.result:
Auto merged
mysql-test/t/func_misc.test:
Auto merged
sql/item.cc:
Auto merged
sql/item_func.cc:
Auto merged
When there are no underlying tables specified for a merge table,
SHOW CREATE TABLE outputs a statement that cannot be executed. The
same is true for mysqldump (it generates dumps that cannot be
executed).
This happens because SQL parser does not accept empty UNION() clause.
This patch changes the following:
- it is now possible to execute CREATE/ALTER statement with
empty UNION() clause.
- the same as above, but still worth noting: it is now possible to
remove underlying tables mapping using ALTER TABLE ... UNION=().
- SHOW CREATE TABLE does not output UNION() clause if there are
no underlying tables specified for a merge table. This makes
mysqldump slightly smaller.
mysql-test/r/merge.result:
A test case for BUG#28248.
mysql-test/t/merge.test:
A test case for BUG#28248.
sql/ha_myisammrg.cc:
Do not output UNION clause in SHOW CREATE TABLE, when there are
no underlying tables defined.
sql/sql_yacc.yy:
Make underlying table list for MERGE engine optional.
As for MERGE engine empty underlying tables list is valid, it should
be valid for the parser as well.
This change is mostly needed to restore dumps made by earlier MySQL
versions. Also with this fix it is possible to remove underlying
tables mapping by using ALTER TABLE ... UNION=().
into kaamos.(none):/data/src/opt/mysql-5.0-opt
client/mysql.cc:
Auto merged
sql/filesort.cc:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
tests/mysql_client_test.c:
Auto merged
mysql-test/r/view.result:
Manual merge.
mysql-test/t/view.test:
Manual merge.
scripts/mysql_config.sh:
Manual merge.
into mysql.com:/misc/mysql/34749/50-34749
mysql-test/r/func_misc.result:
Auto merged
mysql-test/t/func_misc.test:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
into pcg5ppc.xiphis.org:/Network/Servers/anubis.xiphis.org/home/antony/work/merge.20080307/mysql-5.0
sql/item.cc:
Auto merged
sql/item_func.cc:
Auto merged
into mysql.com:/home/bar/mysql-work/mysql-5.0.b27580v2
mysql-test/r/ctype_ucs.result:
Auto merged
mysql-test/t/ctype_ucs.test:
Auto merged
mysql-test/include/ctype_common.inc:
after merge fix
mysql-test/r/ctype_big5.result:
after merge fix
mysql-test/r/ctype_euckr.result:
after merge fix
mysql-test/r/ctype_gb2312.result:
after merge fix
mysql-test/r/ctype_gbk.result:
after merge fix
mysql-test/r/ctype_uca.result:
after merge fix
sporadically
Under some circumstances, the mysql_insert_id() value after SELECT ...
INSERT could return a wrong value. This could happen when the last
SELECT ... INSERT did not involve an AUTO_INCREMENT column, but the
value of mysql_insert_id() was changed by some previous statements.
Fixed by checking the value of thd->insert_id_used in
select_insert::send_eof() and returning 0 for mysql_insert_id() if it
is not set.
sql/sql_insert.cc:
Do not return thd->last_insert_id unconditionally in
select_insert::send_eof(). First check if thd->insert_id_used is
non-zero, and return 0 otherwise.
tests/mysql_client_test.c:
Added a test case for bug #34889.
- Apply Eric Bergen's patch: in join_read_always_key(), move ha_index_init() call
to before the late NULLs filtering code.
- Backport function comments from 6.0.
mysql-test/r/null_key.result:
BUG#34945: "ref_or_null queries that are null_rejecting and have a null value crash mysql"
- Testcase
mysql-test/t/null_key.test:
BUG#34945: "ref_or_null queries that are null_rejecting and have a null value crash mysql"
- Testcase
sql/sql_select.cc:
BUG#34945: "ref_or_null queries that are null_rejecting and have a null value crash mysql"
- Apply Eric Bergen's patch: in join_read_always_key(), move ha_index_init() call
to before the late NULLs filtering code.
- Backport function comments from 6.0
and Item_direct_ref constructor calls.
Order of ref->field_name and ref->table_name arguments
is of Item_ref and Item_direct_ref in the fix_inner_refs
function is inverted.
sql/sql_select.cc:
Fixed bug #34830: mixed table and field names in Item_ref
and Item_direct_ref constructor calls.
Order of ref->field_name and ref->table_name arguments
is of Item_ref and Item_direct_ref in the fix_inner_refs
function is inverted. See definitions:
Item_ref(Name_resolution_context *context_arg, Item **item,
const char *table_name_arg, const char *field_name_arg,
bool alias_name_used_arg= FALSE)
and
Item_direct_ref(Name_resolution_context *context_arg, Item **item,
const char *table_name_arg,
const char *field_name_arg,
bool alias_name_used_arg= FALSE)
added new function test_if_data_home_dir() which checks that
path does not contain mysql data home directory.
Using of mysql data home directory in
DATA DIRECTORY & INDEX DIRECTORY is disallowed.
mysql-test/r/symlink.result:
test result
mysql-test/t/symlink.test:
test case
sql/mysql_priv.h:
new variable mysql_unpacked_real_data_home
sql/mysqld.cc:
new variable mysql_unpacked_real_data_home
sql/sql_parse.cc:
added new function test_if_data_home_dir() which checks that
path does not contain mysql data home directory.
Using of mysql data home directory in
DATA DIRECTORY & INDEX DIRECTORY is disallowed.
Assertion `0' failed
If ROW item is a part of an expression that also has
aggregate function calls (COUNT/SUM/AVG...), a
"splitting" with an Item::split_sum_func2 function
is applied to that ROW item.
Current implementation of Item::split_sum_func2
replaces this Item_row with a newly created
Item_aggregate_ref reference to it.
Then the row cache tries to work with the
Item_aggregate_ref object as with the Item_row object:
row cache calls row-emulation methods such as cols and
element_index. Item_aggregate_ref (like it's parent
Item_ref) inherits dummy implementations of those
methods from the hierarchy root Item, and call to
them leads to failed assertions and wrong data
output.
Row-emulation virtual functions (cols, element_index, addr,
check_cols, null_inside and bring_value) of Item_ref have
been overloaded to forward calls to an underlying item
reference.
mysql-test/r/row.result:
Added test case for bug #34620.
mysql-test/t/row.test:
Added test case for bug #34620.
sql/item.h:
Fixed bug #34620.
Row-emulation virtual functions (cols, element_index, addr,
check_cols, null_inside and bring_value) of Item_ref have
been overloaded to forward calls to an underlying item
reference.
The problem is that passing anything other than a integer to a limit
clause in a prepared statement would fail. This limitation was introduced
to avoid replication problems (e.g: replicating the statement with a
string argument would cause a parse failure in the slave).
The solution is to convert arguments to the limit clause to a integer
value and use this converted value when persisting the query to the log.
mysql-test/r/limit.result:
Update test case result.
mysql-test/r/ps.result:
Add test case result for Bug#33851
mysql-test/r/rpl_user_variables.result:
Test case result for replication of prepared statement with
limit clause.
mysql-test/t/limit.test:
Test parameters to limit clause.
mysql-test/t/ps.test:
Add test case for Bug#33851
mysql-test/t/rpl_user_variables.test:
Test replication of a parameter which value is converted.
sql/item.cc:
Convert value to integer if it's a parameter to a limit clause.
sql/item.h:
Flag signal that item is a parameter to a limit clause.
sql/item_func.cc:
Const member functions, object is not mutated.
sql/sql_class.h:
Const member functions, object is not mutated.
sql/sql_yacc.yy:
Flag that item is a parameter to a limit clause.
NAME_CONST('whatever', -1) * MAX(whatever) bombed since -1 was
not seen as constant, but as FUNCTION_UNARY_MINUS(constant)
while we are at the same time pretending it was a basic const
item. This confused the aggregate handlers in exciting ways.
We now make NAME_CONST() behave more consistently.
mysql-test/r/func_misc.result:
show that a combination of NAME_CONST('x', -y) and an aggregate
no longer crashes the server.
mysql-test/t/func_misc.test:
show that a combination of NAME_CONST('x', -y) and an aggregate
no longer crashes the server.
sql/ha_ndbcluster_cond.cc:
tell cluster about "new" function type NEG_FUNC.
(this was previous identified as UNKNOWN_FUNC,
so we just handle it the same way, that's all.)
sql/ha_ndbcluster_cond.h:
tell cluster about "new" function type NEG_FUNC.
(this was previous identified as UNKNOWN_FUNC,
so we just handle it the same way, that's all.)
sql/item.cc:
make NAME_CONST() transparent in that type() of
-constant is that of constant, not that of unary
minus (id est, FUNC_ITEM).
sql/item.h:
Move constructor to item.cc
sql/item_func.h:
Revert Bug#30832; we can apply the magic more narrowly
(just for NAME_CONST() rather than all Item_func_neg).
Introduce new function type "NEG_FUNC."
Was a double-free of the Unique member of Item_func_group_concat.
This was not causing a crash because the Unique is a descendent of
Sql_alloc.
Fixed to free the Unique only if it was allocated for the instance
of Item_func_group_concat it was referenced from
mysql-test/r/func_gconcat.result:
Bug #34747: test case
mysql-test/t/func_gconcat.test:
Bug #34747: test case
sql/item_sum.cc:
Bug #34747: free the Unique only if it was allocated
for this instance of Item_func_group_concat
There was no way to return an error from the client library
if no MYSQL connections was established.
So here i added variables to store that king of errors and
made functions like mysql_error(NULL) to return these.
client/mysql.cc:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
Show the error message on std_error
include/sql_common.h:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
cant_connect_sqlstate constant declared
libmysql/libmysql.c:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
mysql_sqlstate(NULL) returns 'unknown_sqlstate'
libmysqld/lib_sql.cc:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
EMBEDDED_SERVER version of the vprint_msg_to_log() implemented
sql-common/client.c:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
mysql_server_last_errno and mysql_server_last_error introduced
to store errors not related to particular connections.
mysql_error(NULL) and mysql_errno(NULL) now returns these
mysql_server_last_error and errno respectively
sql/log.cc:
Bug #25097 mysql_server_init fails silently if no errmsg.sys is present.
EMBEDDED_LIBRARY implementation of the vprint_msg_to_log() moved
to lib_sql.cc
documentation
While the manual mentions FRAC_SECOND only for the TIMESTAMPADD()
function, it was also possible to use FRAC_SECOND with DATE_ADD(),
DATE_SUB() and +/- INTERVAL.
Fixed the parser to match the manual, i.e. using FRAC_SECOND for
anything other than TIMESTAMPADD()/TIMESTAMPDIFF() now produces a
syntax error.
Additionally, the patch allows MICROSECOND to be used in TIMESTAMPADD/
TIMESTAMPDIFF and marks FRAC_SECOND as deprecated.
mysql-test/r/func_time.result:
Added a test case for bug #33834.
mysql-test/t/func_time.test:
Added a test case for bug #33834.
sql/sql_yacc.yy:
Reject FRAC_SECOND for anything other than TIMESTAMPADD() or
TIMESTAMPDIFF().
Allow MICROSECOND to be used with TIMESTAMPADD()/TIMESTAMPDIFF().
Warn about FRAC_SECOND being a deprecated unit.
log-slave-updates and circul repl
Slave SQL thread may execute one extra event when there are events
skipped by slave I/O thread (e.g. originated by the same server).
Whereas it was requested not to do so by the UNTIL condition.
This happens because we compare with the end position of previously
executed event. This is fine when there are no skipped by slave I/O
thread events, as end position of previous event equals to start
position of to be executed event. Otherwise this position equals to
start position of skipped event.
This is fixed by:
- reading the event to be executed before checking if the until condition
is satisfied.
- comparing the start position of the event to be executed. Since we do
not have the start position available, we compute it by subtracting
event length from end position (which is available).
- if there are no events on the event queue at the slave sql starting
time, that meet until condition, we stop immediately, as in this
case we do not want to wait for next event.
mysql-test/r/rpl_dual_pos_advance.result:
A test case for BUG#13861.
mysql-test/t/rpl_dual_pos_advance.test:
A test case for BUG#13861.
sql/log_event.cc:
Store length of event. This is needed for further calculation of
the beginning of event.
sql/slave.cc:
Slave SQL thread may execute one extra event when there are events
skipped by slave I/O thread (e.g. originated by the same server).
Whereas it was requested not to do so by the UNTIL condition.
This happens because we compare with the end position of previously
executed event. This is fine when there are no skipped by slave I/O
thread events, as end position of previous event equals to start
position of to be executed event. Otherwise this position equals to
start position of skipped event.
This is fixed by:
- reading the event to be executed before checking if the until condition
is satisfied.
- comparing the start position of the event to be executed. Since we do
not have the start position available, we compute it by subtracting
event length from end position (which is available).
- if there are no events on the event queue at the slave sql starting
time, that meet until condition, we stop immediately, as in this
case we do not want to wait for next event.
sql/slave.h:
Added master_log_pos parametr to is_until_satisfied().
mysql-test/t/rpl_dual_pos_advance-slave.opt:
New BitKeeper file ``mysql-test/t/rpl_dual_pos_advance-slave.opt''
suite)
Under some circumstances a combination of aggregate functions and
GROUP BY in a SELECT query over a VIEW could lead to incorrect
calculation of the result type of the aggregate function. This in
turn could result in incorrect results, or assertion failures on debug
builds.
Fixed by changing the logic in Item_sum_hybrid::fix_fields() so that
the argument's item is dereferenced before calling its type() method.
mysql-test/r/view.result:
Added a test case for bug #33049.
mysql-test/t/view.test:
Added a test case for bug #33049.
sql/item_sum.cc:
When calculating the result type of an aggregate function, dereference
the argument's item before calling its type() method.
skip lock_type update for temporary tables
mysql-test/r/tablelock.result:
test result
mysql-test/t/tablelock.test:
test case
sql/sql_base.cc:
skip lock_type update for temporary tables
The problem is that CREATE VIEW statements inside prepared statements
weren't being expanded during the prepare phase, which leads to objects
not being allocated in the appropriate memory arenas.
The solution is to perform the validation of CREATE VIEW statements
during the prepare phase of a prepared statement. The validation
during the prepare phase assures that transformations of the parsed
tree will use the permanent arena of the prepared statement.
mysql-test/r/ps.result:
Add test case result for Bug#32890
mysql-test/t/ps.test:
Add test case for Bug#32890
sql/item.h:
Restore original field name if name is auto generated.
sql/sql_prepare.cc:
Validate and prepare a CREATE VIEW statement for execution.
sql/sql_view.cc:
Move privileges check to it's own function.
sql/sql_view.h:
Export function which check privileges of a CREATE VIEW statement.
a table name.
The problem was that fill_defined_view_parts() did not return
an error if a table is going to be altered. That happened if
the table was already in the table cache. In that case,
open_table() returned non-NULL value (valid TABLE-instance from
the cache).
The fix is to ensure that an error is thrown even if the table
is in the cache.
(This is a backport of the original patch for 5.1)
mysql-test/r/view.result:
Fix result file.
mysql-test/r/view_grant.result:
Fix result file.
mysql-test/t/view.test:
Add a test case for Bug#34337: Server crash when Altering a view
using a table name.
mysql-test/t/view_grant.test:
Fix order-dependency.
sql/sql_view.cc:
Report an error if we're going to work with a table.
Executing a prepared statement associated with a materialized
cursor yields to the client a metadata packet with wrong table
and database names. The problem was occurring because the server
was sending the the name of the temporary table used by the cursor
instead of the table name of the original table. The same problem
occurs when selecting from views, in which case the table name was
being sent and not the name of the view.
The solution is to fill the list item from the temporary table but
preserving the table and database names of the original fields. This
is achieved by tweaking the Select_materialize to accept a pointer to
the Materialized_cursor class which contains the item list to be filled.
sql/sql_cursor.cc:
Fill the item list in the send_fields method and preserve
the table and database name of the fields.
tests/mysql_client_test.c:
Add test case for Bug#32265
and ps-protocol
Finding a routine should be a transparent operation as
far as the binary log is concerned.
But it was influencing the binary log because of the TIMESTAMP
column in the proc table.
Fixed by preserving and restoring the time_zone usage flag when
searching for a stored routine in the proc table.
mysql-test/r/binlog_innodb.result:
Bug #30604: test case
mysql-test/r/ctype_cp932_binlog.result:
Bug #30604: updated test results (a procedure call before that)
mysql-test/t/binlog_innodb.test:
Bug #30604: test case
sql/sp.cc:
Bug #30604: finding a routine should be a transparent operation as
far as the binary log is concerned.
Fixed by preserving and restoring the time_zone usage flag.
breaks replication
NAME_CONST() didn't replicate constant character set and collation
correctly.
With this fix NAME_CONST() inherits collation from the value argument.
mysql-test/r/func_misc.result:
A test case for BUG#34289.
mysql-test/t/func_misc.test:
A test case for BUG#34289.
sql/item.cc:
Inherit collation from value argument.
- Replace per-thread signal()'s with SetUnhandledExceptionFilter().
The only remaining signal() is for SIGABRT (default abort()
handler in VS2005 is broken, i.e removes user exception filter)
- remove MessageBox()'es from error handling code
- Windows port for print_stacktrace() and write_core()
- Cleanup, removed some unused functions
sql/CMakeLists.txt:
Implement stack tracing on and generating crash dumps on Windows
sql/mysqld.cc:
Correct signal handling on Windows.
- For console events, like CTRL-C use SetConsoleCtrlHandler
- For exceptions like access violation, use SetUnhandledExceptionFilter
- For SIGABRT generate exception via __debugbreak() intrinsic
if built with VS2005 and later , since default SIGABRT handler
replaces unhandled exception filter specified by user
- make provisions to debug exception filter, as it is not trivial
(should be compiled with /DDEBUG_UNHANDLED_EXCEPTION_FILTER)
sql/sql_parse.cc:
Remove message box from windows signal handler.
The only thread specific handler left is for SIGABRT,
which is broken on VS2005 and later (user specified unhandled exception
filter gets overwritten)
sql/stacktrace.c:
Stack tracing and generating crash dumps on Windows
sql/stacktrace.h:
Implement print_stacktrace and write_core on Windows