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
8a9d6072
Commit
8a9d6072
authored
Aug 10, 2001
by
monty@hundin.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
merge
parents
77daaee3
e7575da7
Changes
42
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
733 additions
and
174 deletions
+733
-174
BUILD/compile-solaris-sparc-purify
BUILD/compile-solaris-sparc-purify
+3
-1
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+16
-1
acinclude.m4
acinclude.m4
+432
-0
include/mysql_com.h
include/mysql_com.h
+5
-3
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/install_test_db.sh
mysql-test/install_test_db.sh
+1
-1
mysql-test/t/distinct.test
mysql-test/t/distinct.test
+9
-0
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+2
-0
sql/mysql_priv.h
sql/mysql_priv.h
+5
-4
sql/mysqld.cc
sql/mysqld.cc
+23
-6
sql/records.cc
sql/records.cc
+2
-2
sql/share/czech/errmsg.txt
sql/share/czech/errmsg.txt
+1
-0
sql/share/danish/errmsg.txt
sql/share/danish/errmsg.txt
+91
-90
sql/share/dutch/errmsg.txt
sql/share/dutch/errmsg.txt
+2
-1
sql/share/english/errmsg.txt
sql/share/english/errmsg.txt
+1
-0
sql/share/estonian/errmsg.txt
sql/share/estonian/errmsg.txt
+1
-0
sql/share/french/errmsg.txt
sql/share/french/errmsg.txt
+1
-0
sql/share/german/errmsg.txt
sql/share/german/errmsg.txt
+1
-0
sql/share/greek/errmsg.txt
sql/share/greek/errmsg.txt
+1
-0
sql/share/hungarian/errmsg.txt
sql/share/hungarian/errmsg.txt
+1
-0
sql/share/italian/errmsg.txt
sql/share/italian/errmsg.txt
+1
-0
sql/share/japanese/errmsg.txt
sql/share/japanese/errmsg.txt
+1
-0
sql/share/korean/errmsg.txt
sql/share/korean/errmsg.txt
+1
-0
sql/share/norwegian-ny/errmsg.txt
sql/share/norwegian-ny/errmsg.txt
+1
-0
sql/share/norwegian/errmsg.txt
sql/share/norwegian/errmsg.txt
+1
-0
sql/share/polish/errmsg.txt
sql/share/polish/errmsg.txt
+1
-0
sql/share/portuguese/errmsg.txt
sql/share/portuguese/errmsg.txt
+1
-0
sql/share/romanian/errmsg.txt
sql/share/romanian/errmsg.txt
+1
-0
sql/share/russian/errmsg.txt
sql/share/russian/errmsg.txt
+1
-0
sql/share/slovak/errmsg.txt
sql/share/slovak/errmsg.txt
+1
-0
sql/share/spanish/errmsg.txt
sql/share/spanish/errmsg.txt
+1
-0
sql/share/swedish/errmsg.txt
sql/share/swedish/errmsg.txt
+1
-0
sql/sql_acl.cc
sql/sql_acl.cc
+72
-31
sql/sql_acl.h
sql/sql_acl.h
+1
-1
sql/sql_base.cc
sql/sql_base.cc
+1
-1
sql/sql_list.h
sql/sql_list.h
+9
-2
sql/sql_parse.cc
sql/sql_parse.cc
+2
-3
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
+8
-3
No files found.
BUILD/compile-solaris-sparc-purify
View file @
8a9d6072
...
...
@@ -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 @
8a9d6072
davida@isil.mysql.com
heikki@donna.mysql.fi
jani@hynda.mysql.fi
jani@janikt.pp.saunalahti.fi
jcole@tetra.spaceapes.com
tim@work.mysql.com
miguel@light.local
monty@bitch.mysql.fi
monty@hundin.mysql.fi
monty@tik.mysql.fi
monty@work.mysql.com
mwagner@evoq.mwagner.org
paul@central.snake.net
paul@teton.kitebird.com
sasha@mysql.sashanet.com
serg@serg.mysql.com
tim@bitch.mysql.fi
tim@threads.polyesthetic.msg
tim@white.box
tim@work.mysql.com
tonu@x153.internalnet
acinclude.m4
View file @
8a9d6072
This diff is collapsed.
Click to expand it.
include/mysql_com.h
View file @
8a9d6072
...
...
@@ -218,17 +218,19 @@ my_bool check_scramble(const char *, const char *message,
unsigned
long
*
salt
,
my_bool
old_ver
);
char
*
get_tty_password
(
char
*
opt_message
);
void
hash_password
(
unsigned
long
*
result
,
const
char
*
password
);
#ifdef __cplusplus
}
#endif
/* Some other useful functions */
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
}
#endif
#define NULL_LENGTH ((unsigned long) ~0)
/* For net_store_length */
#ifdef __WIN__
...
...
include/mysqld_error.h
View file @
8a9d6072
...
...
@@ -211,4 +211,5 @@
#define ER_DROP_DB_WITH_READ_LOCK 1208
#define ER_CREATE_DB_WITH_READ_LOCK 1209
#define ER_WRONG_ARGUMENTS 1210
#define ER_ERROR_MESSAGES 211
#define ER_NO_PERMISSON_TO_CREATE_USER 1211
#define ER_ERROR_MESSAGES 212
innobase/buf/buf0flu.c
View file @
8a9d6072
...
...
@@ -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 @
8a9d6072
...
...
@@ -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/install_test_db.sh
View file @
8a9d6072
...
...
@@ -59,7 +59,7 @@ else
basedir
=
.
rm
-rf
share
mkdir
share
ln
-
sf
../../sql/share share/mysql
ln
-
f
-s
../../sql/share share/mysql
fi
# Initialize variables
...
...
mysql-test/t/distinct.test
View file @
8a9d6072
...
...
@@ -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
;
sql/ha_myisammrg.cc
View file @
8a9d6072
...
...
@@ -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/mysql_priv.h
View file @
8a9d6072
...
...
@@ -258,6 +258,7 @@ void kill_mysql(void);
void
close_connection
(
NET
*
net
,
uint
errcode
=
0
,
bool
lock
=
1
);
bool
check_access
(
THD
*
thd
,
uint
access
,
const
char
*
db
=
0
,
uint
*
save_priv
=
0
,
bool
no_grant
=
0
);
bool
check_table_access
(
THD
*
thd
,
uint
want_access
,
TABLE_LIST
*
tables
);
bool
check_process_priv
(
THD
*
thd
=
0
);
int
generate_table
(
THD
*
thd
,
TABLE_LIST
*
table_list
,
...
...
@@ -534,13 +535,13 @@ extern ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
max_insert_delayed_threads
,
max_user_connections
,
long_query_count
,
net_wait_timeout
,
net_interactive_timeout
,
net_read_timeout
,
net_write_timeout
,
what_to_log
,
flush_time
,
what_to_log
,
flush_time
,
opt_sql_mode
,
max_tmp_tables
,
max_heap_table_size
,
query_buff_size
,
lower_case_table_names
,
thread_stack
,
thread_stack_min
,
binlog_cache_size
,
max_binlog_cache_size
,
opt_sql_mod
e
;
binlog_cache_size
,
max_binlog_cache_size
,
record_rnd_cache_siz
e
;
extern
ulong
specialflag
,
current_pid
;
extern
bool
low_priority_updates
,
using_update_log
;
extern
bool
opt_sql_bin_update
,
opt_safe_show_db
,
opt_
warnings
;
extern
bool
low_priority_updates
,
using_update_log
,
opt_warnings
;
extern
bool
opt_sql_bin_update
,
opt_safe_show_db
,
opt_
safe_user_create
;
extern
char
language
[
LIBLEN
],
reg_ext
[
FN_EXTLEN
],
blob_newline
;
extern
const
char
**
errmesg
;
/* Error messages */
extern
const
char
*
default_tx_isolation_name
;
...
...
sql/mysqld.cc
View file @
8a9d6072
...
...
@@ -213,7 +213,8 @@ static bool opt_log,opt_update_log,opt_bin_log,opt_slow_log,opt_noacl,
opt_disable_networking
=
0
,
opt_bootstrap
=
0
,
opt_skip_show_db
=
0
,
opt_myisam_log
=
0
,
opt_large_files
=
sizeof
(
my_off_t
)
>
4
;
bool
opt_sql_bin_update
=
0
,
opt_log_slave_updates
=
0
,
opt_safe_show_db
=
0
;
bool
opt_sql_bin_update
=
0
,
opt_log_slave_updates
=
0
,
opt_safe_show_db
=
0
,
opt_safe_user_create
=
0
;
FILE
*
bootstrap_file
=
0
;
int
segfaulted
=
0
;
// ensure we do not enter SIGSEGV handler twice
extern
MASTER_INFO
glob_mi
;
...
...
@@ -261,7 +262,7 @@ ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
query_buff_size
,
lower_case_table_names
,
mysqld_net_retry_count
,
net_interactive_timeout
,
slow_launch_time
=
2L
,
net_read_timeout
,
net_write_timeout
,
slave_open_temp_tables
=
0
,
open_files_limit
=
0
,
max_binlog_size
;
open_files_limit
=
0
,
max_binlog_size
,
record_rnd_cache_size
;
ulong
slave_net_timeout
;
ulong
thread_cache_size
=
0
,
binlog_cache_size
=
0
,
max_binlog_cache_size
=
0
;
volatile
ulong
cached_thread_count
=
0
;
...
...
@@ -1488,9 +1489,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
);
}
...
...
@@ -2479,7 +2484,7 @@ enum options {
OPT_GEMINI_UNBUFFERED_IO
,
OPT_SKIP_SAFEMALLOC
,
OPT_SKIP_STACK_TRACE
,
OPT_SKIP_SYMLINKS
,
OPT_MAX_BINLOG_DUMP_EVENTS
,
OPT_SPORADIC_BINLOG_DUMP_FAIL
,
OPT_SQL_MODE
OPT_S
AFE_USER_CREATE
,
OPT_S
QL_MODE
};
static
struct
option
long_options
[]
=
{
...
...
@@ -2591,7 +2596,7 @@ static struct option long_options[] = {
(
int
)
OPT_REPLICATE_REWRITE_DB
},
{
"safe-mode"
,
no_argument
,
0
,
(
int
)
OPT_SAFE
},
{
"safe-show-database"
,
no_argument
,
0
,
(
int
)
OPT_SAFE_SHOW_DB
},
{
"s
ocket"
,
required_argument
,
0
,
(
int
)
OPT_SOCKET
},
{
"s
afe-user-create"
,
no_argument
,
0
,
(
int
)
OPT_SAFE_USER_CREATE
},
{
"server-id"
,
required_argument
,
0
,
(
int
)
OPT_SERVER_ID
},
{
"set-variable"
,
required_argument
,
0
,
'O'
},
{
"skip-bdb"
,
no_argument
,
0
,
(
int
)
OPT_BDB_SKIP
},
...
...
@@ -2611,6 +2616,7 @@ static struct option long_options[] = {
{
"skip-stack-trace"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_STACK_TRACE
},
{
"skip-symlink"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_SYMLINKS
},
{
"skip-thread-priority"
,
no_argument
,
0
,
(
int
)
OPT_SKIP_PRIOR
},
{
"socket"
,
required_argument
,
0
,
(
int
)
OPT_SOCKET
},
{
"sql-bin-update-same"
,
no_argument
,
0
,
(
int
)
OPT_SQL_BIN_UPDATE_SAME
},
{
"sql-mode"
,
required_argument
,
0
,
(
int
)
OPT_SQL_MODE
},
#include "sslopt-longopts.h"
...
...
@@ -2750,6 +2756,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
,
...
...
@@ -2865,6 +2873,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
},
...
...
@@ -3040,6 +3049,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
\
...
...
@@ -3774,6 +3785,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
;
...
...
@@ -3797,6 +3811,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
;
}
...
...
sql/records.cc
View file @
8a9d6072
...
...
@@ -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/share/czech/errmsg.txt
View file @
8a9d6072
...
...
@@ -221,3 +221,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/danish/errmsg.txt
View file @
8a9d6072
This diff is collapsed.
Click to expand it.
sql/share/dutch/errmsg.txt
View file @
8a9d6072
...
...
@@ -215,4 +215,5 @@
"Update locks kunnen niet worden verkregen tijdens een READ UNCOMMITTED transactie",
"DROP DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit",
"CREATE DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit",
"Foutieve parameters voor %s"
"Foutieve parameters voor %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/english/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/estonian/errmsg.txt
View file @
8a9d6072
...
...
@@ -216,3 +216,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/french/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/german/errmsg.txt
View file @
8a9d6072
...
...
@@ -215,3 +215,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/greek/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/hungarian/errmsg.txt
View file @
8a9d6072
...
...
@@ -214,3 +214,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/italian/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/japanese/errmsg.txt
View file @
8a9d6072
...
...
@@ -214,3 +214,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/korean/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/norwegian-ny/errmsg.txt
View file @
8a9d6072
...
...
@@ -214,3 +214,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/norwegian/errmsg.txt
View file @
8a9d6072
...
...
@@ -214,3 +214,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/polish/errmsg.txt
View file @
8a9d6072
...
...
@@ -216,3 +216,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/portuguese/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE não permitido enquanto uma 'thread' está assegurando um travamento global de leitura",
"CREATE DATABASE não permitido enquanto uma 'thread' está assegurando um travamento global de leitura",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/romanian/errmsg.txt
View file @
8a9d6072
...
...
@@ -216,3 +216,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/russian/errmsg.txt
View file @
8a9d6072
...
...
@@ -215,3 +215,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/slovak/errmsg.txt
View file @
8a9d6072
...
...
@@ -220,3 +220,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/spanish/errmsg.txt
View file @
8a9d6072
...
...
@@ -213,3 +213,4 @@
"DROP DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global",
"CREATE DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global",
"Wrong arguments to %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/share/swedish/errmsg.txt
View file @
8a9d6072
...
...
@@ -212,3 +212,4 @@
"DROP DATABASE not allowed while thread is holding global read lock",
"CREATE DATABASE not allowed while thread is holding global read lock",
"Felaktiga argument till %s",
"%-.32s@%-.64s is not allowed to create new users",
sql/sql_acl.cc
View file @
8a9d6072
...
...
@@ -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 @
8a9d6072
...
...
@@ -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_base.cc
View file @
8a9d6072
...
...
@@ -133,7 +133,7 @@ int list_open_tables(THD *thd,List<char> *tables, const char *db,
table_list
.
db
=
(
char
*
)
db
;
table_list
.
real_name
=
entry
->
real_name
;
/*real 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
;
}
/* need to check if he have't already listed it */
...
...
sql/sql_list.h
View file @
8a9d6072
...
...
@@ -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 @
8a9d6072
...
...
@@ -36,7 +36,6 @@ extern "C" int gethostname(char *name, int namelen);
static
int
check_for_max_user_connections
(
const
char
*
user
,
int
u_length
,
const
char
*
host
);
static
void
decrease_user_connections
(
const
char
*
user
,
const
char
*
host
);
static
bool
check_table_access
(
THD
*
thd
,
uint
want_access
,
TABLE_LIST
*
tables
);
static
bool
check_db_used
(
THD
*
thd
,
TABLE_LIST
*
tables
);
static
bool
check_merge_table_access
(
THD
*
thd
,
char
*
db
,
TABLE_LIST
*
tables
);
static
bool
check_dup
(
THD
*
thd
,
const
char
*
db
,
const
char
*
name
,
...
...
@@ -1956,7 +1955,7 @@ mysql_execute_command(void)
else
res
=
mysql_grant
(
thd
,
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
())
...
...
@@ -2116,7 +2115,7 @@ bool check_process_priv(THD *thd)
** in the table list for GRANT checking
*/
static
bool
bool
check_table_access
(
THD
*
thd
,
uint
want_access
,
TABLE_LIST
*
tables
)
{
uint
found
=
0
,
found_access
=
0
;
...
...
sql/sql_select.cc
View file @
8a9d6072
...
...
@@ -1368,24 +1368,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
)
{
...
...
@@ -1394,18 +1397,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 @
8a9d6072
...
...
@@ -220,7 +220,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 @
8a9d6072
...
...
@@ -59,9 +59,9 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists)
VOID
(
pthread_mutex_lock
(
&
LOCK_open
));
pthread_mutex_unlock
(
&
thd
->
mysys_var
->
mutex
);
if
(
global_read_lock
)
if
(
global_read_lock
)
{
if
(
thd
->
global_read_lock
)
if
(
thd
->
global_read_lock
)
{
my_error
(
ER_TABLE_NOT_LOCKED_FOR_WRITE
,
MYF
(
0
),
tables
->
real_name
);
...
...
@@ -1126,7 +1126,12 @@ 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
);
#ifdef FN_LOWER_CASE
if
(
!
my_strcasecmp
(
new_name_buff
,
table_name
))
// Check if name changed
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
(
new_name_buff
,
table_name
))
// Check if name changed
#endif
...
...
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