Commit 058cad78 authored by unknown's avatar unknown

Merge zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.0

into  zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.1


BitKeeper/etc/ignore:
  auto-union
client/mysqldump.c:
  Auto merged
mysql-test/r/bdb.result:
  Auto merged
mysql-test/r/type_timestamp.result:
  Auto merged
mysql-test/r/udf.result:
  Auto merged
mysql-test/t/bdb.test:
  Auto merged
mysql-test/t/type_timestamp.test:
  Auto merged
mysys/my_lib.c:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/log_event.h:
  Auto merged
sql/table.cc:
  Auto merged
mysql-test/r/func_time.result:
  manual merge
mysql-test/r/mysqldump.result:
  manual merge
mysql-test/t/func_time.test:
  manual merge
mysql-test/t/mysqldump.test:
  manual merge
sql/log.cc:
  manual merge
sql/sp_head.cc:
  manual merge
sql/sql_table.cc:
  manual merge
parents 9baac37a 90ff8fbd
...@@ -1120,6 +1120,7 @@ server-tools/instance-manager/messages.cpp ...@@ -1120,6 +1120,7 @@ server-tools/instance-manager/messages.cpp
server-tools/instance-manager/mysql_connection.cpp server-tools/instance-manager/mysql_connection.cpp
server-tools/instance-manager/mysqlmanager server-tools/instance-manager/mysqlmanager
server-tools/instance-manager/mysqlmanager.cpp server-tools/instance-manager/mysqlmanager.cpp
server-tools/instance-manager/net_serv.cc
server-tools/instance-manager/options.cpp server-tools/instance-manager/options.cpp
server-tools/instance-manager/parse.cpp server-tools/instance-manager/parse.cpp
server-tools/instance-manager/parse_output.cpp server-tools/instance-manager/parse_output.cpp
...@@ -1780,4 +1781,3 @@ vio/viotest-sslconnect.cpp ...@@ -1780,4 +1781,3 @@ vio/viotest-sslconnect.cpp
vio/viotest.cpp vio/viotest.cpp
zlib/*.ds? zlib/*.ds?
zlib/*.vcproj zlib/*.vcproj
server-tools/instance-manager/net_serv.cc
...@@ -1643,9 +1643,15 @@ static uint get_table_structure(char *table, char *db, char *table_type, ...@@ -1643,9 +1643,15 @@ static uint get_table_structure(char *table, char *db, char *table_type,
field= mysql_fetch_field_direct(result, 0); field= mysql_fetch_field_direct(result, 0);
if (strcmp(field->name, "View") == 0) if (strcmp(field->name, "View") == 0)
{ {
char *scv_buff = NULL;
if (verbose) if (verbose)
fprintf(stderr, "-- It's a view, create dummy table for view\n"); fprintf(stderr, "-- It's a view, create dummy table for view\n");
/* save "show create" statement for later */
if ((row= mysql_fetch_row(result)) && (scv_buff=row[1]))
scv_buff= my_strdup(scv_buff, MYF(0));
mysql_free_result(result); mysql_free_result(result);
/* /*
...@@ -1663,9 +1669,22 @@ static uint get_table_structure(char *table, char *db, char *table_type, ...@@ -1663,9 +1669,22 @@ static uint get_table_structure(char *table, char *db, char *table_type,
"SHOW FIELDS FROM %s", result_table); "SHOW FIELDS FROM %s", result_table);
if (mysql_query_with_error_report(sock, 0, query_buff)) if (mysql_query_with_error_report(sock, 0, query_buff))
{ {
/*
View references invalid or privileged table/col/fun (err 1356),
so we cannot create a stand-in table. Be defensive and dump
a comment with the view's 'show create' statement. (Bug #17371)
*/
if (mysql_errno(sock) == ER_VIEW_INVALID)
fprintf(sql_file, "\n-- failed on view %s: %s\n\n", result_table, scv_buff ? scv_buff : "");
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
safe_exit(EX_MYSQLERR); safe_exit(EX_MYSQLERR);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
else
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
if ((result= mysql_store_result(sock))) if ((result= mysql_store_result(sock)))
{ {
...@@ -1706,6 +1725,9 @@ static uint get_table_structure(char *table, char *db, char *table_type, ...@@ -1706,6 +1725,9 @@ static uint get_table_structure(char *table, char *db, char *table_type,
} }
mysql_free_result(result); mysql_free_result(result);
if (path)
my_fclose(sql_file, MYF(MY_WME));
seen_views= 1; seen_views= 1;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -1962,6 +1962,40 @@ create table t1 (a int) engine=bdb; ...@@ -1962,6 +1962,40 @@ create table t1 (a int) engine=bdb;
commit; commit;
alter table t1 add primary key(a); alter table t1 add primary key(a);
drop table t1; drop table t1;
set autocommit=1;
reset master;
create table bug16206 (a int) engine= blackhole;
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int) engine= blackhole
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; insert into bug16206 values(2)
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
show binlog events;
Log_name Pos Event_type Server_id End_log_pos Info
f n Format_desc 1 n Server ver: VERSION, Binlog ver: 4
f n Query 1 n use `test`; create table bug16206 (a int) engine= bdb
f n Query 1 n use `test`; insert into bug16206 values(0)
f n Query 1 n use `test`; insert into bug16206 values(1)
f n Query 1 n use `test`; BEGIN
f n Query 1 n use `test`; insert into bug16206 values(2)
f n Query 1 n use `test`; COMMIT
f n Query 1 n use `test`; insert into bug16206 values(3)
drop table bug16206;
set autocommit=0;
End of 5.0 tests End of 5.0 tests
create table t1 (a int) engine=bdb; create table t1 (a int) engine=bdb;
set session transaction isolation level repeatable read; set session transaction isolation level repeatable read;
......
drop table if exists t1,t2,t3; drop table if exists t1,t2,t3;
set time_zone="+03:00";
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29"); select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
from_days(to_days("960101")) to_days(960201)-to_days("19960101") to_days(date_add(curdate(), interval 1 day))-to_days(curdate()) weekday("1997-11-29") from_days(to_days("960101")) to_days(960201)-to_days("19960101") to_days(date_add(curdate(), interval 1 day))-to_days(curdate()) weekday("1997-11-29")
1996-01-01 31 1 5 1996-01-01 31 1 5
...@@ -932,6 +933,7 @@ id day id day ...@@ -932,6 +933,7 @@ id day id day
1 2005-06-01 3 2005-07-15 1 2005-06-01 3 2005-07-15
3 2005-07-01 3 2005-07-15 3 2005-07-01 3 2005-07-15
DROP TABLE t1,t2; DROP TABLE t1,t2;
set time_zone= @@global.time_zone;
End of 5.0 tests End of 5.0 tests
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND); select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND) date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND)
......
drop table if exists t1; drop table if exists t1;
set time_zone="+03:00";
create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null, create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null,
Jahr smallint not null, index(Tag), index(Monat), index(Jahr) ); Jahr smallint not null, index(Tag), index(Monat), index(Jahr) );
insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998); insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998);
...@@ -9,3 +10,4 @@ Date Unix ...@@ -9,3 +10,4 @@ Date Unix
1998-9-16 09:26:00 905927160 1998-9-16 09:26:00 905927160
1998-9-16 09:26:00 905927160 1998-9-16 09:26:00 905927160
drop table t1; drop table t1;
set time_zone= @@global.time_zone;
...@@ -2782,6 +2782,25 @@ end AFTER # root@localhost ...@@ -2782,6 +2782,25 @@ end AFTER # root@localhost
drop trigger tr1; drop trigger tr1;
drop trigger tr2; drop trigger tr2;
drop table t1, t2; drop table t1, t2;
create table t (qty int, price int);
insert into t values(3, 50);
insert into t values(5, 51);
create view v1 as select qty, price, qty*price as value from t;
create view v2 as select qty from v1;
mysqldump {
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v1` AS select `t`.`qty` AS `qty`,`t`.`price` AS `price`,(`t`.`qty` * `t`.`price`) AS `value` from `t` */;
} mysqldump {
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v2` AS select `v1`.`qty` AS `qty` from `v1` */;
} mysqldump
drop view v1;
drop view v2;
drop table t;
/*!50003 CREATE FUNCTION `f`() RETURNS bigint(20) /*!50003 CREATE FUNCTION `f`() RETURNS bigint(20)
return 42 */| return 42 */|
/*!50003 CREATE PROCEDURE `p`() /*!50003 CREATE PROCEDURE `p`()
...@@ -2796,6 +2815,43 @@ p CREATE DEFINER=`root`@`localhost` PROCEDURE `p`() ...@@ -2796,6 +2815,43 @@ p CREATE DEFINER=`root`@`localhost` PROCEDURE `p`()
select 42 select 42
drop function f; drop function f;
drop procedure p; drop procedure p;
create table t1 ( id serial );
create view v1 as select * from t1;
drop table t1;
mysqldump {
-- failed on view `v1`: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`id` AS `id` from `t1`
} mysqldump
drop view v1;
create database mysqldump_test_db;
use mysqldump_test_db;
create table t1 (id int);
create view v1 as select * from t1;
insert into t1 values (1232131);
insert into t1 values (4711);
insert into t1 values (3231);
insert into t1 values (0815);
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*!40000 DROP DATABASE IF EXISTS `mysqldump_test_db`*/;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqldump_test_db` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `mysqldump_test_db`;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`id` int(11) default NULL
create table t1 (a text , b text); create table t1 (a text , b text);
create table t2 (a text , b text); create table t2 (a text , b text);
insert t1 values ("Duck, Duck", "goose"); insert t1 values ("Duck, Duck", "goose");
......
drop table if exists t1,t2; drop table if exists t1,t2;
set time_zone="+03:00";
CREATE TABLE t1 (a int, t timestamp); CREATE TABLE t1 (a int, t timestamp);
CREATE TABLE t2 (a int, t datetime); CREATE TABLE t2 (a int, t datetime);
SET TIMESTAMP=1234; SET TIMESTAMP=1234;
...@@ -491,3 +492,4 @@ a b c ...@@ -491,3 +492,4 @@ a b c
5 NULL 2001-09-09 04:46:59 5 NULL 2001-09-09 04:46:59
6 NULL 2006-06-06 06:06:06 6 NULL 2006-06-06 06:06:06
drop table t1; drop table t1;
set time_zone= @@global.time_zone;
...@@ -76,6 +76,24 @@ call XXX2(); ...@@ -76,6 +76,24 @@ call XXX2();
metaphon(testval) metaphon(testval)
HL HL
drop procedure xxx2; drop procedure xxx2;
CREATE TABLE bug19904(n INT, v varchar(10));
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
SELECT myfunc_double(n) AS f FROM bug19904;
f
49.00
50.00
NULL
51.00
52.00
SELECT metaphon(v) AS f FROM bug19904;
f
ON
TW
NULL
0R
FR
DROP TABLE bug19904;
End of 5.0 tests.
DROP FUNCTION metaphon; DROP FUNCTION metaphon;
DROP FUNCTION myfunc_double; DROP FUNCTION myfunc_double;
DROP FUNCTION myfunc_nonexist; DROP FUNCTION myfunc_nonexist;
......
...@@ -1045,6 +1045,41 @@ commit; ...@@ -1045,6 +1045,41 @@ commit;
alter table t1 add primary key(a); alter table t1 add primary key(a);
drop table t1; drop table t1;
#
# Bug #16206: Superfluous COMMIT event in binlog when updating BDB in autocommit mode
#
set autocommit=1;
let $VERSION=`select version()`;
reset master;
create table bug16206 (a int) engine= blackhole;
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
reset master;
create table bug16206 (a int) engine= bdb;
insert into bug16206 values(0);
insert into bug16206 values(1);
start transaction;
insert into bug16206 values(2);
commit;
insert into bug16206 values(3);
--replace_result $VERSION VERSION
--replace_column 1 f 2 n 5 n
show binlog events;
drop table bug16206;
set autocommit=0;
--echo End of 5.0 tests --echo End of 5.0 tests
# #
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
drop table if exists t1,t2,t3; drop table if exists t1,t2,t3;
--enable_warnings --enable_warnings
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
set time_zone="+03:00";
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29"); select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
select period_add("9602",-12),period_diff(199505,"9404") ; select period_add("9602",-12),period_diff(199505,"9404") ;
...@@ -335,6 +338,7 @@ select last_day("1997-12-1")+0.0; ...@@ -335,6 +338,7 @@ select last_day("1997-12-1")+0.0;
# Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that # Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that
# TZ variable set to GMT-3 # TZ variable set to GMT-3
select strcmp(date_sub(localtimestamp(), interval 3 hour), utc_timestamp())=0; select strcmp(date_sub(localtimestamp(), interval 3 hour), utc_timestamp())=0;
select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%T"), utc_time())=0; select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%T"), utc_time())=0;
select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%Y-%m-%d"), utc_date())=0; select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%Y-%m-%d"), utc_date())=0;
...@@ -505,6 +509,9 @@ SELECT * FROM t1, t2 ...@@ -505,6 +509,9 @@ SELECT * FROM t1, t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# Restore timezone to default
set time_zone= @@global.time_zone;
--echo End of 5.0 tests --echo End of 5.0 tests
# #
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
drop table if exists t1; drop table if exists t1;
--enable_warnings --enable_warnings
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
set time_zone="+03:00";
create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null, create table t1 (Zeit time, Tag tinyint not null, Monat tinyint not null,
Jahr smallint not null, index(Tag), index(Monat), index(Jahr) ); Jahr smallint not null, index(Tag), index(Monat), index(Jahr) );
insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998); insert into t1 values ("09:26:00",16,9,1998),("09:26:00",16,9,1998);
...@@ -15,3 +18,6 @@ FROM t1; ...@@ -15,3 +18,6 @@ FROM t1;
drop table t1; drop table t1;
# End of 4.1 tests # End of 4.1 tests
# Restore timezone to default
set time_zone= @@global.time_zone;
...@@ -1158,6 +1158,27 @@ drop trigger tr2; ...@@ -1158,6 +1158,27 @@ drop trigger tr2;
drop table t1, t2; drop table t1, t2;
#
# Bug#18462 mysqldump does not dump view structures correctly
#
#
create table t (qty int, price int);
insert into t values(3, 50);
insert into t values(5, 51);
create view v1 as select qty, price, qty*price as value from t;
create view v2 as select qty from v1;
--echo mysqldump {
--exec $MYSQL_DUMP --compact -F --tab . test
--exec cat v1.sql
--echo } mysqldump {
--exec cat v2.sql
--echo } mysqldump
--rm v.sql t.sql t.txt
drop view v1;
drop view v2;
drop table t;
# #
# Bug#14857 Reading dump files with single statement stored routines fails. # Bug#14857 Reading dump files with single statement stored routines fails.
# fixed by patch for bug#16878 # fixed by patch for bug#16878
...@@ -1174,6 +1195,19 @@ show create procedure p; ...@@ -1174,6 +1195,19 @@ show create procedure p;
drop function f; drop function f;
drop procedure p; drop procedure p;
#
# Bug #17371 Unable to dump a schema with invalid views
#
#
create table t1 ( id serial );
create view v1 as select * from t1;
drop table t1;
# mysqldump gets 1356 from server, but gives us 2
--echo mysqldump {
--error 2
--exec $MYSQL_DUMP --force -N --compact --skip-comments test
--echo } mysqldump
drop view v1;
# Added for use-thread option # Added for use-thread option
# #
create table t1 (a text , b text); create table t1 (a text , b text);
......
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
drop table if exists t1,t2; drop table if exists t1,t2;
--enable_warnings --enable_warnings
# Set timezone to GMT-3, to make it possible to use "interval 3 hour"
set time_zone="+03:00";
CREATE TABLE t1 (a int, t timestamp); CREATE TABLE t1 (a int, t timestamp);
CREATE TABLE t2 (a int, t datetime); CREATE TABLE t2 (a int, t datetime);
SET TIMESTAMP=1234; SET TIMESTAMP=1234;
...@@ -322,3 +325,6 @@ select * from t1; ...@@ -322,3 +325,6 @@ select * from t1;
drop table t1; drop table t1;
# End of 4.1 tests # End of 4.1 tests
# Restore timezone to default
set time_zone= @@global.time_zone;
...@@ -99,6 +99,17 @@ delimiter ;// ...@@ -99,6 +99,17 @@ delimiter ;//
call XXX2(); call XXX2();
drop procedure xxx2; drop procedure xxx2;
#
# Bug#19904: UDF: not initialized *is_null per row
#
CREATE TABLE bug19904(n INT, v varchar(10));
INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
SELECT myfunc_double(n) AS f FROM bug19904;
SELECT metaphon(v) AS f FROM bug19904;
DROP TABLE bug19904;
--echo End of 5.0 tests.
# #
# Drop the example functions from udf_example # Drop the example functions from udf_example
...@@ -114,3 +125,4 @@ DROP FUNCTION lookup; ...@@ -114,3 +125,4 @@ DROP FUNCTION lookup;
DROP FUNCTION reverse_lookup; DROP FUNCTION reverse_lookup;
DROP FUNCTION avgcost; DROP FUNCTION avgcost;
...@@ -495,7 +495,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags) ...@@ -495,7 +495,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags)
if (!(MyFlags & MY_DONT_SORT)) if (!(MyFlags & MY_DONT_SORT))
qsort((void *) result->dir_entry, result->number_off_files, qsort((void *) result->dir_entry, result->number_off_files,
sizeof(FILEINFO), (qsort_cmp) comp_names); sizeof(FILEINFO), (qsort_cmp) comp_names);
DBUG_PRINT(exit, ("found %d files", result->number_off_files)); DBUG_PRINT("exit", ("found %d files", result->number_off_files));
DBUG_RETURN(result); DBUG_RETURN(result);
error: error:
my_errno=errno; my_errno=errno;
......
...@@ -42,6 +42,8 @@ LOGGER logger; ...@@ -42,6 +42,8 @@ LOGGER logger;
MYSQL_BIN_LOG mysql_bin_log; MYSQL_BIN_LOG mysql_bin_log;
ulong sync_binlog_counter= 0; ulong sync_binlog_counter= 0;
static Muted_query_log_event invisible_commit;
static bool test_if_number(const char *str, static bool test_if_number(const char *str,
long *res, bool allow_wildcards); long *res, bool allow_wildcards);
static int binlog_init(); static int binlog_init();
...@@ -1188,7 +1190,9 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data, Log_event *end_ev) ...@@ -1188,7 +1190,9 @@ binlog_end_trans(THD *thd, binlog_trx_data *trx_data, Log_event *end_ev)
int error=0; int error=0;
IO_CACHE *trans_log= &trx_data->trans_log; IO_CACHE *trans_log= &trx_data->trans_log;
if (end_ev)
/* NULL denotes ROLLBACK with nothing to replicate */
if (end_ev != NULL)
{ {
/* /*
We can always end the statement when ending a transaction since We can always end the statement when ending a transaction since
...@@ -1259,9 +1263,14 @@ static int binlog_commit(THD *thd, bool all) ...@@ -1259,9 +1263,14 @@ static int binlog_commit(THD *thd, bool all)
// we're here because trans_log was flushed in MYSQL_BIN_LOG::log() // we're here because trans_log was flushed in MYSQL_BIN_LOG::log()
DBUG_RETURN(0); DBUG_RETURN(0);
} }
if (all)
{
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE); Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE) qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
DBUG_RETURN(binlog_end_trans(thd, trx_data, &qev)); DBUG_RETURN(binlog_end_trans(thd, trx_data, &qev));
}
else
DBUG_RETURN(binlog_end_trans(thd, trx_data, &invisible_commit));
} }
static int binlog_rollback(THD *thd, bool all) static int binlog_rollback(THD *thd, bool all)
...@@ -3516,6 +3525,9 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) ...@@ -3516,6 +3525,9 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
DBUG_ENTER("MYSQL_BIN_LOG::write(THD *, IO_CACHE *, Log_event *)"); DBUG_ENTER("MYSQL_BIN_LOG::write(THD *, IO_CACHE *, Log_event *)");
VOID(pthread_mutex_lock(&LOCK_log)); VOID(pthread_mutex_lock(&LOCK_log));
/* NULL would represent nothing to replicate after ROLLBACK */
DBUG_ASSERT(commit_event != NULL);
if (likely(is_open())) // Should always be true if (likely(is_open())) // Should always be true
{ {
uint length; uint length;
......
...@@ -1287,6 +1287,18 @@ bool Query_log_event::write(IO_CACHE* file) ...@@ -1287,6 +1287,18 @@ bool Query_log_event::write(IO_CACHE* file)
my_b_safe_write(file, (byte*) query, q_len)) ? 1 : 0; my_b_safe_write(file, (byte*) query, q_len)) ? 1 : 0;
} }
/*
Query_log_event::Query_log_event()
The simplest constructor that could possibly work. This is used for
creating static objects that have a special meaning and are invisible
to the log.
*/
Query_log_event::Query_log_event()
:Log_event(), data_buf(0)
{
}
/* /*
Query_log_event::Query_log_event() Query_log_event::Query_log_event()
...@@ -1935,6 +1947,21 @@ end: ...@@ -1935,6 +1947,21 @@ end:
#endif #endif
/**************************************************************************
Muted_query_log_event methods
**************************************************************************/
#ifndef MYSQL_CLIENT
/*
Muted_query_log_event::Muted_query_log_event()
*/
Muted_query_log_event::Muted_query_log_event()
:Query_log_event()
{
}
#endif
/************************************************************************** /**************************************************************************
Start_log_event_v3 methods Start_log_event_v3 methods
**************************************************************************/ **************************************************************************/
......
...@@ -808,6 +808,7 @@ public: ...@@ -808,6 +808,7 @@ public:
void print(FILE* file, PRINT_EVENT_INFO* print_event_info); void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif #endif
Query_log_event();
Query_log_event(const char* buf, uint event_len, Query_log_event(const char* buf, uint event_len,
const Format_description_log_event *description_event, const Format_description_log_event *description_event,
Log_event_type event_type); Log_event_type event_type);
...@@ -831,6 +832,26 @@ public: ...@@ -831,6 +832,26 @@ public:
/* Writes derived event-specific part of post header. */ /* Writes derived event-specific part of post header. */
}; };
/*****************************************************************************
Muted Query Log Event class
Pretends to Log SQL queries, but doesn't actually do so.
****************************************************************************/
class Muted_query_log_event: public Query_log_event
{
public:
#ifndef MYSQL_CLIENT
Muted_query_log_event();
bool write(IO_CACHE* file) { return(false); };
virtual bool write_post_header_for_derived(IO_CACHE* file) { return FALSE; }
#endif
};
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
/***************************************************************************** /*****************************************************************************
......
...@@ -3279,7 +3279,22 @@ bool mysql_create_table_internal(THD *thd, ...@@ -3279,7 +3279,22 @@ bool mysql_create_table_internal(THD *thd,
create_info->table_options|=HA_CREATE_DELAY_KEY_WRITE; create_info->table_options|=HA_CREATE_DELAY_KEY_WRITE;
} }
else else
{
#ifdef FN_DEVCHAR
/* check if the table name contains FN_DEVCHAR when defined */
const char *start= alias;
while (*start != '\0')
{
if (*start == FN_DEVCHAR)
{
my_error(ER_WRONG_TABLE_NAME, MYF(0), alias);
DBUG_RETURN(TRUE);
}
start++;
}
#endif
path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext); path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext);
}
/* Check if table already exists */ /* Check if table already exists */
if ((create_info->options & HA_LEX_CREATE_TMP_TABLE) && if ((create_info->options & HA_LEX_CREATE_TMP_TABLE) &&
......
...@@ -70,6 +70,7 @@ class udf_handler :public Sql_alloc ...@@ -70,6 +70,7 @@ class udf_handler :public Sql_alloc
void cleanup(); void cleanup();
double val(my_bool *null_value) double val(my_bool *null_value)
{ {
is_null= 0;
if (get_arguments()) if (get_arguments())
{ {
*null_value=1; *null_value=1;
...@@ -88,6 +89,7 @@ class udf_handler :public Sql_alloc ...@@ -88,6 +89,7 @@ class udf_handler :public Sql_alloc
} }
longlong val_int(my_bool *null_value) longlong val_int(my_bool *null_value)
{ {
is_null= 0;
if (get_arguments()) if (get_arguments())
{ {
*null_value=1; *null_value=1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment