Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
72671338
Commit
72671338
authored
Aug 11, 2001
by
sasha@mysql.sashanet.com
Browse files
Options
Browse Files
Download
Plain Diff
merged
parents
89ac8682
5b7da426
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
682 additions
and
112 deletions
+682
-112
.bzrignore
.bzrignore
+4
-0
BUILD/compile-solaris-sparc
BUILD/compile-solaris-sparc
+13
-6
BUILD/compile-solaris-sparc-purify
BUILD/compile-solaris-sparc-purify
+3
-1
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+2
-0
acinclude.m4
acinclude.m4
+432
-0
bdb/include/rpc_client_ext.h
bdb/include/rpc_client_ext.h
+0
-19
client/mysqlbinlog.cc
client/mysqlbinlog.cc
+5
-1
include/mysql_com.h
include/mysql_com.h
+2
-0
include/mysqld_error.h
include/mysqld_error.h
+2
-1
innobase/buf/buf0flu.c
innobase/buf/buf0flu.c
+1
-0
innobase/include/univ.i
innobase/include/univ.i
+1
-3
mysql-test/r/distinct.result
mysql-test/r/distinct.result
+6
-0
mysql-test/r/fulltext_update.result
mysql-test/r/fulltext_update.result
+2
-0
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+1
-1
mysql-test/t/distinct.test
mysql-test/t/distinct.test
+9
-0
mysql-test/t/fulltext_update.test
mysql-test/t/fulltext_update.test
+25
-0
scripts/mysqldumpslow.sh
scripts/mysqldumpslow.sh
+3
-2
sql-bench/Makefile.am
sql-bench/Makefile.am
+13
-12
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+2
-0
sql/mysqld.cc
sql/mysqld.cc
+38
-6
sql/records.cc
sql/records.cc
+2
-2
sql/sql_acl.cc
sql/sql_acl.cc
+72
-31
sql/sql_acl.h
sql/sql_acl.h
+1
-1
sql/sql_list.h
sql/sql_list.h
+9
-2
sql/sql_parse.cc
sql/sql_parse.cc
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+25
-19
sql/sql_show.cc
sql/sql_show.cc
+1
-1
sql/sql_table.cc
sql/sql_table.cc
+7
-3
No files found.
.bzrignore
View file @
72671338
...
...
@@ -8,6 +8,8 @@
*.lo
*.o
*.spec
*/*_pure_*warnings
*/.pure
*~
.*.swp
.deps
...
...
@@ -121,6 +123,7 @@ bdb/include/gen_server_ext.h
bdb/include/hash_auto.h
bdb/include/log_auto.h
bdb/include/qam_auto.h
bdb/include/rpc_client_ext.h
bdb/include/rpc_server_ext.h
bdb/include/txn_auto.h
bdb/java/src/com/sleepycat/db/DbConstants.java
...
...
@@ -175,6 +178,7 @@ heap/hp_test2
include/my_config.h
include/my_global.h
include/mysql_version.h
include/widec.h
innobase/ib_config.h
innobase/ib_config.h.in
isam/isamchk
...
...
BUILD/compile-solaris-sparc
View file @
72671338
#! /bin/sh
path
=
`
dirname
$0
`
.
"
$path
/SETUP.sh"
gmake
-k
clean
||
true
/bin/rm
-f
*
/.deps/
*
.P config.cache
aclocal
&&
autoheader
&&
aclocal
&&
automake
&&
autoconf
(
cd
bdb/dist
&&
sh s_all
)
(
cd
innobase
&&
aclocal
&&
autoheader
&&
aclocal
&&
automake
&&
autoconf
)
if
[
-d
gemini
]
then
(
cd
gemini
&&
aclocal
&&
autoheader
&&
aclocal
&&
automake
&&
autoconf
)
fi
CFLAGS
=
"-g -Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa"
CXX
=
gcc
CXXFLAGS
=
"-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa -g"
./configure
--prefix
=
/usr/local/mysql
--enable-assembler
--with-extra-charsets
=
complex
--enable-thread-safe-client
extra_flags
=
"
$sparc_cflags
$fast_cflags
"
extra_configs
=
"
$sparc_configs
"
.
"
$path
/FINISH.sh"
gmake
-j
4
BUILD/compile-solaris-sparc-purify
View file @
72671338
...
...
@@ -6,6 +6,8 @@ aclocal && autoheader && aclocal && automake && autoconf
(
cd
bdb/dist
&&
sh s_all
)
(
cd
innobase
&&
aclocal
&&
autoheader
&&
aclocal
&&
automake
&&
autoconf
)
CFLAGS
=
"-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -
O2"
CXX
=
gcc
CXXFLAGS
=
"-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_PURIFY -O2"
./configure
--prefix
=
/usr/local/mysql
--enable-assembler
--with-extra-charsets
=
complex
--enable-thread-safe-client
--with-debug
=
full
CFLAGS
=
"-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -
DEXTRA_DEBUG -O2"
CXX
=
gcc
CXXLD
=
g++
CXXFLAGS
=
"-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_purify -DEXTRA_DEBUG -O2"
./configure
--prefix
=
/usr/local/mysql
--enable-assembler
--with-extra-charsets
=
complex
--enable-thread-safe-client
--with-debug
=
full
--with-berkeley-db
--with-innodb
gmake
-j
4
cd
sql
;
rm
mysqld
;
make
CXXLD
=
"purify -best-effort g++"
mysqld
BitKeeper/etc/logging_ok
View file @
72671338
...
...
@@ -7,6 +7,7 @@ jcole@abel.spaceapes.com
jcole@main.burghcom.com
jcole@tetra.spaceapes.com
miguel@light.local
monty@bitch.mysql.fi
monty@donna.mysql.fi
monty@hundin.mysql.fi
monty@tik.mysql.fi
...
...
@@ -17,6 +18,7 @@ paul@teton.kitebird.com
root@x3.internalnet
sasha@mysql.sashanet.com
serg@serg.mysql.com
tim@bitch.mysql.fi
tim@black.box
tim@hundin.mysql.fi
tim@threads.polyesthetic.msg
...
...
acinclude.m4
View file @
72671338
This diff is collapsed.
Click to expand it.
bdb/include/rpc_client_ext.h
deleted
100644 → 0
View file @
89ac8682
/* DO NOT EDIT: automatically built by dist/s_include. */
#ifndef _rpc_client_ext_h_
#define _rpc_client_ext_h_
#if defined(__cplusplus)
extern
"C"
{
#endif
int
__dbcl_envserver
__P
((
DB_ENV
*
,
char
*
,
long
,
long
,
u_int32_t
));
int
__dbcl_refresh
__P
((
DB_ENV
*
));
int
__dbcl_txn_close
__P
((
DB_ENV
*
));
void
__dbcl_txn_end
__P
((
DB_TXN
*
));
int
__dbcl_c_destroy
__P
((
DBC
*
));
void
__dbcl_c_refresh
__P
((
DBC
*
));
int
__dbcl_c_setup
__P
((
long
,
DB
*
,
DBC
**
));
int
__dbcl_retcopy
__P
((
DB_ENV
*
,
DBT
*
,
void
*
,
u_int32_t
));
int
__dbcl_dbclose_common
__P
((
DB
*
));
#if defined(__cplusplus)
}
#endif
#endif
/* _rpc_client_ext_h_ */
client/mysqlbinlog.cc
View file @
72671338
...
...
@@ -137,7 +137,7 @@ the mysql command line client\n\n");
-o, --offset=N Skip the first N entries
\n
\
-h, --host=server Get the binlog from server
\n
\
-P, --port=port Use port to connect to the remote server
\n
\
-u, --user=username Connect to the remo
v
e server as username
\n
\
-u, --user=username Connect to the remo
t
e server as username
\n
\
-p, --password=password Password to connect to remote server
\n
\
-r, --result-file=file Direct output to a given file
\n
\
-j, --position=N Start reading the binlog at position N
\n
\
...
...
@@ -467,4 +467,8 @@ int main(int argc, char** argv)
the server
*/
#ifdef __WIN__
#include "log_event.cpp"
#else
#include "log_event.cc"
#endif
include/mysql_com.h
View file @
72671338
...
...
@@ -226,6 +226,8 @@ void hash_password(unsigned long *result, const char *password);
void
my_init
(
void
);
void
load_defaults
(
const
char
*
conf_file
,
const
char
**
groups
,
int
*
argc
,
char
***
argv
);
my_bool
my_thread_init
(
void
);
void
my_thread_end
(
void
);
#ifdef __cplusplus
}
...
...
include/mysqld_error.h
View file @
72671338
...
...
@@ -216,4 +216,5 @@
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1213
#define ER_WRONG_USAGE 1214
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1215
#define ER_ERROR_MESSAGES 216
#define ER_NO_PERSMISSION_TO_CREATE_USER 1216
#define ER_ERROR_MESSAGES 217
innobase/buf/buf0flu.c
View file @
72671338
...
...
@@ -10,6 +10,7 @@ Created 11/11/1995 Heikki Tuuri
#ifdef UNIV_NONINL
#include "buf0flu.ic"
#include "trx0sys.h"
#endif
#include "ut0byte.h"
...
...
innobase/include/univ.i
View file @
72671338
...
...
@@ -9,12 +9,10 @@ Created 1/20/1994 Heikki Tuuri
#
ifndef
univ_i
#
define
univ_i
#
if
(
defined
(
_WIN32
)
||
defined
(
_WIN64
))
#
if
(
defined
(
_WIN32
)
||
defined
(
_WIN64
))
&
&
!defined(MYSQL_SERVER)
#
define
__WIN__
#
ifndef
MYSQL_SERVER
#
include
<
windows
.
h
>
#
endif
/* If you want to check for errors with compiler level -W4,
comment out the above include of windows.h and let the following defines
...
...
mysql-test/r/distinct.result
View file @
72671338
...
...
@@ -167,3 +167,9 @@ a sec_to_time(sum(time_to_sec(t)))
a sec_to_time(sum(time_to_sec(t)))
1 00:06:15
1 00:36:30
a
4
3
a c
4 NULL
3 NULL
mysql-test/r/fulltext_update.result
0 → 100644
View file @
72671338
Table Op Msg_type Msg_text
test.test check status OK
mysql-test/r/innodb.result
View file @
72671338
...
...
@@ -438,7 +438,7 @@ hello 1
Table Op Msg_type Msg_text
test.t1 optimize error The handler for the table doesn't support check/repair
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
t1 0 PRIMARY 1 a A
1
NULL NULL
t1 0 PRIMARY 1 a A
2
NULL NULL
i j
1 2
i j
...
...
mysql-test/t/distinct.test
View file @
72671338
...
...
@@ -198,3 +198,12 @@ insert into t2 values (1,1),(2,2),(3,3);
select
t1
.
a
,
sec_to_time
(
sum
(
time_to_sec
(
t
)))
from
t1
left
join
t2
on
(
t1
.
b
=
t2
.
a
)
group
by
t1
.
a
,
t2
.
b
;
select
distinct
t1
.
a
,
sec_to_time
(
sum
(
time_to_sec
(
t
)))
from
t1
left
join
t2
on
(
t1
.
b
=
t2
.
a
)
group
by
t1
.
a
,
t2
.
b
;
drop
table
t1
,
t2
;
#
# Test problem with DISTINCT and HAVING
#
create
table
t1
(
a
int
not
null
,
b
char
(
5
),
c
text
);
insert
into
t1
(
a
)
values
(
1
),(
2
),(
3
),(
4
),(
1
),(
2
),(
3
),(
4
);
select
distinct
a
from
t1
group
by
b
,
a
having
a
>
2
order
by
a
desc
;
select
distinct
a
,
c
from
t1
group
by
b
,
c
,
a
having
a
>
2
order
by
a
desc
;
drop
table
t1
;
mysql-test/t/fulltext_update.test
0 → 100644
View file @
72671338
#
# Test for bug by voi@ims.at
#
drop
table
if
exists
test
;
CREATE
TABLE
test
(
gnr
INT
(
10
)
UNSIGNED
NOT
NULL
AUTO_INCREMENT
,
url
VARCHAR
(
80
)
DEFAULT
''
NOT
NULL
,
shortdesc
VARCHAR
(
200
)
DEFAULT
''
NOT
NULL
,
longdesc
text
DEFAULT
''
NOT
NULL
,
description
VARCHAR
(
80
)
DEFAULT
''
NOT
NULL
,
name
VARCHAR
(
80
)
DEFAULT
''
NOT
NULL
,
FULLTEXT
(
url
,
description
,
shortdesc
,
longdesc
),
PRIMARY
KEY
(
gnr
)
);
insert
into
test
(
url
,
shortdesc
,
longdesc
,
description
,
name
)
VALUES
(
"http:/test.at"
,
"kurz"
,
"lang"
,
"desc"
,
"name"
);
insert
into
test
(
url
,
shortdesc
,
longdesc
,
description
,
name
)
VALUES
(
"http:/test.at"
,
"kurz"
,
""
,
"desc"
,
"name"
);
update
test
set
url
=
'test'
,
description
=
'ddd'
,
name
=
'nam'
where
gnr
=
2
;
update
test
set
url
=
'test'
,
shortdesc
=
'ggg'
,
longdesc
=
'mmm'
,
description
=
'ddd'
,
name
=
'nam'
where
gnr
=
2
;
check
table
test
;
drop
table
test
;
scripts/mysqldumpslow.sh
View file @
72671338
...
...
@@ -3,6 +3,7 @@
# Original version by Tim Bunce, sometime in 2000.
# Further changes by Tim Bunce, 8th March 2001.
# Handling of strings with \ and double '' by Monty 11 Aug 2001.
use strict
;
use Getopt::Long
;
...
...
@@ -95,8 +96,8 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) {
unless
(
$opt
{
a
})
{
s/
\b\d
+
\b
/N/g
;
s/
\b
0x[0-9A-Fa-f]+
\b
/N/g
;
s/
'
.*?
'
/
'S'
/g
;
s/
"
.*?
"
/
"S"
/g
;
s/
'
([^\\\'
]
|
\\
.|
\'\'
)
+
'/'
S
'/g;
s/"
([^\\\"]|\\.|\"\")+
"/"S"/g;
# -n=8: turn log_20001231 into log_NNNNNNNN
s/([a-z_]+)(\d{$opt{n},})/$1.('
N
' x length($2))/ieg if $opt{n};
# abbreviate massive "in (...)" statements and similar
...
...
sql-bench/Makefile.am
View file @
72671338
...
...
@@ -37,12 +37,12 @@ dist-hook:
mkdir
-p
$(distdir)
/Data/ATIS
$(distdir)
/Data/Wisconsin
\
$(distdir)
/Results
$(distdir)
/Results-win32
\
$(distdir)
/limits
$(distdir)
/Comments
$(INSTALL_DATA)
$(srcdir)
/Data/ATIS/
*
.
*
$(distdir)
/Data/ATIS
$(INSTALL_DATA)
$(srcdir)
/Data/Wisconsin/
*
.
*
$(distdir)
/Data/Wisconsin
$(INSTALL_DATA)
$(srcdir)
/Results/
*
-
*
$(distdir)
/Results
$(INSTALL_DATA)
$(srcdir)
/Results-win32/
*
-
*
$(distdir)
/Results-win32
$(INSTALL_DATA)
$(srcdir)
/limits/
*
.
*
$(distdir)
/limits
$(INSTALL_DATA)
$(srcdir)
/Comments/
*
.
*
$(distdir)
/Comments
for
i
in
$(srcdir)
/Data/ATIS/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/Data/ATIS
;
done
for
i
in
$(srcdir)
/Data/Wisconsin/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/Data/Wisconsin
;
done
for
i
in
$(srcdir)
/Results/
*
-
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/Results
;
done
for
i
in
$(srcdir)
/Results-win32/
*
-
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/Results-win32
;
done
for
i
in
$(srcdir)
/limits/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/limits
;
done
for
i
in
$(srcdir)
/Comments/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(distdir)
/Comments
;
done
install-data-local
:
$(mkinstalldirs)
\
...
...
@@ -54,12 +54,13 @@ install-data-local:
$(DESTDIR)$(benchdir)
/limits
\
$(DESTDIR)$(benchdir)
/Comments
$(INSTALL_DATA)
$(srcdir)
/README
$(DESTDIR)$(benchdir)
$(INSTALL_DATA)
$(srcdir)
/Data/ATIS/
*
.
*
$(DESTDIR)$(benchdir)
/Data/ATIS
$(INSTALL_DATA)
$(srcdir)
/Data/Wisconsin/
*
.
*
$(DESTDIR)$(benchdir)
/Data/Wisconsin
$(INSTALL_DATA)
$(srcdir)
/Results/
*
-
*
$(DESTDIR)$(benchdir)
/Results
$(INSTALL_DATA)
$(srcdir)
/Results-win32/
*
-
*
$(DESTDIR)$(benchdir)
/Results-win32
$(INSTALL_DATA)
$(srcdir)
/limits/
*
.
*
$(DESTDIR)$(benchdir)
/limits
$(INSTALL_DATA)
$(srcdir)
/Comments/
*
.
*
$(DESTDIR)$(benchdir)
/Comments
for
i
in
$(srcdir)
/Data/ATIS/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/Data/ATIS
;
done
for
i
in
$(srcdir)
/Data/Wisconsin/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/Data/Wisconsin
;
done
for
i
in
$(srcdir)
/Results/
*
-
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/Results
;
done
for
i
in
$(srcdir)
/Results-win32/
*
-
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/Results-win32
;
done
for
i
in
$(srcdir)
/limits/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/limits
;
done
for
i
in
$(srcdir)
/Comments/
*
.
*
;
do
$(INSTALL_DATA)
$$
i
$(DESTDIR)$(benchdir)
/Comments
;
done
SUFFIXES
=
.sh
...
...
sql/ha_myisammrg.cc
View file @
72671338
...
...
@@ -229,6 +229,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info)
MYRG_TABLE
*
table
;
THD
*
thd
=
current_thd
;
create_info
->
merge_list
.
next
=
&
create_info
->
merge_list
.
first
;
create_info
->
merge_list
.
elements
=
0
;
for
(
table
=
file
->
open_tables
;
table
!=
file
->
end_table
;
table
++
)
{
...
...
@@ -240,6 +241,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info)
fn_format
(
buff
,
name
,
""
,
""
,
3
);
if
(
!
(
ptr
->
real_name
=
thd
->
strdup
(
buff
)))
goto
err
;
create_info
->
merge_list
.
elements
++
;
(
*
create_info
->
merge_list
.
next
)
=
(
byte
*
)
ptr
;
create_info
->
merge_list
.
next
=
(
byte
**
)
&
ptr
->
next
;
}
...
...
sql/mysqld.cc
View file @
72671338
...
...
@@ -1532,9 +1532,13 @@ static void open_log(MYSQL_LOG *log, const char *hostname,
// get rid of extention if the log is binary to avoid problems
if
(
type
==
LOG_BIN
)
{
char
*
p
=
strrchr
((
char
*
)
opt_name
,
FN_EXTCHAR
);
char
*
p
=
fn_ext
(
opt_name
);
if
(
p
)
*
p
=
0
;
{
uint
length
=
(
uint
)
(
p
-
opt_name
);
strmake
(
tmp
,
opt_name
,
min
(
length
,
FN_REFLEN
));
opt_name
=
tmp
;
}
}
log
->
open
(
opt_name
,
type
);
}
...
...
@@ -2818,6 +2822,8 @@ CHANGEABLE_VAR changeable_vars[] = {
0
,
MALLOC_OVERHEAD
,
(
long
)
~
0
,
MALLOC_OVERHEAD
,
IO_SIZE
},
{
"record_buffer"
,
(
long
*
)
&
my_default_record_cache_size
,
128
*
1024L
,
IO_SIZE
*
2
+
MALLOC_OVERHEAD
,
~
0L
,
MALLOC_OVERHEAD
,
IO_SIZE
},
{
"record_rnd_buffer"
,
(
long
*
)
&
record_rnd_cache_size
,
0
,
IO_SIZE
*
2
+
MALLOC_OVERHEAD
,
~
0L
,
MALLOC_OVERHEAD
,
IO_SIZE
},
{
"slave_net_timeout"
,
(
long
*
)
&
slave_net_timeout
,
SLAVE_NET_TIMEOUT
,
1
,
65535
,
0
,
1
},
{
"slow_launch_time"
,
(
long
*
)
&
slow_launch_time
,
...
...
@@ -2907,6 +2913,7 @@ struct show_var_st init_vars[]= {
{
"log_update"
,
(
char
*
)
&
opt_update_log
,
SHOW_BOOL
},
{
"log_bin"
,
(
char
*
)
&
opt_bin_log
,
SHOW_BOOL
},
{
"log_slave_updates"
,
(
char
*
)
&
opt_log_slave_updates
,
SHOW_BOOL
},
{
"log_long_queries"
,
(
char
*
)
&
opt_slow_log
,
SHOW_BOOL
},
{
"long_query_time"
,
(
char
*
)
&
long_query_time
,
SHOW_LONG
},
{
"low_priority_updates"
,
(
char
*
)
&
low_priority_updates
,
SHOW_BOOL
},
{
"lower_case_table_names"
,
(
char
*
)
&
lower_case_table_names
,
SHOW_LONG
},
...
...
@@ -2937,6 +2944,7 @@ struct show_var_st init_vars[]= {
{
"port"
,
(
char
*
)
&
mysql_port
,
SHOW_INT
},
{
"protocol_version"
,
(
char
*
)
&
protocol_version
,
SHOW_INT
},
{
"record_buffer"
,
(
char
*
)
&
my_default_record_cache_size
,
SHOW_LONG
},
{
"record_rnd_buffer"
,
(
char
*
)
&
record_rnd_cache_size
,
SHOW_LONG
},
{
"query_buffer_size"
,
(
char
*
)
&
query_buff_size
,
SHOW_LONG
},
{
"safe_show_database"
,
(
char
*
)
&
opt_safe_show_db
,
SHOW_BOOL
},
{
"server_id"
,
(
char
*
)
&
server_id
,
SHOW_LONG
},
...
...
@@ -2947,7 +2955,7 @@ struct show_var_st init_vars[]= {
{
"slow_launch_time"
,
(
char
*
)
&
slow_launch_time
,
SHOW_LONG
},
{
"socket"
,
(
char
*
)
&
mysql_unix_port
,
SHOW_CHAR_PTR
},
{
"sort_buffer"
,
(
char
*
)
&
sortbuff_size
,
SHOW_LONG
},
{
"sql_mode"
,
(
char
*
)
&
sql_mode_str
,
SHOW_CHAR_PTR
},
{
"sql_mode"
,
(
char
*
)
&
opt_sql_mode
,
SHOW_LONG
},
{
"table_cache"
,
(
char
*
)
&
table_cache_size
,
SHOW_LONG
},
{
"table_type"
,
(
char
*
)
&
default_table_type_name
,
SHOW_CHAR_PTR
},
{
"thread_cache_size"
,
(
char
*
)
&
thread_cache_size
,
SHOW_LONG
},
...
...
@@ -3109,6 +3117,8 @@ static void usage(void)
--safe-mode Skip some optimize stages (for testing)
\n
\
--safe-show-database Don't show databases for which the user has no
\n
\
privileges
\n
\
--safe-user-create Don't new users cretaion without privileges to the
\n
\
mysql.user table
\n
\
--skip-concurrent-insert
\n
\
Don't use concurrent insert with MyISAM
\n
\
--skip-delay-key-write
\n
\
...
...
@@ -3817,6 +3827,20 @@ static void get_options(int argc,char **argv)
ha_open_options
|=
HA_OPEN_ABORT_IF_CRASHED
;
break
;
}
case
OPT_SQL_MODE
:
{
sql_mode_str
=
optarg
;
if
((
opt_sql_mode
=
find_bit_type
(
optarg
,
&
sql_mode_typelib
))
==
~
(
ulong
)
0
)
{
fprintf
(
stderr
,
"Unknown option to sql-mode: %s
\n
"
,
optarg
);
exit
(
1
);
}
default_tx_isolation
=
((
opt_sql_mode
&
MODE_SERIALIZABLE
)
?
ISO_SERIALIZABLE
:
ISO_READ_COMMITTED
);
break
;
}
case
OPT_MASTER_HOST
:
master_host
=
optarg
;
break
;
...
...
@@ -3850,6 +3874,9 @@ static void get_options(int argc,char **argv)
case
OPT_SAFE_SHOW_DB
:
opt_safe_show_db
=
1
;
break
;
case
OPT_SAFE_USER_CREATE
:
opt_safe_user_create
=
1
;
break
;
case
OPT_SKIP_SAFEMALLOC
:
#ifdef SAFEMALLOC
sf_malloc_quick
=
1
;
...
...
@@ -3874,6 +3901,9 @@ static void get_options(int argc,char **argv)
fix_paths
();
default_table_type_name
=
ha_table_typelib
.
type_names
[
default_table_type
-
1
];
default_tx_isolation_name
=
tx_isolation_typelib
.
type_names
[
default_tx_isolation
];
/* To be deleted in MySQL 4.0 */
if
(
!
record_rnd_cache_size
)
record_rnd_cache_size
=
my_default_record_cache_size
;
}
...
...
@@ -4149,7 +4179,7 @@ static int get_service_parameters()
}
else
if
(
lstrcmp
(
szKeyValueName
,
TEXT
(
"KeyBufferSize"
))
==
0
)
{
SET_CHANGEABLE_VARVAL
(
"key_buffer
_size
"
);
SET_CHANGEABLE_VARVAL
(
"key_buffer"
);
}
else
if
(
lstrcmp
(
szKeyValueName
,
TEXT
(
"LongQueryTime"
))
==
0
)
{
...
...
@@ -4463,7 +4493,9 @@ static ulong find_bit_type(const char *x, TYPELIB *bit_lib)
found
=
0
;
found_end
=
0
;
pos
=
(
my_string
)
x
;
do
while
(
*
pos
==
' '
)
pos
++
;
found_end
=
*
pos
==
0
;
while
(
!
found_end
)
{
if
(
!*
(
end
=
strcend
(
pos
,
','
)))
/* Let end point at fieldend */
{
...
...
@@ -4496,7 +4528,7 @@ skipp: ;
DBUG_RETURN
(
~
(
ulong
)
0
);
// No unique value
found
|=
found_int
;
pos
=
end
+
1
;
}
while
(
!
found_end
);
}
DBUG_PRINT
(
"exit"
,(
"bit-field: %ld"
,(
ulong
)
found
));
DBUG_RETURN
(
found
);
...
...
sql/records.cc
View file @
72671338
...
...
@@ -66,7 +66,7 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
table
->
file
->
rnd_init
(
0
);
if
(
!
(
specialflag
&
SPECIAL_SAFE_MODE
)
&&
my_default_recor
d_cache_size
&&
record_rn
d_cache_size
&&
!
table
->
file
->
fast_key_read
()
&&
(
table
->
db_stat
&
HA_READ_ONLY
||
table
->
reginfo
.
lock_type
<=
TL_READ_NO_INSERT
)
&&
...
...
@@ -216,7 +216,7 @@ static int init_rr_cache(READ_RECORD *info)
info
->
reclength
=
ALIGN_SIZE
(
info
->
struct_length
);
info
->
error_offset
=
info
->
table
->
reclength
;
info
->
cache_records
=
my_default_recor
d_cache_size
/
info
->
cache_records
=
record_rn
d_cache_size
/
(
info
->
reclength
+
info
->
struct_length
);
rec_cache_size
=
info
->
cache_records
*
info
->
reclength
;
info
->
rec_cache_size
=
info
->
cache_records
*
info
->
ref_length
;
...
...
sql/sql_acl.cc
View file @
72671338
...
...
@@ -943,16 +943,41 @@ end:
DBUG_RETURN
(
error
);
}
/* Return 1 if we are allowed to create new users */
static
bool
test_if_create_new_users
(
THD
*
thd
)
{
bool
create_new_users
=
1
;
// Assume that we are allowed to create new users
if
(
opt_safe_user_create
&&
!
(
thd
->
master_access
&
INSERT_ACL
))
{
TABLE_LIST
tl
;
uint
db_access
;
bzero
((
char
*
)
&
tl
,
sizeof
(
tl
));
tl
.
db
=
(
char
*
)
"mysql"
;
tl
.
real_name
=
(
char
*
)
"user"
;
db_access
=
acl_get
(
thd
->
host
,
thd
->
ip
,
(
char
*
)
&
thd
->
remote
.
sin_addr
,
thd
->
priv_user
,
tl
.
db
);
if
(
!
(
db_access
&
INSERT_ACL
))
{
if
(
check_grant
(
thd
,
INSERT_ACL
,
&
tl
,
0
,
1
))
create_new_users
=
0
;
}
}
return
create_new_users
;
}
/****************************************************************************
** Handle GRANT commands
****************************************************************************/
static
int
replace_user_table
(
TABLE
*
table
,
const
LEX_USER
&
combo
,
uint
rights
,
char
what
)
uint
rights
,
char
what
,
bool
create_user
)
{
int
error
=
-
1
;
uint
i
,
j
;
bool
ima
=
0
;
bool
old_row_exists
=
0
;
char
*
password
,
empty_string
[
1
];
DBUG_ENTER
(
"replace_user_table"
);
...
...
@@ -971,14 +996,21 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
(
byte
*
)
table
->
field
[
0
]
->
ptr
,
0
,
HA_READ_KEY_EXACT
))
{
if
(
what
==
'N'
)
if
(
!
create_user
)
{
my_printf_error
(
ER_NONEXISTING_GRANT
,
ER
(
ER_NONEXISTING_GRANT
),
MYF
(
0
),
combo
.
user
.
str
,
combo
.
host
.
str
);
THD
*
thd
=
current_thd
;
if
(
what
==
'N'
)
my_printf_error
(
ER_NONEXISTING_GRANT
,
ER
(
ER_NONEXISTING_GRANT
),
MYF
(
0
),
combo
.
user
.
str
,
combo
.
host
.
str
);
else
my_printf_error
(
ER_NO_PERMISSON_TO_CREATE_USER
,
ER
(
ER_NO_PERMISSON_TO_CREATE_USER
),
MYF
(
0
),
thd
->
user
,
thd
->
host
?
thd
->
host
:
thd
->
ip
?
thd
->
ip
:
""
);
error
=
-
1
;
goto
end
;
}
ima
=
0
;
// no row; ima on Serbian means 'there is something'
old_row_exists
=
0
;
restore_record
(
table
,
2
);
// cp empty row from record[2]
table
->
field
[
0
]
->
store
(
combo
.
host
.
str
,
combo
.
host
.
length
);
table
->
field
[
1
]
->
store
(
combo
.
user
.
str
,
combo
.
user
.
length
);
...
...
@@ -986,7 +1018,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
}
else
{
ima
=
1
;
old_row_exists
=
1
;
store_record
(
table
,
1
);
// Save copy for update
if
(
combo
.
password
.
str
)
// If password given
table
->
field
[
2
]
->
store
(
password
,(
uint
)
strlen
(
password
));
...
...
@@ -1001,7 +1033,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
}
rights
=
get_access
(
table
,
3
);
if
(
ima
)
// there is a row, therefore go to update, instead of insert
if
(
old_row_exists
)
{
/*
We should NEVER delete from the user table, as a uses can still
...
...
@@ -1033,7 +1065,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
acl_cache
->
clear
(
1
);
// Clear privilege cache
if
(
!
combo
.
password
.
str
)
password
=
0
;
// No password given on command
if
(
ima
)
if
(
old_row_exists
)
acl_update_user
(
combo
.
user
.
str
,
combo
.
host
.
str
,
password
,
rights
);
else
acl_insert_user
(
combo
.
user
.
str
,
combo
.
host
.
str
,
password
,
rights
);
...
...
@@ -1052,7 +1084,7 @@ static int replace_db_table(TABLE *table, const char *db,
uint
rights
,
char
what
)
{
uint
i
,
j
,
store_rights
;
bool
ima
=
0
;
bool
old_row_exists
=
0
;
int
error
;
DBUG_ENTER
(
"replace_db_table"
);
...
...
@@ -1076,7 +1108,7 @@ static int replace_db_table(TABLE *table, const char *db,
combo
.
user
.
str
,
combo
.
host
.
str
);
goto
abort
;
}
ima
=
0
;
// no row
old_row_exists
=
0
;
restore_record
(
table
,
2
);
// cp empty row from record[2]
table
->
field
[
0
]
->
store
(
combo
.
host
.
str
,
combo
.
host
.
length
);
table
->
field
[
1
]
->
store
(
db
,(
uint
)
strlen
(
db
));
...
...
@@ -1084,7 +1116,7 @@ static int replace_db_table(TABLE *table, const char *db,
}
else
{
ima
=
1
;
old_row_exists
=
1
;
store_record
(
table
,
1
);
}
...
...
@@ -1097,8 +1129,9 @@ static int replace_db_table(TABLE *table, const char *db,
rights
=
get_access
(
table
,
3
);
rights
=
fix_rights_for_db
(
rights
);
if
(
ima
)
// there is a row, therefore go update, else insert
if
(
old_row_exists
)
{
// update old existing row
if
(
rights
)
{
if
((
error
=
table
->
file
->
update_row
(
table
->
record
[
1
],
table
->
record
[
0
])))
...
...
@@ -1117,7 +1150,7 @@ static int replace_db_table(TABLE *table, const char *db,
}
acl_cache
->
clear
(
1
);
// Clear privilege cache
if
(
ima
)
if
(
old_row_exists
)
acl_update_db
(
combo
.
user
.
str
,
combo
.
host
.
str
,
db
,
rights
);
else
acl_insert_db
(
combo
.
user
.
str
,
combo
.
host
.
str
,
db
,
rights
);
...
...
@@ -1324,7 +1357,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
while
((
xx
=
iter
++
))
{
uint
privileges
=
xx
->
rights
;
bool
ima
=
0
;
bool
old_row_exists
=
0
;
key_restore
(
table
,
key
,
0
,
key_length
);
table
->
field
[
4
]
->
store
(
xx
->
column
.
ptr
(),
xx
->
column
.
length
());
...
...
@@ -1339,7 +1372,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
result
=
-
1
;
/* purecov: inspected */
continue
;
/* purecov: inspected */
}
ima
=
0
;
old_row_exists
=
0
;
restore_record
(
table
,
2
);
// Get empty record
key_restore
(
table
,
key
,
0
,
key_length
);
table
->
field
[
4
]
->
store
(
xx
->
column
.
ptr
(),
xx
->
column
.
length
());
...
...
@@ -1353,13 +1386,13 @@ static int replace_column_table(GRANT_TABLE *g_t,
privileges
=
tmp
&
~
(
privileges
|
rights
);
else
privileges
|=
tmp
;
ima
=
1
;
old_row_exists
=
1
;
store_record
(
table
,
1
);
// copy original row
}
table
->
field
[
6
]
->
store
((
longlong
)
get_rights_for_column
(
privileges
));
if
(
ima
)
// there is a row, therefore go update, else insert
if
(
old_row_exists
)
{
if
(
privileges
)
error
=
table
->
file
->
update_row
(
table
->
record
[
1
],
table
->
record
[
0
]);
...
...
@@ -1465,7 +1498,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
uint
rights
,
uint
kolone
,
bool
revoke_grant
)
{
char
grantor
[
HOSTNAME_LENGTH
+
1
+
USERNAME_LENGTH
];
int
ima
=
1
;
int
old_row_exists
=
1
;
int
error
=
0
;
uint
store_table_rights
,
store_col_rights
;
DBUG_ENTER
(
"replace_table_table"
);
...
...
@@ -1505,13 +1538,13 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
table_name
);
/* purecov: deadcode */
DBUG_RETURN
(
-
1
);
/* purecov: deadcode */
}
ima
=
0
;
// no row
old_row_exists
=
0
;
restore_record
(
table
,
1
);
// Get saved record
}
store_table_rights
=
get_rights_for_table
(
rights
);
store_col_rights
=
get_rights_for_column
(
kolone
);
if
(
ima
)
if
(
old_row_exists
)
{
uint
j
,
k
;
store_record
(
table
,
1
);
...
...
@@ -1536,7 +1569,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
rights
=
fix_rights_for_table
(
store_table_rights
);
kolone
=
fix_rights_for_column
(
store_col_rights
);
if
(
ima
)
// there is a row, therefore go update, else insert
if
(
old_row_exists
)
{
if
(
store_table_rights
||
store_col_rights
)
{
...
...
@@ -1668,10 +1701,12 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
continue
;
}
/* Create user if needed */
if
(
(
replace_user_table
(
tables
[
0
].
table
,
if
(
replace_user_table
(
tables
[
0
].
table
,
*
Str
,
0
,
revoke_grant
?
'N'
:
'Y'
)))
revoke_grant
?
'N'
:
'Y'
,
(
revoke_grant
?
0
:
test_if_create_new_users
(
thd
))))
{
result
=
-
1
;
// Remember error
continue
;
// Add next user
...
...
@@ -1773,6 +1808,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
List_iterator
<
LEX_USER
>
str_list
(
list
);
LEX_USER
*
Str
;
char
what
;
bool
create_new_users
=
0
;
TABLE_LIST
tables
[
2
];
DBUG_ENTER
(
"mysql_grant"
);
...
...
@@ -1799,8 +1835,10 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
DBUG_RETURN
(
-
1
);
/* purecov: deadcode */
}
// go through users in user_list
if
(
!
revoke_grant
)
create_new_users
=
test_if_create_new_users
(
thd
);
// go through users in user_list
pthread_mutex_lock
(
&
LOCK_grant
);
VOID
(
pthread_mutex_lock
(
&
acl_cache
->
lock
));
grant_version
++
;
...
...
@@ -1822,11 +1860,14 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
}
if
((
replace_user_table
(
tables
[
0
].
table
,
*
Str
,
(
!
db
?
rights
:
0
),
what
)))
result
=
-
1
;
if
(
db
&&
replace_db_table
(
tables
[
1
].
table
,
db
,
*
Str
,
rights
&
DB_ACLS
,
what
))
(
!
db
?
rights
:
0
),
what
,
create_new_users
)))
result
=
-
1
;
else
{
if
(
db
&&
replace_db_table
(
tables
[
1
].
table
,
db
,
*
Str
,
rights
&
DB_ACLS
,
what
))
result
=
-
1
;
}
}
VOID
(
pthread_mutex_unlock
(
&
acl_cache
->
lock
));
pthread_mutex_unlock
(
&
LOCK_grant
);
...
...
@@ -1978,7 +2019,7 @@ void grant_reload(void)
****************************************************************************/
bool
check_grant
(
THD
*
thd
,
uint
want_access
,
TABLE_LIST
*
tables
,
uint
show_table
)
uint
show_table
,
bool
no_errors
)
{
TABLE_LIST
*
table
;
char
*
user
=
thd
->
priv_user
;
...
...
@@ -2026,7 +2067,7 @@ bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
err:
pthread_mutex_unlock
(
&
LOCK_grant
);
if
(
show_table
!=
1
)
// Not a silent skip of table
if
(
!
no_errors
)
// Not a silent skip of table
{
const
char
*
command
=
""
;
if
(
want_access
&
SELECT_ACL
)
...
...
sql/sql_acl.h
View file @
72671338
...
...
@@ -74,7 +74,7 @@ int grant_init(void);
void
grant_free
(
void
);
void
grant_reload
(
void
);
bool
check_grant
(
THD
*
thd
,
uint
want_access
,
TABLE_LIST
*
tables
,
uint
show_command
=
0
);
uint
show_command
=
0
,
bool
dont_print_error
=
0
);
bool
check_grant_column
(
THD
*
thd
,
TABLE
*
table
,
const
char
*
name
,
uint
length
,
uint
show_command
=
0
);
bool
check_grant_all_columns
(
THD
*
thd
,
uint
want_access
,
TABLE
*
table
);
...
...
sql/sql_list.h
View file @
72671338
...
...
@@ -27,8 +27,15 @@ class Sql_alloc
public:
static
void
*
operator
new
(
size_t
size
)
{
return
(
void
*
)
sql_alloc
((
uint
)
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{}
/*lint -e715 */
inline
Sql_alloc
()
{};
inline
~
Sql_alloc
()
{};
#ifdef HAVE_purify
bool
dummy
;
inline
Sql_alloc
()
:
dummy
(
0
)
{}
inline
~
Sql_alloc
()
{}
#else
inline
Sql_alloc
()
{}
inline
~
Sql_alloc
()
{}
#endif
};
/*
...
...
sql/sql_parse.cc
View file @
72671338
...
...
@@ -2116,7 +2116,7 @@ mysql_execute_command(void)
else
res
=
mysql_grant
(
thd
,
select_lex
->
db
,
lex
->
users_list
,
lex
->
grant
,
lex
->
sql_command
==
SQLCOM_REVOKE
);
if
(
!
res
)
if
(
!
res
)
{
mysql_update_log
.
write
(
thd
,
thd
->
query
,
thd
->
query_length
);
if
(
mysql_bin_log
.
is_open
())
...
...
sql/sql_select.cc
View file @
72671338
...
...
@@ -1413,24 +1413,27 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
if
(
cond
->
type
()
==
Item
::
FUNC_ITEM
)
{
Item_func
*
func
=
(
Item_func
*
)
cond
,
*
arg0
=
(
Item_func
*
)(
func
->
arguments
()[
0
]),
*
arg1
=
(
Item_func
*
)(
func
->
arguments
()[
1
]);
if
(
func
->
functype
()
==
Item_func
::
FT_FUNC
)
Item_func
*
func
=
(
Item_func
*
)
cond
;
Item_func
::
Functype
functype
=
func
->
functype
();
if
(
functype
==
Item_func
::
FT_FUNC
)
cond_func
=
(
Item_func_match
*
)
cond
;
else
if
((
func
->
functype
()
==
Item_func
::
GE_FUNC
||
func
->
functype
()
==
Item_func
::
GT_FUNC
)
&&
arg0
->
type
()
==
Item
::
FUNC_ITEM
&&
arg0
->
functype
()
==
Item_func
::
FT_FUNC
&&
arg1
->
const_item
()
&&
arg1
->
val
()
>=
0
)
cond_func
=
(
Item_func_match
*
)
arg0
;
else
if
((
func
->
functype
()
==
Item_func
::
LE_FUNC
||
func
->
functype
()
==
Item_func
::
LT_FUNC
)
&&
arg1
->
type
()
==
Item
::
FUNC_ITEM
&&
arg1
->
functype
()
==
Item_func
::
FT_FUNC
&&
arg0
->
const_item
()
&&
arg0
->
val
()
>=
0
)
cond_func
=
(
Item_func_match
*
)
arg1
;
else
if
(
func
->
arg_count
==
2
)
{
Item_func
*
arg0
=
(
Item_func
*
)(
func
->
arguments
()[
0
]),
*
arg1
=
(
Item_func
*
)(
func
->
arguments
()[
1
]);
if
((
functype
==
Item_func
::
GE_FUNC
||
functype
==
Item_func
::
GT_FUNC
)
&&
arg0
->
type
()
==
Item
::
FUNC_ITEM
&&
arg0
->
functype
()
==
Item_func
::
FT_FUNC
&&
arg1
->
const_item
()
&&
arg1
->
val
()
>=
0
)
cond_func
=
(
Item_func_match
*
)
arg0
;
else
if
((
functype
==
Item_func
::
LE_FUNC
||
functype
==
Item_func
::
LT_FUNC
)
&&
arg1
->
type
()
==
Item
::
FUNC_ITEM
&&
arg1
->
functype
()
==
Item_func
::
FT_FUNC
&&
arg0
->
const_item
()
&&
arg0
->
val
()
>=
0
)
cond_func
=
(
Item_func_match
*
)
arg1
;
}
}
else
if
(
cond
->
type
()
==
Item
::
COND_ITEM
)
{
...
...
@@ -1439,18 +1442,21 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
if
(((
Item_cond
*
)
cond
)
->
functype
()
==
Item_func
::
COND_AND_FUNC
)
{
Item
*
item
;
/* I'm too lazy to implement proper recursive descent here,
/*
I', (Sergei) too lazy to implement proper recursive descent here,
and anyway, nobody will use such a stupid queries
that will require it :-)
May be later...
*/
*/
while
((
item
=
li
++
))
{
if
(
item
->
type
()
==
Item
::
FUNC_ITEM
&&
((
Item_func
*
)
item
)
->
functype
()
==
Item_func
::
FT_FUNC
)
{
cond_func
=
(
Item_func_match
*
)
item
;
break
;
}
}
}
}
...
...
sql/sql_show.cc
View file @
72671338
...
...
@@ -217,7 +217,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path,
table_list
.
db
=
(
char
*
)
db
;
table_list
.
real_name
=
file
->
name
;
table_list
.
grant
.
privilege
=
col_access
;
if
(
check_grant
(
thd
,
TABLE_ACLS
,
&
table_list
,
1
))
if
(
check_grant
(
thd
,
TABLE_ACLS
,
&
table_list
,
1
,
1
))
continue
;
}
if
(
files
->
push_back
(
thd
->
strdup
(
file
->
name
)))
...
...
sql/sql_table.cc
View file @
72671338
...
...
@@ -1128,11 +1128,15 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
{
strmov
(
new_name_buff
,
new_name
);
fn_same
(
new_name_buff
,
table_name
,
3
);
// Check if name changed
#ifdef FN_LOWER_CASE
if
(
!
strcmp
(
db
,
new_db
)
&&
!
my_strcasecmp
(
new_name_buff
,
table_name
))
if
(
lower_case_table_names
)
casedn_str
(
new_name
);
if
((
lower_case_table_names
&&
!
my_strcasecmp
(
new_name_buff
,
table_name
))
||
(
!
lower_case_table_names
&&
!
strcmp
(
new_name_buff
,
table_name
)))
#else
if
(
!
strcmp
(
db
,
new_db
)
&&
!
strcmp
(
new_name_buff
,
table_name
))
if
(
!
strcmp
(
new_name_buff
,
table_name
))
// Check if name changed
#endif
new_name
=
table_name
;
// No. Make later check easier
else
...
...
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