Commit 3b6a7ef8 authored by unknown's avatar unknown

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/data0/bk/mysql-5.0-maint


sql/sp_head.cc:
  Auto merged
sql/table.cc:
  Auto merged
parents 1ccd344f 097c3a1d
...@@ -1285,3 +1285,4 @@ vio/viotest-sslconnect.cpp ...@@ -1285,3 +1285,4 @@ vio/viotest-sslconnect.cpp
vio/viotest.cpp vio/viotest.cpp
zlib/*.ds? zlib/*.ds?
zlib/*.vcproj zlib/*.vcproj
BitKeeper/etc/RESYNC_TREE
...@@ -1503,9 +1503,15 @@ static uint get_table_structure(char *table, char *db, char *table_type, ...@@ -1503,9 +1503,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);
/* /*
...@@ -1523,9 +1529,22 @@ static uint get_table_structure(char *table, char *db, char *table_type, ...@@ -1523,9 +1529,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)))
{ {
......
...@@ -1928,4 +1928,38 @@ create table t1 (a int) engine=bdb; ...@@ -1928,4 +1928,38 @@ 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
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
...@@ -945,3 +946,4 @@ id day id day ...@@ -945,3 +946,4 @@ 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;
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;
...@@ -2757,6 +2757,15 @@ p CREATE DEFINER=`root`@`localhost` PROCEDURE `p`() ...@@ -2757,6 +2757,15 @@ 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; create database mysqldump_test_db;
use mysqldump_test_db; use mysqldump_test_db;
create table t1 (id int); create table t1 (id int);
......
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;
......
...@@ -1019,4 +1019,39 @@ commit; ...@@ -1019,4 +1019,39 @@ 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;
...@@ -513,3 +517,6 @@ SELECT * FROM t1, t2 ...@@ -513,3 +517,6 @@ SELECT * FROM t1, t2
DROP TABLE t1,t2; DROP TABLE t1,t2;
# End of 5.0 tests # End of 5.0 tests
# Restore timezone to default
set time_zone= @@global.time_zone;
...@@ -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;
...@@ -1162,6 +1162,18 @@ drop function f; ...@@ -1162,6 +1162,18 @@ 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;
# BUG#17201 Spurious 'DROP DATABASE' in output, # BUG#17201 Spurious 'DROP DATABASE' in output,
# also confusion between tables and views. # also confusion between tables and views.
# Example code from Markus Popp # Example code from Markus Popp
......
...@@ -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;
...@@ -501,7 +501,7 @@ MY_DIR *my_dir(const char *path, myf MyFlags) ...@@ -501,7 +501,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;
......
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
MYSQL_LOG mysql_log, mysql_slow_log, mysql_bin_log; MYSQL_LOG mysql_log, mysql_slow_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 bool binlog_init(); static bool binlog_init();
...@@ -94,7 +96,9 @@ static int binlog_end_trans(THD *thd, IO_CACHE *trans_log, Log_event *end_ev) ...@@ -94,7 +96,9 @@ static int binlog_end_trans(THD *thd, IO_CACHE *trans_log, Log_event *end_ev)
{ {
int error=0; int error=0;
DBUG_ENTER("binlog_end_trans"); DBUG_ENTER("binlog_end_trans");
if (end_ev)
/* NULL denotes ROLLBACK with nothing to replicate */
if (end_ev != NULL)
error= mysql_bin_log.write(thd, trans_log, end_ev); error= mysql_bin_log.write(thd, trans_log, end_ev);
statistic_increment(binlog_cache_use, &LOCK_status); statistic_increment(binlog_cache_use, &LOCK_status);
...@@ -126,14 +130,19 @@ static int binlog_commit(THD *thd, bool all) ...@@ -126,14 +130,19 @@ static int binlog_commit(THD *thd, bool all)
DBUG_ASSERT(mysql_bin_log.is_open() && DBUG_ASSERT(mysql_bin_log.is_open() &&
(all || !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))); (all || !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))));
if (!my_b_tell(trans_log)) if (my_b_tell(trans_log) == 0)
{ {
// we're here because trans_log was flushed in MYSQL_LOG::log() // we're here because trans_log was flushed in MYSQL_LOG::log()
DBUG_RETURN(0); DBUG_RETURN(0);
} }
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE); if (all)
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE) {
DBUG_RETURN(binlog_end_trans(thd, trans_log, &qev)); Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
DBUG_RETURN(binlog_end_trans(thd, trans_log, &qev));
}
else
DBUG_RETURN(binlog_end_trans(thd, trans_log, &invisible_commit));
} }
static int binlog_rollback(THD *thd, bool all) static int binlog_rollback(THD *thd, bool all)
...@@ -1813,6 +1822,9 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event) ...@@ -1813,6 +1822,9 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
DBUG_ENTER("MYSQL_LOG::write(THD *, IO_CACHE *, Log_event *)"); DBUG_ENTER("MYSQL_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;
......
...@@ -1229,6 +1229,18 @@ bool Query_log_event::write(IO_CACHE* file) ...@@ -1229,6 +1229,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()
...@@ -1875,6 +1887,21 @@ Default database: '%s'. Query: '%s'", ...@@ -1875,6 +1887,21 @@ Default database: '%s'. Query: '%s'",
#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
**************************************************************************/ **************************************************************************/
......
...@@ -783,6 +783,7 @@ class Query_log_event: public Log_event ...@@ -783,6 +783,7 @@ class Query_log_event: public Log_event
void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0); void print(FILE* file, PRINT_EVENT_INFO* print_event_info= 0);
#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);
...@@ -806,6 +807,26 @@ class Query_log_event: public Log_event ...@@ -806,6 +807,26 @@ class Query_log_event: public Log_event
/* 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
/***************************************************************************** /*****************************************************************************
......
...@@ -565,7 +565,7 @@ create_typelib(MEM_ROOT *mem_root, create_field *field_def, List<String> *src) ...@@ -565,7 +565,7 @@ create_typelib(MEM_ROOT *mem_root, create_field *field_def, List<String> *src)
result->name= ""; result->name= "";
if (!(result->type_names=(const char **) if (!(result->type_names=(const char **)
alloc_root(mem_root,(sizeof(char *)+sizeof(int))*(result->count+1)))) alloc_root(mem_root,(sizeof(char *)+sizeof(int))*(result->count+1))))
return 0; DBUG_RETURN(0);
result->type_lengths= (unsigned int *)(result->type_names + result->count+1); result->type_lengths= (unsigned int *)(result->type_names + result->count+1);
List_iterator<String> it(*src); List_iterator<String> it(*src);
String conv; String conv;
...@@ -599,7 +599,7 @@ create_typelib(MEM_ROOT *mem_root, create_field *field_def, List<String> *src) ...@@ -599,7 +599,7 @@ create_typelib(MEM_ROOT *mem_root, create_field *field_def, List<String> *src)
result->type_names[result->count]= 0; result->type_names[result->count]= 0;
result->type_lengths[result->count]= 0; result->type_lengths[result->count]= 0;
} }
return result; DBUG_RETURN(result);
} }
......
...@@ -1656,8 +1656,23 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -1656,8 +1656,23 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
my_casedn_str(files_charset_info, path); my_casedn_str(files_charset_info, path);
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
build_table_path(path, sizeof(path), db, alias, reg_ext); build_table_path(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;
......
...@@ -1593,10 +1593,6 @@ bool check_db_name(char *name) ...@@ -1593,10 +1593,6 @@ bool check_db_name(char *name)
if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR || if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR ||
*name == FN_EXTCHAR) *name == FN_EXTCHAR)
return 1; return 1;
#ifdef FN_DEVCHAR
if (*name == FN_DEVCHAR)
return 1;
#endif
name++; name++;
} }
return last_char_is_space || (uint) (name - start) > NAME_LEN; return last_char_is_space || (uint) (name - start) > NAME_LEN;
...@@ -1639,10 +1635,6 @@ bool check_table_name(const char *name, uint length) ...@@ -1639,10 +1635,6 @@ bool check_table_name(const char *name, uint length)
#endif #endif
if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR) if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR)
return 1; return 1;
#ifdef FN_DEVCHAR
if (*name == FN_DEVCHAR)
return 1;
#endif
name++; name++;
} }
#if defined(USE_MB) && defined(USE_MB_IDENT) #if defined(USE_MB) && defined(USE_MB_IDENT)
......
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