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
1e60c591
Commit
1e60c591
authored
Oct 22, 2004
by
serg@serg.mylan
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-4.1/
into serg.mylan:/usr/home/serg/Abk/mysql-4.1
parents
123ce649
a3089812
Changes
31
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
274 additions
and
78 deletions
+274
-78
client/mysql.cc
client/mysql.cc
+3
-2
client/mysqltest.c
client/mysqltest.c
+6
-5
heap/hp_hash.c
heap/hp_hash.c
+2
-2
innobase/dict/dict0load.c
innobase/dict/dict0load.c
+13
-13
innobase/include/mem0mem.h
innobase/include/mem0mem.h
+2
-4
innobase/os/os0file.c
innobase/os/os0file.c
+4
-4
innobase/row/row0ins.c
innobase/row/row0ins.c
+17
-0
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+2
-2
libmysql/client_settings.h
libmysql/client_settings.h
+1
-1
myisam/ft_nlq_search.c
myisam/ft_nlq_search.c
+2
-0
myisam/rt_index.c
myisam/rt_index.c
+5
-1
myisam/rt_mbr.c
myisam/rt_mbr.c
+1
-0
mysql-test/r/ps.result
mysql-test/r/ps.result
+14
-0
mysql-test/r/timezone2.result
mysql-test/r/timezone2.result
+20
-0
mysql-test/t/ps.test
mysql-test/t/ps.test
+18
-0
mysql-test/t/timezone2.test
mysql-test/t/timezone2.test
+28
-0
mysys/hash.c
mysys/hash.c
+1
-0
mysys/my_handler.c
mysys/my_handler.c
+10
-0
mysys/my_thr_init.c
mysys/my_thr_init.c
+5
-0
regex/main.c
regex/main.c
+4
-4
sql/item.h
sql/item.h
+2
-1
sql/item_func.h
sql/item_func.h
+2
-0
sql/spatial.h
sql/spatial.h
+9
-0
sql/sql_lex.h
sql/sql_lex.h
+1
-0
sql/sql_list.h
sql/sql_list.h
+2
-0
sql/sql_parse.cc
sql/sql_parse.cc
+62
-36
sql/sql_prepare.cc
sql/sql_prepare.cc
+0
-1
sql/sql_string.h
sql/sql_string.h
+3
-1
sql/tztime.cc
sql/tztime.cc
+4
-0
sql/tztime.h
sql/tztime.h
+29
-0
strings/ctype-mb.c
strings/ctype-mb.c
+2
-1
No files found.
client/mysql.cc
View file @
1e60c591
...
@@ -1971,7 +1971,7 @@ print_field_types(MYSQL_RES *result)
...
@@ -1971,7 +1971,7 @@ print_field_types(MYSQL_RES *result)
MYSQL_FIELD
*
field
;
MYSQL_FIELD
*
field
;
while
((
field
=
mysql_fetch_field
(
result
)))
while
((
field
=
mysql_fetch_field
(
result
)))
{
{
tee_fprintf
(
PAGER
,
"Catalog: '%s'
\n
Database: '%s'
\n
Table: '%s'
\n
Name: '%s'
\n
Type: %d
\n
Length: %
d
\n
Max length: %d
\n
Is_null: %d
\n
Flags: %d
\n
Decimals: %d
\n\n
"
,
tee_fprintf
(
PAGER
,
"Catalog: '%s'
\n
Database: '%s'
\n
Table: '%s'
\n
Name: '%s'
\n
Type: %d
\n
Length: %
ld
\n
Max length: %ld
\n
Is_null: %d
\n
Flags: %u
\n
Decimals: %u
\n\n
"
,
field
->
catalog
,
field
->
db
,
field
->
table
,
field
->
name
,
field
->
catalog
,
field
->
db
,
field
->
table
,
field
->
name
,
(
int
)
field
->
type
,
(
int
)
field
->
type
,
field
->
length
,
field
->
max_length
,
field
->
length
,
field
->
max_length
,
...
@@ -2017,7 +2017,8 @@ print_table_data(MYSQL_RES *result)
...
@@ -2017,7 +2017,8 @@ print_table_data(MYSQL_RES *result)
(
void
)
tee_fputs
(
"|"
,
PAGER
);
(
void
)
tee_fputs
(
"|"
,
PAGER
);
for
(
uint
off
=
0
;
(
field
=
mysql_fetch_field
(
result
))
;
off
++
)
for
(
uint
off
=
0
;
(
field
=
mysql_fetch_field
(
result
))
;
off
++
)
{
{
tee_fprintf
(
PAGER
,
" %-*s|"
,
min
(
field
->
max_length
,
MAX_COLUMN_LENGTH
),
tee_fprintf
(
PAGER
,
" %-*s|"
,(
int
)
min
(
field
->
max_length
,
MAX_COLUMN_LENGTH
),
field
->
name
);
field
->
name
);
num_flag
[
off
]
=
IS_NUM
(
field
->
type
);
num_flag
[
off
]
=
IS_NUM
(
field
->
type
);
}
}
...
...
client/mysqltest.c
View file @
1e60c591
...
@@ -362,8 +362,7 @@ DYNAMIC_STRING ds_res;
...
@@ -362,8 +362,7 @@ DYNAMIC_STRING ds_res;
static
void
die
(
const
char
*
fmt
,
...);
static
void
die
(
const
char
*
fmt
,
...);
static
void
init_var_hash
();
static
void
init_var_hash
();
static
VAR
*
var_from_env
(
const
char
*
,
const
char
*
);
static
VAR
*
var_from_env
(
const
char
*
,
const
char
*
);
static
byte
*
get_var_key
(
const
byte
*
rec
,
uint
*
len
,
static
byte
*
get_var_key
(
const
byte
*
rec
,
uint
*
len
,
my_bool
t
);
my_bool
__attribute__
((
unused
))
t
);
static
VAR
*
var_init
(
VAR
*
v
,
const
char
*
name
,
int
name_len
,
const
char
*
val
,
static
VAR
*
var_init
(
VAR
*
v
,
const
char
*
name
,
int
name_len
,
const
char
*
val
,
int
val_len
);
int
val_len
);
...
@@ -1807,6 +1806,10 @@ int read_line(char* buf, int size)
...
@@ -1807,6 +1806,10 @@ int read_line(char* buf, int size)
continue
;
continue
;
}
}
/* Line counting is independent of state */
if
(
c
==
'\n'
)
(
*
lineno
)
++
;
switch
(
state
)
{
switch
(
state
)
{
case
R_NORMAL
:
case
R_NORMAL
:
/* Only accept '{' in the beginning of a line */
/* Only accept '{' in the beginning of a line */
...
@@ -1822,14 +1825,12 @@ int read_line(char* buf, int size)
...
@@ -1822,14 +1825,12 @@ int read_line(char* buf, int size)
else
if
(
c
==
'\n'
)
else
if
(
c
==
'\n'
)
{
{
state
=
R_LINE_START
;
state
=
R_LINE_START
;
(
*
lineno
)
++
;
}
}
break
;
break
;
case
R_COMMENT
:
case
R_COMMENT
:
if
(
c
==
'\n'
)
if
(
c
==
'\n'
)
{
{
*
p
=
0
;
*
p
=
0
;
(
*
lineno
)
++
;
DBUG_RETURN
(
0
);
DBUG_RETURN
(
0
);
}
}
break
;
break
;
...
@@ -1841,7 +1842,7 @@ int read_line(char* buf, int size)
...
@@ -1841,7 +1842,7 @@ int read_line(char* buf, int size)
else
if
(
my_isspace
(
charset_info
,
c
))
else
if
(
my_isspace
(
charset_info
,
c
))
{
{
if
(
c
==
'\n'
)
if
(
c
==
'\n'
)
start_lineno
=
++
*
lineno
;
/* Query hasn't started yet */
start_lineno
=
*
lineno
;
/* Query hasn't started yet */
no_save
=
1
;
no_save
=
1
;
}
}
else
if
(
c
==
'}'
)
else
if
(
c
==
'}'
)
...
...
heap/hp_hash.c
View file @
1e60c591
...
@@ -585,7 +585,7 @@ uint hp_rb_make_key(HP_KEYDEF *keydef, byte *key,
...
@@ -585,7 +585,7 @@ uint hp_rb_make_key(HP_KEYDEF *keydef, byte *key,
char_length
/
seg
->
charset
->
mbmaxlen
);
char_length
/
seg
->
charset
->
mbmaxlen
);
set_if_smaller
(
char_length
,
seg
->
length
);
/* QQ: ok to remove? */
set_if_smaller
(
char_length
,
seg
->
length
);
/* QQ: ok to remove? */
if
(
char_length
<
seg
->
length
)
if
(
char_length
<
seg
->
length
)
seg
->
charset
->
cset
->
fill
(
seg
->
charset
,
key
+
char_length
,
seg
->
charset
->
cset
->
fill
(
seg
->
charset
,
(
char
*
)
key
+
char_length
,
seg
->
length
-
char_length
,
' '
);
seg
->
length
-
char_length
,
' '
);
}
}
memcpy
(
key
,
rec
+
seg
->
start
,
(
size_t
)
char_length
);
memcpy
(
key
,
rec
+
seg
->
start
,
(
size_t
)
char_length
);
...
@@ -634,7 +634,7 @@ uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
...
@@ -634,7 +634,7 @@ uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
char_length
/
seg
->
charset
->
mbmaxlen
);
char_length
/
seg
->
charset
->
mbmaxlen
);
set_if_smaller
(
char_length
,
seg
->
length
);
/* QQ: ok to remove? */
set_if_smaller
(
char_length
,
seg
->
length
);
/* QQ: ok to remove? */
if
(
char_length
<
seg
->
length
)
if
(
char_length
<
seg
->
length
)
seg
->
charset
->
cset
->
fill
(
seg
->
charset
,
key
+
char_length
,
seg
->
charset
->
cset
->
fill
(
seg
->
charset
,
(
char
*
)
key
+
char_length
,
seg
->
length
-
char_length
,
' '
);
seg
->
length
-
char_length
,
' '
);
}
}
memcpy
(
key
,
old
,
(
size_t
)
char_length
);
memcpy
(
key
,
old
,
(
size_t
)
char_length
);
...
...
innobase/dict/dict0load.c
View file @
1e60c591
...
@@ -92,7 +92,7 @@ loop:
...
@@ -92,7 +92,7 @@ loop:
/* We found one */
/* We found one */
char
*
table_name
=
mem_strdupl
(
field
,
len
);
char
*
table_name
=
mem_strdupl
((
char
*
)
field
,
len
);
btr_pcur_close
(
&
pcur
);
btr_pcur_close
(
&
pcur
);
mtr_commit
(
&
mtr
);
mtr_commit
(
&
mtr
);
...
@@ -154,7 +154,7 @@ loop:
...
@@ -154,7 +154,7 @@ loop:
/* We found one */
/* We found one */
char
*
table_name
=
mem_strdupl
(
field
,
len
);
char
*
table_name
=
mem_strdupl
((
char
*
)
field
,
len
);
btr_pcur_store_position
(
&
pcur
,
&
mtr
);
btr_pcur_store_position
(
&
pcur
,
&
mtr
);
...
@@ -246,7 +246,7 @@ loop:
...
@@ -246,7 +246,7 @@ loop:
/* We found one */
/* We found one */
char
*
name
=
mem_strdupl
(
field
,
len
);
char
*
name
=
mem_strdupl
((
char
*
)
field
,
len
);
field
=
rec_get_nth_field
(
rec
,
9
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
9
,
&
len
);
ut_a
(
len
==
4
);
ut_a
(
len
==
4
);
...
@@ -347,7 +347,7 @@ dict_load_columns(
...
@@ -347,7 +347,7 @@ dict_load_columns(
dict_table_get_first_index
(
sys_columns
),
4
))
->
name
));
dict_table_get_first_index
(
sys_columns
),
4
))
->
name
));
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
name
=
mem_heap_strdupl
(
heap
,
field
,
len
);
name
=
mem_heap_strdupl
(
heap
,
(
char
*
)
field
,
len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
mtype
=
mach_read_from_4
(
field
);
mtype
=
mach_read_from_4
(
field
);
...
@@ -494,7 +494,7 @@ dict_load_fields(
...
@@ -494,7 +494,7 @@ dict_load_fields(
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
dict_mem_index_add_field
(
index
,
dict_mem_index_add_field
(
index
,
mem_heap_strdupl
(
heap
,
field
,
len
),
0
,
prefix_len
);
mem_heap_strdupl
(
heap
,
(
char
*
)
field
,
len
),
0
,
prefix_len
);
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
}
}
...
@@ -597,7 +597,7 @@ dict_load_indexes(
...
@@ -597,7 +597,7 @@ dict_load_indexes(
dict_table_get_first_index
(
sys_indexes
),
4
))
->
name
));
dict_table_get_first_index
(
sys_indexes
),
4
))
->
name
));
field
=
rec_get_nth_field
(
rec
,
4
,
&
name_len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
name_len
);
name_buf
=
mem_heap_strdupl
(
heap
,
field
,
name_len
);
name_buf
=
mem_heap_strdupl
(
heap
,
(
char
*
)
field
,
name_len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
n_fields
=
mach_read_from_4
(
field
);
n_fields
=
mach_read_from_4
(
field
);
...
@@ -805,7 +805,7 @@ dict_load_table(
...
@@ -805,7 +805,7 @@ dict_load_table(
table->mix_id = mach_read_from_8(field);
table->mix_id = mach_read_from_8(field);
field = rec_get_nth_field(rec, 8, &len);
field = rec_get_nth_field(rec, 8, &len);
table->cluster_name = mem_heap_strdupl(heap, field, len);
table->cluster_name = mem_heap_strdupl(heap,
(char*)
field, len);
#endif
#endif
}
}
...
@@ -938,7 +938,7 @@ dict_load_table_on_id(
...
@@ -938,7 +938,7 @@ dict_load_table_on_id(
/* Now we get the table name from the record */
/* Now we get the table name from the record */
field
=
rec_get_nth_field
(
rec
,
1
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
1
,
&
len
);
/* Load the table definition to memory */
/* Load the table definition to memory */
table
=
dict_load_table
(
mem_heap_strdupl
(
heap
,
field
,
len
));
table
=
dict_load_table
(
mem_heap_strdupl
(
heap
,
(
char
*
)
field
,
len
));
btr_pcur_close
(
&
pcur
);
btr_pcur_close
(
&
pcur
);
mtr_commit
(
&
mtr
);
mtr_commit
(
&
mtr
);
...
@@ -1030,11 +1030,11 @@ dict_load_foreign_cols(
...
@@ -1030,11 +1030,11 @@ dict_load_foreign_cols(
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
foreign
->
foreign_col_names
[
i
]
=
foreign
->
foreign_col_names
[
i
]
=
mem_heap_strdupl
(
foreign
->
heap
,
field
,
len
);
mem_heap_strdupl
(
foreign
->
heap
,
(
char
*
)
field
,
len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
5
,
&
len
);
foreign
->
referenced_col_names
[
i
]
=
foreign
->
referenced_col_names
[
i
]
=
mem_heap_strdupl
(
foreign
->
heap
,
field
,
len
);
mem_heap_strdupl
(
foreign
->
heap
,
(
char
*
)
field
,
len
);
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
btr_pcur_move_to_next_user_rec
(
&
pcur
,
&
mtr
);
}
}
...
@@ -1138,11 +1138,11 @@ dict_load_foreign(
...
@@ -1138,11 +1138,11 @@ dict_load_foreign(
field
=
rec_get_nth_field
(
rec
,
3
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
3
,
&
len
);
foreign
->
foreign_table_name
=
foreign
->
foreign_table_name
=
mem_heap_strdupl
(
foreign
->
heap
,
field
,
len
);
mem_heap_strdupl
(
foreign
->
heap
,
(
char
*
)
field
,
len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
4
,
&
len
);
foreign
->
referenced_table_name
=
foreign
->
referenced_table_name
=
mem_heap_strdupl
(
foreign
->
heap
,
field
,
len
);
mem_heap_strdupl
(
foreign
->
heap
,
(
char
*
)
field
,
len
);
btr_pcur_close
(
&
pcur
);
btr_pcur_close
(
&
pcur
);
mtr_commit
(
&
mtr
);
mtr_commit
(
&
mtr
);
...
@@ -1256,7 +1256,7 @@ loop:
...
@@ -1256,7 +1256,7 @@ loop:
/* Now we get a foreign key constraint id */
/* Now we get a foreign key constraint id */
field
=
rec_get_nth_field
(
rec
,
1
,
&
len
);
field
=
rec_get_nth_field
(
rec
,
1
,
&
len
);
id
=
mem_heap_strdupl
(
heap
,
field
,
len
);
id
=
mem_heap_strdupl
(
heap
,
(
char
*
)
field
,
len
);
btr_pcur_store_position
(
&
pcur
,
&
mtr
);
btr_pcur_store_position
(
&
pcur
,
&
mtr
);
...
...
innobase/include/mem0mem.h
View file @
1e60c591
...
@@ -136,10 +136,8 @@ void
...
@@ -136,10 +136,8 @@ void
mem_heap_free_func
(
mem_heap_free_func
(
/*===============*/
/*===============*/
mem_heap_t
*
heap
,
/* in, own: heap to be freed */
mem_heap_t
*
heap
,
/* in, own: heap to be freed */
const
char
*
file_name
__attribute__
((
unused
)),
const
char
*
file_name
,
/* in: file name where freed */
/* in: file name where freed */
ulint
line
);
/* in: line where freed */
ulint
line
__attribute__
((
unused
)));
/* in: line where freed */
/*******************************************************************
/*******************************************************************
Allocates n bytes of memory from a memory heap. */
Allocates n bytes of memory from a memory heap. */
UNIV_INLINE
UNIV_INLINE
...
...
innobase/os/os0file.c
View file @
1e60c591
...
@@ -1807,7 +1807,7 @@ os_file_pread(
...
@@ -1807,7 +1807,7 @@ os_file_pread(
os_file_n_pending_preads
++
;
os_file_n_pending_preads
++
;
os_mutex_exit
(
os_file_count_mutex
);
os_mutex_exit
(
os_file_count_mutex
);
n_bytes
=
pread
(
file
,
buf
,
n
,
offs
);
n_bytes
=
pread
(
file
,
buf
,
(
ssize_t
)
n
,
offs
);
os_mutex_enter
(
os_file_count_mutex
);
os_mutex_enter
(
os_file_count_mutex
);
os_file_n_pending_preads
--
;
os_file_n_pending_preads
--
;
...
@@ -1832,7 +1832,7 @@ os_file_pread(
...
@@ -1832,7 +1832,7 @@ os_file_pread(
return
(
ret
);
return
(
ret
);
}
}
ret
=
read
(
file
,
buf
,
n
);
ret
=
read
(
file
,
buf
,
(
ssize_t
)
n
);
os_mutex_exit
(
os_file_seek_mutexes
[
i
]);
os_mutex_exit
(
os_file_seek_mutexes
[
i
]);
...
@@ -1882,7 +1882,7 @@ os_file_pwrite(
...
@@ -1882,7 +1882,7 @@ os_file_pwrite(
os_file_n_pending_pwrites
++
;
os_file_n_pending_pwrites
++
;
os_mutex_exit
(
os_file_count_mutex
);
os_mutex_exit
(
os_file_count_mutex
);
ret
=
pwrite
(
file
,
buf
,
n
,
offs
);
ret
=
pwrite
(
file
,
buf
,
(
ssize_t
)
n
,
offs
);
os_mutex_enter
(
os_file_count_mutex
);
os_mutex_enter
(
os_file_count_mutex
);
os_file_n_pending_pwrites
--
;
os_file_n_pending_pwrites
--
;
...
@@ -1917,7 +1917,7 @@ os_file_pwrite(
...
@@ -1917,7 +1917,7 @@ os_file_pwrite(
return
(
ret
);
return
(
ret
);
}
}
ret
=
write
(
file
,
buf
,
n
);
ret
=
write
(
file
,
buf
,
(
ssize_t
)
n
);
if
(
srv_unix_file_flush_method
!=
SRV_UNIX_LITTLESYNC
if
(
srv_unix_file_flush_method
!=
SRV_UNIX_LITTLESYNC
&&
srv_unix_file_flush_method
!=
SRV_UNIX_NOSYNC
&&
srv_unix_file_flush_method
!=
SRV_UNIX_NOSYNC
...
...
innobase/row/row0ins.c
View file @
1e60c591
...
@@ -980,6 +980,23 @@ row_ins_foreign_check_on_constraint(
...
@@ -980,6 +980,23 @@ row_ins_foreign_check_on_constraint(
err
=
row_update_cascade_for_mysql
(
thr
,
cascade
,
err
=
row_update_cascade_for_mysql
(
thr
,
cascade
,
foreign
->
foreign_table
);
foreign
->
foreign_table
);
if
(
foreign
->
foreign_table
->
n_foreign_key_checks_running
==
0
)
{
fprintf
(
stderr
,
"InnoDB: error: table %s has the counter 0 though there is
\n
"
"InnoDB: a FOREIGN KEY check running on it.
\n
"
,
foreign
->
foreign_table
->
name
);
}
/* Release the data dictionary latch for a while, so that we do not
starve other threads from doing CREATE TABLE etc. if we have a huge
cascaded operation running. The counter n_foreign_key_checks_running
will prevent other users from dropping or ALTERing the table when we
release the latch. */
row_mysql_unfreeze_data_dictionary
(
thr_get_trx
(
thr
));
row_mysql_freeze_data_dictionary
(
thr_get_trx
(
thr
));
mtr_start
(
mtr
);
mtr_start
(
mtr
);
/* Restore pcur position */
/* Restore pcur position */
...
...
innobase/row/row0mysql.c
View file @
1e60c591
...
@@ -2479,7 +2479,7 @@ row_drop_table_for_mysql(
...
@@ -2479,7 +2479,7 @@ row_drop_table_for_mysql(
fputs
(
" InnoDB: You are trying to drop table "
,
stderr
);
fputs
(
" InnoDB: You are trying to drop table "
,
stderr
);
ut_print_name
(
stderr
,
trx
,
table
->
name
);
ut_print_name
(
stderr
,
trx
,
table
->
name
);
fputs
(
"
\n
"
fputs
(
"
\n
"
"InnoDB: though there are
foreign key check running on it.
\n
"
"InnoDB: though there is a
foreign key check running on it.
\n
"
"InnoDB: Adding the table to the background drop queue.
\n
"
,
"InnoDB: Adding the table to the background drop queue.
\n
"
,
stderr
);
stderr
);
...
...
libmysql/client_settings.h
View file @
1e60c591
...
@@ -21,7 +21,7 @@ extern my_string mysql_unix_port;
...
@@ -21,7 +21,7 @@ extern my_string mysql_unix_port;
CLIENT_TRANSACTIONS | \
CLIENT_TRANSACTIONS | \
CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION)
CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION)
sig_handler
pipe_sig_handler
(
int
sig
__attribute__
((
unused
))
);
sig_handler
pipe_sig_handler
(
int
sig
);
void
read_user_name
(
char
*
name
);
void
read_user_name
(
char
*
name
);
my_bool
handle_local_infile
(
MYSQL
*
mysql
,
const
char
*
net_filename
);
my_bool
handle_local_infile
(
MYSQL
*
mysql
,
const
char
*
net_filename
);
...
...
myisam/ft_nlq_search.c
View file @
1e60c591
...
@@ -99,6 +99,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
...
@@ -99,6 +99,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
info
->
update
|=
HA_STATE_AKTIV
;
/* for _mi_test_if_changed() */
info
->
update
|=
HA_STATE_AKTIV
;
/* for _mi_test_if_changed() */
/* The following should be safe, even if we compare doubles */
while
(
!
r
&&
gweight
)
while
(
!
r
&&
gweight
)
{
{
...
@@ -127,6 +128,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
...
@@ -127,6 +128,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
#else
#else
#error
#error
#endif
#endif
/* The following should be safe, even if we compare doubles */
if
(
tmp_weight
==
0
)
if
(
tmp_weight
==
0
)
DBUG_RETURN
(
doc_cnt
);
/* stopword, doc_cnt should be 0 */
DBUG_RETURN
(
doc_cnt
);
/* stopword, doc_cnt should be 0 */
...
...
myisam/rt_index.c
View file @
1e60c591
...
@@ -494,9 +494,11 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
...
@@ -494,9 +494,11 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
for
(;
k
<
last
;
k
=
rt_PAGE_NEXT_KEY
(
k
,
key_length
,
nod_flag
))
for
(;
k
<
last
;
k
=
rt_PAGE_NEXT_KEY
(
k
,
key_length
,
nod_flag
))
{
{
/* The following is safe as -1.0 is an exact number */
if
((
increase
=
rtree_area_increase
(
keyinfo
->
seg
,
k
,
key
,
key_length
,
if
((
increase
=
rtree_area_increase
(
keyinfo
->
seg
,
k
,
key
,
key_length
,
&
area
))
==
-
1
)
&
area
))
==
-
1
.
0
)
return
NULL
;
return
NULL
;
/* The following should be safe, even if we compare doubles */
if
(
increase
<
best_incr
)
if
(
increase
<
best_incr
)
{
{
best_key
=
k
;
best_key
=
k
;
...
@@ -505,6 +507,7 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
...
@@ -505,6 +507,7 @@ static uchar *rtree_pick_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
}
}
else
else
{
{
/* The following should be safe, even if we compare doubles */
if
((
increase
==
best_incr
)
&&
(
area
<
best_area
))
if
((
increase
==
best_incr
)
&&
(
area
<
best_area
))
{
{
best_key
=
k
;
best_key
=
k
;
...
@@ -1021,6 +1024,7 @@ ha_rows rtree_estimate(MI_INFO *info, uint keynr, uchar *key,
...
@@ -1021,6 +1024,7 @@ ha_rows rtree_estimate(MI_INFO *info, uint keynr, uchar *key,
{
{
double
k_area
=
rtree_rect_volume
(
keyinfo
->
seg
,
k
,
key_length
);
double
k_area
=
rtree_rect_volume
(
keyinfo
->
seg
,
k
,
key_length
);
/* The following should be safe, even if we compare doubles */
if
(
k_area
==
0
)
if
(
k_area
==
0
)
{
{
if
(
flag
&
(
MBR_CONTAIN
|
MBR_INTERSECT
))
if
(
flag
&
(
MBR_CONTAIN
|
MBR_INTERSECT
))
...
...
myisam/rt_mbr.c
View file @
1e60c591
...
@@ -129,6 +129,7 @@ int rtree_key_cmp(HA_KEYSEG *keyseg, uchar *b, uchar *a, uint key_length,
...
@@ -129,6 +129,7 @@ int rtree_key_cmp(HA_KEYSEG *keyseg, uchar *b, uchar *a, uint key_length,
break
;
break
;
#endif
#endif
case
HA_KEYTYPE_FLOAT
:
case
HA_KEYTYPE_FLOAT
:
/* The following should be safe, even if we compare doubles */
RT_CMP_GET
(
float
,
mi_float4get
,
4
,
nextflag
);
RT_CMP_GET
(
float
,
mi_float4get
,
4
,
nextflag
);
break
;
break
;
case
HA_KEYTYPE_DOUBLE
:
case
HA_KEYTYPE_DOUBLE
:
...
...
mysql-test/r/ps.result
View file @
1e60c591
...
@@ -410,3 +410,17 @@ a a
...
@@ -410,3 +410,17 @@ a a
1.1 1.2
1.1 1.2
2.1 2.2
2.1 2.2
deallocate prepare stmt;
deallocate prepare stmt;
create table t1 (a int);
insert into t1 values (1),(2),(3);
create table t2 select * from t1;
PREPARE my_stmt FROM 'create table t2 select * from t1';
drop table t2;
execute my_stmt;
drop table t2;
execute my_stmt;
execute my_stmt;
ERROR 42S01: Table 't2' already exists
drop table t2;
execute my_stmt;
drop table t1,t2;
deallocate prepare my_stmt;
mysql-test/r/timezone2.result
View file @
1e60c591
...
@@ -251,3 +251,23 @@ select convert_tz(ts, @@time_zone, 'Japan') from t1;
...
@@ -251,3 +251,23 @@ select convert_tz(ts, @@time_zone, 'Japan') from t1;
convert_tz(ts, @@time_zone, 'Japan')
convert_tz(ts, @@time_zone, 'Japan')
2001-09-09 10:46:40
2001-09-09 10:46:40
drop table t1;
drop table t1;
delete from mysql.user where user like 'mysqltest\_%';
delete from mysql.db where user like 'mysqltest\_%';
delete from mysql.tables_priv where user like 'mysqltest\_%';
delete from mysql.columns_priv where user like 'mysqltest\_%';
flush privileges;
grant usage on mysqltest.* to mysqltest_1@localhost;
show grants for current_user();
Grants for mysqltest_1@localhost
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
set time_zone= '+00:00';
set time_zone= 'Europe/Moscow';
select convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC');
convert_tz('2004-10-21 19:00:00', 'Europe/Moscow', 'UTC')
2004-10-21 15:00:00
select * from mysql.time_zone_name;
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysql'
select Name, convert_tz('2004-10-21 19:00:00', Name, 'UTC') from mysql.time_zone_name;
ERROR 42000: Access denied for user 'mysqltest_1'@'localhost' to database 'mysql'
delete from mysql.user where user like 'mysqltest\_%';
flush privileges;
mysql-test/t/ps.test
View file @
1e60c591
...
@@ -415,3 +415,21 @@ execute stmt;
...
@@ -415,3 +415,21 @@ execute stmt;
execute
stmt
;
execute
stmt
;
execute
stmt
;
execute
stmt
;
deallocate
prepare
stmt
;
deallocate
prepare
stmt
;
#
# Test CREATE TABLE ... SELECT (Bug #6094)
#
create
table
t1
(
a
int
);
insert
into
t1
values
(
1
),(
2
),(
3
);
create
table
t2
select
*
from
t1
;
PREPARE
my_stmt
FROM
'create table t2 select * from t1'
;
drop
table
t2
;
execute
my_stmt
;
drop
table
t2
;
execute
my_stmt
;
--
error
1050
execute
my_stmt
;
drop
table
t2
;
execute
my_stmt
;
drop
table
t1
,
t2
;
deallocate
prepare
my_stmt
;
mysql-test/t/timezone2.test
View file @
1e60c591
...
@@ -199,3 +199,31 @@ insert into t1 (ts) values (now());
...
@@ -199,3 +199,31 @@ insert into t1 (ts) values (now());
select
convert_tz
(
ts
,
@@
time_zone
,
'Japan'
)
from
t1
;
select
convert_tz
(
ts
,
@@
time_zone
,
'Japan'
)
from
t1
;
drop
table
t1
;
drop
table
t1
;
#
# Test for bug #6116 "SET time_zone := ... requires access to mysql.time_zone
# tables". We should allow implicit access to time zone description tables
# even for unprivileged users.
#
delete
from
mysql
.
user
where
user
like
'mysqltest\_%'
;
delete
from
mysql
.
db
where
user
like
'mysqltest\_%'
;
delete
from
mysql
.
tables_priv
where
user
like
'mysqltest\_%'
;
delete
from
mysql
.
columns_priv
where
user
like
'mysqltest\_%'
;
flush
privileges
;
grant
usage
on
mysqltest
.*
to
mysqltest_1
@
localhost
;
connect
(
tzuser
,
localhost
,
mysqltest_1
,,);
connection
tzuser
;
show
grants
for
current_user
();
set
time_zone
=
'+00:00'
;
set
time_zone
=
'Europe/Moscow'
;
select
convert_tz
(
'2004-10-21 19:00:00'
,
'Europe/Moscow'
,
'UTC'
);
# But still these two statements should not work:
--
error
1044
select
*
from
mysql
.
time_zone_name
;
--
error
1044
select
Name
,
convert_tz
(
'2004-10-21 19:00:00'
,
Name
,
'UTC'
)
from
mysql
.
time_zone_name
;
connection
default
;
delete
from
mysql
.
user
where
user
like
'mysqltest\_%'
;
flush
privileges
;
mysys/hash.c
View file @
1e60c591
...
@@ -174,6 +174,7 @@ static uint hash_rec_mask(HASH *hash,HASH_LINK *pos,uint buffmax,
...
@@ -174,6 +174,7 @@ static uint hash_rec_mask(HASH *hash,HASH_LINK *pos,uint buffmax,
/* for compilers which can not handle inline */
/* for compilers which can not handle inline */
static
#if !defined(__SUNPRO_C) && !defined(__USLC__) && !defined(__sgi)
#if !defined(__SUNPRO_C) && !defined(__USLC__) && !defined(__sgi)
inline
inline
#endif
#endif
...
...
mysys/my_handler.c
View file @
1e60c591
...
@@ -309,6 +309,11 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
...
@@ -309,6 +309,11 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case
HA_KEYTYPE_FLOAT
:
case
HA_KEYTYPE_FLOAT
:
mi_float4get
(
f_1
,
a
);
mi_float4get
(
f_1
,
a
);
mi_float4get
(
f_2
,
b
);
mi_float4get
(
f_2
,
b
);
/*
The following may give a compiler warning about floating point
comparison not being safe, but this is ok in this context as
we are bascily doing sorting
*/
if
(
piks
&&
(
flag
=
CMP_NUM
(
f_1
,
f_2
)))
if
(
piks
&&
(
flag
=
CMP_NUM
(
f_1
,
f_2
)))
return
((
keyseg
->
flag
&
HA_REVERSE_SORT
)
?
-
flag
:
flag
);
return
((
keyseg
->
flag
&
HA_REVERSE_SORT
)
?
-
flag
:
flag
);
a
=
end
;
a
=
end
;
...
@@ -317,6 +322,11 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
...
@@ -317,6 +322,11 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case
HA_KEYTYPE_DOUBLE
:
case
HA_KEYTYPE_DOUBLE
:
mi_float8get
(
d_1
,
a
);
mi_float8get
(
d_1
,
a
);
mi_float8get
(
d_2
,
b
);
mi_float8get
(
d_2
,
b
);
/*
The following may give a compiler warning about floating point
comparison not being safe, but this is ok in this context as
we are bascily doing sorting
*/
if
(
piks
&&
(
flag
=
CMP_NUM
(
d_1
,
d_2
)))
if
(
piks
&&
(
flag
=
CMP_NUM
(
d_1
,
d_2
)))
return
((
keyseg
->
flag
&
HA_REVERSE_SORT
)
?
-
flag
:
flag
);
return
((
keyseg
->
flag
&
HA_REVERSE_SORT
)
?
-
flag
:
flag
);
a
=
end
;
a
=
end
;
...
...
mysys/my_thr_init.c
View file @
1e60c591
...
@@ -64,6 +64,11 @@ my_bool my_thread_global_init(void)
...
@@ -64,6 +64,11 @@ my_bool my_thread_global_init(void)
}
}
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_init
(
&
my_fast_mutexattr
);
pthread_mutexattr_init
(
&
my_fast_mutexattr
);
/*
Note that the following statement may give a compiler warning under
some configurations, but there isn't anything we can do about this as
this is a bug in the header files for the thread implementation
*/
pthread_mutexattr_setkind_np
(
&
my_fast_mutexattr
,
PTHREAD_MUTEX_ADAPTIVE_NP
);
pthread_mutexattr_setkind_np
(
&
my_fast_mutexattr
,
PTHREAD_MUTEX_ADAPTIVE_NP
);
#endif
#endif
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
...
...
regex/main.c
View file @
1e60c591
...
@@ -78,7 +78,7 @@ char *argv[];
...
@@ -78,7 +78,7 @@ char *argv[];
if
(
err
)
{
if
(
err
)
{
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
fprintf
(
stderr
,
"error %s, %d/%d `%s'
\n
"
,
fprintf
(
stderr
,
"error %s, %d/%d `%s'
\n
"
,
eprint
(
err
),
len
,
sizeof
(
erbuf
),
erbuf
);
eprint
(
err
),
len
,
(
int
)
sizeof
(
erbuf
),
erbuf
);
exit
(
status
);
exit
(
status
);
}
}
regprint
(
&
re
,
stdout
);
regprint
(
&
re
,
stdout
);
...
@@ -96,7 +96,7 @@ char *argv[];
...
@@ -96,7 +96,7 @@ char *argv[];
if
(
err
)
{
if
(
err
)
{
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
fprintf
(
stderr
,
"error %s, %d/%d `%s'
\n
"
,
fprintf
(
stderr
,
"error %s, %d/%d `%s'
\n
"
,
eprint
(
err
),
len
,
sizeof
(
erbuf
),
erbuf
);
eprint
(
err
),
(
int
)
len
,
(
int
)
sizeof
(
erbuf
),
erbuf
);
exit
(
status
);
exit
(
status
);
}
}
if
(
!
(
copts
&
REG_NOSUB
))
{
if
(
!
(
copts
&
REG_NOSUB
))
{
...
@@ -232,7 +232,7 @@ int opts; /* may not match f1 */
...
@@ -232,7 +232,7 @@ int opts; /* may not match f1 */
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
fprintf
(
stderr
,
"%d: %s error %s, %d/%d `%s'
\n
"
,
fprintf
(
stderr
,
"%d: %s error %s, %d/%d `%s'
\n
"
,
line
,
type
,
eprint
(
err
),
len
,
line
,
type
,
eprint
(
err
),
len
,
sizeof
(
erbuf
),
erbuf
);
(
int
)
sizeof
(
erbuf
),
erbuf
);
status
=
1
;
status
=
1
;
}
else
if
(
err
==
0
&&
opt
(
'C'
,
f1
))
{
}
else
if
(
err
==
0
&&
opt
(
'C'
,
f1
))
{
/* unexpected success */
/* unexpected success */
...
@@ -263,7 +263,7 @@ int opts; /* may not match f1 */
...
@@ -263,7 +263,7 @@ int opts; /* may not match f1 */
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
len
=
regerror
(
err
,
&
re
,
erbuf
,
sizeof
(
erbuf
));
fprintf
(
stderr
,
"%d: %s exec error %s, %d/%d `%s'
\n
"
,
fprintf
(
stderr
,
"%d: %s exec error %s, %d/%d `%s'
\n
"
,
line
,
type
,
eprint
(
err
),
len
,
line
,
type
,
eprint
(
err
),
len
,
sizeof
(
erbuf
),
erbuf
);
(
int
)
sizeof
(
erbuf
),
erbuf
);
status
=
1
;
status
=
1
;
}
else
if
(
err
!=
0
)
{
}
else
if
(
err
!=
0
)
{
/* nothing more to check */
/* nothing more to check */
...
...
sql/item.h
View file @
1e60c591
...
@@ -97,7 +97,8 @@ public:
...
@@ -97,7 +97,8 @@ public:
static
void
*
operator
new
(
size_t
size
)
{
return
(
void
*
)
sql_alloc
((
uint
)
size
);
}
static
void
*
operator
new
(
size_t
size
)
{
return
(
void
*
)
sql_alloc
((
uint
)
size
);
}
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{}
/*lint -e715 */
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
,
MEM_ROOT
*
mem_root
)
{}
enum
Type
{
FIELD_ITEM
,
FUNC_ITEM
,
SUM_FUNC_ITEM
,
STRING_ITEM
,
enum
Type
{
FIELD_ITEM
,
FUNC_ITEM
,
SUM_FUNC_ITEM
,
STRING_ITEM
,
INT_ITEM
,
REAL_ITEM
,
NULL_ITEM
,
VARBIN_ITEM
,
INT_ITEM
,
REAL_ITEM
,
NULL_ITEM
,
VARBIN_ITEM
,
...
...
sql/item_func.h
View file @
1e60c591
...
@@ -348,6 +348,7 @@ class Item_dec_func :public Item_real_func
...
@@ -348,6 +348,7 @@ class Item_dec_func :public Item_real_func
#ifndef HAVE_FINITE
#ifndef HAVE_FINITE
return
value
;
return
value
;
#else
#else
/* The following should be safe, even if we compare doubles */
if
(
finite
(
value
)
&&
value
!=
POSTFIX_ERROR
)
if
(
finite
(
value
)
&&
value
!=
POSTFIX_ERROR
)
return
value
;
return
value
;
null_value
=
1
;
null_value
=
1
;
...
@@ -1032,6 +1033,7 @@ public:
...
@@ -1032,6 +1033,7 @@ public:
table_map
not_null_tables
()
const
{
return
0
;
}
table_map
not_null_tables
()
const
{
return
0
;
}
bool
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
,
Item
**
ref
);
bool
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
,
Item
**
ref
);
bool
eq
(
const
Item
*
,
bool
binary_cmp
)
const
;
bool
eq
(
const
Item
*
,
bool
binary_cmp
)
const
;
/* The following should be safe, even if we compare doubles */
longlong
val_int
()
{
DBUG_ASSERT
(
fixed
==
1
);
return
val
()
!=
0.0
;
}
longlong
val_int
()
{
DBUG_ASSERT
(
fixed
==
1
);
return
val
()
!=
0.0
;
}
double
val
();
double
val
();
void
print
(
String
*
str
);
void
print
(
String
*
str
);
...
...
sql/spatial.h
View file @
1e60c591
...
@@ -97,12 +97,14 @@ struct MBR
...
@@ -97,12 +97,14 @@ struct MBR
int
equals
(
const
MBR
*
mbr
)
int
equals
(
const
MBR
*
mbr
)
{
{
/* The following should be safe, even if we compare doubles */
return
((
mbr
->
xmin
==
xmin
)
&&
(
mbr
->
ymin
==
ymin
)
&&
return
((
mbr
->
xmin
==
xmin
)
&&
(
mbr
->
ymin
==
ymin
)
&&
(
mbr
->
xmax
==
xmax
)
&&
(
mbr
->
ymax
==
ymax
));
(
mbr
->
xmax
==
xmax
)
&&
(
mbr
->
ymax
==
ymax
));
}
}
int
disjoint
(
const
MBR
*
mbr
)
int
disjoint
(
const
MBR
*
mbr
)
{
{
/* The following should be safe, even if we compare doubles */
return
((
mbr
->
xmin
>
xmax
)
||
(
mbr
->
ymin
>
ymax
)
||
return
((
mbr
->
xmin
>
xmax
)
||
(
mbr
->
ymin
>
ymax
)
||
(
mbr
->
xmax
<
xmin
)
||
(
mbr
->
ymax
<
ymin
));
(
mbr
->
xmax
<
xmin
)
||
(
mbr
->
ymax
<
ymin
));
}
}
...
@@ -114,6 +116,7 @@ struct MBR
...
@@ -114,6 +116,7 @@ struct MBR
int
touches
(
const
MBR
*
mbr
)
int
touches
(
const
MBR
*
mbr
)
{
{
/* The following should be safe, even if we compare doubles */
return
((((
mbr
->
xmin
==
xmax
)
||
(
mbr
->
xmax
==
xmin
))
&&
return
((((
mbr
->
xmin
==
xmax
)
||
(
mbr
->
xmax
==
xmin
))
&&
((
mbr
->
ymin
>=
ymin
)
&&
(
mbr
->
ymin
<=
ymax
)
||
((
mbr
->
ymin
>=
ymin
)
&&
(
mbr
->
ymin
<=
ymax
)
||
(
mbr
->
ymax
>=
ymin
)
&&
(
mbr
->
ymax
<=
ymax
)))
||
(
mbr
->
ymax
>=
ymin
)
&&
(
mbr
->
ymax
<=
ymax
)))
||
...
@@ -124,18 +127,21 @@ struct MBR
...
@@ -124,18 +127,21 @@ struct MBR
int
within
(
const
MBR
*
mbr
)
int
within
(
const
MBR
*
mbr
)
{
{
/* The following should be safe, even if we compare doubles */
return
((
mbr
->
xmin
<=
xmin
)
&&
(
mbr
->
ymin
<=
ymin
)
&&
return
((
mbr
->
xmin
<=
xmin
)
&&
(
mbr
->
ymin
<=
ymin
)
&&
(
mbr
->
xmax
>=
xmax
)
&&
(
mbr
->
ymax
>=
ymax
));
(
mbr
->
xmax
>=
xmax
)
&&
(
mbr
->
ymax
>=
ymax
));
}
}
int
contains
(
const
MBR
*
mbr
)
int
contains
(
const
MBR
*
mbr
)
{
{
/* The following should be safe, even if we compare doubles */
return
((
mbr
->
xmin
>=
xmin
)
&&
(
mbr
->
ymin
>=
ymin
)
&&
return
((
mbr
->
xmin
>=
xmin
)
&&
(
mbr
->
ymin
>=
ymin
)
&&
(
mbr
->
xmax
<=
xmax
)
&&
(
mbr
->
ymax
<=
ymax
));
(
mbr
->
xmax
<=
xmax
)
&&
(
mbr
->
ymax
<=
ymax
));
}
}
bool
inner_point
(
double
x
,
double
y
)
const
bool
inner_point
(
double
x
,
double
y
)
const
{
{
/* The following should be safe, even if we compare doubles */
return
(
xmin
<
x
)
&&
(
xmax
>
x
)
&&
(
ymin
<
y
)
&&
(
ymax
>
x
);
return
(
xmin
<
x
)
&&
(
xmax
>
x
)
&&
(
ymin
<
y
)
&&
(
ymax
>
x
);
}
}
...
@@ -164,6 +170,9 @@ public:
...
@@ -164,6 +170,9 @@ public:
return
buffer
;
return
buffer
;
}
}
static
void
operator
delete
(
void
*
ptr
,
void
*
buffer
)
{}
enum
wkbType
enum
wkbType
{
{
wkb_point
=
1
,
wkb_point
=
1
,
...
...
sql/sql_lex.h
View file @
1e60c591
...
@@ -241,6 +241,7 @@ public:
...
@@ -241,6 +241,7 @@ public:
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
,
MEM_ROOT
*
mem_root
)
{}
st_select_lex_node
()
:
linkage
(
UNSPECIFIED_TYPE
)
{}
st_select_lex_node
()
:
linkage
(
UNSPECIFIED_TYPE
)
{}
virtual
~
st_select_lex_node
()
{}
virtual
~
st_select_lex_node
()
{}
inline
st_select_lex_node
*
get_master
()
{
return
master
;
}
inline
st_select_lex_node
*
get_master
()
{
return
master
;
}
...
...
sql/sql_list.h
View file @
1e60c591
...
@@ -41,6 +41,8 @@ public:
...
@@ -41,6 +41,8 @@ public:
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{
TRASH
(
ptr
,
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
)
{
TRASH
(
ptr
,
size
);
}
static
void
operator
delete
(
void
*
ptr
,
size_t
size
,
MEM_ROOT
*
mem_root
)
{
TRASH
(
ptr
,
size
);
}
static
void
operator
delete
[](
void
*
ptr
,
size_t
size
)
{
TRASH
(
ptr
,
size
);
}
static
void
operator
delete
[](
void
*
ptr
,
size_t
size
)
{
TRASH
(
ptr
,
size
);
}
#ifdef HAVE_purify
#ifdef HAVE_purify
bool
dummy
;
bool
dummy
;
...
...
sql/sql_parse.cc
View file @
1e60c591
...
@@ -1574,7 +1574,9 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1574,7 +1574,9 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if
(
check_access
(
thd
,
CREATE_ACL
,
db
,
0
,
1
,
0
))
if
(
check_access
(
thd
,
CREATE_ACL
,
db
,
0
,
1
,
0
))
break
;
break
;
mysql_log
.
write
(
thd
,
command
,
packet
);
mysql_log
.
write
(
thd
,
command
,
packet
);
mysql_create_db
(
thd
,(
lower_case_table_names
==
2
?
alias
:
db
),
0
,
0
);
if
(
mysql_create_db
(
thd
,
(
lower_case_table_names
==
2
?
alias
:
db
),
0
,
0
)
<
0
)
send_error
(
thd
,
thd
->
killed
?
ER_SERVER_SHUTDOWN
:
0
);
break
;
break
;
}
}
case
COM_DROP_DB
:
// QQ: To be removed
case
COM_DROP_DB
:
// QQ: To be removed
...
@@ -1595,7 +1597,9 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
...
@@ -1595,7 +1597,9 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
break
;
break
;
}
}
mysql_log
.
write
(
thd
,
command
,
db
);
mysql_log
.
write
(
thd
,
command
,
db
);
mysql_rm_db
(
thd
,
(
lower_case_table_names
==
2
?
alias
:
db
),
0
,
0
);
if
(
mysql_rm_db
(
thd
,
(
lower_case_table_names
==
2
?
alias
:
db
),
0
,
0
)
<
0
)
send_error
(
thd
,
thd
->
killed
?
ER_SERVER_SHUTDOWN
:
0
);
break
;
break
;
}
}
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
...
@@ -1863,8 +1867,8 @@ mysql_execute_command(THD *thd)
...
@@ -1863,8 +1867,8 @@ mysql_execute_command(THD *thd)
{
{
int
res
=
0
;
int
res
=
0
;
LEX
*
lex
=
thd
->
lex
;
LEX
*
lex
=
thd
->
lex
;
TABLE_LIST
*
tables
=
(
TABLE_LIST
*
)
lex
->
select_lex
.
table_list
.
first
;
SELECT_LEX
*
select_lex
=
&
lex
->
select_lex
;
SELECT_LEX
*
select_lex
=
&
lex
->
select_lex
;
TABLE_LIST
*
tables
=
(
TABLE_LIST
*
)
select_lex
->
table_list
.
first
;
SELECT_LEX_UNIT
*
unit
=
&
lex
->
unit
;
SELECT_LEX_UNIT
*
unit
=
&
lex
->
unit
;
DBUG_ENTER
(
"mysql_execute_command"
);
DBUG_ENTER
(
"mysql_execute_command"
);
...
@@ -2334,30 +2338,6 @@ mysql_execute_command(THD *thd)
...
@@ -2334,30 +2338,6 @@ mysql_execute_command(THD *thd)
{
{
select_result
*
result
;
select_result
*
result
;
if
(
!
(
lex
->
create_info
.
options
&
HA_LEX_CREATE_TMP_TABLE
)
&&
find_real_table_in_list
(
tables
,
create_table
->
db
,
create_table
->
real_name
))
{
net_printf
(
thd
,
ER_UPDATE_TABLE_USED
,
create_table
->
real_name
);
goto
create_error
;
}
if
(
lex
->
create_info
.
used_fields
&
HA_CREATE_USED_UNION
)
{
TABLE_LIST
*
tab
;
for
(
tab
=
tables
;
tab
;
tab
=
tab
->
next
)
{
if
(
find_real_table_in_list
((
TABLE_LIST
*
)
lex
->
create_info
.
merge_list
.
first
,
tables
->
db
,
tab
->
real_name
))
{
net_printf
(
thd
,
ER_UPDATE_TABLE_USED
,
tab
->
real_name
);
goto
create_error
;
}
}
}
if
(
tables
&&
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
))
goto
create_error
;
// Error message is given
select_lex
->
options
|=
SELECT_NO_UNLOCK
;
select_lex
->
options
|=
SELECT_NO_UNLOCK
;
unit
->
offset_limit_cnt
=
select_lex
->
offset_limit
;
unit
->
offset_limit_cnt
=
select_lex
->
offset_limit
;
unit
->
select_limit_cnt
=
select_lex
->
select_limit
+
unit
->
select_limit_cnt
=
select_lex
->
select_limit
+
...
@@ -3731,7 +3711,10 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
...
@@ -3731,7 +3711,10 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
TABLE_LIST
*
org_tables
=
tables
;
TABLE_LIST
*
org_tables
=
tables
;
for
(;
tables
;
tables
=
tables
->
next
)
for
(;
tables
;
tables
=
tables
->
next
)
{
{
if
(
tables
->
derived
||
(
tables
->
table
&&
(
int
)
tables
->
table
->
tmp_table
))
if
(
tables
->
derived
||
(
tables
->
table
&&
(
int
)
tables
->
table
->
tmp_table
)
||
my_tz_check_n_skip_implicit_tables
(
&
tables
,
thd
->
lex
->
time_zone_tables_used
))
continue
;
continue
;
if
((
thd
->
master_access
&
want_access
)
==
(
want_access
&
~
EXTRA_ACL
)
&&
if
((
thd
->
master_access
&
want_access
)
==
(
want_access
&
~
EXTRA_ACL
)
&&
thd
->
db
)
thd
->
db
)
...
@@ -5283,7 +5266,7 @@ int multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count)
...
@@ -5283,7 +5266,7 @@ int multi_delete_precheck(THD *thd, TABLE_LIST *tables, uint *table_count)
INSERT ... SELECT query pre-check
INSERT ... SELECT query pre-check
SYNOPSIS
SYNOPSIS
multi
_delete_precheck()
insert
_delete_precheck()
thd Thread handler
thd Thread handler
tables Global table list
tables Global table list
...
@@ -5405,15 +5388,18 @@ int insert_precheck(THD *thd, TABLE_LIST *tables)
...
@@ -5405,15 +5388,18 @@ int insert_precheck(THD *thd, TABLE_LIST *tables)
RETURN VALUE
RETURN VALUE
0 OK
0 OK
1 Error (message is sent to user)
1 Error (message is sent to user)
-1 Error (message is not sent to user)
*/
*/
int
create_table_precheck
(
THD
*
thd
,
TABLE_LIST
*
tables
,
int
create_table_precheck
(
THD
*
thd
,
TABLE_LIST
*
tables
,
TABLE_LIST
*
create_table
)
TABLE_LIST
*
create_table
)
{
{
LEX
*
lex
=
thd
->
lex
;
LEX
*
lex
=
thd
->
lex
;
SELECT_LEX
*
select_lex
=
&
lex
->
select_lex
;
ulong
want_priv
;
int
error
=
1
;
// Error message is given
DBUG_ENTER
(
"create_table_precheck"
);
DBUG_ENTER
(
"create_table_precheck"
);
ulong
want_priv
=
((
lex
->
create_info
.
options
&
HA_LEX_CREATE_TMP_TABLE
)
?
want_priv
=
((
lex
->
create_info
.
options
&
HA_LEX_CREATE_TMP_TABLE
)
?
CREATE_TMP_ACL
:
CREATE_ACL
);
CREATE_TMP_ACL
:
CREATE_ACL
);
lex
->
create_info
.
alias
=
create_table
->
alias
;
lex
->
create_info
.
alias
=
create_table
->
alias
;
if
(
check_access
(
thd
,
want_priv
,
create_table
->
db
,
if
(
check_access
(
thd
,
want_priv
,
create_table
->
db
,
...
@@ -5421,10 +5407,50 @@ int create_table_precheck(THD *thd, TABLE_LIST *tables,
...
@@ -5421,10 +5407,50 @@ int create_table_precheck(THD *thd, TABLE_LIST *tables,
check_merge_table_access
(
thd
,
create_table
->
db
,
check_merge_table_access
(
thd
,
create_table
->
db
,
(
TABLE_LIST
*
)
(
TABLE_LIST
*
)
lex
->
create_info
.
merge_list
.
first
))
lex
->
create_info
.
merge_list
.
first
))
DBUG_RETURN
(
1
);
goto
err
;
DBUG_RETURN
((
grant_option
&&
want_priv
!=
CREATE_TMP_ACL
&&
if
(
grant_option
&&
want_priv
!=
CREATE_TMP_ACL
&&
check_grant
(
thd
,
want_priv
,
create_table
,
0
,
UINT_MAX
,
0
))
?
check_grant
(
thd
,
want_priv
,
create_table
,
0
,
UINT_MAX
,
0
))
1
:
0
);
goto
err
;
if
(
select_lex
->
item_list
.
elements
)
{
/* Check permissions for used tables in CREATE TABLE ... SELECT */
/*
For temporary tables or PREPARED STATEMETNS we don't have to check
if the created table exists
*/
if
(
!
(
lex
->
create_info
.
options
&
HA_LEX_CREATE_TMP_TABLE
)
&&
!
thd
->
current_arena
->
is_stmt_prepare
()
&&
find_real_table_in_list
(
tables
,
create_table
->
db
,
create_table
->
real_name
))
{
net_printf
(
thd
,
ER_UPDATE_TABLE_USED
,
create_table
->
real_name
);
goto
err
;
}
if
(
lex
->
create_info
.
used_fields
&
HA_CREATE_USED_UNION
)
{
TABLE_LIST
*
tab
;
for
(
tab
=
tables
;
tab
;
tab
=
tab
->
next
)
{
if
(
find_real_table_in_list
((
TABLE_LIST
*
)
lex
->
create_info
.
merge_list
.
first
,
tables
->
db
,
tab
->
real_name
))
{
net_printf
(
thd
,
ER_UPDATE_TABLE_USED
,
tab
->
real_name
);
goto
err
;
}
}
}
if
(
tables
&&
check_table_access
(
thd
,
SELECT_ACL
,
tables
,
0
))
goto
err
;
}
error
=
0
;
err:
DBUG_RETURN
(
error
);
}
}
...
...
sql/sql_prepare.cc
View file @
1e60c591
...
@@ -1391,7 +1391,6 @@ static int send_prepare_results(Prepared_statement *stmt, bool text_protocol)
...
@@ -1391,7 +1391,6 @@ static int send_prepare_results(Prepared_statement *stmt, bool text_protocol)
lex
->
unit
.
create_total_list
(
thd
,
lex
,
&
tables
))
lex
->
unit
.
create_total_list
(
thd
,
lex
,
&
tables
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
switch
(
sql_command
)
{
switch
(
sql_command
)
{
case
SQLCOM_REPLACE
:
case
SQLCOM_REPLACE
:
case
SQLCOM_INSERT
:
case
SQLCOM_INSERT
:
...
...
sql/sql_string.h
View file @
1e60c591
...
@@ -71,7 +71,9 @@ public:
...
@@ -71,7 +71,9 @@ public:
}
}
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
static
void
*
operator
new
(
size_t
size
,
MEM_ROOT
*
mem_root
)
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
{
return
(
void
*
)
alloc_root
(
mem_root
,
(
uint
)
size
);
}
static
void
operator
delete
(
void
*
ptr_arg
,
size_t
size
)
/*lint -e715 */
static
void
operator
delete
(
void
*
ptr_arg
,
size_t
size
)
{}
static
void
operator
delete
(
void
*
ptr_arg
,
size_t
size
,
MEM_ROOT
*
mem_root
)
{}
{}
~
String
()
{
free
();
}
~
String
()
{
free
();
}
...
...
sql/tztime.cc
View file @
1e60c591
...
@@ -1434,6 +1434,10 @@ tz_init_table_list(TABLE_LIST *tz_tabs)
...
@@ -1434,6 +1434,10 @@ tz_init_table_list(TABLE_LIST *tz_tabs)
This function creates list of TABLE_LIST objects allocated in thd's
This function creates list of TABLE_LIST objects allocated in thd's
memroot, which can be used for opening of time zone tables.
memroot, which can be used for opening of time zone tables.
NOTE
my_tz_check_n_skip_implicit_tables() function depends on fact that
elements of list created are allocated as TABLE_LIST[4] array.
RETURN VALUES
RETURN VALUES
Returns pointer to first TABLE_LIST object, (could be 0 if time zone
Returns pointer to first TABLE_LIST object, (could be 0 if time zone
tables don't exist) and &fake_time_zone_tables_list in case of error.
tables don't exist) and &fake_time_zone_tables_list in case of error.
...
...
sql/tztime.h
View file @
1e60c591
...
@@ -64,6 +64,35 @@ extern Time_zone * my_tz_find(const String *name, TABLE_LIST *tz_tables);
...
@@ -64,6 +64,35 @@ extern Time_zone * my_tz_find(const String *name, TABLE_LIST *tz_tables);
extern
my_bool
my_tz_init
(
THD
*
org_thd
,
const
char
*
default_tzname
,
my_bool
bootstrap
);
extern
my_bool
my_tz_init
(
THD
*
org_thd
,
const
char
*
default_tzname
,
my_bool
bootstrap
);
extern
void
my_tz_free
();
extern
void
my_tz_free
();
/*
Check if we have pointer to the beggining of list of implictly used
time zone tables and fast-forward to its end.
SYNOPSIS
my_tz_check_n_skip_implicit_tables()
table - (in/out) pointer to element of table list to check
tz_tables - list of implicitly used time zone tables received
from my_tz_get_table_list() function.
NOTE
This function relies on my_tz_get_table_list() implementation.
RETURN VALUE
TRUE - if table points to the beggining of tz_tables list
FALSE - otherwise.
*/
inline
bool
my_tz_check_n_skip_implicit_tables
(
TABLE_LIST
**
table
,
TABLE_LIST
*
tz_tables
)
{
if
(
*
table
==
tz_tables
)
{
(
*
table
)
+=
3
;
return
TRUE
;
}
return
FALSE
;
}
/*
/*
Maximum length of time zone name that we support
Maximum length of time zone name that we support
(Time zone name is char(64) in db)
(Time zone name is char(64) in db)
...
...
strings/ctype-mb.c
View file @
1e60c591
...
@@ -502,7 +502,8 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
...
@@ -502,7 +502,8 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
representation of the max_sort_char character,
representation of the max_sort_char character,
and copy it into max_str in a loop.
and copy it into max_str in a loop.
*/
*/
buflen
=
cs
->
cset
->
wc_mb
(
cs
,
cs
->
max_sort_char
,
buf
,
buf
+
sizeof
(
buf
));
buflen
=
cs
->
cset
->
wc_mb
(
cs
,
cs
->
max_sort_char
,
(
uchar
*
)
buf
,
(
uchar
*
)
buf
+
sizeof
(
buf
));
DBUG_ASSERT
(
buflen
>
0
);
DBUG_ASSERT
(
buflen
>
0
);
do
do
{
{
...
...
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