Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
74394840
Commit
74394840
authored
Aug 03, 2006
by
msvensson@neptunus.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge neptunus.(none):/home/msvensson/mysql/my50-m-bug21215
into neptunus.(none):/home/msvensson/mysql/mysql-5.0
parents
35af3d55
c84cdbf4
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
391 additions
and
171 deletions
+391
-171
client/mysql.cc
client/mysql.cc
+3
-0
client/mysqldump.c
client/mysqldump.c
+152
-149
configure.in
configure.in
+9
-6
dbug/dbug.c
dbug/dbug.c
+4
-1
mysql-test/r/cast.result
mysql-test/r/cast.result
+11
-0
mysql-test/r/func_compress.result
mysql-test/r/func_compress.result
+28
-0
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+16
-0
mysql-test/r/user_var.result
mysql-test/r/user_var.result
+36
-0
mysql-test/t/cast.test
mysql-test/t/cast.test
+13
-1
mysql-test/t/func_compress.test
mysql-test/t/func_compress.test
+14
-0
mysql-test/t/mysqldump.test
mysql-test/t/mysqldump.test
+40
-0
mysql-test/t/user_var.test
mysql-test/t/user_var.test
+31
-0
sql/item_func.cc
sql/item_func.cc
+17
-7
sql/item_func.h
sql/item_func.h
+2
-4
sql/item_strfunc.cc
sql/item_strfunc.cc
+10
-0
sql/item_strfunc.h
sql/item_strfunc.h
+1
-1
sql/item_subselect.cc
sql/item_subselect.cc
+1
-0
sql/sql_class.h
sql/sql_class.h
+1
-0
sql/sql_udf.cc
sql/sql_udf.cc
+1
-1
sql/sql_yacc.yy
sql/sql_yacc.yy
+1
-1
No files found.
client/mysql.cc
View file @
74394840
...
...
@@ -3725,6 +3725,9 @@ static const char* construct_prompt()
case
't'
:
processed_prompt
.
append
(
'\t'
);
break
;
case
'l'
:
processed_prompt
.
append
(
delimiter_str
);
break
;
default:
processed_prompt
.
append
(
c
);
}
...
...
client/mysqldump.c
View file @
74394840
...
...
@@ -83,7 +83,8 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length,
static
char
*
alloc_query_str
(
ulong
size
);
static
char
*
field_escape
(
char
*
to
,
const
char
*
from
,
uint
length
);
static
my_bool
verbose
=
0
,
tFlag
=
0
,
dFlag
=
0
,
quick
=
1
,
extended_insert
=
1
,
static
my_bool
verbose
=
0
,
opt_no_create_info
=
0
,
opt_no_data
=
0
,
quick
=
1
,
extended_insert
=
1
,
lock_tables
=
1
,
ignore_errors
=
0
,
flush_logs
=
0
,
opt_drop
=
1
,
opt_keywords
=
0
,
opt_lock
=
1
,
opt_compress
=
0
,
opt_delayed
=
0
,
create_options
=
1
,
opt_quoted
=
0
,
opt_databases
=
0
,
...
...
@@ -96,7 +97,7 @@ static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1,
opt_complete_insert
=
0
,
opt_drop_database
=
0
,
opt_dump_triggers
=
0
,
opt_routines
=
0
,
opt_tz_utc
=
1
;
static
ulong
opt_max_allowed_packet
,
opt_net_buffer_length
;
static
MYSQL
mysql_connection
,
*
sock
=
0
;
static
MYSQL
mysql_connection
,
*
mysql
=
0
;
static
my_bool
insert_pat_inited
=
0
;
static
DYNAMIC_STRING
insert_pat
;
static
char
*
opt_password
=
0
,
*
current_user
=
0
,
...
...
@@ -312,9 +313,10 @@ static struct my_option my_long_options[] =
(
gptr
*
)
&
opt_create_db
,
(
gptr
*
)
&
opt_create_db
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"no-create-info"
,
't'
,
"Don't write table creation info."
,
(
gptr
*
)
&
tFlag
,
(
gptr
*
)
&
tFlag
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"no-data"
,
'd'
,
"No row information."
,
(
gptr
*
)
&
dFlag
,
(
gptr
*
)
&
dFlag
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
(
gptr
*
)
&
opt_no_create_info
,
(
gptr
*
)
&
opt_no_create_info
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"no-data"
,
'd'
,
"No row information."
,
(
gptr
*
)
&
opt_no_data
,
(
gptr
*
)
&
opt_no_data
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"no-set-names"
,
'N'
,
"Deprecated. Use --skip-set-charset instead."
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
...
...
@@ -426,6 +428,30 @@ static my_bool dump_all_views_in_db(char *database);
#include <help_start.h>
/*
Print the supplied message if in verbose mode
SYNOPSIS
verbose_msg()
fmt format specifier
... variable number of parameters
*/
static
void
verbose_msg
(
const
char
*
fmt
,
...)
{
va_list
args
;
DBUG_ENTER
(
"verbose_msg"
);
if
(
!
verbose
)
DBUG_VOID_RETURN
;
va_start
(
args
,
fmt
);
vfprintf
(
stderr
,
fmt
,
args
);
va_end
(
args
);
DBUG_VOID_RETURN
;
}
/*
exit with message if ferror(file)
...
...
@@ -844,9 +870,9 @@ static int mysql_query_with_error_report(MYSQL *mysql_con, MYSQL_RES **res,
if
(
mysql_query
(
mysql_con
,
query
)
||
(
res
&&
!
((
*
res
)
=
mysql_store_result
(
mysql_con
))))
{
my_printf_error
(
0
,
"
%s: Couldn't execute '%s': %s (%d)"
,
MYF
(
0
),
my_progname
,
query
,
mysql_error
(
mysql_con
),
mysql_errno
(
mysql_con
)
);
my_printf_error
(
0
,
"
Couldn't execute '%s': %s (%d)"
,
MYF
(
0
)
,
query
,
mysql_error
(
mysql_con
),
mysql_errno
(
mysql_con
));
safe_exit
(
EX_MYSQLERR
);
return
1
;
}
return
0
;
...
...
@@ -880,8 +906,8 @@ static void safe_exit(int error)
first_error
=
error
;
if
(
ignore_errors
)
return
;
if
(
sock
)
mysql_close
(
sock
);
if
(
mysql
)
mysql_close
(
mysql
);
exit
(
error
);
}
/* safe_exit */
...
...
@@ -894,10 +920,8 @@ static int dbConnect(char *host, char *user,char *passwd)
{
char
buff
[
20
+
FN_REFLEN
];
DBUG_ENTER
(
"dbConnect"
);
if
(
verbose
)
{
fprintf
(
stderr
,
"-- Connecting to %s...
\n
"
,
host
?
host
:
"localhost"
);
}
verbose_msg
(
"-- Connecting to %s...
\n
"
,
host
?
host
:
"localhost"
);
mysql_init
(
&
mysql_connection
);
if
(
opt_compress
)
mysql_options
(
&
mysql_connection
,
MYSQL_OPT_COMPRESS
,
NullS
);
...
...
@@ -915,7 +939,7 @@ static int dbConnect(char *host, char *user,char *passwd)
mysql_options
(
&
mysql_connection
,
MYSQL_SHARED_MEMORY_BASE_NAME
,
shared_memory_base_name
);
#endif
mysql_options
(
&
mysql_connection
,
MYSQL_SET_CHARSET_NAME
,
default_charset
);
if
(
!
(
sock
=
mysql_real_connect
(
&
mysql_connection
,
host
,
user
,
passwd
,
if
(
!
(
mysql
=
mysql_real_connect
(
&
mysql_connection
,
host
,
user
,
passwd
,
NULL
,
opt_mysql_port
,
opt_mysql_unix_port
,
0
)))
{
...
...
@@ -931,12 +955,11 @@ static int dbConnect(char *host, char *user,char *passwd)
As we're going to set SQL_MODE, it would be lost on reconnect, so we
cannot reconnect.
*/
sock
->
reconnect
=
0
;
mysql
->
reconnect
=
0
;
my_snprintf
(
buff
,
sizeof
(
buff
),
"/*!40100 SET @@SQL_MODE='%s' */"
,
compatible_mode_normal_str
);
if
(
mysql_query_with_error_report
(
sock
,
0
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
0
,
buff
))
{
mysql_close
(
sock
);
safe_exit
(
EX_MYSQLERR
);
return
1
;
}
...
...
@@ -947,9 +970,8 @@ static int dbConnect(char *host, char *user,char *passwd)
if
(
opt_tz_utc
)
{
my_snprintf
(
buff
,
sizeof
(
buff
),
"/*!40103 SET TIME_ZONE='+00:00' */"
);
if
(
mysql_query_with_error_report
(
sock
,
0
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
0
,
buff
))
{
mysql_close
(
sock
);
safe_exit
(
EX_MYSQLERR
);
return
1
;
}
...
...
@@ -963,9 +985,8 @@ static int dbConnect(char *host, char *user,char *passwd)
*/
static
void
dbDisconnect
(
char
*
host
)
{
if
(
verbose
)
fprintf
(
stderr
,
"-- Disconnecting from %s...
\n
"
,
host
?
host
:
"localhost"
);
mysql_close
(
sock
);
verbose_msg
(
"-- Disconnecting from %s...
\n
"
,
host
?
host
:
"localhost"
);
mysql_close
(
mysql
);
}
/* dbDisconnect */
...
...
@@ -1258,7 +1279,7 @@ static uint dump_routines_for_db(char *db)
DBUG_ENTER
(
"dump_routines_for_db"
);
DBUG_PRINT
(
"enter"
,
(
"db: '%s'"
,
db
));
mysql_real_escape_string
(
sock
,
db_name_buff
,
db
,
strlen
(
db
));
mysql_real_escape_string
(
mysql
,
db_name_buff
,
db
,
strlen
(
db
));
/* nice comments */
if
(
opt_comments
)
...
...
@@ -1269,7 +1290,7 @@ static uint dump_routines_for_db(char *db)
enough privileges to lock mysql.proc.
*/
if
(
lock_tables
)
mysql_query
(
sock
,
"LOCK TABLES mysql.proc READ"
);
mysql_query
(
mysql
,
"LOCK TABLES mysql.proc READ"
);
fprintf
(
sql_file
,
"DELIMITER ;;
\n
"
);
...
...
@@ -1280,7 +1301,7 @@ static uint dump_routines_for_db(char *db)
"SHOW %s STATUS WHERE Db = '%s'"
,
routine_type
[
i
],
db_name_buff
);
if
(
mysql_query_with_error_report
(
sock
,
&
routine_list_res
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
routine_list_res
,
query_buff
))
DBUG_RETURN
(
1
);
if
(
mysql_num_rows
(
routine_list_res
))
...
...
@@ -1294,7 +1315,7 @@ static uint dump_routines_for_db(char *db)
my_snprintf
(
query_buff
,
sizeof
(
query_buff
),
"SHOW CREATE %s %s"
,
routine_type
[
i
],
routine_name
);
if
(
mysql_query_with_error_report
(
sock
,
&
routine_res
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
routine_res
,
query_buff
))
DBUG_RETURN
(
1
);
while
((
row
=
mysql_fetch_row
(
routine_res
)))
...
...
@@ -1376,7 +1397,7 @@ static uint dump_routines_for_db(char *db)
fprintf
(
sql_file
,
"DELIMITER ;
\n
"
);
if
(
lock_tables
)
VOID
(
mysql_query_with_error_report
(
sock
,
0
,
"UNLOCK TABLES"
));
VOID
(
mysql_query_with_error_report
(
mysql
,
0
,
"UNLOCK TABLES"
));
DBUG_RETURN
(
0
);
}
...
...
@@ -1418,10 +1439,8 @@ static uint get_table_structure(char *table, char *db, char *table_type,
if
(
delayed
&&
(
*
ignore_flag
&
IGNORE_INSERT_DELAYED
))
{
delayed
=
0
;
if
(
verbose
)
fprintf
(
stderr
,
"-- Warning: Unable to use delayed inserts for table '%s' "
"because it's of type %s
\n
"
,
table
,
table_type
);
verbose_msg
(
"-- Warning: Unable to use delayed inserts for table '%s' "
"because it's of type %s
\n
"
,
table
,
table_type
);
}
complete_insert
=
0
;
...
...
@@ -1437,8 +1456,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
insert_option
=
((
delayed
&&
opt_ignore
)
?
" DELAYED IGNORE "
:
delayed
?
" DELAYED "
:
opt_ignore
?
" IGNORE "
:
""
);
if
(
verbose
)
fprintf
(
stderr
,
"-- Retrieving table structure for table %s...
\n
"
,
table
);
verbose_msg
(
"-- Retrieving table structure for table %s...
\n
"
,
table
);
len
=
my_snprintf
(
query_buff
,
sizeof
(
query_buff
),
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d"
,
...
...
@@ -1453,17 +1471,17 @@ static uint get_table_structure(char *table, char *db, char *table_type,
if
(
opt_order_by_primary
)
order_by
=
primary_key_fields
(
result_table
);
if
(
!
opt_xml
&&
!
mysql_query_with_error_report
(
sock
,
0
,
query_buff
))
if
(
!
opt_xml
&&
!
mysql_query_with_error_report
(
mysql
,
0
,
query_buff
))
{
/* using SHOW CREATE statement */
if
(
!
tFlag
)
if
(
!
opt_no_create_info
)
{
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
MYSQL_FIELD
*
field
;
my_snprintf
(
buff
,
sizeof
(
buff
),
"show create table %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
0
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
0
,
buff
))
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
...
...
@@ -1499,14 +1517,13 @@ static uint get_table_structure(char *table, char *db, char *table_type,
check_io
(
sql_file
);
}
result
=
mysql_store_result
(
sock
);
result
=
mysql_store_result
(
mysql
);
field
=
mysql_fetch_field_direct
(
result
,
0
);
if
(
strcmp
(
field
->
name
,
"View"
)
==
0
)
{
char
*
scv_buff
=
NULL
;
if
(
verbose
)
fprintf
(
stderr
,
"-- It's a view, create dummy table for view
\n
"
);
verbose_msg
(
"-- 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
]))
...
...
@@ -1527,7 +1544,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
*/
my_snprintf
(
query_buff
,
sizeof
(
query_buff
),
"SHOW FIELDS FROM %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
0
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
0
,
query_buff
))
{
/*
View references invalid or privileged table/col/fun (err 1356),
...
...
@@ -1535,7 +1552,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
a comment with the view's 'show create' statement. (Bug #17371)
*/
if
(
mysql_errno
(
sock
)
==
ER_VIEW_INVALID
)
if
(
mysql_errno
(
mysql
)
==
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
));
...
...
@@ -1546,7 +1563,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
else
my_free
(
scv_buff
,
MYF
(
MY_ALLOW_ZERO_PTR
));
if
((
result
=
mysql_store_result
(
sock
)))
if
((
result
=
mysql_store_result
(
mysql
)))
{
if
(
mysql_num_rows
(
result
))
{
...
...
@@ -1599,7 +1616,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
}
my_snprintf
(
query_buff
,
sizeof
(
query_buff
),
"show fields from %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
&
result
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
result
,
query_buff
))
{
if
(
path
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
...
...
@@ -1649,21 +1666,19 @@ static uint get_table_structure(char *table, char *db, char *table_type,
}
else
{
if
(
verbose
)
fprintf
(
stderr
,
"%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)
\n
"
,
my_progname
,
mysql_error
(
sock
));
verbose_msg
(
"%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)
\n
"
,
my_progname
,
mysql_error
(
mysql
));
my_snprintf
(
query_buff
,
sizeof
(
query_buff
),
"show fields from %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
&
result
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
result
,
query_buff
))
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
}
/* Make an sql-file, if path was given iow. option -T was given */
if
(
!
tFlag
)
if
(
!
opt_no_create_info
)
{
if
(
path
)
{
...
...
@@ -1707,7 +1722,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
ulong
*
lengths
=
mysql_fetch_lengths
(
result
);
if
(
init
)
{
if
(
!
opt_xml
&&
!
tFlag
)
if
(
!
opt_xml
&&
!
opt_no_create_info
)
{
fputs
(
",
\n
"
,
sql_file
);
check_io
(
sql_file
);
...
...
@@ -1719,7 +1734,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
if
(
opt_complete_insert
)
dynstr_append
(
&
insert_pat
,
quote_name
(
row
[
SHOW_FIELDNAME
],
name_buff
,
0
));
if
(
!
tFlag
)
if
(
!
opt_no_create_info
)
{
if
(
opt_xml
)
{
...
...
@@ -1749,22 +1764,22 @@ static uint get_table_structure(char *table, char *db, char *table_type,
}
num_fields
=
mysql_num_rows
(
result
);
mysql_free_result
(
result
);
if
(
!
tFlag
)
if
(
!
opt_no_create_info
)
{
/* Make an sql-file, if path was given iow. option -T was given */
char
buff
[
20
+
FN_REFLEN
];
uint
keynr
,
primary_key
;
my_snprintf
(
buff
,
sizeof
(
buff
),
"show keys from %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
&
result
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
result
,
buff
))
{
if
(
mysql_errno
(
sock
)
==
ER_WRONG_OBJECT
)
if
(
mysql_errno
(
mysql
)
==
ER_WRONG_OBJECT
)
{
/* it is VIEW */
fputs
(
"
\t\t
<options Comment=
\"
view
\"
/>
\n
"
,
sql_file
);
goto
continue_xml
;
}
fprintf
(
stderr
,
"%s: Can't get keys for table %s (%s)
\n
"
,
my_progname
,
result_table
,
mysql_error
(
sock
));
my_progname
,
result_table
,
mysql_error
(
mysql
));
if
(
path
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
safe_exit
(
EX_MYSQLERR
);
...
...
@@ -1837,21 +1852,19 @@ static uint get_table_structure(char *table, char *db, char *table_type,
my_snprintf
(
buff
,
sizeof
(
buff
),
"show table status like %s"
,
quote_for_like
(
table
,
show_name_buff
));
if
(
mysql_query_with_error_report
(
sock
,
&
result
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
result
,
buff
))
{
if
(
mysql_errno
(
sock
)
!=
ER_PARSE_ERROR
)
if
(
mysql_errno
(
mysql
)
!=
ER_PARSE_ERROR
)
{
/* If old MySQL version */
if
(
verbose
)
fprintf
(
stderr
,
"-- Warning: Couldn't get status information for table %s (%s)
\n
"
,
result_table
,
mysql_error
(
sock
));
verbose_msg
(
"-- Warning: Couldn't get status information for "
\
"table %s (%s)
\n
"
,
result_table
,
mysql_error
(
mysql
));
}
}
else
if
(
!
(
row
=
mysql_fetch_row
(
result
)))
{
fprintf
(
stderr
,
"Error: Couldn't read status information for table %s (%s)
\n
"
,
result_table
,
mysql_error
(
sock
));
result_table
,
mysql_error
(
mysql
));
}
else
{
...
...
@@ -1924,7 +1937,7 @@ static void dump_triggers_for_table (char *table, char *db)
"SHOW TRIGGERS LIKE %s"
,
quote_for_like
(
table
,
name_buff
));
if
(
mysql_query_with_error_report
(
sock
,
&
result
,
query_buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
result
,
query_buff
))
{
if
(
path
)
my_fclose
(
sql_file
,
MYF
(
MY_WME
));
...
...
@@ -2094,12 +2107,10 @@ static void dump_table(char *table, char *db)
return
;
/* Check --no-data flag */
if
(
dFlag
)
if
(
opt_no_data
)
{
if
(
verbose
)
fprintf
(
stderr
,
"-- Skipping dump data for table '%s', --no-data was used
\n
"
,
table
);
verbose_msg
(
"-- Skipping dump data for table '%s', --no-data was used
\n
"
,
table
);
DBUG_VOID_RETURN
;
}
...
...
@@ -2112,27 +2123,22 @@ static void dump_table(char *table, char *db)
*/
if
(
ignore_flag
&
IGNORE_DATA
)
{
if
(
verbose
)
fprintf
(
stderr
,
"-- Warning: Skipping data for table '%s' because it's of type %s
\n
"
,
table
,
table_type
);
verbose_msg
(
"-- Warning: Skipping data for table '%s' because "
\
"it's of type %s
\n
"
,
table
,
table_type
);
DBUG_VOID_RETURN
;
}
/* Check that there are any fields in the table */
if
(
num_fields
==
0
)
{
if
(
verbose
)
fprintf
(
stderr
,
"-- Skipping dump data for table '%s', it has no fields
\n
"
,
table
);
verbose_msg
(
"-- Skipping dump data for table '%s', it has no fields
\n
"
,
table
);
DBUG_VOID_RETURN
;
}
result_table
=
quote_name
(
table
,
table_buff
,
1
);
opt_quoted_table
=
quote_name
(
table
,
table_buff2
,
0
);
if
(
verbose
)
fprintf
(
stderr
,
"-- Sending SELECT query...
\n
"
);
verbose_msg
(
"-- Sending SELECT query...
\n
"
);
if
(
path
)
{
char
filename
[
FN_REFLEN
],
tmp_path
[
FN_REFLEN
];
...
...
@@ -2170,9 +2176,9 @@ static void dump_table(char *table, char *db)
if
(
order_by
)
end
=
strxmov
(
end
,
" ORDER BY "
,
order_by
,
NullS
);
}
if
(
mysql_real_query
(
sock
,
query
,
(
uint
)
(
end
-
query
)))
if
(
mysql_real_query
(
mysql
,
query
,
(
uint
)
(
end
-
query
)))
{
DB_error
(
sock
,
"when executing 'SELECT INTO OUTFILE'"
);
DB_error
(
mysql
,
"when executing 'SELECT INTO OUTFILE'"
);
DBUG_VOID_RETURN
;
}
}
...
...
@@ -2218,19 +2224,19 @@ static void dump_table(char *table, char *db)
fputs
(
"
\n
"
,
md_result_file
);
check_io
(
md_result_file
);
}
if
(
mysql_query_with_error_report
(
sock
,
0
,
query
))
DB_error
(
sock
,
"when retrieving data from server"
);
if
(
mysql_query_with_error_report
(
mysql
,
0
,
query
))
DB_error
(
mysql
,
"when retrieving data from server"
);
if
(
quick
)
res
=
mysql_use_result
(
sock
);
res
=
mysql_use_result
(
mysql
);
else
res
=
mysql_store_result
(
sock
);
res
=
mysql_store_result
(
mysql
);
if
(
!
res
)
{
DB_error
(
sock
,
"when retrieving data from server"
);
DB_error
(
mysql
,
"when retrieving data from server"
);
goto
err
;
}
if
(
verbose
)
fprintf
(
stderr
,
"-- Retrieving rows...
\n
"
);
verbose_msg
(
"-- Retrieving rows...
\n
"
);
if
(
mysql_num_fields
(
res
)
!=
num_fields
)
{
fprintf
(
stderr
,
"%s: Error in field count for table: %s ! Aborting.
\n
"
,
...
...
@@ -2499,13 +2505,13 @@ static void dump_table(char *table, char *db)
fputs
(
";
\n
"
,
md_result_file
);
/* If not empty table */
fflush
(
md_result_file
);
check_io
(
md_result_file
);
if
(
mysql_errno
(
sock
))
if
(
mysql_errno
(
mysql
))
{
my_snprintf
(
query
,
QUERY_LENGTH
,
"%s: Error %d: %s when dumping table %s at row: %ld
\n
"
,
my_progname
,
mysql_errno
(
sock
),
mysql_error
(
sock
),
mysql_errno
(
mysql
),
mysql_error
(
mysql
),
result_table
,
rownr
);
fputs
(
query
,
stderr
);
...
...
@@ -2551,7 +2557,7 @@ static char *getTableName(int reset)
if
(
!
res
)
{
if
(
!
(
res
=
mysql_list_tables
(
sock
,
NullS
)))
if
(
!
(
res
=
mysql_list_tables
(
mysql
,
NullS
)))
return
(
NULL
);
}
if
((
row
=
mysql_fetch_row
(
res
)))
...
...
@@ -2574,7 +2580,7 @@ static int dump_all_databases()
MYSQL_RES
*
tableres
;
int
result
=
0
;
if
(
mysql_query_with_error_report
(
sock
,
&
tableres
,
"SHOW DATABASES"
))
if
(
mysql_query_with_error_report
(
mysql
,
&
tableres
,
"SHOW DATABASES"
))
return
1
;
while
((
row
=
mysql_fetch_row
(
tableres
)))
{
...
...
@@ -2583,11 +2589,11 @@ static int dump_all_databases()
}
if
(
seen_views
)
{
if
(
mysql_query
(
sock
,
"SHOW DATABASES"
)
||
!
(
tableres
=
mysql_store_result
(
sock
)))
if
(
mysql_query
(
mysql
,
"SHOW DATABASES"
)
||
!
(
tableres
=
mysql_store_result
(
mysql
)))
{
my_printf_error
(
0
,
"Error: Couldn't execute 'SHOW DATABASES': %s"
,
MYF
(
0
),
mysql_error
(
sock
));
MYF
(
0
),
mysql_error
(
mysql
));
return
1
;
}
while
((
row
=
mysql_fetch_row
(
tableres
)))
...
...
@@ -2624,13 +2630,13 @@ static int dump_databases(char **db_names)
static
int
init_dumping
(
char
*
database
)
{
if
(
mysql_get_server_version
(
sock
)
>=
50003
&&
if
(
mysql_get_server_version
(
mysql
)
>=
50003
&&
!
my_strcasecmp
(
&
my_charset_latin1
,
database
,
"information_schema"
))
return
1
;
if
(
mysql_select_db
(
sock
,
database
))
if
(
mysql_select_db
(
mysql
,
database
))
{
DB_error
(
sock
,
"when selecting the database"
);
DB_error
(
mysql
,
"when selecting the database"
);
return
1
;
/* If --force */
}
if
(
!
path
&&
!
opt_xml
)
...
...
@@ -2657,7 +2663,7 @@ static int init_dumping(char *database)
"SHOW CREATE DATABASE IF NOT EXISTS %s"
,
qdatabase
);
if
(
mysql_query
(
sock
,
qbuf
)
||
!
(
dbinfo
=
mysql_store_result
(
sock
)))
if
(
mysql_query
(
mysql
,
qbuf
)
||
!
(
dbinfo
=
mysql_store_result
(
mysql
)))
{
/* Old server version, dump generic CREATE DATABASE */
if
(
opt_drop_database
)
...
...
@@ -2725,15 +2731,15 @@ static int dump_all_tables_in_db(char *database)
dynstr_append
(
&
query
,
quote_name
(
table
,
table_buff
,
1
));
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
}
if
(
numrows
&&
mysql_real_query
(
sock
,
query
.
str
,
query
.
length
-
1
))
DB_error
(
sock
,
"when using LOCK TABLES"
);
if
(
numrows
&&
mysql_real_query
(
mysql
,
query
.
str
,
query
.
length
-
1
))
DB_error
(
mysql
,
"when using LOCK TABLES"
);
/* We shall continue here, if --force was given */
dynstr_free
(
&
query
);
}
if
(
flush_logs
)
{
if
(
mysql_refresh
(
sock
,
REFRESH_LOG
))
DB_error
(
sock
,
"when doing refresh"
);
if
(
mysql_refresh
(
mysql
,
REFRESH_LOG
))
DB_error
(
mysql
,
"when doing refresh"
);
/* We shall continue here, if --force was given */
}
while
((
table
=
getTableName
(
0
)))
...
...
@@ -2745,12 +2751,12 @@ static int dump_all_tables_in_db(char *database)
my_free
(
order_by
,
MYF
(
MY_ALLOW_ZERO_PTR
));
order_by
=
0
;
if
(
opt_dump_triggers
&&
!
opt_xml
&&
mysql_get_server_version
(
sock
)
>=
50009
)
mysql_get_server_version
(
mysql
)
>=
50009
)
dump_triggers_for_table
(
table
,
database
);
}
}
if
(
opt_routines
&&
!
opt_xml
&&
mysql_get_server_version
(
sock
)
>=
50009
)
mysql_get_server_version
(
mysql
)
>=
50009
)
{
DBUG_PRINT
(
"info"
,
(
"Dumping routines for database %s"
,
database
));
dump_routines_for_db
(
database
);
...
...
@@ -2761,7 +2767,7 @@ static int dump_all_tables_in_db(char *database)
check_io
(
md_result_file
);
}
if
(
lock_tables
)
VOID
(
mysql_query_with_error_report
(
sock
,
0
,
"UNLOCK TABLES"
));
VOID
(
mysql_query_with_error_report
(
mysql
,
0
,
"UNLOCK TABLES"
));
return
0
;
}
/* dump_all_tables_in_db */
...
...
@@ -2784,9 +2790,9 @@ static my_bool dump_all_views_in_db(char *database)
uint
numrows
;
char
table_buff
[
NAME_LEN
*
2
+
3
];
if
(
mysql_select_db
(
sock
,
database
))
if
(
mysql_select_db
(
mysql
,
database
))
{
DB_error
(
sock
,
"when selecting the database"
);
DB_error
(
mysql
,
"when selecting the database"
);
return
1
;
}
if
(
opt_databases
||
opt_alldbs
)
...
...
@@ -2812,15 +2818,15 @@ static my_bool dump_all_views_in_db(char *database)
dynstr_append
(
&
query
,
quote_name
(
table
,
table_buff
,
1
));
dynstr_append
(
&
query
,
" READ /*!32311 LOCAL */,"
);
}
if
(
numrows
&&
mysql_real_query
(
sock
,
query
.
str
,
query
.
length
-
1
))
DB_error
(
sock
,
"when using LOCK TABLES"
);
if
(
numrows
&&
mysql_real_query
(
mysql
,
query
.
str
,
query
.
length
-
1
))
DB_error
(
mysql
,
"when using LOCK TABLES"
);
/* We shall continue here, if --force was given */
dynstr_free
(
&
query
);
}
if
(
flush_logs
)
{
if
(
mysql_refresh
(
sock
,
REFRESH_LOG
))
DB_error
(
sock
,
"when doing refresh"
);
if
(
mysql_refresh
(
mysql
,
REFRESH_LOG
))
DB_error
(
mysql
,
"when doing refresh"
);
/* We shall continue here, if --force was given */
}
while
((
table
=
getTableName
(
0
)))
...
...
@@ -2831,7 +2837,7 @@ static my_bool dump_all_views_in_db(char *database)
check_io
(
md_result_file
);
}
if
(
lock_tables
)
VOID
(
mysql_query_with_error_report
(
sock
,
0
,
"UNLOCK TABLES"
));
VOID
(
mysql_query_with_error_report
(
mysql
,
0
,
"UNLOCK TABLES"
));
return
0
;
}
/* dump_all_tables_in_db */
...
...
@@ -2861,12 +2867,12 @@ static char *get_actual_table_name(const char *old_table_name, MEM_ROOT *root)
my_snprintf
(
query
,
sizeof
(
query
),
"SHOW TABLES LIKE %s"
,
quote_for_like
(
old_table_name
,
show_name_buff
));
if
(
mysql_query_with_error_report
(
sock
,
0
,
query
))
if
(
mysql_query_with_error_report
(
mysql
,
0
,
query
))
{
safe_exit
(
EX_MYSQLERR
);
}
if
((
table_res
=
mysql_store_result
(
sock
)))
if
((
table_res
=
mysql_store_result
(
mysql
)))
{
my_ulonglong
num_rows
=
mysql_num_rows
(
table_res
);
if
(
num_rows
>
0
)
...
...
@@ -2928,16 +2934,16 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
if
(
lock_tables
)
{
if
(
mysql_real_query
(
sock
,
lock_tables_query
.
str
,
if
(
mysql_real_query
(
mysql
,
lock_tables_query
.
str
,
lock_tables_query
.
length
-
1
))
DB_error
(
sock
,
"when doing LOCK TABLES"
);
DB_error
(
mysql
,
"when doing LOCK TABLES"
);
/* We shall countinue here, if --force was given */
}
dynstr_free
(
&
lock_tables_query
);
if
(
flush_logs
)
{
if
(
mysql_refresh
(
sock
,
REFRESH_LOG
))
DB_error
(
sock
,
"when doing refresh"
);
if
(
mysql_refresh
(
mysql
,
REFRESH_LOG
))
DB_error
(
mysql
,
"when doing refresh"
);
/* We shall countinue here, if --force was given */
}
if
(
opt_xml
)
...
...
@@ -2949,7 +2955,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
DBUG_PRINT
(
"info"
,(
"Dumping table %s"
,
*
pos
));
dump_table
(
*
pos
,
db
);
if
(
opt_dump_triggers
&&
mysql_get_server_version
(
sock
)
>=
50009
)
mysql_get_server_version
(
mysql
)
>=
50009
)
dump_triggers_for_table
(
*
pos
,
db
);
}
...
...
@@ -2961,7 +2967,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
}
/* obtain dump of routines (procs/functions) */
if
(
opt_routines
&&
!
opt_xml
&&
mysql_get_server_version
(
sock
)
>=
50009
)
mysql_get_server_version
(
mysql
)
>=
50009
)
{
DBUG_PRINT
(
"info"
,
(
"Dumping routines for database %s"
,
db
));
dump_routines_for_db
(
db
);
...
...
@@ -2975,7 +2981,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
check_io
(
md_result_file
);
}
if
(
lock_tables
)
VOID
(
mysql_query_with_error_report
(
sock
,
0
,
"UNLOCK TABLES"
));
VOID
(
mysql_query_with_error_report
(
mysql
,
0
,
"UNLOCK TABLES"
));
DBUG_RETURN
(
0
);
}
/* dump_selected_tables */
...
...
@@ -3160,7 +3166,7 @@ static void print_value(FILE *file, MYSQL_RES *result, MYSQL_ROW row,
table_type Type of table
GLOBAL VARIABLES
sock MySQL socket
mysql MySQL connection
verbose Write warning messages
RETURN
...
...
@@ -3179,14 +3185,12 @@ char check_if_ignore_table(const char *table_name, char *table_type)
DBUG_ASSERT
(
2
*
sizeof
(
table_name
)
<
sizeof
(
show_name_buff
));
my_snprintf
(
buff
,
sizeof
(
buff
),
"show table status like %s"
,
quote_for_like
(
table_name
,
show_name_buff
));
if
(
mysql_query_with_error_report
(
sock
,
&
res
,
buff
))
if
(
mysql_query_with_error_report
(
mysql
,
&
res
,
buff
))
{
if
(
mysql_errno
(
sock
)
!=
ER_PARSE_ERROR
)
if
(
mysql_errno
(
mysql
)
!=
ER_PARSE_ERROR
)
{
/* If old MySQL version */
if
(
verbose
)
fprintf
(
stderr
,
"-- Warning: Couldn't get status information for table %s (%s)
\n
"
,
table_name
,
mysql_error
(
sock
));
verbose_msg
(
"-- Warning: Couldn't get status information for "
\
"table %s (%s)
\n
"
,
table_name
,
mysql_error
(
mysql
));
DBUG_RETURN
(
result
);
/* assume table is ok */
}
}
...
...
@@ -3194,7 +3198,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
{
fprintf
(
stderr
,
"Error: Couldn't read status information for table %s (%s)
\n
"
,
table_name
,
mysql_error
(
sock
));
table_name
,
mysql_error
(
mysql
));
mysql_free_result
(
res
);
DBUG_RETURN
(
result
);
/* assume table is ok */
}
...
...
@@ -3222,7 +3226,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
/*
If these two types, we do want to skip dumping the table
*/
if
(
!
dFlag
&&
if
(
!
opt_no_data
&&
(
!
strcmp
(
table_type
,
"MRG_MyISAM"
)
||
!
strcmp
(
table_type
,
"MRG_ISAM"
)))
result
=
IGNORE_DATA
;
}
...
...
@@ -3230,6 +3234,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
DBUG_RETURN
(
result
);
}
/*
Get string of comma-separated primary key field names
...
...
@@ -3259,12 +3264,12 @@ static char *primary_key_fields(const char *table_name)
my_snprintf
(
show_keys_buff
,
sizeof
(
show_keys_buff
),
"SHOW KEYS FROM %s"
,
table_name
);
if
(
mysql_query
(
sock
,
show_keys_buff
)
||
!
(
res
=
mysql_store_result
(
sock
)))
if
(
mysql_query
(
mysql
,
show_keys_buff
)
||
!
(
res
=
mysql_store_result
(
mysql
)))
{
fprintf
(
stderr
,
"Warning: Couldn't read keys from table %s;"
" records are NOT sorted (%s)
\n
"
,
table_name
,
mysql_error
(
sock
));
table_name
,
mysql_error
(
mysql
));
/* Don't exit, because it's better to print out unsorted records */
goto
cleanup
;
}
...
...
@@ -3369,11 +3374,10 @@ static my_bool get_view_structure(char *table, char* db)
FILE
*
sql_file
=
md_result_file
;
DBUG_ENTER
(
"get_view_structure"
);
if
(
tFlag
)
/* Don't write table creation info */
if
(
opt_no_create_info
)
/* Don't write table creation info */
DBUG_RETURN
(
0
);
if
(
verbose
)
fprintf
(
stderr
,
"-- Retrieving view structure for table %s...
\n
"
,
table
);
verbose_msg
(
"-- Retrieving view structure for table %s...
\n
"
,
table
);
#ifdef NOT_REALLY_USED_YET
sprintf
(
insert_pat
,
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d"
,
...
...
@@ -3384,7 +3388,7 @@ static my_bool get_view_structure(char *table, char* db)
opt_quoted_table
=
quote_name
(
table
,
table_buff2
,
0
);
my_snprintf
(
query
,
sizeof
(
query
),
"SHOW CREATE TABLE %s"
,
result_table
);
if
(
mysql_query_with_error_report
(
sock
,
&
table_res
,
query
))
if
(
mysql_query_with_error_report
(
mysql
,
&
table_res
,
query
))
{
safe_exit
(
EX_MYSQLERR
);
DBUG_RETURN
(
0
);
...
...
@@ -3394,8 +3398,7 @@ static my_bool get_view_structure(char *table, char* db)
field
=
mysql_fetch_field_direct
(
table_res
,
0
);
if
(
strcmp
(
field
->
name
,
"View"
)
!=
0
)
{
if
(
verbose
)
fprintf
(
stderr
,
"-- It's base table, skipped
\n
"
);
verbose_msg
(
"-- It's base table, skipped
\n
"
);
DBUG_RETURN
(
0
);
}
...
...
@@ -3430,7 +3433,7 @@ static my_bool get_view_structure(char *table, char* db)
"SELECT CHECK_OPTION, DEFINER, SECURITY_TYPE "
\
"FROM information_schema.views "
\
"WHERE table_name=
\"
%s
\"
AND table_schema=
\"
%s
\"
"
,
table
,
db
);
if
(
mysql_query
(
sock
,
query
))
if
(
mysql_query
(
mysql
,
query
))
{
/*
Use the raw output from SHOW CREATE TABLE if
...
...
@@ -3456,7 +3459,7 @@ static my_bool get_view_structure(char *table, char* db)
mysql_free_result
(
table_res
);
/* Get the result from "select ... information_schema" */
if
(
!
(
table_res
=
mysql_store_result
(
sock
))
||
if
(
!
(
table_res
=
mysql_store_result
(
mysql
))
||
!
(
row
=
mysql_fetch_row
(
table_res
)))
{
safe_exit
(
EX_MYSQLERR
);
...
...
@@ -3551,21 +3554,21 @@ int main(int argc, char **argv)
write_header
(
md_result_file
,
*
argv
);
if
((
opt_lock_all_tables
||
opt_master_data
)
&&
do_flush_tables_read_lock
(
sock
))
do_flush_tables_read_lock
(
mysql
))
goto
err
;
if
(
opt_single_transaction
&&
start_transaction
(
sock
,
test
(
opt_master_data
)))
if
(
opt_single_transaction
&&
start_transaction
(
mysql
,
test
(
opt_master_data
)))
goto
err
;
if
(
opt_delete_master_logs
&&
do_reset_master
(
sock
))
if
(
opt_delete_master_logs
&&
do_reset_master
(
mysql
))
goto
err
;
if
(
opt_lock_all_tables
||
opt_master_data
)
{
if
(
flush_logs
&&
mysql_refresh
(
sock
,
REFRESH_LOG
))
if
(
flush_logs
&&
mysql_refresh
(
mysql
,
REFRESH_LOG
))
goto
err
;
flush_logs
=
0
;
/* not anymore; that would not be sensible */
}
if
(
opt_master_data
&&
do_show_master_status
(
sock
))
if
(
opt_master_data
&&
do_show_master_status
(
mysql
))
goto
err
;
if
(
opt_single_transaction
&&
do_unlock_tables
(
sock
))
/* unlock but no commit! */
if
(
opt_single_transaction
&&
do_unlock_tables
(
mysql
))
/* unlock but no commit! */
goto
err
;
if
(
opt_alldbs
)
...
...
configure.in
View file @
74394840
...
...
@@ -1655,17 +1655,20 @@ AC_ARG_WITH(debug,
if
test
"
$with_debug
"
=
"yes"
then
# Medium debug.
CFLAGS
=
"
$DEBUG_CFLAGS
$DEBUG_OPTIMIZE_CC
-DDBUG_ON -DSAFE_MUTEX
$CFLAGS
"
CXXFLAGS
=
"
$DEBUG_CXXFLAGS
$DEBUG_OPTIMIZE_CXX
-DDBUG_ON -DSAFE_MUTEX
$CXXFLAGS
"
AC_DEFINE
([
DBUG_ON],
[
1],
[
Use libdbug]
)
CFLAGS
=
"
$DEBUG_CFLAGS
$DEBUG_OPTIMIZE_CC
-DSAFE_MUTEX
$CFLAGS
"
CXXFLAGS
=
"
$DEBUG_CXXFLAGS
$DEBUG_OPTIMIZE_CXX
-DSAFE_MUTEX
$CXXFLAGS
"
elif
test
"
$with_debug
"
=
"full"
then
# Full debug. Very slow in some cases
CFLAGS
=
"
$DEBUG_CFLAGS
-DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC
$CFLAGS
"
CXXFLAGS
=
"
$DEBUG_CXXFLAGS
-DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC
$CXXFLAGS
"
AC_DEFINE
([
DBUG_ON],
[
1],
[
Use libdbug]
)
CFLAGS
=
"
$DEBUG_CFLAGS
-DSAFE_MUTEX -DSAFEMALLOC
$CFLAGS
"
CXXFLAGS
=
"
$DEBUG_CXXFLAGS
-DSAFE_MUTEX -DSAFEMALLOC
$CXXFLAGS
"
else
# Optimized version. No debug
CFLAGS
=
"
$OPTIMIZE_CFLAGS
-DDBUG_OFF
$CFLAGS
"
CXXFLAGS
=
"
$OPTIMIZE_CXXFLAGS
-DDBUG_OFF
$CXXFLAGS
"
AC_DEFINE
([
DBUG_OFF],
[
1],
[
Don
't use libdbug])
CFLAGS="$OPTIMIZE_CFLAGS $CFLAGS"
CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
fi
# Force static compilation to avoid linking problems/get more speed
...
...
dbug/dbug.c
View file @
74394840
...
...
@@ -66,10 +66,13 @@
* Check of malloc on entry/exit (option "S")
*/
#include <my_global.h>
/* This file won't compile unless DBUG_OFF is undefined locally */
#ifdef DBUG_OFF
#undef DBUG_OFF
#endif
#include <my_global.h>
#include <m_string.h>
#include <errno.h>
#if defined(MSDOS) || defined(__WIN__)
...
...
mysql-test/r/cast.result
View file @
74394840
...
...
@@ -381,3 +381,14 @@ DROP TABLE t1;
select cast(NULL as decimal(6)) as t1;
t1
NULL
set names latin1;
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
select hex(cast('a' as binary(2)));
hex(cast('a' as binary(2)))
6100
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
End of 5.0 tests
mysql-test/r/func_compress.result
View file @
74394840
...
...
@@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a)
NULL NULL
a 1
drop table t1;
create table t1 (a varchar(32) not null);
insert into t1 values ('foo');
explain select * from t1 where uncompress(a) is null;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1
Warnings:
Error 1259 ZLIB: Input data corrupted
select * from t1 where uncompress(a) is null;
a
foo
Warnings:
Error 1259 ZLIB: Input data corrupted
explain select *, uncompress(a) from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1
select *, uncompress(a) from t1;
a uncompress(a)
foo NULL
Warnings:
Error 1259 ZLIB: Input data corrupted
select *, uncompress(a), uncompress(a) is null from t1;
a uncompress(a) uncompress(a) is null
foo NULL 1
Warnings:
Error 1259 ZLIB: Input data corrupted
Error 1259 ZLIB: Input data corrupted
drop table t1;
End of 5.0 tests
mysql-test/r/mysqldump.result
View file @
74394840
...
...
@@ -2875,3 +2875,19 @@ use mysqldump_dbb;
drop view v1;
drop table t1;
drop database mysqldump_dbb;
use test;
create user mysqltest_1;
create table t1(a int, b varchar(34));
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
grant RELOAD on *.* to mysqltest_1@localhost;
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=3784;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` varchar(34) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
drop table t1;
drop user mysqltest_1;
mysql-test/r/user_var.result
View file @
74394840
...
...
@@ -256,3 +256,39 @@ t1 CREATE TABLE `t1` (
`@first_var` longtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
set @a=18446744071710965857;
select @a;
@a
18446744071710965857
CREATE TABLE `bigfailure` (
`afield` BIGINT UNSIGNED NOT NULL
);
INSERT INTO `bigfailure` VALUES (18446744071710965857);
SELECT * FROM bigfailure;
afield
18446744071710965857
select * from (SELECT afield FROM bigfailure) as b;
afield
18446744071710965857
select * from bigfailure where afield = (SELECT afield FROM bigfailure);
afield
18446744071710965857
select * from bigfailure where afield = 18446744071710965857;
afield
18446744071710965857
select * from bigfailure where afield = 18446744071710965856+1;
afield
18446744071710965857
SET @a := (SELECT afield FROM bigfailure);
SELECT @a;
@a
18446744071710965857
SET @a := (select afield from (SELECT afield FROM bigfailure) as b);
SELECT @a;
@a
18446744071710965857
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure));
SELECT @a;
@a
18446744071710965857
drop table bigfailure;
mysql-test/t/cast.test
View file @
74394840
...
...
@@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
CAST
(
mt
AS
DECIMAL
),
CAST
(
lt
AS
DECIMAL
)
from
t1
;
DROP
TABLE
t1
;
# Bug @10237 (CAST(NULL DECIMAL) crashes server)
#
# Bug #10237 (CAST(NULL DECIMAL) crashes server)
#
select
cast
(
NULL
as
decimal
(
6
))
as
t1
;
#
# Bug #17903: cast to char results in binary
#
set
names
latin1
;
select
hex
(
cast
(
'a'
as
char
(
2
)
binary
));
select
hex
(
cast
(
'a'
as
binary
(
2
)));
select
hex
(
cast
(
'a'
as
char
(
2
)
binary
));
--
echo
End
of
5.0
tests
mysql-test/t/func_compress.test
View file @
74394840
...
...
@@ -57,3 +57,17 @@ select uncompress(a), uncompressed_length(a) from t1;
drop
table
t1
;
# End of 4.1 tests
#
# Bug #18539: uncompress(d) is null: impossible?
#
create
table
t1
(
a
varchar
(
32
)
not
null
);
insert
into
t1
values
(
'foo'
);
explain
select
*
from
t1
where
uncompress
(
a
)
is
null
;
select
*
from
t1
where
uncompress
(
a
)
is
null
;
explain
select
*
,
uncompress
(
a
)
from
t1
;
select
*
,
uncompress
(
a
)
from
t1
;
select
*
,
uncompress
(
a
),
uncompress
(
a
)
is
null
from
t1
;
drop
table
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/mysqldump.test
View file @
74394840
...
...
@@ -1266,3 +1266,43 @@ use mysqldump_dbb;
drop
view
v1
;
drop
table
t1
;
drop
database
mysqldump_dbb
;
#
# Bug#21215 mysqldump creating incomplete backups without warning
#
use
test
;
# Create user without sufficient privs to perform the requested operation
create
user
mysqltest_1
;
create
table
t1
(
a
int
,
b
varchar
(
34
));
# Execute mysqldump, will fail on FLUSH TABLES
--
error
2
--
exec
$MYSQL_DUMP
--
compact
--
master
-
data
-
u
mysqltest_1
test
2
>&
1
# Execute mysqldump, will fail on FLUSH TABLES
# use --force, should no affect behaviour
--
error
2
--
exec
$MYSQL_DUMP
--
compact
--
force
--
master
-
data
-
u
mysqltest_1
test
2
>&
1
# Add RELOAD grants
grant
RELOAD
on
*.*
to
mysqltest_1
@
localhost
;
# Execute mysqldump, will fail on SHOW MASTER STATUS
--
error
2
--
exec
$MYSQL_DUMP
--
compact
--
master
-
data
-
u
mysqltest_1
test
2
>&
1
# Execute mysqldump, will fail on SHOW MASTER STATUS.
# use --force, should not alter behaviour
--
error
2
--
exec
$MYSQL_DUMP
--
compact
--
force
--
master
-
data
-
u
mysqltest_1
test
2
>&
1
# Add REPLICATION CLIENT grants
grant
REPLICATION
CLIENT
on
*.*
to
mysqltest_1
@
localhost
;
# Execute mysqldump, should now succeed
--
exec
$MYSQL_DUMP
--
compact
--
master
-
data
-
u
mysqltest_1
test
2
>&
1
# Clean up
drop
table
t1
;
drop
user
mysqltest_1
;
mysql-test/t/user_var.test
View file @
74394840
...
...
@@ -171,3 +171,34 @@ set @first_var= cast(NULL as CHAR);
create
table
t1
select
@
first_var
;
show
create
table
t1
;
drop
table
t1
;
#
# Bug #7498 User variable SET saves SIGNED BIGINT as UNSIGNED BIGINT
#
# First part, set user var to large number and select it
set
@
a
=
18446744071710965857
;
select
@
a
;
# Second part, set user var from large number in table
# then select it
CREATE
TABLE
`bigfailure`
(
`afield`
BIGINT
UNSIGNED
NOT
NULL
);
INSERT
INTO
`bigfailure`
VALUES
(
18446744071710965857
);
SELECT
*
FROM
bigfailure
;
select
*
from
(
SELECT
afield
FROM
bigfailure
)
as
b
;
select
*
from
bigfailure
where
afield
=
(
SELECT
afield
FROM
bigfailure
);
select
*
from
bigfailure
where
afield
=
18446744071710965857
;
# This is fixed in 5.0, to be uncommented there
#select * from bigfailure where afield = '18446744071710965857';
select
*
from
bigfailure
where
afield
=
18446744071710965856
+
1
;
SET
@
a
:=
(
SELECT
afield
FROM
bigfailure
);
SELECT
@
a
;
SET
@
a
:=
(
select
afield
from
(
SELECT
afield
FROM
bigfailure
)
as
b
);
SELECT
@
a
;
SET
@
a
:=
(
select
*
from
bigfailure
where
afield
=
(
SELECT
afield
FROM
bigfailure
));
SELECT
@
a
;
drop
table
bigfailure
;
sql/item_func.cc
View file @
74394840
...
...
@@ -3413,6 +3413,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
entry
->
length
=
0
;
entry
->
update_query_id
=
0
;
entry
->
collation
.
set
(
NULL
,
DERIVATION_IMPLICIT
);
entry
->
unsigned_flag
=
0
;
/*
If we are here, we were called from a SET or a query which sets a
variable. Imagine it is this:
...
...
@@ -3499,6 +3500,7 @@ Item_func_set_user_var::fix_length_and_dec()
type - type of new value
cs - charset info for new value
dv - derivation for new value
unsigned_arg - indiates if a value of type INT_RESULT is unsigned
RETURN VALUE
False - success, True - failure
...
...
@@ -3506,7 +3508,8 @@ Item_func_set_user_var::fix_length_and_dec()
static
bool
update_hash
(
user_var_entry
*
entry
,
bool
set_null
,
void
*
ptr
,
uint
length
,
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
)
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
,
bool
unsigned_arg
)
{
if
(
set_null
)
{
...
...
@@ -3554,6 +3557,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
((
my_decimal
*
)
entry
->
value
)
->
fix_buffer_pointer
();
entry
->
length
=
length
;
entry
->
collation
.
set
(
cs
,
dv
);
entry
->
unsigned_flag
=
unsigned_arg
;
}
entry
->
type
=
type
;
return
0
;
...
...
@@ -3562,7 +3566,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
bool
Item_func_set_user_var
::
update_hash
(
void
*
ptr
,
uint
length
,
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
)
CHARSET_INFO
*
cs
,
Derivation
dv
,
bool
unsigned_arg
)
{
/*
If we set a variable explicitely to NULL then keep the old
...
...
@@ -3571,7 +3576,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
if
((
null_value
=
args
[
0
]
->
null_value
)
&&
null_item
)
type
=
entry
->
type
;
// Don't change type of item
if
(
::
update_hash
(
entry
,
(
null_value
=
args
[
0
]
->
null_value
),
ptr
,
length
,
type
,
cs
,
dv
))
ptr
,
length
,
type
,
cs
,
dv
,
unsigned_arg
))
{
current_thd
->
fatal_error
();
// Probably end of memory
null_value
=
1
;
...
...
@@ -3653,7 +3658,10 @@ String *user_var_entry::val_str(my_bool *null_value, String *str,
str
->
set
(
*
(
double
*
)
value
,
decimals
,
&
my_charset_bin
);
break
;
case
INT_RESULT
:
str
->
set
(
*
(
longlong
*
)
value
,
&
my_charset_bin
);
if
(
!
unsigned_flag
)
str
->
set
(
*
(
longlong
*
)
value
,
&
my_charset_bin
);
else
str
->
set
(
*
(
ulonglong
*
)
value
,
&
my_charset_bin
);
break
;
case
DECIMAL_RESULT
:
my_decimal2string
(
E_DEC_FATAL_ERROR
,
(
my_decimal
*
)
value
,
0
,
0
,
0
,
str
);
...
...
@@ -3724,6 +3732,7 @@ Item_func_set_user_var::check()
case
INT_RESULT
:
{
save_result
.
vint
=
args
[
0
]
->
val_int
();
unsigned_flag
=
args
[
0
]
->
unsigned_flag
;
break
;
}
case
STRING_RESULT
:
...
...
@@ -3779,7 +3788,8 @@ Item_func_set_user_var::update()
case
INT_RESULT
:
{
res
=
update_hash
((
void
*
)
&
save_result
.
vint
,
sizeof
(
save_result
.
vint
),
INT_RESULT
,
&
my_charset_bin
,
DERIVATION_IMPLICIT
);
INT_RESULT
,
&
my_charset_bin
,
DERIVATION_IMPLICIT
,
unsigned_flag
);
break
;
}
case
STRING_RESULT
:
...
...
@@ -4158,7 +4168,7 @@ bool Item_user_var_as_out_param::fix_fields(THD *thd, Item **ref)
void
Item_user_var_as_out_param
::
set_null_value
(
CHARSET_INFO
*
cs
)
{
if
(
::
update_hash
(
entry
,
TRUE
,
0
,
0
,
STRING_RESULT
,
cs
,
DERIVATION_IMPLICIT
))
DERIVATION_IMPLICIT
,
0
/* unsigned_arg */
))
current_thd
->
fatal_error
();
// Probably end of memory
}
...
...
@@ -4167,7 +4177,7 @@ void Item_user_var_as_out_param::set_value(const char *str, uint length,
CHARSET_INFO
*
cs
)
{
if
(
::
update_hash
(
entry
,
FALSE
,
(
void
*
)
str
,
length
,
STRING_RESULT
,
cs
,
DERIVATION_IMPLICIT
))
DERIVATION_IMPLICIT
,
0
/* unsigned_arg */
))
current_thd
->
fatal_error
();
// Probably end of memory
}
...
...
sql/item_func.h
View file @
74394840
...
...
@@ -1161,8 +1161,6 @@ class Item_func_set_user_var :public Item_func
String
*
vstr
;
my_decimal
*
vdec
;
}
save_result
;
String
save_buff
;
public:
LEX_STRING
name
;
// keep it public
...
...
@@ -1173,8 +1171,8 @@ class Item_func_set_user_var :public Item_func
longlong
val_int
();
String
*
val_str
(
String
*
str
);
my_decimal
*
val_decimal
(
my_decimal
*
);
bool
update_hash
(
void
*
ptr
,
uint
length
,
enum
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
);
bool
update_hash
(
void
*
ptr
,
uint
length
,
enum
Item_result
type
,
CHARSET_INFO
*
cs
,
Derivation
dv
,
bool
unsigned_arg
=
0
);
bool
check
();
bool
update
();
enum
Item_result
result_type
()
const
{
return
cached_result_type
;
}
...
...
sql/item_strfunc.cc
View file @
74394840
...
...
@@ -2985,6 +2985,16 @@ String *Item_func_uncompress::val_str(String *str)
if
(
res
->
is_empty
())
return
res
;
/* If length is less than 4 bytes, data is corrupt */
if
(
res
->
length
()
<=
4
)
{
push_warning_printf
(
current_thd
,
MYSQL_ERROR
::
WARN_LEVEL_ERROR
,
ER_ZLIB_Z_DATA_ERROR
,
ER
(
ER_ZLIB_Z_DATA_ERROR
));
goto
err
;
}
/* Size of uncompressed data is stored as first 4 bytes of field */
new_size
=
uint4korr
(
res
->
ptr
())
&
0x3FFFFFFF
;
if
(
new_size
>
current_thd
->
variables
.
max_allowed_packet
)
{
...
...
sql/item_strfunc.h
View file @
74394840
...
...
@@ -808,7 +808,7 @@ class Item_func_uncompress: public Item_str_func
String
buffer
;
public:
Item_func_uncompress
(
Item
*
a
)
:
Item_str_func
(
a
){}
void
fix_length_and_dec
(){
max_length
=
MAX_BLOB_WIDTH
;
}
void
fix_length_and_dec
(){
maybe_null
=
1
;
max_length
=
MAX_BLOB_WIDTH
;
}
const
char
*
func_name
()
const
{
return
"uncompress"
;}
String
*
val_str
(
String
*
)
ZLIB_DEPENDED_FUNCTION
};
...
...
sql/item_subselect.cc
View file @
74394840
...
...
@@ -1511,6 +1511,7 @@ static Item_result set_row(List<Item> &item_list, Item *item,
item
->
max_length
=
sel_item
->
max_length
;
res_type
=
sel_item
->
result_type
();
item
->
decimals
=
sel_item
->
decimals
;
item
->
unsigned_flag
=
sel_item
->
unsigned_flag
;
*
maybe_null
=
sel_item
->
maybe_null
;
if
(
!
(
row
[
i
]
=
Item_cache
::
get_cache
(
res_type
)))
return
STRING_RESULT
;
// we should return something
...
...
sql/sql_class.h
View file @
74394840
...
...
@@ -2015,6 +2015,7 @@ class user_var_entry
ulong
length
;
query_id_t
update_query_id
,
used_query_id
;
Item_result
type
;
bool
unsigned_flag
;
double
val_real
(
my_bool
*
null_value
);
longlong
val_int
(
my_bool
*
null_value
);
...
...
sql/sql_udf.cc
View file @
74394840
...
...
@@ -237,7 +237,7 @@ void udf_init()
}
}
if
(
error
>
0
)
sql_print_error
(
ER
(
ER_GET_ERRNO
)
,
my_errno
);
sql_print_error
(
"Got unknown error: %d"
,
my_errno
);
end_read_record
(
&
read_record_info
);
new_thd
->
version
--
;
// Force close to free memory
...
...
sql/sql_yacc.yy
View file @
74394840
...
...
@@ -3104,7 +3104,7 @@ opt_bin_mod:
| BINARY { Lex->type|= BINCMP_FLAG; };
opt_bin_charset:
/* empty */ {
}
/* empty */ { Lex->charset= NULL;
}
| ASCII_SYM { Lex->charset=&my_charset_latin1; }
| UNICODE_SYM
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment