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
0eca4824
Commit
0eca4824
authored
Feb 06, 2009
by
Tatiana A. Nurnberg
Browse files
Options
Browse Files
Download
Plain Diff
auto-merge
parents
d66dc230
b30239bc
Changes
22
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
657 additions
and
367 deletions
+657
-367
myisammrg/myrg_open.c
myisammrg/myrg_open.c
+10
-7
mysql-test/include/count_sessions.inc
mysql-test/include/count_sessions.inc
+21
-0
mysql-test/include/wait_until_count_sessions.inc
mysql-test/include/wait_until_count_sessions.inc
+112
-0
mysql-test/r/func_misc.result
mysql-test/r/func_misc.result
+5
-0
mysql-test/r/grant2.result
mysql-test/r/grant2.result
+12
-11
mysql-test/r/lock_tables_lost_commit.result
mysql-test/r/lock_tables_lost_commit.result
+6
-6
mysql-test/r/merge.result
mysql-test/r/merge.result
+11
-0
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+84
-82
mysql-test/r/outfile.result
mysql-test/r/outfile.result
+0
-0
mysql-test/t/func_misc.test
mysql-test/t/func_misc.test
+9
-0
mysql-test/t/grant2.test
mysql-test/t/grant2.test
+68
-55
mysql-test/t/grant3.test
mysql-test/t/grant3.test
+12
-4
mysql-test/t/lock_tables_lost_commit.test
mysql-test/t/lock_tables_lost_commit.test
+18
-9
mysql-test/t/merge.test
mysql-test/t/merge.test
+13
-0
mysql-test/t/mysqldump.test
mysql-test/t/mysqldump.test
+135
-88
mysql-test/t/openssl_1.test
mysql-test/t/openssl_1.test
+19
-7
mysql-test/t/outfile.test
mysql-test/t/outfile.test
+12
-4
mysql-test/t/variables.test
mysql-test/t/variables.test
+46
-46
scripts/mysqld_multi.sh
scripts/mysqld_multi.sh
+5
-0
sql/item.cc
sql/item.cc
+19
-6
sql/sql_select.cc
sql/sql_select.cc
+33
-40
sql/sql_select.h
sql/sql_select.h
+7
-2
No files found.
myisammrg/myrg_open.c
View file @
0eca4824
...
...
@@ -40,6 +40,7 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
IO_CACHE
file
;
MI_INFO
*
isam
=
0
;
uint
found_merge_insert_method
=
0
;
my_bool
bad_children
=
FALSE
;
DBUG_ENTER
(
"myrg_open"
);
LINT_INIT
(
key_parts
);
...
...
@@ -89,13 +90,13 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
fn_format
(
buff
,
buff
,
""
,
""
,
0
);
if
(
!
(
isam
=
mi_open
(
buff
,
mode
,(
handle_locking
?
HA_OPEN_WAIT_IF_LOCKED
:
0
))))
{
my_errno
=
HA_ERR_WRONG_MRG_TABLE_DEF
;
if
(
handle_locking
&
HA_OPEN_FOR_REPAIR
)
{
myrg_print_wrong_table
(
buff
);
bad_children
=
TRUE
;
continue
;
}
goto
err
;
goto
bad_children
;
}
if
(
!
m_info
)
/* First file */
{
...
...
@@ -122,13 +123,13 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
files
++
;
if
(
m_info
->
reclength
!=
isam
->
s
->
base
.
reclength
)
{
my_errno
=
HA_ERR_WRONG_MRG_TABLE_DEF
;
if
(
handle_locking
&
HA_OPEN_FOR_REPAIR
)
{
myrg_print_wrong_table
(
buff
);
bad_children
=
TRUE
;
continue
;
}
goto
err
;
goto
bad_children
;
}
m_info
->
options
|=
isam
->
s
->
options
;
m_info
->
records
+=
isam
->
state
->
records
;
...
...
@@ -141,8 +142,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
m_info
->
tables
);
}
if
(
my_errno
==
HA_ERR_WRONG_MRG_TABLE_DEF
)
goto
err
;
if
(
bad_children
)
goto
bad_children
;
if
(
!
m_info
&&
!
(
m_info
=
(
MYRG_INFO
*
)
my_malloc
(
sizeof
(
MYRG_INFO
),
MYF
(
MY_WME
|
MY_ZEROFILL
))))
goto
err
;
...
...
@@ -170,12 +171,14 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
pthread_mutex_unlock
(
&
THR_LOCK_open
);
DBUG_RETURN
(
m_info
);
bad_children:
my_errno
=
HA_ERR_WRONG_MRG_TABLE_DEF
;
err:
save_errno
=
my_errno
;
switch
(
errpos
)
{
case
3
:
while
(
files
)
mi_close
(
m_info
->
open_tables
[
--
files
].
table
);
(
void
)
mi_close
(
m_info
->
open_tables
[
--
files
].
table
);
my_free
((
char
*
)
m_info
,
MYF
(
0
));
/* Fall through */
case
2
:
...
...
mysql-test/include/count_sessions.inc
0 → 100644
View file @
0eca4824
# include/count_sessions.inc
#
# SUMMARY
#
# Stores the number of current sessions in $count_sessions.
#
#
# USAGE
#
# Please look into include/wait_until_count_sessions.inc
# for examples of typical usage.
#
#
# EXAMPLE
# backup.test, grant3.test
#
#
# Created: 2009-01-14 mleich
#
let
$count_sessions
=
query_get_value
(
SHOW
STATUS
LIKE
'Threads_connected'
,
Value
,
1
);
mysql-test/include/wait_until_count_sessions.inc
0 → 100644
View file @
0eca4824
# include/wait_until_count_sessions.inc
#
# SUMMARY
#
# Waits until the passed number ($count_sessions) of concurrent sessions was
# observed via
# SHOW STATUS LIKE 'Threads_connected'
# or the operation times out.
# Note: Starting with 5.1 we could also use
# SELECT COUNT(*) FROM information_schema.processlist
# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
# runs in all versions 5.0+
#
#
# USAGE
#
# let $count_sessions= 3;
# --source include/wait_until_count_sessions.inc
#
# OR typical example of a test which uses more than one session
# Such a test could harm successing tests if there is no server shutdown
# and start between.cw
#
# If the testing box is slow than the disconnect of sessions belonging to
# the current test might happen when the successing test gets executed.
# This means the successing test might see activities like unexpected
# rows within the general log or the PROCESSLIST.
# Example from bug http://bugs.mysql.com/bug.php?id=40377
# --- bzr_mysql-6.0-rpl/.../r/log_state.result
# +++ bzr_mysql-6.0-rpl/.../r/log_state.reject
# @@ -25,6 +25,7 @@
# event_time user_host ... command_type argument
# TIMESTAMP USER_HOST ... Query create table t1(f1 int)
# TIMESTAMP USER_HOST ... Query select * from mysql.general_log
# +TIMESTAMP USER_HOST ... Quit
# ....
#
# What to do?
# -----------
# <start of test>
# # Determine initial number of connections (set $count_sessions)
# --source include/count_sessions.inc
# ...
# connect (con1,.....)
# ...
# connection default;
# ...
# disconnect con1;
# ...
# # Wait until we have reached the initial number of connections
# # or more than the sleep time above (10 seconds) has passed.
# # $count_sessions
# --source include/wait_until_count_sessions.inc
# <end of test>
#
# Important note about tests with unfortunate (= not cooperative
# to successing tests) architecture:
# connection con1;
# send SELECT ..., sleep(10)
# connection default;
# ...
# disconnect con1;
# <end of test>
# should be fixed by
# connection con1;
# send SELECT ..., sleep(10)
# connection default;
# ...
# connect con1;
# reap;
# connection default;
# disconnect con1;
# <end of test>
# and not only by appending include/wait_until_count_sessions.inc etc.
#
#
# EXAMPLE
#
# backup.test, grant3.test
#
#
# Created: 2009-01-14 mleich
#
let
$wait_counter
=
50
;
if
(
$wait_timeout
)
{
let
$wait_counter
=
`SELECT $wait_timeout * 10`
;
}
# Reset $wait_timeout so that its value won't be used on subsequent
# calls, and default will be used instead.
let
$wait_timeout
=
0
;
while
(
$wait_counter
)
{
let
$current_sessions
=
query_get_value
(
SHOW
STATUS
LIKE
'Threads_connected'
,
Value
,
1
);
let
$success
=
`SELECT $current_sessions = $count_sessions`
;
if
(
$success
)
{
let
$wait_counter
=
0
;
}
if
(
!
$success
)
{
real_sleep
0.1
;
dec
$wait_counter
;
}
}
if
(
!
$success
)
{
--
echo
# Timeout in wait_until_count_sessions.inc
--
echo
# Number of sessions expected: $count_sessions found: $current_sessions
}
mysql-test/r/func_misc.result
View file @
0eca4824
...
...
@@ -319,4 +319,9 @@ select @my_uuid_date - @my_uuid_synthetic;
@my_uuid_date - @my_uuid_synthetic
0
set @@session.time_zone=@save_tz;
CREATE TABLE t1 (a DATE);
SELECT * FROM t1 WHERE a = NAME_CONST('reportDate',
_binary'2009-01-09' COLLATE 'binary');
a
DROP TABLE t1;
End of 5.0 tests
mysql-test/r/grant2.result
View file @
0eca4824
...
...
@@ -366,20 +366,20 @@ insert into mysql.user select * from t1;
drop table t1, t2;
drop database TESTDB;
flush privileges;
grant all privileges on test.* to
`a@`@localhost;
grant execute on * to
`a@`@localhost;
create table t2 (s1 int
);
insert into t2 values
(1);
drop function if exists
f2;
create function f2 () returns int begin declare v int; select s1 from t2
into v; return v; end
//
select
f2();
GRANT ALL PRIVILEGES ON test.* TO
`a@`@localhost;
GRANT EXECUTE ON * TO
`a@`@localhost;
CREATE TABLE t2 (s1 INT
);
INSERT INTO t2 VALUES
(1);
DROP FUNCTION IF EXISTS
f2;
CREATE FUNCTION f2 () RETURNS INT
BEGIN DECLARE v INT; SELECT s1 FROM t2 INTO v; RETURN v; END
//
SELECT
f2();
f2()
1
drop function
f2;
drop table
t2;
DROP FUNCTION
f2;
DROP TABLE
t2;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
drop user
`a@`@localhost;
DROP USER
`a@`@localhost;
drop database if exists mysqltest_1;
drop database if exists mysqltest_2;
drop user mysqltest_u1@localhost;
...
...
@@ -436,6 +436,7 @@ SELECT * FROM t2;
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
SELECT * FROM t1 JOIN t2 USING (b);
ERROR 42000: SELECT command denied to user 'mysqltest1'@'localhost' for column 'c' in table 't2'
USE test;
DROP TABLE db1.t1, db1.t2;
DROP USER mysqltest1@localhost;
DROP DATABASE db1;
...
...
mysql-test/r/lock_tables_lost_commit.result
View file @
0eca4824
drop table if exists
t1;
create table t1(a int) engine
=innodb;
lock tables t1 write
;
insert into t1 values
(10);
select * from
t1;
DROP TABLE IF EXISTS
t1;
CREATE TABLE t1(a INT) ENGINE
=innodb;
LOCK TABLES t1 WRITE
;
INSERT INTO t1 VALUES
(10);
SELECT * FROM
t1;
a
10
drop table
t1;
DROP TABLE
t1;
mysql-test/r/merge.result
View file @
0eca4824
...
...
@@ -940,4 +940,15 @@ m1 CREATE TABLE `m1` (
`a` int(11) default NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1, m1;
CREATE TABLE t1(a INT);
CREATE TABLE t2(a VARCHAR(10));
CREATE TABLE m1(a INT) ENGINE=MERGE UNION=(t1, t2);
CREATE TABLE m2(a INT) ENGINE=MERGE UNION=(t1);
SELECT * FROM t1;
a
SELECT * FROM m1;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
SELECT * FROM m2;
a
DROP TABLE t1, t2, m1, m2;
End of 5.0 tests
mysql-test/r/mysqldump.result
View file @
0eca4824
This diff is collapsed.
Click to expand it.
mysql-test/r/outfile.result
View file @
0eca4824
No preview for this file type
mysql-test/t/func_misc.test
View file @
0eca4824
...
...
@@ -436,5 +436,14 @@ select @my_uuid_date - @my_uuid_synthetic;
set
@@
session
.
time_zone
=@
save_tz
;
#
# Bug#42014: Crash, name_const with collate
#
CREATE
TABLE
t1
(
a
DATE
);
SELECT
*
FROM
t1
WHERE
a
=
NAME_CONST
(
'reportDate'
,
_binary
'2009-01-09'
COLLATE
'binary'
);
DROP
TABLE
t1
;
--
echo
End
of
5.0
tests
mysql-test/t/grant2.test
View file @
0eca4824
This diff is collapsed.
Click to expand it.
mysql-test/t/grant3.test
View file @
0eca4824
# Can't run with embedded server
# Can't run with embedded server
because we use GRANT
--
source
include
/
not_embedded
.
inc
# Save the initial number of concurrent sessions
--
source
include
/
count_sessions
.
inc
# Test of GRANT commands
SET
NAMES
binary
;
...
...
@@ -23,10 +27,11 @@ grant create user on *.* to mysqltest_1@localhost;
grant
select
on
`my\_1`
.*
to
mysqltest_1
@
localhost
with
grant
option
;
connect
(
user_a
,
localhost
,
mysqltest_1
,,);
connection
user_a
;
--
error
1410
--
error
ER_CANT_CREATE_USER_WITH_GRANT
grant
select
on
`my\_1`
.*
to
mysqltest_2
@
localhost
;
create
user
mysqltest_2
@
localhost
;
disconnect
user_a
;
disconnect
master
;
connection
default
;
delete
from
mysql
.
user
where
user
like
'mysqltest\_%'
;
...
...
@@ -36,7 +41,7 @@ delete from mysql.columns_priv where user like 'mysqltest\_%';
flush
privileges
;
#
# Bug
:
#19828 Case sensitivity in Grant/Revoke
# Bug#19828 Case sensitivity in Grant/Revoke
#
grant
select
on
test
.*
to
CUser
@
localhost
;
...
...
@@ -137,7 +142,7 @@ DROP USER CUser2@LOCALHOST;
#
# Bug#31194
:
Privilege ordering does not order properly for wildcard values
# Bug#31194 Privilege ordering does not order properly for wildcard values
#
CREATE
DATABASE
mysqltest_1
;
...
...
@@ -160,3 +165,6 @@ DROP DATABASE mysqltest_1;
--
echo
End
of
5.0
tests
# Wait till we reached the initial number of concurrent sessions
--
source
include
/
wait_until_count_sessions
.
inc
mysql-test/t/lock_tables_lost_commit.test
View file @
0eca4824
# T
his is a test for bug 578
# T
est for Bug#578 mysqlimport -l silently fails when binlog-ignore-db is set
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_innodb
.
inc
# Save the initial number of concurrent sessions
--
source
include
/
count_sessions
.
inc
connect
(
con1
,
localhost
,
root
,,);
connect
(
con2
,
localhost
,
root
,,);
connection
con1
;
--
disable_warnings
drop
table
if
exists
t1
;
create
table
t1
(
a
int
)
engine
=
innodb
;
DROP
TABLE
IF
EXISTS
t1
;
CREATE
TABLE
t1
(
a
INT
)
ENGINE
=
innodb
;
--
enable_warnings
lock
tables
t1
write
;
insert
into
t1
values
(
10
);
LOCK
TABLES
t1
WRITE
;
INSERT
INTO
t1
VALUES
(
10
);
disconnect
con1
;
connection
con2
;
# The bug was that, because of the LOCK TABLES, the handler "forgot" to commit,
# and the other commit when we write to the binlog was not done because of
# binlog-ignore-db
select
*
from
t1
;
drop
table
t1
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
connection
default
;
disconnect
con2
;
# End of 4.1 tests
# Wait till we reached the initial number of concurrent sessions
--
source
include
/
wait_until_count_sessions
.
inc
mysql-test/t/merge.test
View file @
0eca4824
...
...
@@ -556,4 +556,17 @@ ALTER TABLE m1 UNION=();
SHOW
CREATE
TABLE
m1
;
DROP
TABLE
t1
,
m1
;
#
# BUG#32047 - 'Spurious' errors while opening MERGE tables
#
CREATE
TABLE
t1
(
a
INT
);
CREATE
TABLE
t2
(
a
VARCHAR
(
10
));
CREATE
TABLE
m1
(
a
INT
)
ENGINE
=
MERGE
UNION
=
(
t1
,
t2
);
CREATE
TABLE
m2
(
a
INT
)
ENGINE
=
MERGE
UNION
=
(
t1
);
SELECT
*
FROM
t1
;
--
error
ER_WRONG_MRG_TABLE
SELECT
*
FROM
m1
;
SELECT
*
FROM
m2
;
DROP
TABLE
t1
,
t2
,
m1
,
m2
;
--
echo
End
of
5.0
tests
mysql-test/t/mysqldump.test
View file @
0eca4824
This diff is collapsed.
Click to expand it.
mysql-test/t/openssl_1.test
View file @
0eca4824
...
...
@@ -3,6 +3,10 @@
--
source
include
/
have_ssl
.
inc
# Save the initial number of concurrent sessions
--
source
include
/
count_sessions
.
inc
--
disable_warnings
drop
table
if
exists
t1
;
--
enable_warnings
...
...
@@ -21,38 +25,42 @@ connect (con2,localhost,ssl_user2,,,,,SSL);
connect
(
con3
,
localhost
,
ssl_user3
,,,,,
SSL
);
connect
(
con4
,
localhost
,
ssl_user4
,,,,,
SSL
);
--
replace_result
$MASTER_MYSOCK
MASTER_SOCKET
$MASTER_MYPORT
MASTER_PORT
--
error
1045
--
error
ER_ACCESS_DENIED_ERROR
connect
(
con5
,
localhost
,
ssl_user5
,,,,,
SSL
);
connection
con1
;
# Check ssl turned on
SHOW
STATUS
LIKE
'Ssl_cipher'
;
select
*
from
t1
;
--
error
1142
--
error
ER_TABLEACCESS_DENIED_ERROR
delete
from
t1
;
connection
con2
;
# Check ssl turned on
SHOW
STATUS
LIKE
'Ssl_cipher'
;
select
*
from
t1
;
--
error
1142
--
error
ER_TABLEACCESS_DENIED_ERROR
delete
from
t1
;
connection
con3
;
# Check ssl turned on
SHOW
STATUS
LIKE
'Ssl_cipher'
;
select
*
from
t1
;
--
error
1142
--
error
ER_TABLEACCESS_DENIED_ERROR
delete
from
t1
;
connection
con4
;
# Check ssl turned on
SHOW
STATUS
LIKE
'Ssl_cipher'
;
select
*
from
t1
;
--
error
1142
--
error
ER_TABLEACCESS_DENIED_ERROR
delete
from
t1
;
connection
default
;
disconnect
con1
;
disconnect
con2
;
disconnect
con3
;
disconnect
con4
;
drop
user
ssl_user1
@
localhost
,
ssl_user2
@
localhost
,
ssl_user3
@
localhost
,
ssl_user4
@
localhost
,
ssl_user5
@
localhost
;
...
...
@@ -97,7 +105,7 @@ drop table t1;
--
exec
$MYSQL_TEST
--
ssl
-
cert
=
--
max
-
connect
-
retries
=
1
<
$MYSQLTEST_VARDIR
/
tmp
/
test
.
sql
2
>&
1
#
# B
UG
#21611 Slave can't connect when master-ssl-cipher specified
# B
ug
#21611 Slave can't connect when master-ssl-cipher specified
# - Apparently selecting a cipher doesn't work at all
# - Usa a cipher that both yaSSL and OpenSSL supports
#
...
...
@@ -133,7 +141,7 @@ drop table t1;
--
exec
$MYSQL_TEST
--
ssl
-
cipher
=
UNKNOWN
-
CIPHER
<
$MYSQLTEST_VARDIR
/
tmp
/
test
.
sql
2
>&
1
#
# Bug
#27669 mysqldump: SSL connection error when trying to connect
# Bug#27669 mysqldump: SSL connection error when trying to connect
#
CREATE
TABLE
t1
(
a
int
);
...
...
@@ -152,3 +160,7 @@ INSERT INTO t1 VALUES (1), (2);
--
exec
$MYSQL_DUMP
--
skip
-
create
--
skip
-
comments
--
ssl
--
ssl
-
cert
=
$MYSQL_TEST_DIR
/
std_data
/
client
-
cert
.
pem
test
2
>&
1
DROP
TABLE
t1
;
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
test
.
sql
# Wait till we reached the initial number of concurrent sessions
--
source
include
/
wait_until_count_sessions
.
inc
mysql-test/t/outfile.test
View file @
0eca4824
...
...
@@ -5,6 +5,10 @@ eval set @tmpdir="../tmp";
enable_query_log
;
--
source
include
/
have_outfile
.
inc
# Save the initial number of concurrent sessions
--
source
include
/
count_sessions
.
inc
#
# test of into outfile|dumpfile
#
...
...
@@ -46,7 +50,7 @@ select load_file(concat(@tmpdir,"/outfile-test.not-exist"));
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
outfile
-
test
.
3
drop
table
t1
;
# Bug#8191
# Bug#8191
SELECT INTO OUTFILE insists on FROM clause
disable_query_log
;
eval
select
1
into
outfile
"../tmp/outfile-test.4"
;
enable_query_log
;
...
...
@@ -54,7 +58,7 @@ select load_file(concat(@tmpdir,"/outfile-test.4"));
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
outfile
-
test
.
4
#
# Bug
#5382:
'explain select into outfile' crashes the server
# Bug
#5382
'explain select into outfile' crashes the server
#
CREATE
TABLE
t1
(
a
INT
);
...
...
@@ -114,6 +118,7 @@ from information_schema.schemata
where
schema_name
like
'mysqltest'
;
connection
default
;
disconnect
con28181_1
;
grant
file
on
*.*
to
user_1
@
localhost
;
connect
(
con28181_2
,
localhost
,
user_1
,,
mysqltest
);
...
...
@@ -125,9 +130,12 @@ from information_schema.schemata
where
schema_name
like
'mysqltest'
;
connection
default
;
disconnect
con28181_2
;
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
outfile
-
test
.
4
use
test
;
revoke
all
privileges
on
*.*
from
user_1
@
localhost
;
drop
user
user_1
@
localhost
;
drop
database
mysqltest
;
# Wait till we reached the initial number of concurrent sessions
--
source
include
/
wait_until_count_sessions
.
inc
mysql-test/t/variables.test
View file @
0eca4824
...
...
@@ -6,7 +6,7 @@ drop table if exists t1,t2;
--
enable_warnings
#
# Bug
#19263: variables.test doesn't clean up after itself (I/II -- save)
# Bug#19263: variables.test doesn't clean up after itself (I/II -- save)
#
set
@
my_binlog_cache_size
=@@
global
.
binlog_cache_size
;
set
@
my_connect_timeout
=@@
global
.
connect_timeout
;
...
...
@@ -172,46 +172,46 @@ SELECT @@version_compile_os LIKE 'non-existent';
# The following should give errors
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
big_tables
=
OFFF
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
big_tables
=
"OFFF"
;
--
error
1193
--
error
ER_UNKNOWN_SYSTEM_VARIABLE
set
unknown_variable
=
1
;
--
error
1232
--
error
ER_WRONG_TYPE_FOR_VAR
set
max_join_size
=
"hello"
;
--
error
1286
--
error
ER_UNKNOWN_STORAGE_ENGINE
set
storage_engine
=
UNKNOWN_TABLE_TYPE
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
storage_engine
=
MERGE
,
big_tables
=
2
;
show
local
variables
like
'storage_engine'
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
SESSION
query_cache_size
=
10000
;
--
error
1230
--
error
ER_NO_DEFAULT
set
GLOBAL
storage_engine
=
DEFAULT
;
--
error
1115
--
error
ER_UNKNOWN_CHARACTER_SET
set
character_set_client
=
UNKNOWN_CHARACTER_SET
;
--
error
1273
--
error
ER_UNKNOWN_COLLATION
set
collation_connection
=
UNKNOWN_COLLATION
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
character_set_client
=
NULL
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
collation_connection
=
NULL
;
--
error
1228
--
error
ER_LOCAL_VARIABLE
set
global
autocommit
=
1
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
select
@@
global
.
timestamp
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
@@
version
=
''
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
@@
concurrent_insert
=
1
;
--
error
1228
--
error
ER_LOCAL_VARIABLE
set
@@
global
.
sql_auto_is_null
=
1
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
select
@@
global
.
sql_auto_is_null
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
myisam_max_sort_file_size
=
100
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
@@
SQL_WARNINGS
=
NULL
;
# Test setting all variables
...
...
@@ -338,23 +338,23 @@ drop table t1,t2;
# error conditions
#
--
error
1193
--
error
ER_UNKNOWN_SYSTEM_VARIABLE
select
@@
xxxxxxxxxx
;
select
1
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
select
@@
session
.
key_buffer_size
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
ft_boolean_syntax
=
@@
init_connect
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
global
ft_boolean_syntax
=
@@
init_connect
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
init_connect
=
NULL
;
set
global
init_connect
=
NULL
;
--
error
1229
--
error
ER_GLOBAL_VARIABLE
set
ft_boolean_syntax
=
@@
init_connect
;
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
global
ft_boolean_syntax
=
@@
init_connect
;
# Bug#3754 SET GLOBAL myisam_max_sort_file_size doesn't work as
...
...
@@ -385,15 +385,15 @@ select @a, @b;
#
# Bug#2586:Disallow global/session/local as structured var. instance names
#
--
error
1064
--
error
ER_PARSE_ERROR
set
@@
global
.
global
.
key_buffer_size
=
1
;
--
error
1064
--
error
ER_PARSE_ERROR
set
GLOBAL
global
.
key_buffer_size
=
1
;
--
error
1064
--
error
ER_PARSE_ERROR
SELECT
@@
global
.
global
.
key_buffer_size
;
--
error
1064
--
error
ER_PARSE_ERROR
SELECT
@@
global
.
session
.
key_buffer_size
;
--
error
1064
--
error
ER_PARSE_ERROR
SELECT
@@
global
.
local
.
key_buffer_size
;
# BUG#5135: cannot turn on log_warnings with SET in 4.1 (and 4.0)
...
...
@@ -478,27 +478,27 @@ select @@lc_time_names;
--
echo
***
LC_TIME_NAMES
:
testing
with
string
expressions
set
lc_time_names
=
concat
(
'de'
,
'_'
,
'DE'
);
select
@@
lc_time_names
;
--
error
1105
--
error
ER_UNKNOWN_ERROR
set
lc_time_names
=
concat
(
'de'
,
'+'
,
'DE'
);
select
@@
lc_time_names
;
--
echo
LC_TIME_NAMES
:
testing
with
numeric
expressions
set
@@
lc_time_names
=
1
+
2
;
select
@@
lc_time_names
;
--
error
1232
--
error
ER_WRONG_TYPE_FOR_VAR
set
@@
lc_time_names
=
1
/
0
;
select
@@
lc_time_names
;
set
lc_time_names
=
en_US
;
--
echo
LC_TIME_NAMES
:
testing
NULL
and
a
negative
number
:
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
lc_time_names
=
NULL
;
--
error
1105
--
error
ER_UNKNOWN_ERROR
set
lc_time_names
=-
1
;
select
@@
lc_time_names
;
--
echo
LC_TIME_NAMES
:
testing
locale
with
the
last
ID
:
set
lc_time_names
=
108
;
select
@@
lc_time_names
;
--
echo
LC_TIME_NAMES
:
testing
a
number
beyond
the
valid
ID
range
:
--
error
1105
--
error
ER_UNKNOWN_ERROR
set
lc_time_names
=
109
;
select
@@
lc_time_names
;
--
echo
LC_TIME_NAMES
:
testing
that
0
is
en_US
:
...
...
@@ -540,7 +540,7 @@ select @@query_prealloc_size = @test;
# Bug#31588 buffer overrun when setting variables
#
# Buffer-size Off By One. Should throw valgrind-warning without fix #31588.
--
error
1231
--
error
ER_WRONG_VALUE_FOR_VAR
set
global
sql_mode
=
repeat
(
'a'
,
80
);
--
echo
End
of
4.1
tests
...
...
@@ -558,9 +558,9 @@ drop table t1;
# Bug #10339: read only variables.
#
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
@@
warning_count
=
1
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
@@
global
.
error_count
=
1
;
#
...
...
@@ -578,9 +578,9 @@ select @@max_heap_table_size > 0;
# Bug #11775 Variable character_set_system does not exist (sometimes)
#
select
@@
character_set_system
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
global
character_set_system
=
latin1
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
@@
global
.
version_compile_os
=
'234'
;
#
...
...
@@ -677,7 +677,7 @@ select @@@;
# Don't actually output, since it depends on the system
--
replace_column
1
#
select
@@
hostname
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
set
@@
hostname
=
"anothername"
;
--
replace_column
2
#
show
variables
like
'hostname'
;
...
...
@@ -688,12 +688,12 @@ show variables like 'hostname';
SHOW
VARIABLES
LIKE
'log'
;
SELECT
@@
log
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
SET
GLOBAL
log
=
0
;
SHOW
VARIABLES
LIKE
'log_slow_queries'
;
SELECT
@@
log_slow_queries
;
--
error
1238
--
error
ER_INCORRECT_GLOBAL_LOCAL_VAR
SET
GLOBAL
log_slow_queries
=
0
;
--
echo
End
of
5.0
tests
...
...
scripts/mysqld_multi.sh
View file @
0eca4824
...
...
@@ -293,7 +293,12 @@ sub start_mysqlds()
@groups
=
&find_groups
(
$groupids
)
;
for
(
$i
=
0
;
defined
(
$groups
[
$i
])
;
$i
++
)
{
# Defaults are made explicit parameters to server execution...
@options
=
defaults_for_group
(
$groups
[
$i
])
;
# ...so server MUST NOT try to read again from some config file, especially
# as the "right" file may be unknown to the server if we are using
# --defaults-file=... params in here.
unshift
(
@options,
"--no-defaults"
)
;
$mysqld_found
=
1
;
# The default
$mysqld_found
=
0
if
(!
length
(
$mysqld
))
;
...
...
sql/item.cc
View file @
0eca4824
...
...
@@ -1243,13 +1243,26 @@ Item::Type Item_name_const::type() const
valid_args guarantees value_item->basic_const_item(); if type is
FUNC_ITEM, then we have a fudged item_func_neg() on our hands
and return the underlying type.
For Item_func_set_collation()
e.g. NAME_CONST('name', 'value' COLLATE collation) we return its
'value' argument type.
*/
return
valid_args
?
(((
value_item
->
type
()
==
FUNC_ITEM
)
&&
(((
Item_func
*
)
value_item
)
->
functype
()
==
Item_func
::
NEG_FUNC
))
?
((
Item_func
*
)
value_item
)
->
key_item
()
->
type
()
:
value_item
->
type
())
:
NULL_ITEM
;
if
(
!
valid_args
)
return
NULL_ITEM
;
Item
::
Type
value_type
=
value_item
->
type
();
if
(
value_type
==
FUNC_ITEM
)
{
/*
The second argument of NAME_CONST('name', 'value') must be
a simple constant item or a NEG_FUNC/COLLATE_FUNC.
*/
DBUG_ASSERT
(((
Item_func
*
)
value_item
)
->
functype
()
==
Item_func
::
NEG_FUNC
||
((
Item_func
*
)
value_item
)
->
functype
()
==
Item_func
::
COLLATE_FUNC
);
return
((
Item_func
*
)
value_item
)
->
key_item
()
->
type
();
}
return
value_type
;
}
...
...
sql/sql_select.cc
View file @
0eca4824
...
...
@@ -78,7 +78,6 @@ static store_key *get_store_key(THD *thd,
KEYUSE
*
keyuse
,
table_map
used_tables
,
KEY_PART_INFO
*
key_part
,
char
*
key_buff
,
uint
maybe_null
);
static
bool
make_simple_join
(
JOIN
*
join
,
TABLE
*
tmp_table
);
static
void
make_outerjoin_info
(
JOIN
*
join
);
static
bool
make_join_select
(
JOIN
*
join
,
SQL_SELECT
*
select
,
COND
*
item
);
static
void
make_join_readinfo
(
JOIN
*
join
,
ulonglong
options
);
...
...
@@ -1809,7 +1808,7 @@ JOIN::exec()
/* Free first data from old join */
curr_join
->
join_free
();
if
(
make_simple_join
(
curr_join
,
curr_tmp_table
))
if
(
curr_join
->
make_simple_join
(
this
,
curr_tmp_table
))
DBUG_VOID_RETURN
;
calc_group_buffer
(
curr_join
,
group_list
);
count_field_types
(
select_lex
,
&
curr_join
->
tmp_table_param
,
...
...
@@ -1929,7 +1928,7 @@ JOIN::exec()
curr_join
->
select_distinct
=
0
;
}
curr_tmp_table
->
reginfo
.
lock_type
=
TL_UNLOCK
;
if
(
make_simple_join
(
curr_join
,
curr_tmp_table
))
if
(
curr_join
->
make_simple_join
(
this
,
curr_tmp_table
))
DBUG_VOID_RETURN
;
calc_group_buffer
(
curr_join
,
curr_join
->
group_list
);
count_field_types
(
select_lex
,
&
curr_join
->
tmp_table_param
,
...
...
@@ -5431,48 +5430,42 @@ store_val_in_field(Field *field, Item *item, enum_check_fields check_flag)
}
static
bool
make_simple_join
(
JOIN
*
join
,
TABLE
*
tmp_table
)
/**
@details Initialize a JOIN as a query execution plan
that accesses a single table via a table scan.
@param parent contains JOIN_TAB and TABLE object buffers for this join
@param tmp_table temporary table
@retval FALSE success
@retval TRUE error occurred
*/
bool
JOIN
::
make_simple_join
(
JOIN
*
parent
,
TABLE
*
tmp_table
)
{
TABLE
**
tableptr
;
JOIN_TAB
*
join_tab
;
DBUG_ENTER
(
"make_simple_join"
);
DBUG_ENTER
(
"JOIN::make_simple_join"
);
/*
Reuse TABLE * and JOIN_TAB if already allocated by a previous call
to this function through JOIN::exec (may happen for sub-queries).
*/
if
(
!
join
->
table_reexec
)
{
if
(
!
(
join
->
table_reexec
=
(
TABLE
**
)
join
->
thd
->
alloc
(
sizeof
(
TABLE
*
))))
DBUG_RETURN
(
TRUE
);
/* purecov: inspected */
if
(
join
->
tmp_join
)
join
->
tmp_join
->
table_reexec
=
join
->
table_reexec
;
}
if
(
!
join
->
join_tab_reexec
)
{
if
(
!
(
join
->
join_tab_reexec
=
(
JOIN_TAB
*
)
join
->
thd
->
alloc
(
sizeof
(
JOIN_TAB
))))
if
(
!
parent
->
join_tab_reexec
&&
!
(
parent
->
join_tab_reexec
=
(
JOIN_TAB
*
)
thd
->
alloc
(
sizeof
(
JOIN_TAB
))))
DBUG_RETURN
(
TRUE
);
/* purecov: inspected */
if
(
join
->
tmp_join
)
join
->
tmp_join
->
join_tab_reexec
=
join
->
join_tab_reexec
;
}
tableptr
=
join
->
table_reexec
;
join_tab
=
join
->
join_tab_reexec
;
join
->
join_tab
=
join_tab
;
join
->
table
=
tableptr
;
tableptr
[
0
]
=
tmp_table
;
join
->
tables
=
1
;
join
->
const_tables
=
0
;
join
->
const_table_map
=
0
;
join
->
tmp_table_param
.
field_count
=
join
->
tmp_table_param
.
sum_func_count
=
join
->
tmp_table_param
.
func_count
=
0
;
join
->
tmp_table_param
.
copy_field
=
join
->
tmp_table_param
.
copy_field_end
=
0
;
join
->
first_record
=
join
->
sort_and_group
=
0
;
join
->
send_records
=
(
ha_rows
)
0
;
join
->
group
=
0
;
join
->
row_limit
=
join
->
unit
->
select_limit_cnt
;
join
->
do_send_rows
=
(
join
->
row_limit
)
?
1
:
0
;
join_tab
=
parent
->
join_tab_reexec
;
table
=
&
parent
->
table_reexec
[
0
];
parent
->
table_reexec
[
0
]
=
tmp_table
;
tables
=
1
;
const_tables
=
0
;
const_table_map
=
0
;
tmp_table_param
.
field_count
=
tmp_table_param
.
sum_func_count
=
tmp_table_param
.
func_count
=
0
;
tmp_table_param
.
copy_field
=
tmp_table_param
.
copy_field_end
=
0
;
first_record
=
sort_and_group
=
0
;
send_records
=
(
ha_rows
)
0
;
group
=
0
;
row_limit
=
unit
->
select_limit_cnt
;
do_send_rows
=
row_limit
?
1
:
0
;
join_tab
->
cache
.
buff
=
0
;
/* No caching */
join_tab
->
table
=
tmp_table
;
...
...
@@ -5489,7 +5482,7 @@ make_simple_join(JOIN *join,TABLE *tmp_table)
join_tab
->
ref
.
key
=
-
1
;
join_tab
->
not_used_in_distinct
=
0
;
join_tab
->
read_first_record
=
join_init_read_record
;
join_tab
->
join
=
join
;
join_tab
->
join
=
this
;
join_tab
->
ref
.
key_parts
=
0
;
bzero
((
char
*
)
&
join_tab
->
read_record
,
sizeof
(
join_tab
->
read_record
));
tmp_table
->
status
=
0
;
...
...
sql/sql_select.h
View file @
0eca4824
...
...
@@ -352,9 +352,12 @@ class JOIN :public Sql_alloc
cleared only at the end of the execution of the whole query and not caching
allocations that occur in repetition at execution time will result in
excessive memory usage.
Note: make_simple_join always creates an execution plan that accesses
a single table, thus it is sufficient to have a one-element array for
table_reexec.
*/
SORT_FIELD
*
sortorder
;
// make_unireg_sortorder()
TABLE
*
*
table_reexec
;
// make_simple_join()
TABLE
*
table_reexec
[
1
];
// make_simple_join()
JOIN_TAB
*
join_tab_reexec
;
// make_simple_join()
/* end of allocation caching storage */
...
...
@@ -384,7 +387,7 @@ class JOIN :public Sql_alloc
exec_tmp_table1
=
0
;
exec_tmp_table2
=
0
;
sortorder
=
0
;
table_reexec
=
0
;
table_reexec
[
0
]
=
0
;
join_tab_reexec
=
0
;
thd
=
thd_arg
;
sum_funcs
=
sum_funcs2
=
0
;
...
...
@@ -476,6 +479,8 @@ class JOIN :public Sql_alloc
return
(
unit
==
&
thd
->
lex
->
unit
&&
(
unit
->
fake_select_lex
==
0
||
select_lex
==
unit
->
fake_select_lex
));
}
private:
bool
make_simple_join
(
JOIN
*
join
,
TABLE
*
tmp_table
);
};
...
...
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