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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
b0ef3979
Commit
b0ef3979
authored
Oct 09, 2007
by
cmiller@zippy.cornsilk.net
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
parents
eedde95a
a8614495
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
389 additions
and
27 deletions
+389
-27
client/mysql_upgrade.c
client/mysql_upgrade.c
+4
-0
client/mysqltest.c
client/mysqltest.c
+15
-4
extra/comp_err.c
extra/comp_err.c
+1
-0
mysql-test/lib/mtr_cases.pl
mysql-test/lib/mtr_cases.pl
+25
-3
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+10
-5
mysql-test/r/grant.result
mysql-test/r/grant.result
+3
-0
mysql-test/r/grant3.result
mysql-test/r/grant3.result
+122
-0
mysql-test/r/type_datetime.result
mysql-test/r/type_datetime.result
+23
-0
mysql-test/t/grant.test
mysql-test/t/grant.test
+3
-0
mysql-test/t/grant3.test
mysql-test/t/grant3.test
+100
-0
mysql-test/t/mysqltest.test
mysql-test/t/mysqltest.test
+3
-0
mysql-test/t/type_datetime.test
mysql-test/t/type_datetime.test
+23
-0
sql/item.cc
sql/item.cc
+1
-0
sql/item_timefunc.h
sql/item_timefunc.h
+3
-1
sql/sql_acl.cc
sql/sql_acl.cc
+31
-10
sql/sql_select.cc
sql/sql_select.cc
+22
-4
No files found.
client/mysql_upgrade.c
View file @
b0ef3979
...
...
@@ -456,7 +456,11 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
if
(
my_write
(
fd
,
query
,
strlen
(
query
),
MYF
(
MY_FNABP
|
MY_WME
)))
{
my_close
(
fd
,
MYF
(
0
));
my_delete
(
query_file_path
,
MYF
(
0
));
die
(
"Failed to write to '%s'"
,
query_file_path
);
}
ret
=
run_tool
(
mysql_path
,
ds_res
,
...
...
client/mysqltest.c
View file @
b0ef3979
...
...
@@ -1580,10 +1580,21 @@ void check_result(DYNAMIC_STRING* ds)
and then show the diff
*/
char
reject_file
[
FN_REFLEN
];
str_to_file
(
fn_format
(
reject_file
,
result_file_name
,
opt_logdir
,
".reject"
,
*
opt_logdir
?
MY_REPLACE_DIR
|
MY_REPLACE_EXT
:
MY_REPLACE_EXT
),
ds
->
str
,
ds
->
length
);
dirname_part
(
reject_file
,
result_file_name
);
if
(
access
(
reject_file
,
W_OK
)
==
0
)
{
/* Result file directory is writable, save reject file there */
fn_format
(
reject_file
,
result_file_name
,
NULL
,
".reject"
,
MY_REPLACE_EXT
);
}
else
{
/* Put reject file in opt_logdir */
fn_format
(
reject_file
,
result_file_name
,
opt_logdir
,
".reject"
,
MY_REPLACE_DIR
|
MY_REPLACE_EXT
);
}
str_to_file
(
reject_file
,
ds
->
str
,
ds
->
length
);
dynstr_set
(
ds
,
NULL
);
/* Don't create a .log file */
...
...
extra/comp_err.c
View file @
b0ef3979
...
...
@@ -167,6 +167,7 @@ int main(int argc, char *argv[])
DBUG_ENTER
(
"main"
);
charsets_dir
=
DEFAULT_CHARSET_DIR
;
my_umask_dir
=
0777
;
if
(
get_options
(
&
argc
,
&
argv
))
DBUG_RETURN
(
1
);
if
(
!
(
row_count
=
parse_input_file
(
TXTFILE
,
&
error_head
,
&
lang_head
)))
...
...
mysql-test/lib/mtr_cases.pl
View file @
b0ef3979
...
...
@@ -27,6 +27,26 @@ sub collect_one_test_case ($$$$$$$);
sub
mtr_options_from_test_file
($$);
my
$do_test
;
my
$skip_test
;
sub
init_pattern
{
my
(
$from
,
$what
)
=
@_
;
if
(
$from
=~
/[a-z0-9]/
)
{
# Does not contain any regex, make the pattern match
# beginning of string
$from
=
"
^
$from
";
}
else
{
# Check that pattern is a valid regex
eval
{
""
=~
/$from/
;
1
}
or
mtr_error
("
Invalid regex '
$from
' passed to
$what
\n
Perl says: $@
");
}
return
$from
;
}
##############################################################################
#
# Collect information about test cases we are to run
...
...
@@ -39,6 +59,9 @@ sub collect_test_cases ($) {
my
$testdir
;
my
$resdir
;
$do_test
=
init_pattern
(
$::opt_do_test
,
"
--do-test
");
$skip_test
=
init_pattern
(
$::opt_skip_test
,
"
--skip-test
");
if
(
$suite
eq
"
main
"
)
{
$testdir
=
"
$::glob_mysql_test_dir/t
";
...
...
@@ -162,8 +185,7 @@ sub collect_test_cases ($) {
}
# Skip tests that does not match the --do-test= filter
next
if
$::opt_do_test
and
!
defined
mtr_match_prefix
(
$elem
,
$::opt_do_test
);
next
if
(
$do_test
and
not
$tname
=~
/$do_test/o
);
collect_one_test_case
(
$testdir
,
$resdir
,
$tname
,
$elem
,
$cases
,
\%
disabled
,
$component_id
);
...
...
@@ -288,7 +310,7 @@ sub collect_one_test_case($$$$$$$) {
# Skip some tests but include in list, just mark them to skip
# ----------------------------------------------------------------------
if
(
$
::opt_skip_test
and
defined
mtr_match_prefix
(
$tname
,
$::opt_skip_test
)
)
if
(
$
skip_test
and
$tname
=~
/$skip_test/o
)
{
$tinfo
->
{'
skip
'}
=
1
;
return
;
...
...
mysql-test/mysql-test-run.pl
View file @
b0ef3979
...
...
@@ -1334,12 +1334,13 @@ sub datadir_list_setup () {
sub
collect_mysqld_features
()
{
my
$found_variable_list_start
=
0
;
my
$tmpdir
=
tempdir
(
CLEANUP
=>
0
);
# Directory removed by this function
#
# Execute "mysqld --no-defaults --help --verbose" to get a
# list of all features and settings
#
my
$list
=
`
$exe_mysqld
--no-defaults --verbose --help
`;
my
$list
=
`
$exe_mysqld
--no-defaults --
datadir=
$tmpdir
--
verbose --help
`;
foreach
my
$line
(
split
('
\
n
',
$list
))
{
...
...
@@ -1394,7 +1395,7 @@ sub collect_mysqld_features () {
}
}
}
rmtree
(
$tmpdir
);
mtr_error
("
Could not find version of MySQL
")
unless
$mysql_version_id
;
mtr_error
("
Could not find variabes list
")
unless
$found_variable_list_start
;
...
...
@@ -5006,7 +5007,7 @@ sub valgrind_arguments {
}
# Add valgrind options, can be overriden by user
mtr_add_arg
(
$args
,
'
%s
',
$
_
)
for
(
split
('
',
$opt_valgrind_options
)
);
mtr_add_arg
(
$args
,
'
%s
',
$
opt_valgrind_options
);
mtr_add_arg
(
$args
,
$$exe
);
...
...
@@ -5079,12 +5080,16 @@ Options to control what test suites or cases to run
skip-ndb[cluster] Skip all tests that need cluster
skip-ndb[cluster]-slave Skip all tests that need a slave cluster
ndb-extra Run extra tests from ndb directory
do-test=PREFIX Run test cases which name are prefixed with PREFIX
do-test=PREFIX or REGEX
Run test cases which name are prefixed with PREFIX
or fulfills REGEX
skip-test=PREFIX or REGEX
Skip test cases which name are prefixed with PREFIX
or fulfills REGEX
start-from=PREFIX Run test cases starting from test prefixed with PREFIX
suite=NAME Run the test suite named NAME. The default is "main"
skip-rpl Skip the replication test cases.
skip-im Don't start IM, and skip the IM test cases
skip-test=PREFIX Skip test cases which name are prefixed with PREFIX
big-test Set the environment variable BIG_TEST, which can be
checked from test cases.
...
...
mysql-test/r/grant.result
View file @
b0ef3979
...
...
@@ -1121,6 +1121,9 @@ SELECT * FROM test.t1;
f1 f2
1 1
2 2
REVOKE UPDATE (f1) ON `test`.`t1` FROM 'mysqltest_1'@'localhost';
REVOKE SELECT ON `test`.* FROM 'mysqltest_1'@'localhost';
REVOKE ALL ON db27878.* FROM 'mysqltest_1'@'localhost';
DROP DATABASE db27878;
use test;
DROP TABLE t1;
...
...
mysql-test/r/grant3.result
View file @
b0ef3979
...
...
@@ -16,3 +16,125 @@ delete from mysql.db where user like 'mysqltest\_%';
delete from mysql.tables_priv where user like 'mysqltest\_%';
delete from mysql.columns_priv where user like 'mysqltest\_%';
flush privileges;
grant select on test.* to CUser@localhost;
grant select on test.* to CUser@LOCALHOST;
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
user host db select_priv
CUser LOCALHOST test Y
CUser localhost test Y
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
user host db select_priv
CUser localhost test Y
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser' order by 1,2;
user host db select_priv
DROP USER CUser@localhost;
DROP USER CUser@LOCALHOST;
create table t1 (a int);
grant select on test.t1 to CUser@localhost;
grant select on test.t1 to CUser@LOCALHOST;
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
CUser LOCALHOST test t1 Select
CUser localhost test t1 Select
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
CUser localhost test t1 Select
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
DROP USER CUser@localhost;
DROP USER CUser@LOCALHOST;
grant select(a) on test.t1 to CUser@localhost;
grant select(a) on test.t1 to CUser@LOCALHOST;
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
CUser LOCALHOST test t1 Select
CUser localhost test t1 Select
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'LOCALHOST';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
CUser localhost test t1 Select
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'CUser'@'localhost';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser' order by 1,2;
user host
CUser LOCALHOST
CUser localhost
SELECT user, host, db, Table_name, Table_priv, Column_priv FROM mysql.tables_priv where user = 'CUser' order by 1,2;
user host db Table_name Table_priv Column_priv
DROP USER CUser@localhost;
DROP USER CUser@LOCALHOST;
drop table t1;
grant select on test.* to CUser2@localhost;
grant select on test.* to CUser2@LOCALHOST;
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
user host
CUser2 LOCALHOST
CUser2 localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
user host db select_priv
CUser2 LOCALHOST test Y
CUser2 localhost test Y
REVOKE SELECT ON test.* FROM 'CUser2'@'LOCALHOST';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
user host
CUser2 LOCALHOST
CUser2 localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
user host db select_priv
CUser2 localhost test Y
REVOKE SELECT ON test.* FROM 'CUser2'@'localhost';
flush privileges;
SELECT user, host FROM mysql.user where user = 'CUser2' order by 1,2;
user host
CUser2 LOCALHOST
CUser2 localhost
SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by 1,2;
user host db select_priv
DROP USER CUser2@localhost;
DROP USER CUser2@LOCALHOST;
mysql-test/r/type_datetime.result
View file @
b0ef3979
...
...
@@ -427,3 +427,26 @@ f1
Warnings:
Warning 1292 Incorrect datetime value: '2007010100000' for column 'f1' at row 1
drop table t1;
create table t1 (f1 time);
insert into t1 set f1 = '45:44:44';
insert into t1 set f1 = '15:44:44';
select * from t1 where (convert(f1,datetime)) != 1;
f1
15:44:44
Warnings:
Warning 1292 Truncated incorrect datetime value: '0000-00-00 45:44:44'
drop table t1;
create table t1 (a tinyint);
insert into t1 values (), (), ();
select sum(a) from t1 group by convert(a, datetime);
sum(a)
NULL
select convert(a, datetime) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def convert(a, datetime) 12 29 0 Y 128 6 63
convert(a, datetime)
NULL
NULL
NULL
drop table t1;
End of 5.0 tests
mysql-test/t/grant.test
View file @
b0ef3979
...
...
@@ -1144,6 +1144,9 @@ UPDATE v1 SET f2 = 4;
SELECT
*
FROM
test
.
t1
;
disconnect
user1
;
connection
default
;
REVOKE
UPDATE
(
f1
)
ON
`test`
.
`t1`
FROM
'mysqltest_1'
@
'localhost'
;
REVOKE
SELECT
ON
`test`
.*
FROM
'mysqltest_1'
@
'localhost'
;
REVOKE
ALL
ON
db27878
.*
FROM
'mysqltest_1'
@
'localhost'
;
DROP
DATABASE
db27878
;
use
test
;
DROP
TABLE
t1
;
...
...
mysql-test/t/grant3.test
View file @
b0ef3979
...
...
@@ -34,3 +34,103 @@ delete from mysql.db where user like 'mysqltest\_%';
delete
from
mysql
.
tables_priv
where
user
like
'mysqltest\_%'
;
delete
from
mysql
.
columns_priv
where
user
like
'mysqltest\_%'
;
flush
privileges
;
#
# Bug: #19828 Case sensitivity in Grant/Revoke
#
grant
select
on
test
.*
to
CUser
@
localhost
;
grant
select
on
test
.*
to
CUser
@
LOCALHOST
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'LOCALHOST'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'localhost'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser'
order
by
1
,
2
;
DROP
USER
CUser
@
localhost
;
DROP
USER
CUser
@
LOCALHOST
;
#### table grants
create
table
t1
(
a
int
);
grant
select
on
test
.
t1
to
CUser
@
localhost
;
grant
select
on
test
.
t1
to
CUser
@
LOCALHOST
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'LOCALHOST'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'localhost'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
DROP
USER
CUser
@
localhost
;
DROP
USER
CUser
@
LOCALHOST
;
### column grants
grant
select
(
a
)
on
test
.
t1
to
CUser
@
localhost
;
grant
select
(
a
)
on
test
.
t1
to
CUser
@
LOCALHOST
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'LOCALHOST'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
REVOKE
ALL
PRIVILEGES
,
GRANT
OPTION
FROM
'CUser'
@
'localhost'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
Table_name
,
Table_priv
,
Column_priv
FROM
mysql
.
tables_priv
where
user
=
'CUser'
order
by
1
,
2
;
DROP
USER
CUser
@
localhost
;
DROP
USER
CUser
@
LOCALHOST
;
drop
table
t1
;
# revoke on a specific DB only
grant
select
on
test
.*
to
CUser2
@
localhost
;
grant
select
on
test
.*
to
CUser2
@
LOCALHOST
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser2'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser2'
order
by
1
,
2
;
REVOKE
SELECT
ON
test
.*
FROM
'CUser2'
@
'LOCALHOST'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser2'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser2'
order
by
1
,
2
;
REVOKE
SELECT
ON
test
.*
FROM
'CUser2'
@
'localhost'
;
flush
privileges
;
SELECT
user
,
host
FROM
mysql
.
user
where
user
=
'CUser2'
order
by
1
,
2
;
SELECT
user
,
host
,
db
,
select_priv
FROM
mysql
.
db
where
user
=
'CUser2'
order
by
1
,
2
;
DROP
USER
CUser2
@
localhost
;
DROP
USER
CUser2
@
LOCALHOST
;
mysql-test/t/mysqltest.test
View file @
b0ef3979
...
...
@@ -1435,7 +1435,10 @@ select "this will be executed";
--
exec
$MYSQL_TEST
-
x
$MYSQLTEST_VARDIR
/
tmp
/
query
.
sql
-
R
$MYSQLTEST_VARDIR
/
tmp
/
zero_length_file
.
result
>
/
dev
/
null
2
>&
1
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
zero_length_file
.
result
;
--
error
0
,
1
remove_file
$MYSQLTEST_VARDIR
/
log
/
zero_length_file
.
reject
;
--
error
0
,
1
remove_file
$MYSQL_TEST_DIR
/
r
/
zero_length_file
.
reject
;
#
# Test that a test file that does not generate any output fails.
...
...
mysql-test/t/type_datetime.test
View file @
b0ef3979
...
...
@@ -282,3 +282,26 @@ select * from t1 where f1 between 20020101 and 20070101000000;
select
*
from
t1
where
f1
between
2002010
and
20070101000000
;
select
*
from
t1
where
f1
between
20020101
and
2007010100000
;
drop
table
t1
;
#
# Bug #31253: crash comparing datetime to double
# Should return 1st row only. Crashes if NULL propagation fails.
#
create
table
t1
(
f1
time
);
insert
into
t1
set
f1
=
'45:44:44'
;
insert
into
t1
set
f1
=
'15:44:44'
;
select
*
from
t1
where
(
convert
(
f1
,
datetime
))
!=
1
;
drop
table
t1
;
#
# Bug #31249: problem with convert(..., datetime)
#
create
table
t1
(
a
tinyint
);
insert
into
t1
values
(),
(),
();
select
sum
(
a
)
from
t1
group
by
convert
(
a
,
datetime
);
--
enable_metadata
select
convert
(
a
,
datetime
)
from
t1
;
--
disable_metadata
drop
table
t1
;
--
echo
End
of
5.0
tests
sql/item.cc
View file @
b0ef3979
...
...
@@ -274,6 +274,7 @@ my_decimal *Item::val_decimal_from_date(my_decimal *decimal_value)
if
(
get_date
(
&
ltime
,
TIME_FUZZY_DATE
))
{
my_decimal_set_zero
(
decimal_value
);
null_value
=
1
;
// set NULL, stop processing
return
0
;
}
return
date2my_decimal
(
&
ltime
,
decimal_value
);
...
...
sql/item_timefunc.h
View file @
b0ef3979
...
...
@@ -844,7 +844,9 @@ public:
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_DATETIME
;
}
void
fix_length_and_dec
()
{
Item_typecast_maybe_null
::
fix_length_and_dec
();
collation
.
set
(
&
my_charset_bin
);
maybe_null
=
1
;
max_length
=
MAX_DATETIME_FULL_WIDTH
*
MY_CHARSET_BIN_MB_MAXLEN
;
decimals
=
DATETIME_DEC
;
}
...
...
sql/sql_acl.cc
View file @
b0ef3979
...
...
@@ -1132,7 +1132,7 @@ static void acl_update_db(const char *user, const char *host, const char *db,
{
if
(
!
acl_db
->
host
.
hostname
&&
!
host
[
0
]
||
acl_db
->
host
.
hostname
&&
!
my_strcasecmp
(
system_charset_info
,
host
,
acl_db
->
host
.
hostname
))
!
strcmp
(
host
,
acl_db
->
host
.
hostname
))
{
if
(
!
acl_db
->
db
&&
!
db
[
0
]
||
acl_db
->
db
&&
!
strcmp
(
db
,
acl_db
->
db
))
...
...
@@ -4344,6 +4344,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
if
(
!
(
host
=
acl_db
->
host
.
hostname
))
host
=
""
;
/*
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
but make it case-insensitive because that's the way they are
actually applied, and showing fewer privileges than are applied
would be wrong from a security point of view.
*/
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
{
...
...
@@ -4379,8 +4386,8 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
db
.
append
(
lex_user
->
user
.
str
,
lex_user
->
user
.
length
,
system_charset_info
);
db
.
append
(
STRING_WITH_LEN
(
"'@'"
));
db
.
append
(
lex_user
->
host
.
str
,
lex_user
->
host
.
length
,
system_charset_info
);
// host and lex_user->host are equal except for case
db
.
append
(
host
,
strlen
(
host
),
system_charset_info
);
db
.
append
(
'\''
);
if
(
want_access
&
GRANT_ACL
)
db
.
append
(
STRING_WITH_LEN
(
" WITH GRANT OPTION"
));
...
...
@@ -4407,6 +4414,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
if
(
!
(
host
=
grant_table
->
host
.
hostname
))
host
=
""
;
/*
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
but make it case-insensitive because that's the way they are
actually applied, and showing fewer privileges than are applied
would be wrong from a security point of view.
*/
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
{
...
...
@@ -4487,8 +4501,8 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
global
.
append
(
lex_user
->
user
.
str
,
lex_user
->
user
.
length
,
system_charset_info
);
global
.
append
(
STRING_WITH_LEN
(
"'@'"
));
global
.
append
(
lex_user
->
host
.
str
,
lex_user
->
host
.
length
,
system_charset_info
);
// host and lex_user->host are equal except for case
global
.
append
(
host
,
strlen
(
host
),
system_charset_info
);
global
.
append
(
'\''
);
if
(
table_access
&
GRANT_ACL
)
global
.
append
(
STRING_WITH_LEN
(
" WITH GRANT OPTION"
));
...
...
@@ -4543,6 +4557,13 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
if
(
!
(
host
=
grant_proc
->
host
.
hostname
))
host
=
""
;
/*
We do not make SHOW GRANTS case-sensitive here (like REVOKE),
but make it case-insensitive because that's the way they are
actually applied, and showing fewer privileges than are applied
would be wrong from a security point of view.
*/
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
{
...
...
@@ -4586,8 +4607,8 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
global
.
append
(
lex_user
->
user
.
str
,
lex_user
->
user
.
length
,
system_charset_info
);
global
.
append
(
STRING_WITH_LEN
(
"'@'"
));
global
.
append
(
lex_user
->
host
.
str
,
lex_user
->
host
.
length
,
system_charset_info
);
// host and lex_user->host are equal except for case
global
.
append
(
host
,
strlen
(
host
),
system_charset_info
);
global
.
append
(
'\''
);
if
(
proc_access
&
GRANT_ACL
)
global
.
append
(
STRING_WITH_LEN
(
" WITH GRANT OPTION"
));
...
...
@@ -5541,7 +5562,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
host
=
""
;
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
!
strcmp
(
lex_user
->
host
.
str
,
host
))
{
if
(
!
replace_db_table
(
tables
[
1
].
table
,
acl_db
->
db
,
*
lex_user
,
~
(
ulong
)
0
,
1
))
{
...
...
@@ -5572,7 +5593,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
host
=
""
;
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
!
strcmp
(
lex_user
->
host
.
str
,
host
))
{
if
(
replace_table_table
(
thd
,
grant_table
,
tables
[
2
].
table
,
*
lex_user
,
grant_table
->
db
,
...
...
@@ -5618,7 +5639,7 @@ bool mysql_revoke_all(THD *thd, List <LEX_USER> &list)
host
=
""
;
if
(
!
strcmp
(
lex_user
->
user
.
str
,
user
)
&&
!
my_strcasecmp
(
system_charset_info
,
lex_user
->
host
.
str
,
host
))
!
strcmp
(
lex_user
->
host
.
str
,
host
))
{
if
(
!
replace_routine_table
(
thd
,
grant_proc
,
tables
[
4
].
table
,
*
lex_user
,
grant_proc
->
db
,
...
...
sql/sql_select.cc
View file @
b0ef3979
...
...
@@ -13902,13 +13902,31 @@ calc_group_buffer(JOIN *join,ORDER *group)
group_item
->
decimals
);
break
;
case
STRING_RESULT
:
{
enum
enum_field_types
type
=
group_item
->
field_type
();
/*
As items represented as DATE/TIME fields in the group buffer
have STRING_RESULT result type, we increase the length
by 8 as maximum pack length of such fields.
*/
if
(
type
==
MYSQL_TYPE_TIME
||
type
==
MYSQL_TYPE_DATE
||
type
==
MYSQL_TYPE_DATETIME
||
type
==
MYSQL_TYPE_TIMESTAMP
)
{
key_length
+=
8
;
}
else
{
/*
Group strings are taken as varstrings and require an length field.
A field is not yet created by create_tmp_field()
and the sizes should match up.
*/
key_length
+=
group_item
->
max_length
+
HA_KEY_BLOB_LENGTH
;
}
break
;
}
default:
/* This case should never be choosen */
DBUG_ASSERT
(
0
);
...
...
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