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
5f6cbe3d
Commit
5f6cbe3d
authored
Mar 13, 2001
by
serg@serg.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
a9344b42
61e33ebe
Changes
47
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
47 changed files
with
549 additions
and
128 deletions
+549
-128
.bzrignore
.bzrignore
+1
-0
BUILD/compile-pentium
BUILD/compile-pentium
+1
-6
BUILD/compile-pentium-debug
BUILD/compile-pentium-debug
+1
-6
Docs/manual.texi
Docs/manual.texi
+77
-18
client/mysql.cc
client/mysql.cc
+22
-1
client/mysqladmin.c
client/mysqladmin.c
+7
-4
configure.in
configure.in
+1
-1
innobase/mem/Makefile.am
innobase/mem/Makefile.am
+2
-0
innobase/pars/Makefile.am
innobase/pars/Makefile.am
+2
-0
mysql-test/README
mysql-test/README
+4
-1
mysql-test/mysql-test-run.sh
mysql-test/mysql-test-run.sh
+4
-4
mysql-test/r/bdb.result
mysql-test/r/bdb.result
+2
-0
mysql-test/r/innobase.result
mysql-test/r/innobase.result
+2
-0
mysql-test/t/bdb.test
mysql-test/t/bdb.test
+14
-0
mysql-test/t/delayed.test
mysql-test/t/delayed.test
+2
-0
mysql-test/t/innobase.test
mysql-test/t/innobase.test
+14
-0
mysql-test/t/order_by.test
mysql-test/t/order_by.test
+40
-0
scripts/mysql_install_db.sh
scripts/mysql_install_db.sh
+1
-1
sql-bench/TODO
sql-bench/TODO
+21
-0
sql-bench/bench-init.pl.sh
sql-bench/bench-init.pl.sh
+1
-1
sql-bench/crash-me.sh
sql-bench/crash-me.sh
+1
-0
sql-bench/run-all-tests.sh
sql-bench/run-all-tests.sh
+14
-5
sql-bench/server-cfg.sh
sql-bench/server-cfg.sh
+5
-0
sql-bench/test-select.sh
sql-bench/test-select.sh
+59
-1
sql/gen_lex_hash.cc
sql/gen_lex_hash.cc
+5
-3
sql/ha_berkeley.cc
sql/ha_berkeley.cc
+6
-1
sql/ha_innobase.h
sql/ha_innobase.h
+12
-10
sql/ha_isam.h
sql/ha_isam.h
+2
-1
sql/ha_myisam.cc
sql/ha_myisam.cc
+2
-1
sql/handler.h
sql/handler.h
+2
-0
sql/lex.h
sql/lex.h
+1
-0
sql/mysql_priv.h
sql/mysql_priv.h
+4
-2
sql/mysqld.cc
sql/mysqld.cc
+20
-4
sql/opt_sum.cc
sql/opt_sum.cc
+5
-0
sql/records.cc
sql/records.cc
+5
-3
sql/slave.cc
sql/slave.cc
+15
-3
sql/slave.h
sql/slave.h
+1
-0
sql/sql_class.cc
sql/sql_class.cc
+9
-1
sql/sql_class.h
sql/sql_class.h
+55
-1
sql/sql_delete.cc
sql/sql_delete.cc
+1
-1
sql/sql_insert.cc
sql/sql_insert.cc
+1
-1
sql/sql_lex.cc
sql/sql_lex.cc
+34
-25
sql/sql_parse.cc
sql/sql_parse.cc
+5
-15
sql/sql_repl.cc
sql/sql_repl.cc
+3
-0
sql/sql_table.cc
sql/sql_table.cc
+1
-0
sql/sql_yacc.yy
sql/sql_yacc.yy
+20
-3
tests/fork3_test.pl
tests/fork3_test.pl
+42
-4
No files found.
.bzrignore
View file @
5f6cbe3d
...
@@ -197,3 +197,4 @@ bdb/build_win32/db.h
...
@@ -197,3 +197,4 @@ bdb/build_win32/db.h
bdb/dist/configure
bdb/dist/configure
bdb/dist/tags
bdb/dist/tags
bdb/build_unix/*
bdb/build_unix/*
sql/.gdbinit
BUILD/compile-pentium
View file @
5f6cbe3d
...
@@ -7,11 +7,6 @@ extra_flags="$pentium_cflags $fast_cflags"
...
@@ -7,11 +7,6 @@ extra_flags="$pentium_cflags $fast_cflags"
extra_configs
=
"
$pentium_configs
"
extra_configs
=
"
$pentium_configs
"
strip
=
yes
strip
=
yes
# Use the optimized version if it exists
extra_configs
=
"
$extra_configs
--with-berkeley-db --with-innobase"
if
test
-d
/usr/local/BerkeleyDB-opt/
then
extra_configs
=
"
$extra_configs
--with-berkeley-db=/usr/local/BerkeleyDB-opt/"
fi
extra_configs
=
"
$extra_configs
--with-innobase"
.
"
$path
/FINISH.sh"
.
"
$path
/FINISH.sh"
BUILD/compile-pentium-debug
View file @
5f6cbe3d
...
@@ -8,11 +8,6 @@ c_warnings="$c_warnings $debug_extra_warnings"
...
@@ -8,11 +8,6 @@ c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings
=
"
$cxx_warnings
$debug_extra_warnings
"
cxx_warnings
=
"
$cxx_warnings
$debug_extra_warnings
"
extra_configs
=
"
$pentium_configs
$debug_configs
"
extra_configs
=
"
$pentium_configs
$debug_configs
"
# Use the debug version if it exists
extra_configs
=
"
$extra_configs
--with-berkeley-db --with-innobase"
if
test
-d
/usr/local/BerkeleyDB-dbug/
then
extra_configs
=
"
$extra_configs
--with-berkeley-db=/usr/local/BerkeleyDB-dbug/"
fi
extra_configs
=
"
$extra_configs
--with-innobase"
.
"
$path
/FINISH.sh"
.
"
$path
/FINISH.sh"
Docs/manual.texi
View file @
5f6cbe3d
This diff is collapsed.
Click to expand it.
client/mysql.cc
View file @
5f6cbe3d
...
@@ -39,7 +39,7 @@
...
@@ -39,7 +39,7 @@
#include "my_readline.h"
#include "my_readline.h"
#include <signal.h>
#include <signal.h>
const
char
*
VER
=
"11.1
2
"
;
const
char
*
VER
=
"11.1
3
"
;
/* Don't try to make a nice table if the data is too big */
/* Don't try to make a nice table if the data is too big */
#define MAX_COLUMN_LENGTH 1024
#define MAX_COLUMN_LENGTH 1024
...
@@ -1518,6 +1518,22 @@ com_ego(String *buffer,char *line)
...
@@ -1518,6 +1518,22 @@ com_ego(String *buffer,char *line)
return
result
;
return
result
;
}
}
static
void
print_field_types
(
MYSQL_RES
*
result
)
{
MYSQL_FIELD
*
field
;
while
((
field
=
mysql_fetch_field
(
result
)))
{
tee_fprintf
(
PAGER
,
"%s '%s' %d %d %d %d %d
\n
"
,
field
->
name
,
field
->
table
?
""
:
field
->
table
,
(
int
)
field
->
type
,
field
->
length
,
field
->
max_length
,
field
->
flags
,
field
->
decimals
);
}
tee_puts
(
""
,
PAGER
);
}
static
void
static
void
print_table_data
(
MYSQL_RES
*
result
)
print_table_data
(
MYSQL_RES
*
result
)
...
@@ -1528,6 +1544,11 @@ print_table_data(MYSQL_RES *result)
...
@@ -1528,6 +1544,11 @@ print_table_data(MYSQL_RES *result)
bool
*
num_flag
;
bool
*
num_flag
;
num_flag
=
(
bool
*
)
my_alloca
(
sizeof
(
bool
)
*
mysql_num_fields
(
result
));
num_flag
=
(
bool
*
)
my_alloca
(
sizeof
(
bool
)
*
mysql_num_fields
(
result
));
if
(
info_flag
)
{
print_field_types
(
result
);
mysql_field_seek
(
result
,
0
);
}
separator
.
copy
(
"+"
,
1
);
separator
.
copy
(
"+"
,
1
);
while
((
field
=
mysql_fetch_field
(
result
)))
while
((
field
=
mysql_fetch_field
(
result
)))
{
{
...
...
client/mysqladmin.c
View file @
5f6cbe3d
...
@@ -28,9 +28,9 @@
...
@@ -28,9 +28,9 @@
#include <my_pthread.h>
/* because of signal() */
#include <my_pthread.h>
/* because of signal() */
#endif
#endif
#define ADMIN_VERSION "8.1
7
"
#define ADMIN_VERSION "8.1
8
"
#define MAX_MYSQL_VAR 64
#define MAX_MYSQL_VAR 64
#define
MAX_TIME_TO_WAIT 3600
/* Wait for shutdown */
#define
SHUTDOWN_DEF_TIMEOUT 3600
/* Wait for shutdown */
#define MAX_TRUNC_LENGTH 3
#define MAX_TRUNC_LENGTH 3
char
truncated_var_names
[
MAX_MYSQL_VAR
][
MAX_TRUNC_LENGTH
];
char
truncated_var_names
[
MAX_MYSQL_VAR
][
MAX_TRUNC_LENGTH
];
...
@@ -40,7 +40,7 @@ static int interval=0;
...
@@ -40,7 +40,7 @@ static int interval=0;
static
my_bool
option_force
=
0
,
interrupted
=
0
,
new_line
=
0
,
static
my_bool
option_force
=
0
,
interrupted
=
0
,
new_line
=
0
,
opt_compress
=
0
,
opt_relative
=
0
,
opt_verbose
=
0
,
opt_vertical
=
0
;
opt_compress
=
0
,
opt_relative
=
0
,
opt_verbose
=
0
,
opt_vertical
=
0
;
static
uint
tcp_port
=
0
,
option_wait
=
0
,
option_silent
=
0
;
static
uint
tcp_port
=
0
,
option_wait
=
0
,
option_silent
=
0
;
static
ulong
opt_connect_timeout
;
static
ulong
opt_connect_timeout
,
opt_shutdown_timeout
;
static
my_string
unix_port
=
0
;
static
my_string
unix_port
=
0
;
/* When using extended-status relatively, ex_val_max_len is the estimated
/* When using extended-status relatively, ex_val_max_len is the estimated
...
@@ -134,6 +134,8 @@ static struct option long_options[] = {
...
@@ -134,6 +134,8 @@ static struct option long_options[] = {
CHANGEABLE_VAR
changeable_vars
[]
=
{
CHANGEABLE_VAR
changeable_vars
[]
=
{
{
"connect_timeout"
,
(
long
*
)
&
opt_connect_timeout
,
0
,
0
,
3600
*
12
,
0
,
1
},
{
"connect_timeout"
,
(
long
*
)
&
opt_connect_timeout
,
0
,
0
,
3600
*
12
,
0
,
1
},
{
"shutdown_timeout"
,
(
long
*
)
&
opt_shutdown_timeout
,
SHUTDOWN_DEF_TIMEOUT
,
0
,
3600
*
12
,
0
,
1
},
{
0
,
0
,
0
,
0
,
0
,
0
,
0
}
{
0
,
0
,
0
,
0
,
0
,
0
,
0
}
};
};
...
@@ -148,6 +150,7 @@ int main(int argc,char *argv[])
...
@@ -148,6 +150,7 @@ int main(int argc,char *argv[])
MY_INIT
(
argv
[
0
]);
MY_INIT
(
argv
[
0
]);
mysql_init
(
&
mysql
);
mysql_init
(
&
mysql
);
load_defaults
(
"my"
,
load_default_groups
,
&
argc
,
&
argv
);
load_defaults
(
"my"
,
load_default_groups
,
&
argc
,
&
argv
);
set_all_changeable_vars
(
changeable_vars
);
while
((
c
=
getopt_long
(
argc
,
argv
,
"h:i:p::u:#::P:sS:Ct:fq?vVw::WrEO:"
,
while
((
c
=
getopt_long
(
argc
,
argv
,
"h:i:p::u:#::P:sS:Ct:fq?vVw::WrEO:"
,
long_options
,
&
option_index
))
!=
EOF
)
long_options
,
&
option_index
))
!=
EOF
)
...
@@ -1125,7 +1128,7 @@ static void wait_pidfile(char *pidfile)
...
@@ -1125,7 +1128,7 @@ static void wait_pidfile(char *pidfile)
uint
count
=
0
;
uint
count
=
0
;
system_filename
(
buff
,
pidfile
);
system_filename
(
buff
,
pidfile
);
while
((
fd
=
open
(
buff
,
O_RDONLY
))
>=
0
&&
count
++
<
MAX_TIME_TO_WAIT
)
while
((
fd
=
open
(
buff
,
O_RDONLY
))
>=
0
&&
count
++
<
opt_shutdown_timeout
)
{
{
close
(
fd
);
close
(
fd
);
sleep
(
1
);
sleep
(
1
);
...
...
configure.in
View file @
5f6cbe3d
...
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
...
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT
(
sql/mysqld.cc
)
AC_INIT
(
sql/mysqld.cc
)
AC_CANONICAL_SYSTEM
AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line!
# The Docs Makefile.am parses this line!
AM_INIT_AUTOMAKE
(
mysql, 3.23.34
)
AM_INIT_AUTOMAKE
(
mysql, 3.23.34
a
)
AM_CONFIG_HEADER
(
config.h
)
AM_CONFIG_HEADER
(
config.h
)
PROTOCOL_VERSION
=
10
PROTOCOL_VERSION
=
10
...
...
innobase/mem/Makefile.am
View file @
5f6cbe3d
...
@@ -21,4 +21,6 @@ libs_LIBRARIES = libmem.a
...
@@ -21,4 +21,6 @@ libs_LIBRARIES = libmem.a
libmem_a_SOURCES
=
mem0mem.c mem0pool.c
libmem_a_SOURCES
=
mem0mem.c mem0pool.c
EXTRA_DIST
=
mem0dbg.c
EXTRA_PROGRAMS
=
EXTRA_PROGRAMS
=
innobase/pars/Makefile.am
View file @
5f6cbe3d
...
@@ -19,6 +19,8 @@ include ../include/Makefile.i
...
@@ -19,6 +19,8 @@ include ../include/Makefile.i
libs_LIBRARIES
=
libpars.a
libs_LIBRARIES
=
libpars.a
noinst_HEADERS
=
pars0grm.h
libpars_a_SOURCES
=
pars0grm.c lexyy.c pars0opt.c pars0pars.c pars0sym.c
libpars_a_SOURCES
=
pars0grm.c lexyy.c pars0opt.c pars0pars.c pars0sym.c
EXTRA_PROGRAMS
=
EXTRA_PROGRAMS
=
mysql-test/README
View file @
5f6cbe3d
...
@@ -6,7 +6,10 @@ actually have a co-existing MySQL installation - the tests will not
...
@@ -6,7 +6,10 @@ actually have a co-existing MySQL installation - the tests will not
conflict with it.
conflict with it.
All tests must pass. If one or more of them fail on your system, please
All tests must pass. If one or more of them fail on your system, please
report the details to bugs@lists.mysql.com
read the following manual section of how to report the problem:
http://www.mysql.com/doc/M/y/MySQL_test_suite.html
You can create your own test cases. To create a test case:
You can create your own test cases. To create a test case:
...
...
mysql-test/mysql-test-run.sh
View file @
5f6cbe3d
...
@@ -450,14 +450,14 @@ stop_slave ()
...
@@ -450,14 +450,14 @@ stop_slave ()
{
{
if
[
x
$SLAVE_RUNNING
=
x1
]
if
[
x
$SLAVE_RUNNING
=
x1
]
then
then
$MYSQLADMIN
--no-defaults
--socket
=
$SLAVE_MYSOCK
-u
root shutdown
$MYSQLADMIN
--no-defaults
--socket
=
$SLAVE_MYSOCK
-u
root
-O
shutdown_timeout
=
10
shutdown
if
[
$?
!=
0
]
&&
[
-f
$SLAVE_MYPID
]
if
[
$?
!=
0
]
&&
[
-f
$SLAVE_MYPID
]
then
# try harder!
then
# try harder!
$ECHO
"slave not cooperating with mysqladmin, will try manual kill"
$ECHO
"slave not cooperating with mysqladmin, will try manual kill"
kill
`
$CAT
$SLAVE_MYPID
`
kill
`
$CAT
$SLAVE_MYPID
`
sleep
$SLEEP_TIME
sleep
$SLEEP_TIME
if
[
-f
$SLAVE_MYPID
]
;
then
if
[
-f
$SLAVE_MYPID
]
;
then
$ECHO
"slave refused to die
, resorting to SIGKILL murder
"
$ECHO
"slave refused to die
. Sending SIGKILL
"
kill
-9
`
$CAT
$SLAVE_MYPID
`
kill
-9
`
$CAT
$SLAVE_MYPID
`
$RM
-f
$SLAVE_MYPID
$RM
-f
$SLAVE_MYPID
else
else
...
@@ -472,14 +472,14 @@ stop_master ()
...
@@ -472,14 +472,14 @@ stop_master ()
{
{
if
[
x
$MASTER_RUNNING
=
x1
]
if
[
x
$MASTER_RUNNING
=
x1
]
then
then
$MYSQLADMIN
--no-defaults
--socket
=
$MASTER_MYSOCK
-u
root shutdown
$MYSQLADMIN
--no-defaults
--socket
=
$MASTER_MYSOCK
-u
root
-O
shutdown_timeout
=
10
shutdown
if
[
$?
!=
0
]
&&
[
-f
$MASTER_MYPID
]
if
[
$?
!=
0
]
&&
[
-f
$MASTER_MYPID
]
then
# try harder!
then
# try harder!
$ECHO
"master not cooperating with mysqladmin, will try manual kill"
$ECHO
"master not cooperating with mysqladmin, will try manual kill"
kill
`
$CAT
$MASTER_MYPID
`
kill
`
$CAT
$MASTER_MYPID
`
sleep
$SLEEP_TIME
sleep
$SLEEP_TIME
if
[
-f
$MASTER_MYPID
]
;
then
if
[
-f
$MASTER_MYPID
]
;
then
$ECHO
"master refused to die
, resorting to SIGKILL murder
"
$ECHO
"master refused to die
. Sending SIGKILL
"
kill
-9
`
$CAT
$MASTER_MYPID
`
kill
-9
`
$CAT
$MASTER_MYPID
`
$RM
-f
$MASTER_MYPID
$RM
-f
$MASTER_MYPID
else
else
...
...
mysql-test/r/bdb.result
View file @
5f6cbe3d
...
@@ -490,3 +490,5 @@ a 2
...
@@ -490,3 +490,5 @@ a 2
a b
a b
a 1
a 1
a 2
a 2
MIN(B) MAX(b)
1 1
mysql-test/r/innobase.result
View file @
5f6cbe3d
...
@@ -443,3 +443,5 @@ i j
...
@@ -443,3 +443,5 @@ i j
1 2
1 2
i j
i j
1 2
1 2
MIN(B) MAX(b)
1 1
mysql-test/t/bdb.test
View file @
5f6cbe3d
...
@@ -664,3 +664,17 @@ SELECT * FROM t1 WHERE a='a' AND b=2;
...
@@ -664,3 +664,17 @@ SELECT * FROM t1 WHERE a='a' AND b=2;
SELECT
*
FROM
t1
WHERE
a
=
'a'
AND
b
in
(
2
);
SELECT
*
FROM
t1
WHERE
a
=
'a'
AND
b
in
(
2
);
SELECT
*
FROM
t1
WHERE
a
=
'a'
AND
b
in
(
1
,
2
);
SELECT
*
FROM
t1
WHERE
a
=
'a'
AND
b
in
(
1
,
2
);
drop
table
t1
;
drop
table
t1
;
#
# Test min-max optimization
#
CREATE
TABLE
t1
(
a
int3
unsigned
NOT
NULL
,
b
int1
unsigned
NOT
NULL
,
UNIQUE
(
a
,
b
)
)
TYPE
=
BDB
;
INSERT
INTO
t1
VALUES
(
1
,
1
);
SELECT
MIN
(
B
),
MAX
(
b
)
FROM
t1
WHERE
t1
.
a
=
1
;
drop
table
t1
;
mysql-test/t/delayed.test
View file @
5f6cbe3d
...
@@ -11,6 +11,7 @@ insert delayed into t1 set a = 4;
...
@@ -11,6 +11,7 @@ insert delayed into t1 set a = 4;
insert
delayed
into
t1
set
a
=
5
,
tmsp
=
19711006010203
;
insert
delayed
into
t1
set
a
=
5
,
tmsp
=
19711006010203
;
insert
delayed
into
t1
(
a
,
tmsp
)
values
(
6
,
19711006010203
);
insert
delayed
into
t1
(
a
,
tmsp
)
values
(
6
,
19711006010203
);
insert
delayed
into
t1
(
a
,
tmsp
)
values
(
7
,
NULL
);
insert
delayed
into
t1
(
a
,
tmsp
)
values
(
7
,
NULL
);
--
sleep
1
insert
into
t1
set
a
=
8
,
tmsp
=
19711006010203
;
insert
into
t1
set
a
=
8
,
tmsp
=
19711006010203
;
select
*
from
t1
where
tmsp
=
0
;
select
*
from
t1
where
tmsp
=
0
;
select
*
from
t1
where
tmsp
=
19711006010203
;
select
*
from
t1
where
tmsp
=
19711006010203
;
...
@@ -27,5 +28,6 @@ insert delayed into t1 values (null,"c");
...
@@ -27,5 +28,6 @@ insert delayed into t1 values (null,"c");
insert
delayed
into
t1
values
(
3
,
"d"
),(
null
,
"e"
);
insert
delayed
into
t1
values
(
3
,
"d"
),(
null
,
"e"
);
--
error
1136
--
error
1136
insert
delayed
into
t1
values
(
3
,
"this will give an"
,
"error"
);
insert
delayed
into
t1
values
(
3
,
"this will give an"
,
"error"
);
--
sleep
2
select
*
from
t1
;
select
*
from
t1
;
drop
table
t1
;
drop
table
t1
;
mysql-test/t/innobase.test
View file @
5f6cbe3d
...
@@ -394,3 +394,17 @@ select * from t1 where i=1 and j=2;
...
@@ -394,3 +394,17 @@ select * from t1 where i=1 and j=2;
create
index
ax1
on
t1
(
i
,
j
);
create
index
ax1
on
t1
(
i
,
j
);
select
*
from
t1
where
i
=
1
and
j
=
2
;
select
*
from
t1
where
i
=
1
and
j
=
2
;
drop
table
t1
;
drop
table
t1
;
#
# Test min-max optimization
#
CREATE
TABLE
t1
(
a
int3
unsigned
NOT
NULL
,
b
int1
unsigned
NOT
NULL
,
UNIQUE
(
a
,
b
)
)
TYPE
=
innobase
;
INSERT
INTO
t1
VALUES
(
1
,
1
);
SELECT
MIN
(
B
),
MAX
(
b
)
FROM
t1
WHERE
t1
.
a
=
1
;
drop
table
t1
;
mysql-test/t/order_by.test
View file @
5f6cbe3d
...
@@ -165,3 +165,43 @@ insert into t3 (ID, DateOfAction) values (87, '1999-07-19'), (89, '1999-07-19
...
@@ -165,3 +165,43 @@ insert into t3 (ID, DateOfAction) values (87, '1999-07-19'), (89, '1999-07-19
select
t3
.
DateOfAction
,
t1
.
TransactionID
from
t1
join
t2
join
t3
where
t2
.
ID
=
t1
.
TransactionID
and
t3
.
ID
=
t2
.
GroupID
order
by
t3
.
DateOfAction
,
t1
.
TransactionID
;
select
t3
.
DateOfAction
,
t1
.
TransactionID
from
t1
join
t2
join
t3
where
t2
.
ID
=
t1
.
TransactionID
and
t3
.
ID
=
t2
.
GroupID
order
by
t3
.
DateOfAction
,
t1
.
TransactionID
;
select
t3
.
DateOfAction
,
t1
.
TransactionID
from
t1
join
t2
join
t3
where
t2
.
ID
=
t1
.
TransactionID
and
t3
.
ID
=
t2
.
GroupID
order
by
t1
.
TransactionID
,
t3
.
DateOfAction
;
select
t3
.
DateOfAction
,
t1
.
TransactionID
from
t1
join
t2
join
t3
where
t2
.
ID
=
t1
.
TransactionID
and
t3
.
ID
=
t2
.
GroupID
order
by
t1
.
TransactionID
,
t3
.
DateOfAction
;
drop
table
t1
,
t2
,
t3
;
drop
table
t1
,
t2
,
t3
;
#bug reported by Wouter de Jong
drop
table
if
exists
members
;
CREATE
TABLE
members
(
member_id
int
(
11
)
NOT
NULL
auto_increment
,
inschrijf_datum
varchar
(
20
)
NOT
NULL
default
''
,
lastchange_datum
varchar
(
20
)
NOT
NULL
default
''
,
nickname
varchar
(
20
)
NOT
NULL
default
''
,
password
varchar
(
8
)
NOT
NULL
default
''
,
voornaam
varchar
(
30
)
NOT
NULL
default
''
,
tussenvoegsels
varchar
(
10
)
NOT
NULL
default
''
,
achternaam
varchar
(
50
)
NOT
NULL
default
''
,
straat
varchar
(
100
)
NOT
NULL
default
''
,
postcode
varchar
(
10
)
NOT
NULL
default
''
,
wijk
varchar
(
40
)
NOT
NULL
default
''
,
plaats
varchar
(
50
)
NOT
NULL
default
''
,
telefoon
varchar
(
10
)
NOT
NULL
default
''
,
geboortedatum
date
NOT
NULL
default
'0000-00-00'
,
geslacht
varchar
(
5
)
NOT
NULL
default
''
,
email
varchar
(
80
)
NOT
NULL
default
''
,
uin
varchar
(
15
)
NOT
NULL
default
''
,
homepage
varchar
(
100
)
NOT
NULL
default
''
,
internet
varchar
(
15
)
NOT
NULL
default
''
,
scherk
varchar
(
30
)
NOT
NULL
default
''
,
favo_boek
varchar
(
50
)
NOT
NULL
default
''
,
favo_tijdschrift
varchar
(
50
)
NOT
NULL
default
''
,
favo_tv
varchar
(
50
)
NOT
NULL
default
''
,
favo_eten
varchar
(
50
)
NOT
NULL
default
''
,
favo_muziek
varchar
(
30
)
NOT
NULL
default
''
,
info
text
NOT
NULL
,
ipnr
varchar
(
30
)
NOT
NULL
default
''
,
PRIMARY
KEY
(
member_id
)
)
TYPE
=
MyISAM
PACK_KEYS
=
1
;
insert
into
members
(
member_id
)
values
(
1
),(
2
),(
3
);
select
member_id
,
nickname
,
voornaam
FROM
members
ORDER
by
lastchange_datum
DESC
LIMIT
2
;
drop
table
members
;
scripts/mysql_install_db.sh
View file @
5f6cbe3d
...
@@ -282,7 +282,7 @@ fi
...
@@ -282,7 +282,7 @@ fi
echo
"Installing all prepared tables"
echo
"Installing all prepared tables"
if
eval
"
$execdir
/mysqld
$defaults
--bootstrap --skip-grant-tables
\
if
eval
"
$execdir
/mysqld
$defaults
--bootstrap --skip-grant-tables
\
--basedir=
$basedir
--datadir=
$ldata
--skip-innobase --skip-gem
e
ni --skip-bdb
$args
"
<<
END_OF_DATA
--basedir=
$basedir
--datadir=
$ldata
--skip-innobase --skip-gem
i
ni --skip-bdb
$args
"
<<
END_OF_DATA
use mysql;
use mysql;
$c_d
$c_d
$i_d
$i_d
...
...
sql-bench/TODO
0 → 100644
View file @
5f6cbe3d
When comparing with ms-sql:
Check how to get MySQL faster mysql ms-sql
count_distinct (2000) | 89.00| 39.00|
count_distinct_big (120) | 324.00| 121.00|
count_distinct_group (1000) | 158.00| 107.00|
count_distinct_group_on_key (1000) | 49.00| 17.00|
count_distinct_group_on_key_parts (1| 157.00| 108.00|
order_by_big (10) | 197.00| 89.00|
order_by_big_key (10) | 170.00| 82.00|
order_by_big_key2 (10) | 163.00| 73.00|
order_by_big_key_desc (10) | 172.00| 84.00|
order_by_big_key_diff (10) | 193.00| 89.00|
order_by_big_key_prefix (10) | 165.00| 72.00|
Why is the following slow on NT:
NT Linux
update_of_primary_key_many_keys (256| 560.00| 65.00|
sql-bench/bench-init.pl.sh
View file @
5f6cbe3d
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
# $server Object for current server
# $server Object for current server
# $limits Hash reference to limits for benchmark
# $limits Hash reference to limits for benchmark
$benchmark_version
=
"2.1
1a
"
;
$benchmark_version
=
"2.1
2
"
;
use Getopt::Long
;
use Getopt::Long
;
require
"
$pwd
/server-cfg"
||
die
"Can't read Configuration file:
$!
\n
"
;
require
"
$pwd
/server-cfg"
||
die
"Can't read Configuration file:
$!
\n
"
;
...
...
sql-bench/crash-me.sh
View file @
5f6cbe3d
...
@@ -47,6 +47,7 @@ require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n";
...
@@ -47,6 +47,7 @@ require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n";
$opt_server
=
"mysql"
;
$opt_host
=
"localhost"
;
$opt_database
=
"test"
;
$opt_server
=
"mysql"
;
$opt_host
=
"localhost"
;
$opt_database
=
"test"
;
$opt_dir
=
"limits"
;
$opt_dir
=
"limits"
;
$opt_user
=
$opt_password
=
""
;
$opt_debug
=
$opt_help
=
$opt_Information
=
$opt_restart
=
$opt_force
=
$opt_quick
=
0
;
$opt_debug
=
$opt_help
=
$opt_Information
=
$opt_restart
=
$opt_force
=
$opt_quick
=
0
;
$opt_log_all_queries
=
$opt_fix_limit_file
=
$opt_batch_mode
=
0
;
$opt_log_all_queries
=
$opt_fix_limit_file
=
$opt_batch_mode
=
0
;
$opt_db_start_cmd
=
""
;
# the db server start command
$opt_db_start_cmd
=
""
;
# the db server start command
...
...
sql-bench/run-all-tests.sh
View file @
5f6cbe3d
...
@@ -36,11 +36,6 @@
...
@@ -36,11 +36,6 @@
use DBI
;
use DBI
;
$opt_silent
=
1
;
# Don't write header
$opt_silent
=
1
;
# Don't write header
$prog_args
=
""
;
foreach
$arg
(
@ARGV
)
{
$prog_args
.
=
"'"
.
$arg
.
"' "
;
}
chomp
(
$pwd
=
`
pwd
`
)
;
$pwd
=
"."
if
(
$pwd
eq
''
)
;
chomp
(
$pwd
=
`
pwd
`
)
;
$pwd
=
"."
if
(
$pwd
eq
''
)
;
require
"
$pwd
/bench-init.pl"
||
die
"Can't read Configuration file:
$!
\n
"
;
require
"
$pwd
/bench-init.pl"
||
die
"Can't read Configuration file:
$!
\n
"
;
...
@@ -50,6 +45,20 @@ $machine=machine();
...
@@ -50,6 +45,20 @@ $machine=machine();
$redirect
=
!(
$machine
=
~ /windows/i
||
$machine
=
~
"^NT
\s
"
)
?
"2>&1"
:
""
;
$redirect
=
!(
$machine
=
~ /windows/i
||
$machine
=
~
"^NT
\s
"
)
?
"2>&1"
:
""
;
$dir
=
(
$pwd
=
~ /
\\
/
)
?
'\\'
:
'/'
;
# directory symbol for shell
$dir
=
(
$pwd
=
~ /
\\
/
)
?
'\\'
:
'/'
;
# directory symbol for shell
$prog_args
=
""
;
foreach
$arg
(
@ARGV
)
{
if
(
$redirect
)
{
$prog_args
.
=
"'"
.
$arg
.
"' "
;
}
else
{
# Windows/NT can't handle ' around arguments
$prog_args
.
=
$arg
.
" "
;
}
}
$prog_count
=
$errors
=
0
;
$prog_count
=
$errors
=
0
;
if
(
$opt_cmp
)
{
if
(
$opt_cmp
)
{
...
...
sql-bench/server-cfg.sh
View file @
5f6cbe3d
...
@@ -194,6 +194,11 @@ sub new
...
@@ -194,6 +194,11 @@ sub new
{
{
$limits
{
'working_blobs'
}
=
0
;
# HEAP tables can't handle BLOB's
$limits
{
'working_blobs'
}
=
0
;
# HEAP tables can't handle BLOB's
}
}
if
(
defined
(
$main
::opt_create_options
)
&&
$main
::opt_create_options
=
~ /type
=
innobase/i
)
{
$limits
{
'max_text_size'
}
=
8000
;
# Limit in Innobase
}
return
$self
;
return
$self
;
}
}
...
...
sql-bench/test-select.sh
View file @
5f6cbe3d
...
@@ -130,6 +130,37 @@ if ($opt_lock_tables)
...
@@ -130,6 +130,37 @@ if ($opt_lock_tables)
select_test:
select_test:
if
(
$limits
->
{
'group_functions'
})
{
my
(
$tmp
)
;
$tmp
=
1000
;
print
"Test if the database has a query cache
\n
"
;
# First ensure that the table is read into memory
fetch_all_rows
(
$dbh
,
"select sum(idn+
$tmp
),sum(rev_idn+
$tmp
) from bench1"
)
;
$loop_time
=
new Benchmark
;
for
(
$tests
=
0
;
$tests
<
$opt_loop_count
;
$tests
++
)
{
fetch_all_rows
(
$dbh
,
"select sum(idn+
$tests
),sum(rev_idn+
$tests
) from bench1"
)
;
}
$end_time
=
new Benchmark
;
print
"Time for select_query_cache (
$opt_loop_count
): "
.
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n\n
"
;
# If the database has a query cache, the following loop should be much
# slower than the previous loop
$loop_time
=
new Benchmark
;
for
(
$tests
=
0
;
$tests
<
$opt_loop_count
;
$tests
++
)
{
fetch_all_rows
(
$dbh
,
"select sum(idn+
$tests
),sum(rev_idn+
$tests
) from bench1"
)
;
}
$end_time
=
new Benchmark
;
print
"Time for select_query_cache2 (
$opt_loop_count
): "
.
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n\n
"
;
}
print
"Testing big selects on the table
\n
"
;
print
"Testing big selects on the table
\n
"
;
$loop_time
=
new Benchmark
;
$loop_time
=
new Benchmark
;
$rows
=
0
;
$rows
=
0
;
...
@@ -288,8 +319,21 @@ if ($limits->{'group_distinct_functions'})
...
@@ -288,8 +319,21 @@ if ($limits->{'group_distinct_functions'})
$rows
=
$estimated
=
$count
=
0
;
$rows
=
$estimated
=
$count
=
0
;
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
{
{
$count
+
=
2
;
$count
+
+
;
$rows
+
=
fetch_all_rows
(
$dbh
,
"select count(distinct region) from bench1"
)
;
$rows
+
=
fetch_all_rows
(
$dbh
,
"select count(distinct region) from bench1"
)
;
$end_time
=
new Benchmark
;
last
if
(
$estimated
=
predict_query_time
(
$loop_time
,
$end_time
,
\$
count,
$i
+1,
$opt_medium_loop_count
))
;
}
print_time
(
$estimated
)
;
print
" for count_distinct_key_prefix (
$count
:
$rows
): "
.
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n
"
;
$loop_time
=
new Benchmark
;
$rows
=
$estimated
=
$count
=
0
;
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
{
$count
++
;
$rows
+
=
fetch_all_rows
(
$dbh
,
"select count(distinct grp) from bench1"
)
;
$rows
+
=
fetch_all_rows
(
$dbh
,
"select count(distinct grp) from bench1"
)
;
$end_time
=
new Benchmark
;
$end_time
=
new Benchmark
;
last
if
(
$estimated
=
predict_query_time
(
$loop_time
,
$end_time
,
\$
count,
$i
+1,
last
if
(
$estimated
=
predict_query_time
(
$loop_time
,
$end_time
,
\$
count,
$i
+1,
...
@@ -299,6 +343,20 @@ if ($limits->{'group_distinct_functions'})
...
@@ -299,6 +343,20 @@ if ($limits->{'group_distinct_functions'})
print
" for count_distinct (
$count
:
$rows
): "
.
print
" for count_distinct (
$count
:
$rows
): "
.
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n
"
;
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n
"
;
$loop_time
=
new Benchmark
;
$rows
=
$estimated
=
$count
=
0
;
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
{
$count
++
;
$rows
+
=
fetch_all_rows
(
$dbh
,
"select count(distinct grp),count(distinct rev_idn) from bench1"
)
;
$end_time
=
new Benchmark
;
last
if
(
$estimated
=
predict_query_time
(
$loop_time
,
$end_time
,
\$
count,
$i
+1,
$opt_medium_loop_count
))
;
}
print_time
(
$estimated
)
;
print
" for count_distinct_2 (
$count
:
$rows
): "
.
timestr
(
timediff
(
$end_time
,
$loop_time
)
,
"all"
)
.
"
\n
"
;
$loop_time
=
new Benchmark
;
$loop_time
=
new Benchmark
;
$rows
=
$estimated
=
$count
=
0
;
$rows
=
$estimated
=
$count
=
0
;
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
for
(
$i
=
0
;
$i
<
$opt_medium_loop_count
;
$i
++
)
...
...
sql/gen_lex_hash.cc
View file @
5f6cbe3d
...
@@ -254,7 +254,7 @@ you have to change 'main' to print out the new function\n");
...
@@ -254,7 +254,7 @@ you have to change 'main' to print out the new function\n");
if
(
write_warning
)
if
(
write_warning
)
fprintf
(
stderr
,
"Fatal error when generating hash for symbols
\n
\
fprintf
(
stderr
,
"Fatal error when generating hash for symbols
\n
\
Didn't find suitable values for perfect hashing:
\n
\
Didn't find suitable values for perfect hashing:
\n
\
You have to edit gen_lex_has
e
.cc to generate a new hashing function.
\n
\
You have to edit gen_lex_has
h
.cc to generate a new hashing function.
\n
\
You can try running gen_lex_hash with --search to find a suitable value
\n
\
You can try running gen_lex_hash with --search to find a suitable value
\n
\
Symbol array size = %d
\n
"
,
function_mod
);
Symbol array size = %d
\n
"
,
function_mod
);
return
-
1
;
return
-
1
;
...
@@ -472,8 +472,10 @@ int main(int argc,char **argv)
...
@@ -472,8 +472,10 @@ int main(int argc,char **argv)
int
error
;
int
error
;
MY_INIT
(
argv
[
0
]);
MY_INIT
(
argv
[
0
]);
start_value
=
5315771L
;
best_t1
=
6916833L
;
best_t2
=
3813748L
;
best_type
=
3
;
/* mode=5839 add=5 type: 0 */
start_value
=
4934807L
;
best_t1
=
5181754L
;
best_t2
=
1469522L
;
best_type
=
0
;
if
(
get_options
(
argc
,(
char
**
)
argv
))
/* mode=4999 add=7 type: 0 */
if
(
get_options
(
argc
,(
char
**
)
argv
))
exit
(
1
);
exit
(
1
);
make_max_length_table
();
make_max_length_table
();
...
...
sql/ha_berkeley.cc
View file @
5f6cbe3d
...
@@ -1429,7 +1429,12 @@ int ha_berkeley::index_read(byte * buf, const byte * key,
...
@@ -1429,7 +1429,12 @@ int ha_berkeley::index_read(byte * buf, const byte * key,
pack_key
(
&
last_key
,
active_index
,
key_buff
,
key
,
key_len
);
pack_key
(
&
last_key
,
active_index
,
key_buff
,
key
,
key_len
);
/* Store for compare */
/* Store for compare */
memcpy
(
key_buff2
,
key_buff
,
(
key_len
=
last_key
.
size
));
memcpy
(
key_buff2
,
key_buff
,
(
key_len
=
last_key
.
size
));
key_info
->
handler
.
bdb_return_if_eq
=
-
1
;
/*
If HA_READ_AFTER_KEY is set, return next key, else return first
matching key.
*/
key_info
->
handler
.
bdb_return_if_eq
=
(
find_flag
==
HA_READ_AFTER_KEY
?
1
:
-
1
);
error
=
read_row
(
cursor
->
c_get
(
cursor
,
&
last_key
,
&
row
,
DB_SET_RANGE
),
error
=
read_row
(
cursor
->
c_get
(
cursor
,
&
last_key
,
&
row
,
DB_SET_RANGE
),
(
char
*
)
buf
,
active_index
,
&
row
,
(
DBT
*
)
0
,
0
);
(
char
*
)
buf
,
active_index
,
&
row
,
(
DBT
*
)
0
,
0
);
key_info
->
handler
.
bdb_return_if_eq
=
0
;
key_info
->
handler
.
bdb_return_if_eq
=
0
;
...
...
sql/ha_innobase.h
View file @
5f6cbe3d
...
@@ -72,16 +72,18 @@ class ha_innobase: public handler
...
@@ -72,16 +72,18 @@ class ha_innobase: public handler
/* Init values for the class: */
/* Init values for the class: */
public:
public:
ha_innobase
(
TABLE
*
table
)
:
handler
(
table
),
ha_innobase
(
TABLE
*
table
)
:
handler
(
table
),
int_option_flag
(
HA_READ_NEXT
|
HA_READ_PREV
|
HA_READ_ORDER
|
int_option_flag
(
HA_READ_NEXT
|
HA_READ_PREV
|
HA_READ_ORDER
|
HA_REC_NOT_IN_SEQ
|
HA_REC_NOT_IN_SEQ
|
HA_KEYPOS_TO_RNDPOS
|
HA_LASTKEY_ORDER
|
HA_KEYPOS_TO_RNDPOS
|
HA_LASTKEY_ORDER
|
HA_HAVE_KEY_READ_ONLY
|
HA_READ_NOT_EXACT_KEY
|
HA_HAVE_KEY_READ_ONLY
|
HA_READ_NOT_EXACT_KEY
|
HA_LONGLONG_KEYS
|
HA_NULL_KEY
|
HA_LONGLONG_KEYS
|
HA_NULL_KEY
|
HA_NOT_EXACT_COUNT
|
HA_NOT_EXACT_COUNT
|
HA_NO_WRITE_DELAYED
|
HA_NO_WRITE_DELAYED
|
HA_PRIMARY_KEY_IN_READ_INDEX
|
HA_DROP_BEFORE_CREATE
),
HA_PRIMARY_KEY_IN_READ_INDEX
|
last_dup_key
((
uint
)
-
1
),
HA_DROP_BEFORE_CREATE
|
start_of_scan
(
0
)
HA_NOT_READ_AFTER_KEY
),
last_dup_key
((
uint
)
-
1
),
start_of_scan
(
0
)
{
{
}
}
~
ha_innobase
()
{}
~
ha_innobase
()
{}
...
...
sql/ha_isam.h
View file @
5f6cbe3d
...
@@ -33,7 +33,8 @@ class ha_isam: public handler
...
@@ -33,7 +33,8 @@ class ha_isam: public handler
int_option_flag
(
HA_READ_NEXT
+
HA_READ_PREV
+
HA_READ_RND_SAME
+
int_option_flag
(
HA_READ_NEXT
+
HA_READ_PREV
+
HA_READ_RND_SAME
+
HA_KEYPOS_TO_RNDPOS
+
HA_READ_ORDER
+
HA_LASTKEY_ORDER
+
HA_KEYPOS_TO_RNDPOS
+
HA_READ_ORDER
+
HA_LASTKEY_ORDER
+
HA_HAVE_KEY_READ_ONLY
+
HA_READ_NOT_EXACT_KEY
+
HA_HAVE_KEY_READ_ONLY
+
HA_READ_NOT_EXACT_KEY
+
HA_LONGLONG_KEYS
+
HA_KEY_READ_WRONG_STR
+
HA_DUPP_POS
)
HA_LONGLONG_KEYS
+
HA_KEY_READ_WRONG_STR
+
HA_DUPP_POS
+
HA_NOT_DELETE_WITH_CACHE
)
{}
{}
~
ha_isam
()
{}
~
ha_isam
()
{}
const
char
*
table_type
()
const
{
return
"ISAM"
;
}
const
char
*
table_type
()
const
{
return
"ISAM"
;
}
...
...
sql/ha_myisam.cc
View file @
5f6cbe3d
...
@@ -484,7 +484,8 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
...
@@ -484,7 +484,8 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
}
}
break
;
break
;
}
}
if
(
!
error
&&
start_records
!=
file
->
state
->
records
)
if
(
!
error
&&
start_records
!=
file
->
state
->
records
&&
!
(
check_opt
->
flags
&
T_VERY_SILENT
))
{
{
char
llbuff
[
22
],
llbuff2
[
22
];
char
llbuff
[
22
],
llbuff2
[
22
];
sql_print_error
(
"Warning: Found %s of %s rows when repairing '%s'"
,
sql_print_error
(
"Warning: Found %s of %s rows when repairing '%s'"
,
...
...
sql/handler.h
View file @
5f6cbe3d
...
@@ -70,6 +70,8 @@
...
@@ -70,6 +70,8 @@
#define HA_NO_WRITE_DELAYED (HA_NOT_EXACT_COUNT*2)
#define HA_NO_WRITE_DELAYED (HA_NOT_EXACT_COUNT*2)
#define HA_PRIMARY_KEY_IN_READ_INDEX (HA_NO_WRITE_DELAYED*2)
#define HA_PRIMARY_KEY_IN_READ_INDEX (HA_NO_WRITE_DELAYED*2)
#define HA_DROP_BEFORE_CREATE (HA_PRIMARY_KEY_IN_READ_INDEX*2)
#define HA_DROP_BEFORE_CREATE (HA_PRIMARY_KEY_IN_READ_INDEX*2)
#define HA_NOT_READ_AFTER_KEY (HA_DROP_BEFORE_CREATE*2)
#define HA_NOT_DELETE_WITH_CACHE (HA_NOT_READ_AFTER_KEY*2)
/* Parameters for open() (in register form->filestat) */
/* Parameters for open() (in register form->filestat) */
/* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */
/* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */
...
...
sql/lex.h
View file @
5f6cbe3d
...
@@ -270,6 +270,7 @@ static SYMBOL symbols[] = {
...
@@ -270,6 +270,7 @@ static SYMBOL symbols[] = {
{
"SLAVE"
,
SYM
(
SLAVE
),
0
,
0
},
{
"SLAVE"
,
SYM
(
SLAVE
),
0
,
0
},
{
"SMALLINT"
,
SYM
(
SMALLINT
),
0
,
0
},
{
"SMALLINT"
,
SYM
(
SMALLINT
),
0
,
0
},
{
"SONAME"
,
SYM
(
UDF_SONAME_SYM
),
0
,
0
},
{
"SONAME"
,
SYM
(
UDF_SONAME_SYM
),
0
,
0
},
{
"SQL_ANSI_MODE"
,
SYM
(
SQL_ANSI_MODE
),
0
,
0
},
{
"SQL_AUTO_IS_NULL"
,
SYM
(
SQL_AUTO_IS_NULL
),
0
,
0
},
{
"SQL_AUTO_IS_NULL"
,
SYM
(
SQL_AUTO_IS_NULL
),
0
,
0
},
{
"SQL_BIG_RESULT"
,
SYM
(
SQL_BIG_RESULT
),
0
,
0
},
{
"SQL_BIG_RESULT"
,
SYM
(
SQL_BIG_RESULT
),
0
,
0
},
{
"SQL_BIG_SELECTS"
,
SYM
(
SQL_BIG_SELECTS
),
0
,
0
},
{
"SQL_BIG_SELECTS"
,
SYM
(
SQL_BIG_SELECTS
),
0
,
0
},
...
...
sql/mysql_priv.h
View file @
5f6cbe3d
...
@@ -477,7 +477,7 @@ extern uint32 server_id;
...
@@ -477,7 +477,7 @@ extern uint32 server_id;
extern
char
mysql_data_home
[
2
],
server_version
[
SERVER_VERSION_LENGTH
],
extern
char
mysql_data_home
[
2
],
server_version
[
SERVER_VERSION_LENGTH
],
max_sort_char
,
mysql_real_data_home
[];
max_sort_char
,
mysql_real_data_home
[];
extern
my_string
mysql_unix_port
,
mysql_tmpdir
;
extern
my_string
mysql_unix_port
,
mysql_tmpdir
;
extern
const
char
*
first_keyword
,
*
localhost
;
extern
const
char
*
first_keyword
,
*
localhost
,
*
delayed_user
;
extern
ulong
refresh_version
,
flush_version
,
thread_id
,
query_id
,
opened_tables
,
extern
ulong
refresh_version
,
flush_version
,
thread_id
,
query_id
,
opened_tables
,
created_tmp_tables
,
created_tmp_disk_tables
,
created_tmp_tables
,
created_tmp_disk_tables
,
aborted_threads
,
aborted_connects
,
aborted_threads
,
aborted_connects
,
...
@@ -539,6 +539,8 @@ extern struct show_var_st init_vars[];
...
@@ -539,6 +539,8 @@ extern struct show_var_st init_vars[];
extern
struct
show_var_st
status_vars
[];
extern
struct
show_var_st
status_vars
[];
extern
enum
db_type
default_table_type
;
extern
enum
db_type
default_table_type
;
extern
uchar
global_state_map
[
256
];
#ifndef __WIN__
#ifndef __WIN__
extern
pthread_t
signal_thread
;
extern
pthread_t
signal_thread
;
#endif
#endif
...
@@ -595,7 +597,7 @@ void change_byte(byte *,uint,char,char);
...
@@ -595,7 +597,7 @@ void change_byte(byte *,uint,char,char);
void
unireg_abort
(
int
exit_code
);
void
unireg_abort
(
int
exit_code
);
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
reg_form
,
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
reg_form
,
SQL_SELECT
*
select
,
SQL_SELECT
*
select
,
bool
use_record_cache
,
bool
print_errors
);
int
use_record_cache
,
bool
print_errors
);
void
end_read_record
(
READ_RECORD
*
info
);
void
end_read_record
(
READ_RECORD
*
info
);
ha_rows
filesort
(
TABLE
**
form
,
struct
st_sort_field
*
sortorder
,
uint
s_length
,
ha_rows
filesort
(
TABLE
**
form
,
struct
st_sort_field
*
sortorder
,
uint
s_length
,
SQL_SELECT
*
select
,
ha_rows
special
,
ha_rows
max_rows
);
SQL_SELECT
*
select
,
ha_rows
special
,
ha_rows
max_rows
);
...
...
sql/mysqld.cc
View file @
5f6cbe3d
...
@@ -243,6 +243,7 @@ volatile ulong cached_thread_count=0;
...
@@ -243,6 +243,7 @@ volatile ulong cached_thread_count=0;
my_string
master_user
=
(
char
*
)
"test"
,
master_password
=
0
,
master_host
=
0
,
my_string
master_user
=
(
char
*
)
"test"
,
master_password
=
0
,
master_host
=
0
,
master_info_file
=
(
char
*
)
"master.info"
;
master_info_file
=
(
char
*
)
"master.info"
;
const
char
*
localhost
=
LOCAL_HOST
;
const
char
*
localhost
=
LOCAL_HOST
;
const
char
*
delayed_user
=
"DELAYED"
;
uint
master_port
=
MYSQL_PORT
,
master_connect_retry
=
60
;
uint
master_port
=
MYSQL_PORT
,
master_connect_retry
=
60
;
ulong
max_tmp_tables
,
max_heap_table_size
;
ulong
max_tmp_tables
,
max_heap_table_size
;
...
@@ -2364,7 +2365,7 @@ pthread_handler_decl(handle_connections_namedpipes,arg)
...
@@ -2364,7 +2365,7 @@ pthread_handler_decl(handle_connections_namedpipes,arg)
continue
;
continue
;
}
}
/* host name is unknown */
/* host name is unknown */
thd
->
host
=
my_strdup
(
"localhost"
,
MYF
(
0
));
/* Host is unknown */
thd
->
host
=
my_strdup
(
localhost
,
MYF
(
0
));
/* Host is unknown */
create_new_thread
(
thd
);
create_new_thread
(
thd
);
}
}
...
@@ -2715,6 +2716,14 @@ struct show_var_st init_vars[]= {
...
@@ -2715,6 +2716,14 @@ struct show_var_st init_vars[]= {
{
"have_raid"
,
(
char
*
)
&
have_raid
,
SHOW_HAVE
},
{
"have_raid"
,
(
char
*
)
&
have_raid
,
SHOW_HAVE
},
{
"have_ssl"
,
(
char
*
)
&
have_ssl
,
SHOW_HAVE
},
{
"have_ssl"
,
(
char
*
)
&
have_ssl
,
SHOW_HAVE
},
{
"init_file"
,
(
char
*
)
&
opt_init_file
,
SHOW_CHAR_PTR
},
{
"init_file"
,
(
char
*
)
&
opt_init_file
,
SHOW_CHAR_PTR
},
#ifdef HAVE_INNOBASE_DB
{
"innobase_data_file_path"
,
innobase_data_file_path
,
SHOW_CHAR
},
{
"innobase_data_home_dir"
,
innobase_data_home_dir
,
SHOW_CHAR
},
{
"innobase_flush_log_at_trx_commit"
,
(
char
*
)
&
innobase_flush_log_at_trx_commit
,
SHOW_MY_BOOL
},
{
"innobase_log_arch_dir"
,
innobase_log_arch_dir
,
SHOW_CHAR
},
{
"innobase_log_archive"
,
(
char
*
)
&
innobase_log_archive
,
SHOW_MY_BOOL
},
{
"innobase_log_group_home_dir"
,
innobase_log_group_home_dir
,
SHOW_CHAR
},
#endif
{
"interactive_timeout"
,
(
char
*
)
&
net_interactive_timeout
,
SHOW_LONG
},
{
"interactive_timeout"
,
(
char
*
)
&
net_interactive_timeout
,
SHOW_LONG
},
{
"join_buffer_size"
,
(
char
*
)
&
join_buff_size
,
SHOW_LONG
},
{
"join_buffer_size"
,
(
char
*
)
&
join_buff_size
,
SHOW_LONG
},
{
"key_buffer_size"
,
(
char
*
)
&
keybuff_size
,
SHOW_LONG
},
{
"key_buffer_size"
,
(
char
*
)
&
keybuff_size
,
SHOW_LONG
},
...
@@ -2960,12 +2969,19 @@ static void usage(void)
...
@@ -2960,12 +2969,19 @@ static void usage(void)
--bdb-tmpdir=directory Berkeley DB tempfile name
\n
\
--bdb-tmpdir=directory Berkeley DB tempfile name
\n
\
--skip-bdb Don't use berkeley db (will save memory)
\n
\
--skip-bdb Don't use berkeley db (will save memory)
\n
\
"
);
"
);
#endif
#endif
/* HAVE_BERKELEY_DB */
#ifdef HAVE_INNOBASE_DB
#ifdef HAVE_INNOBASE_DB
puts
(
"\
puts
(
"\
--skip-innobase Don't use innobase (will save memory)
\n
\
--innobase_data_home_dir=dir The common part for innobase table spaces
\n
--innobase_data_file_path=dir Path to individual files and their sizes
\n
--innobase_flush_log_at_trx_commit[=#]
Set to 0 if you don't want to flush logs
\n
\
--innobase_log_arch_dir=dir Where full logs should be archived
\n
\
--innobase_log_archive[=#] Set to 1 if you want to have logs archived
\n
\
--innobase_log_group_home_dir=dir Path to Innobase log files.
--skip-innobase Don't use innobase (will save memory)
\n
\
"
);
"
);
#endif
#endif
/* HAVE_INNOBASE_DB */
print_defaults
(
"my"
,
load_default_groups
);
print_defaults
(
"my"
,
load_default_groups
);
puts
(
""
);
puts
(
""
);
...
...
sql/opt_sum.cc
View file @
5f6cbe3d
...
@@ -141,6 +141,11 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
...
@@ -141,6 +141,11 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
break
;
break
;
}
}
TABLE
*
table
=
((
Item_field
*
)
expr
)
->
field
->
table
;
TABLE
*
table
=
((
Item_field
*
)
expr
)
->
field
->
table
;
if
((
table
->
file
->
option_flag
()
&
HA_NOT_READ_AFTER_KEY
))
{
const_result
=
0
;
break
;
}
bool
error
=
table
->
file
->
index_init
((
uint
)
ref
.
key
);
bool
error
=
table
->
file
->
index_init
((
uint
)
ref
.
key
);
if
(
!
ref
.
key_length
)
if
(
!
ref
.
key_length
)
...
...
sql/records.cc
View file @
5f6cbe3d
...
@@ -31,7 +31,7 @@ static int rr_cmp(uchar *a,uchar *b);
...
@@ -31,7 +31,7 @@ static int rr_cmp(uchar *a,uchar *b);
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
table
,
void
init_read_record
(
READ_RECORD
*
info
,
THD
*
thd
,
TABLE
*
table
,
SQL_SELECT
*
select
,
SQL_SELECT
*
select
,
bool
use_record_cache
,
bool
print_error
)
int
use_record_cache
,
bool
print_error
)
{
{
IO_CACHE
*
tempfile
;
IO_CACHE
*
tempfile
;
DBUG_ENTER
(
"init_read_record"
);
DBUG_ENTER
(
"init_read_record"
);
...
@@ -97,9 +97,11 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
...
@@ -97,9 +97,11 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
info
->
read_record
=
rr_sequential
;
info
->
read_record
=
rr_sequential
;
table
->
file
->
rnd_init
();
table
->
file
->
rnd_init
();
/* We can use record cache if we don't update dynamic length tables */
/* We can use record cache if we don't update dynamic length tables */
if
(
use_record_cache
||
if
(
use_record_cache
>
0
||
(
int
)
table
->
reginfo
.
lock_type
<=
(
int
)
TL_READ_HIGH_PRIORITY
||
(
int
)
table
->
reginfo
.
lock_type
<=
(
int
)
TL_READ_HIGH_PRIORITY
||
!
(
table
->
db_options_in_use
&
HA_OPTION_PACK_RECORD
))
!
(
table
->
db_options_in_use
&
HA_OPTION_PACK_RECORD
)
||
(
use_record_cache
<
0
&&
!
(
table
->
file
->
option_flag
()
&
HA_NOT_DELETE_WITH_CACHE
)))
VOID
(
table
->
file
->
extra
(
HA_EXTRA_CACHE
));
// Cache reads
VOID
(
table
->
file
->
extra
(
HA_EXTRA_CACHE
));
// Cache reads
}
}
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
...
...
sql/slave.cc
View file @
5f6cbe3d
...
@@ -36,6 +36,7 @@ bool wild_do_table_inited = 0, wild_ignore_table_inited = 0;
...
@@ -36,6 +36,7 @@ bool wild_do_table_inited = 0, wild_ignore_table_inited = 0;
bool
table_rules_on
=
0
;
bool
table_rules_on
=
0
;
uint32
slave_skip_counter
=
0
;
uint32
slave_skip_counter
=
0
;
static
TABLE
*
save_temporary_tables
=
0
;
static
TABLE
*
save_temporary_tables
=
0
;
THD
*
slave_thd
=
0
;
// when slave thread exits, we need to remember the temporary tables so we
// when slave thread exits, we need to remember the temporary tables so we
// can re-use them on slave start
// can re-use them on slave start
...
@@ -1157,7 +1158,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused)))
...
@@ -1157,7 +1158,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused)))
// needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff
// needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff
my_thread_init
();
my_thread_init
();
thd
=
new
THD
;
// note that contructor of THD uses DBUG_ !
slave_thd
=
thd
=
new
THD
;
// note that contructor of THD uses DBUG_ !
thd
->
set_time
();
thd
->
set_time
();
DBUG_ENTER
(
"handle_slave"
);
DBUG_ENTER
(
"handle_slave"
);
...
@@ -1347,6 +1348,7 @@ position %s",
...
@@ -1347,6 +1348,7 @@ position %s",
pthread_cond_broadcast
(
&
COND_slave_stopped
);
// tell the world we are done
pthread_cond_broadcast
(
&
COND_slave_stopped
);
// tell the world we are done
pthread_mutex_unlock
(
&
LOCK_slave
);
pthread_mutex_unlock
(
&
LOCK_slave
);
net_end
(
&
thd
->
net
);
// destructor will not free it, because we are weird
net_end
(
&
thd
->
net
);
// destructor will not free it, because we are weird
slave_thd
=
0
;
delete
thd
;
delete
thd
;
my_thread_end
();
my_thread_end
();
#ifndef DBUG_OFF
#ifndef DBUG_OFF
...
@@ -1376,8 +1378,13 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi)
...
@@ -1376,8 +1378,13 @@ static int safe_connect(THD* thd, MYSQL* mysql, MASTER_INFO* mi)
}
}
if
(
!
slave_was_killed
)
if
(
!
slave_was_killed
)
mysql_log
.
write
(
thd
,
COM_CONNECT_OUT
,
"%s@%s:%d"
,
{
mysql_log
.
write
(
thd
,
COM_CONNECT_OUT
,
"%s@%s:%d"
,
mi
->
user
,
mi
->
host
,
mi
->
port
);
mi
->
user
,
mi
->
host
,
mi
->
port
);
#ifdef STOP_IO_WITH_FD_CLOSE
thd
->
set_active_fd
(
vio_fd
(
mysql
->
net
.
vio
));
#endif
}
return
slave_was_killed
;
return
slave_was_killed
;
}
}
...
@@ -1404,11 +1411,16 @@ static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi)
...
@@ -1404,11 +1411,16 @@ static int safe_reconnect(THD* thd, MYSQL* mysql, MASTER_INFO* mi)
}
}
if
(
!
slave_was_killed
)
if
(
!
slave_was_killed
)
sql_print_error
(
"Slave: reconnected to master '%s@%s:%d',\
{
sql_print_error
(
"Slave: reconnected to master '%s@%s:%d',\
replication resumed in log '%s' at position %s"
,
glob_mi
.
user
,
replication resumed in log '%s' at position %s"
,
glob_mi
.
user
,
glob_mi
.
host
,
glob_mi
.
port
,
glob_mi
.
host
,
glob_mi
.
port
,
RPL_LOG_NAME
,
RPL_LOG_NAME
,
llstr
(
glob_mi
.
pos
,
llbuff
));
llstr
(
glob_mi
.
pos
,
llbuff
));
#ifdef STOP_IO_WITH_FD_CLOSE
thd
->
set_active_fd
(
vio_fd
(
mysql
->
net
.
vio
));
#endif
}
return
slave_was_killed
;
return
slave_was_killed
;
}
}
...
...
sql/slave.h
View file @
5f6cbe3d
...
@@ -99,6 +99,7 @@ extern uint32 slave_skip_counter;
...
@@ -99,6 +99,7 @@ extern uint32 slave_skip_counter;
// have caused errors, and have been manually applied by DBA already
// have caused errors, and have been manually applied by DBA already
extern
pthread_t
slave_real_id
;
extern
pthread_t
slave_real_id
;
extern
THD
*
slave_thd
;
extern
MASTER_INFO
glob_mi
;
extern
MASTER_INFO
glob_mi
;
extern
HASH
replicate_do_table
,
replicate_ignore_table
;
extern
HASH
replicate_do_table
,
replicate_ignore_table
;
extern
DYNAMIC_ARRAY
replicate_wild_do_table
,
replicate_wild_ignore_table
;
extern
DYNAMIC_ARRAY
replicate_wild_do_table
,
replicate_wild_ignore_table
;
...
...
sql/sql_class.cc
View file @
5f6cbe3d
...
@@ -84,6 +84,10 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0),
...
@@ -84,6 +84,10 @@ THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0),
query_start_used
=
0
;
query_start_used
=
0
;
query_length
=
col_access
=
0
;
query_length
=
col_access
=
0
;
query_error
=
0
;
query_error
=
0
;
#ifdef STOP_IO_WITH_FD_CLOSE
active_fd
=
-
1
;
pthread_mutex_init
(
&
active_fd_lock
,
NULL
);
#endif
server_id
=
::
server_id
;
server_id
=
::
server_id
;
server_status
=
SERVER_STATUS_AUTOCOMMIT
;
server_status
=
SERVER_STATUS_AUTOCOMMIT
;
next_insert_id
=
last_insert_id
=
0
;
next_insert_id
=
last_insert_id
=
0
;
...
@@ -176,11 +180,15 @@ THD::~THD()
...
@@ -176,11 +180,15 @@ THD::~THD()
if
(
host
!=
localhost
)
// If not pointer to constant
if
(
host
!=
localhost
)
// If not pointer to constant
safeFree
(
host
);
safeFree
(
host
);
safeFree
(
user
);
if
(
user
!=
delayed_user
)
safeFree
(
user
);
safeFree
(
db
);
safeFree
(
db
);
safeFree
(
ip
);
safeFree
(
ip
);
free_root
(
&
mem_root
,
MYF
(
0
));
free_root
(
&
mem_root
,
MYF
(
0
));
mysys_var
=
0
;
// Safety (shouldn't be needed)
mysys_var
=
0
;
// Safety (shouldn't be needed)
#ifdef STOP_IO_WITH_FD_CLOSE
pthread_mutex_destroy
(
&
active_fd_lock
);
#endif
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
...
sql/sql_class.h
View file @
5f6cbe3d
...
@@ -21,6 +21,8 @@
...
@@ -21,6 +21,8 @@
#pragma interface
/* gcc class implementation */
#pragma interface
/* gcc class implementation */
#endif
#endif
#include <thr_alarm.h>
class
Query_log_event
;
class
Query_log_event
;
class
Load_log_event
;
class
Load_log_event
;
...
@@ -256,6 +258,10 @@ class THD :public ilink {
...
@@ -256,6 +258,10 @@ class THD :public ilink {
#ifndef __WIN__
#ifndef __WIN__
sigset_t
signals
,
block_signals
;
sigset_t
signals
,
block_signals
;
#endif
#endif
#ifdef STOP_IO_WITH_FD_CLOSE
int
active_fd
;
pthread_mutex_t
active_fd_lock
;
#endif
ulonglong
next_insert_id
,
last_insert_id
,
current_insert_id
;
ulonglong
next_insert_id
,
last_insert_id
,
current_insert_id
;
ha_rows
select_limit
,
offset_limit
,
default_select_limit
,
cuted_fields
,
ha_rows
select_limit
,
offset_limit
,
default_select_limit
,
cuted_fields
,
max_join_size
,
sent_row_count
;
max_join_size
,
sent_row_count
;
...
@@ -280,10 +286,58 @@ class THD :public ilink {
...
@@ -280,10 +286,58 @@ class THD :public ilink {
ulong
slave_proxy_id
;
// in slave thread we need to know in behalf of which
ulong
slave_proxy_id
;
// in slave thread we need to know in behalf of which
// thread the query is being run to replicate temp tables properly
// thread the query is being run to replicate temp tables properly
// thread-specific state map for lex parser
uchar
state_map
[
256
];
THD
();
THD
();
~
THD
();
~
THD
();
bool
store_globals
();
bool
store_globals
();
#ifdef STOP_IO_WITH_FD_CLOSE
inline
void
set_active_fd
(
int
fd
)
{
pthread_mutex_lock
(
&
active_fd_lock
);
active_fd
=
fd
;
pthread_mutex_unlock
(
&
active_fd_lock
);
}
inline
void
clear_active_fd
()
{
pthread_mutex_lock
(
&
active_fd_lock
);
active_fd
=
-
1
;
pthread_mutex_unlock
(
&
active_fd_lock
);
}
inline
void
close_active_fd
()
{
pthread_mutex_lock
(
&
active_fd_lock
);
if
(
active_fd
>=
0
)
{
my_close
(
active_fd
,
MYF
(
MY_WME
));
active_fd
=
-
1
;
}
pthread_mutex_unlock
(
&
active_fd_lock
);
}
#endif
inline
void
prepare_to_die
()
{
thr_alarm_kill
(
real_id
);
killed
=
1
;
#ifdef STOP_IO_WITH_FD_CLOSE
close_active_fd
();
#endif
if
(
mysys_var
)
{
pthread_mutex_lock
(
&
mysys_var
->
mutex
);
if
(
!
system_thread
)
// Don't abort locks
mysys_var
->
abort
=
1
;
if
(
mysys_var
->
current_mutex
)
{
pthread_mutex_lock
(
mysys_var
->
current_mutex
);
pthread_cond_broadcast
(
mysys_var
->
current_cond
);
pthread_mutex_unlock
(
mysys_var
->
current_mutex
);
}
pthread_mutex_unlock
(
&
mysys_var
->
mutex
);
}
}
inline
const
char
*
enter_cond
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
,
inline
const
char
*
enter_cond
(
pthread_cond_t
*
cond
,
pthread_mutex_t
*
mutex
,
const
char
*
msg
)
const
char
*
msg
)
{
{
...
...
sql/sql_delete.cc
View file @
5f6cbe3d
...
@@ -192,7 +192,7 @@ int mysql_delete(THD *thd,TABLE_LIST *table_list,COND *conds,ha_rows limit,
...
@@ -192,7 +192,7 @@ int mysql_delete(THD *thd,TABLE_LIST *table_list,COND *conds,ha_rows limit,
(
void
)
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
(
void
)
table
->
file
->
extra
(
HA_EXTRA_NO_READCHECK
);
if
(
options
&
OPTION_QUICK
)
if
(
options
&
OPTION_QUICK
)
(
void
)
table
->
file
->
extra
(
HA_EXTRA_QUICK
);
(
void
)
table
->
file
->
extra
(
HA_EXTRA_QUICK
);
init_read_record
(
&
info
,
thd
,
table
,
select
,
1
,
1
);
init_read_record
(
&
info
,
thd
,
table
,
select
,
-
1
,
1
);
ulong
deleted
=
0L
;
ulong
deleted
=
0L
;
thd
->
proc_info
=
"updating"
;
thd
->
proc_info
=
"updating"
;
while
(
!
(
error
=
info
.
read_record
(
&
info
))
&&
!
thd
->
killed
)
while
(
!
(
error
=
info
.
read_record
(
&
info
))
&&
!
thd
->
killed
)
...
...
sql/sql_insert.cc
View file @
5f6cbe3d
...
@@ -489,7 +489,7 @@ class delayed_insert :public ilink {
...
@@ -489,7 +489,7 @@ class delayed_insert :public ilink {
table
(
0
),
tables_in_use
(
0
),
stacked_inserts
(
0
),
status
(
0
),
dead
(
0
),
table
(
0
),
tables_in_use
(
0
),
stacked_inserts
(
0
),
status
(
0
),
dead
(
0
),
group_count
(
0
)
group_count
(
0
)
{
{
thd
.
user
=
thd
.
priv_user
=
(
char
*
)
""
;
thd
.
user
=
thd
.
priv_user
=
(
char
*
)
delayed_user
;
thd
.
host
=
(
char
*
)
localhost
;
thd
.
host
=
(
char
*
)
localhost
;
thd
.
current_tablenr
=
0
;
thd
.
current_tablenr
=
0
;
thd
.
version
=
refresh_version
;
thd
.
version
=
refresh_version
;
...
...
sql/sql_lex.cc
View file @
5f6cbe3d
...
@@ -75,7 +75,7 @@ inline int lex_casecmp(const char *s, const char *t, uint len)
...
@@ -75,7 +75,7 @@ inline int lex_casecmp(const char *s, const char *t, uint len)
#include "lex_hash.h"
#include "lex_hash.h"
static
uchar
state_map
[
256
];
uchar
global_
state_map
[
256
];
void
lex_init
(
void
)
void
lex_init
(
void
)
...
@@ -89,42 +89,49 @@ void lex_init(void)
...
@@ -89,42 +89,49 @@ void lex_init(void)
VOID
(
pthread_key_create
(
&
THR_LEX
,
NULL
));
VOID
(
pthread_key_create
(
&
THR_LEX
,
NULL
));
/* Fill state_map with states to get a faster parser */
/* Fill
global_
state_map with states to get a faster parser */
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
i
=
0
;
i
<
256
;
i
++
)
{
{
if
(
isalpha
(
i
))
if
(
isalpha
(
i
))
state_map
[
i
]
=
(
uchar
)
STATE_IDENT
;
global_
state_map
[
i
]
=
(
uchar
)
STATE_IDENT
;
else
if
(
isdigit
(
i
))
else
if
(
isdigit
(
i
))
state_map
[
i
]
=
(
uchar
)
STATE_NUMBER_IDENT
;
global_
state_map
[
i
]
=
(
uchar
)
STATE_NUMBER_IDENT
;
#if defined(USE_MB) && defined(USE_MB_IDENT)
#if defined(USE_MB) && defined(USE_MB_IDENT)
else
if
(
use_mb
(
default_charset_info
)
&&
my_ismbhead
(
default_charset_info
,
i
))
else
if
(
use_mb
(
default_charset_info
)
&&
my_ismbhead
(
default_charset_info
,
i
))
state_map
[
i
]
=
(
uchar
)
STATE_IDENT
;
global_
state_map
[
i
]
=
(
uchar
)
STATE_IDENT
;
#endif
#endif
else
if
(
!
isgraph
(
i
))
else
if
(
!
isgraph
(
i
))
state_map
[
i
]
=
(
uchar
)
STATE_SKIP
;
global_
state_map
[
i
]
=
(
uchar
)
STATE_SKIP
;
else
else
state_map
[
i
]
=
(
uchar
)
STATE_CHAR
;
global_
state_map
[
i
]
=
(
uchar
)
STATE_CHAR
;
}
}
state_map
[(
uchar
)
'_'
]
=
state_map
[(
uchar
)
'$'
]
=
(
uchar
)
STATE_IDENT
;
global_state_map
[(
uchar
)
'_'
]
=
state_map
[(
uchar
)
'\''
]
=
state_map
[(
uchar
)
'"'
]
=
(
uchar
)
STATE_STRING
;
global_state_map
[(
uchar
)
'$'
]
=
(
uchar
)
STATE_IDENT
;
state_map
[(
uchar
)
'-'
]
=
state_map
[(
uchar
)
'+'
]
=
(
uchar
)
STATE_SIGNED_NUMBER
;
global_state_map
[(
uchar
)
'\''
]
=
state_map
[(
uchar
)
'.'
]
=
(
uchar
)
STATE_REAL_OR_POINT
;
global_state_map
[(
uchar
)
'"'
]
=
(
uchar
)
STATE_STRING
;
state_map
[(
uchar
)
'>'
]
=
state_map
[(
uchar
)
'='
]
=
state_map
[(
uchar
)
'!'
]
=
(
uchar
)
STATE_CMP_OP
;
global_state_map
[(
uchar
)
'-'
]
=
state_map
[(
uchar
)
'<'
]
=
(
uchar
)
STATE_LONG_CMP_OP
;
global_state_map
[(
uchar
)
'+'
]
=
(
uchar
)
STATE_SIGNED_NUMBER
;
state_map
[(
uchar
)
'&'
]
=
state_map
[(
uchar
)
'|'
]
=
(
uchar
)
STATE_BOOL
;
global_state_map
[(
uchar
)
'.'
]
=
(
uchar
)
STATE_REAL_OR_POINT
;
state_map
[(
uchar
)
'#'
]
=
(
uchar
)
STATE_COMMENT
;
global_state_map
[(
uchar
)
'>'
]
=
state_map
[(
uchar
)
';'
]
=
(
uchar
)
STATE_COLON
;
global_state_map
[(
uchar
)
'='
]
=
state_map
[(
uchar
)
':'
]
=
(
uchar
)
STATE_SET_VAR
;
global_state_map
[(
uchar
)
'!'
]
=
(
uchar
)
STATE_CMP_OP
;
state_map
[
0
]
=
(
uchar
)
STATE_EOL
;
global_state_map
[(
uchar
)
'<'
]
=
(
uchar
)
STATE_LONG_CMP_OP
;
state_map
[(
uchar
)
'\\'
]
=
(
uchar
)
STATE_ESCAPE
;
global_state_map
[(
uchar
)
'&'
]
=
global_state_map
[(
uchar
)
'|'
]
=
(
uchar
)
STATE_BOOL
;
state_map
[(
uchar
)
'/'
]
=
(
uchar
)
STATE_LONG_COMMENT
;
global_state_map
[(
uchar
)
'#'
]
=
(
uchar
)
STATE_COMMENT
;
state_map
[(
uchar
)
'*'
]
=
(
uchar
)
STATE_END_LONG_COMMENT
;
global_state_map
[(
uchar
)
';'
]
=
(
uchar
)
STATE_COLON
;
state_map
[(
uchar
)
'@'
]
=
(
uchar
)
STATE_USER_END
;
global_state_map
[(
uchar
)
':'
]
=
(
uchar
)
STATE_SET_VAR
;
state_map
[(
uchar
)
'`'
]
=
(
uchar
)
STATE_USER_VARIABLE_DELIMITER
;
global_state_map
[
0
]
=
(
uchar
)
STATE_EOL
;
global_state_map
[(
uchar
)
'\\'
]
=
(
uchar
)
STATE_ESCAPE
;
global_state_map
[(
uchar
)
'/'
]
=
(
uchar
)
STATE_LONG_COMMENT
;
global_state_map
[(
uchar
)
'*'
]
=
(
uchar
)
STATE_END_LONG_COMMENT
;
global_state_map
[(
uchar
)
'@'
]
=
(
uchar
)
STATE_USER_END
;
global_state_map
[(
uchar
)
'`'
]
=
(
uchar
)
STATE_USER_VARIABLE_DELIMITER
;
if
(
thd_startup_options
&
OPTION_ANSI_MODE
)
if
(
thd_startup_options
&
OPTION_ANSI_MODE
)
{
{
state_map
[(
uchar
)
'"'
]
=
STATE_USER_VARIABLE_DELIMITER
;
global_
state_map
[(
uchar
)
'"'
]
=
STATE_USER_VARIABLE_DELIMITER
;
}
}
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -250,7 +257,8 @@ static char *get_text(LEX *lex)
...
@@ -250,7 +257,8 @@ static char *get_text(LEX *lex)
str
=
lex
->
tok_start
+
1
;
str
=
lex
->
tok_start
+
1
;
end
=
lex
->
ptr
-
1
;
end
=
lex
->
ptr
-
1
;
start
=
(
uchar
*
)
sql_alloc
((
uint
)
(
end
-
str
)
+
1
);
if
(
!
(
start
=
(
uchar
*
)
sql_alloc
((
uint
)
(
end
-
str
)
+
1
)))
return
(
char
*
)
""
;
// Sql_alloc has set error flag
if
(
!
found_escape
)
if
(
!
found_escape
)
{
{
lex
->
yytoklen
=
(
uint
)
(
end
-
str
);
lex
->
yytoklen
=
(
uint
)
(
end
-
str
);
...
@@ -417,6 +425,7 @@ int yylex(void *arg)
...
@@ -417,6 +425,7 @@ int yylex(void *arg)
uint
length
;
uint
length
;
enum
lex_states
state
,
prev_state
;
enum
lex_states
state
,
prev_state
;
LEX
*
lex
=
current_lex
;
LEX
*
lex
=
current_lex
;
uchar
*
state_map
=
lex
->
thd
->
state_map
;
YYSTYPE
*
yylval
=
(
YYSTYPE
*
)
arg
;
YYSTYPE
*
yylval
=
(
YYSTYPE
*
)
arg
;
lex
->
yylval
=
yylval
;
// The global state
lex
->
yylval
=
yylval
;
// The global state
...
...
sql/sql_parse.cc
View file @
5f6cbe3d
...
@@ -512,6 +512,10 @@ pthread_handler_decl(handle_one_connection,arg)
...
@@ -512,6 +512,10 @@ pthread_handler_decl(handle_one_connection,arg)
return
0
;
return
0
;
}
}
// copy global state map into thread
for
(
int
x
=
0
;
x
<
256
;
x
++
)
thd
->
state_map
[
x
]
=
global_state_map
[
x
];
do
do
{
{
int
error
;
int
error
;
...
@@ -2778,22 +2782,8 @@ void kill_one_thread(THD *thd, ulong id)
...
@@ -2778,22 +2782,8 @@ void kill_one_thread(THD *thd, ulong id)
if
((
thd
->
master_access
&
PROCESS_ACL
)
||
if
((
thd
->
master_access
&
PROCESS_ACL
)
||
!
strcmp
(
thd
->
user
,
tmp
->
user
))
!
strcmp
(
thd
->
user
,
tmp
->
user
))
{
{
thr_alarm_kill
(
tmp
->
real_id
);
tmp
->
prepare_to_die
();
tmp
->
killed
=
1
;
error
=
0
;
error
=
0
;
if
(
tmp
->
mysys_var
)
{
pthread_mutex_lock
(
&
tmp
->
mysys_var
->
mutex
);
if
(
!
tmp
->
system_thread
)
// Don't abort locks
tmp
->
mysys_var
->
abort
=
1
;
if
(
tmp
->
mysys_var
->
current_mutex
)
{
pthread_mutex_lock
(
tmp
->
mysys_var
->
current_mutex
);
pthread_cond_broadcast
(
tmp
->
mysys_var
->
current_cond
);
pthread_mutex_unlock
(
tmp
->
mysys_var
->
current_mutex
);
}
pthread_mutex_unlock
(
&
tmp
->
mysys_var
->
mutex
);
}
}
}
else
else
error
=
ER_KILL_DENIED_ERROR
;
error
=
ER_KILL_DENIED_ERROR
;
...
...
sql/sql_repl.cc
View file @
5f6cbe3d
...
@@ -572,6 +572,9 @@ int stop_slave(THD* thd, bool net_report )
...
@@ -572,6 +572,9 @@ int stop_slave(THD* thd, bool net_report )
{
{
abort_slave
=
1
;
abort_slave
=
1
;
thr_alarm_kill
(
slave_real_id
);
thr_alarm_kill
(
slave_real_id
);
#ifdef STOP_IO_WITH_FD_CLOSE
slave_thd
->
close_active_fd
();
#endif
// do not abort the slave in the middle of a query, so we do not set
// do not abort the slave in the middle of a query, so we do not set
// thd->killed for the slave thread
// thd->killed for the slave thread
thd
->
proc_info
=
"waiting for slave to die"
;
thd
->
proc_info
=
"waiting for slave to die"
;
...
...
sql/sql_table.cc
View file @
5f6cbe3d
...
@@ -1027,6 +1027,7 @@ int mysql_backup_table(THD* thd, TABLE_LIST* table_list)
...
@@ -1027,6 +1027,7 @@ int mysql_backup_table(THD* thd, TABLE_LIST* table_list)
"backup"
,
TL_READ
,
0
,
0
,
0
,
"backup"
,
TL_READ
,
0
,
0
,
0
,
&
handler
::
backup
));
&
handler
::
backup
));
}
}
int
mysql_restore_table
(
THD
*
thd
,
TABLE_LIST
*
table_list
)
int
mysql_restore_table
(
THD
*
thd
,
TABLE_LIST
*
table_list
)
{
{
DBUG_ENTER
(
"mysql_restore_table"
);
DBUG_ENTER
(
"mysql_restore_table"
);
...
...
sql/sql_yacc.yy
View file @
5f6cbe3d
...
@@ -394,6 +394,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
...
@@ -394,6 +394,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token END
%token END
%token THEN_SYM
%token THEN_SYM
%token SQL_ANSI_MODE
%token SQL_BIG_TABLES
%token SQL_BIG_TABLES
%token SQL_BIG_SELECTS
%token SQL_BIG_SELECTS
%token SQL_SELECT_LIMIT
%token SQL_SELECT_LIMIT
...
@@ -2603,6 +2604,18 @@ option_value:
...
@@ -2603,6 +2604,18 @@ option_value:
else
else
Lex->options|= OPTION_NOT_AUTO_COMMIT;
Lex->options|= OPTION_NOT_AUTO_COMMIT;
}
}
| SQL_ANSI_MODE equal NUM
{
if(atoi($3.str) == 0)
{
Lex->options &= ~(OPTION_ANSI_MODE);
Lex->thd->state_map[(uchar) '"'] = STATE_STRING;
} else {
Lex->options |= OPTION_ANSI_MODE;
Lex->thd->state_map[(uchar) '"'] = STATE_USER_VARIABLE_DELIMITER;
}
}
| SQL_SELECT_LIMIT equal ULONG_NUM
| SQL_SELECT_LIMIT equal ULONG_NUM
{
{
Lex->select_limit= $3;
Lex->select_limit= $3;
...
@@ -2697,16 +2710,20 @@ text_or_password:
...
@@ -2697,16 +2710,20 @@ text_or_password:
}
}
set_option:
set_option:
SQL_BIG_TABLES
{ $$= OPTION_BIG_TABLES; }
SQL_BIG_TABLES
{ $$= OPTION_BIG_TABLES; }
| SQL_BIG_SELECTS { $$= OPTION_BIG_SELECTS; }
| SQL_BIG_SELECTS { $$= OPTION_BIG_SELECTS; }
| SQL_LOG_OFF { $$= OPTION_LOG_OFF; }
| SQL_LOG_OFF { $$= OPTION_LOG_OFF; }
| SQL_LOG_UPDATE
| SQL_LOG_UPDATE
{
{
$$= (opt_sql_bin_update)? OPTION_UPDATE_LOG|OPTION_BIN_LOG: OPTION_UPDATE_LOG ;
$$= (opt_sql_bin_update)?
OPTION_UPDATE_LOG|OPTION_BIN_LOG:
OPTION_UPDATE_LOG ;
}
}
| SQL_LOG_BIN
| SQL_LOG_BIN
{
{
$$= (opt_sql_bin_update)? OPTION_UPDATE_LOG|OPTION_BIN_LOG: OPTION_BIN_LOG ;
$$= (opt_sql_bin_update)?
OPTION_UPDATE_LOG|OPTION_BIN_LOG:
OPTION_BIN_LOG ;
}
}
| SQL_WARNINGS { $$= OPTION_WARNINGS; }
| SQL_WARNINGS { $$= OPTION_WARNINGS; }
| SQL_LOW_PRIORITY_UPDATES { $$= OPTION_LOW_PRIORITY_UPDATES; }
| SQL_LOW_PRIORITY_UPDATES { $$= OPTION_LOW_PRIORITY_UPDATES; }
...
...
tests/fork3_test.pl
View file @
5f6cbe3d
#!/usr/bin/perl -w
#!/usr/bin/perl -w
#
#
# This is a test with uses
3 processes to insert, delete
and select
# This is a test with uses
4 processes to insert, delete , check
and select
#
#
$opt_loop_count
=
1
00000
;
# Change this to make test harder/easier
$opt_loop_count
=
2
00000
;
# Change this to make test harder/easier
##################### Standard benchmark inits ##############################
##################### Standard benchmark inits ##############################
...
@@ -21,8 +21,8 @@ GetOptions("host=s","db=s","loop-count=i","skip-create","skip-in","skip-delete",
...
@@ -21,8 +21,8 @@ GetOptions("host=s","db=s","loop-count=i","skip-create","skip-in","skip-delete",
"
verbose
","
fast-insert
","
lock-tables
","
debug
","
fast
","
force
")
||
die
"
Aborted
";
"
verbose
","
fast-insert
","
lock-tables
","
debug
","
fast
","
force
")
||
die
"
Aborted
";
$opt_verbose
=
$opt_debug
=
$opt_lock_tables
=
$opt_fast_insert
=
$opt_fast
=
$opt_skip_in
=
$opt_force
=
undef
;
# Ignore warnings from these
$opt_verbose
=
$opt_debug
=
$opt_lock_tables
=
$opt_fast_insert
=
$opt_fast
=
$opt_skip_in
=
$opt_force
=
undef
;
# Ignore warnings from these
print
"
Testing
3
multiple connections to a server with 1 insert, 1 delete
\n
";
print
"
Testing
4
multiple connections to a server with 1 insert, 1 delete
\n
";
print
"
and 1 select connections
.
\n
";
print
"
1 select and one repair/check connection
.
\n
";
$firsttable
=
"
bench_f1
";
$firsttable
=
"
bench_f1
";
...
@@ -51,6 +51,7 @@ $|= 1; # Autoflush
...
@@ -51,6 +51,7 @@ $|= 1; # Autoflush
test_insert
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
insert
";
test_insert
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
insert
";
test_delete
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
delete
";
test_delete
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
delete
";
test_select
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
select1
";
test_select
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
select1
";
repair_and_check
()
if
((
$pid
=
fork
())
==
0
);
$work
{
$pid
}
=
"
repair/check
";
$errors
=
0
;
$errors
=
0
;
while
((
$pid
=
wait
())
!=
-
1
)
while
((
$pid
=
wait
())
!=
-
1
)
...
@@ -148,3 +149,40 @@ sub test_select
...
@@ -148,3 +149,40 @@ sub test_select
print
"
Test_select: ok
\n
";
print
"
Test_select: ok
\n
";
exit
(
0
);
exit
(
0
);
}
}
sub
repair_and_check
{
my
(
$dbh
,
$row
,
$found1
,
$last_found1
,
$i
,
$type
,
$table
);
$found1
=
0
;
$last_found1
=
-
1
;
$dbh
=
DBI
->
connect
("
DBI:mysql:
$opt_db
:
$opt_host
",
$opt_user
,
$opt_password
,
{
PrintError
=>
0
})
||
die
$
DBI::
errstr
;
for
(
$i
=
0
;
$found1
!=
$last_found1
;
$i
++
)
{
$type
=
(
$i
&
2
)
?
"
repair
"
:
"
check
";
$table
=
$firsttable
;
$last_found1
=
$found1
;
$sth
=
$dbh
->
prepare
("
$type
table
$table
")
||
die
"
Got error on prepare:
$dbh
->errstr
\n
";
$sth
->
execute
||
die
$dbh
->
errstr
;
while
((
$row
=
$sth
->
fetchrow_arrayref
))
{
if
(
$row
->
[
3
]
ne
"
OK
")
{
print
"
Got error
"
.
$row
->
[
3
]
.
"
when doing
$type
on
$table
\n
";
exit
(
1
);
}
}
$sth
=
$dbh
->
prepare
("
select count(*) from
$table
")
||
die
"
Got error on prepare:
$dbh
->errstr
\n
";
$sth
->
execute
||
die
$dbh
->
errstr
;
@row
=
$sth
->
fetchrow_array
();
$found1
=
$row
[
0
];
$sth
->
finish
;
sleep
(
3
);
}
$dbh
->
disconnect
;
$dbh
=
0
;
print
"
check/repair: Did
$i
repair/checks
\n
";
exit
(
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