Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
6bf9e0ff
Commit
6bf9e0ff
authored
Jul 21, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge istruewing@bk-internal.mysql.com:/home/bk/mysql-5.0-engines
into chilla.local:/home/mydev/mysql-5.0
parents
fabab792
d87e4fbf
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
370 additions
and
160 deletions
+370
-160
include/sql_common.h
include/sql_common.h
+1
-0
libmysqld/lib_sql.cc
libmysqld/lib_sql.cc
+7
-0
libmysqld/libmysqld.c
libmysqld/libmysqld.c
+3
-45
myisam/mi_check.c
myisam/mi_check.c
+3
-2
myisam/mi_create.c
myisam/mi_create.c
+17
-0
myisam/mi_delete_table.c
myisam/mi_delete_table.c
+18
-6
myisam/mi_dynrec.c
myisam/mi_dynrec.c
+3
-0
myisam/mi_key.c
myisam/mi_key.c
+1
-1
myisam/mi_rkey.c
myisam/mi_rkey.c
+18
-6
myisam/rt_index.c
myisam/rt_index.c
+5
-3
myisam/rt_mbr.c
myisam/rt_mbr.c
+5
-1
mysql-test/r/func_sapdb.result
mysql-test/r/func_sapdb.result
+6
-0
mysql-test/r/func_time.result
mysql-test/r/func_time.result
+6
-0
mysql-test/r/gis-rtree.result
mysql-test/r/gis-rtree.result
+40
-0
mysql-test/r/gis.result
mysql-test/r/gis.result
+10
-0
mysql-test/r/key.result
mysql-test/r/key.result
+10
-0
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+13
-0
mysql-test/r/symlink.result
mysql-test/r/symlink.result
+6
-0
mysql-test/t/func_sapdb.test
mysql-test/t/func_sapdb.test
+2
-0
mysql-test/t/func_time.test
mysql-test/t/func_time.test
+4
-0
mysql-test/t/gis-rtree.test
mysql-test/t/gis-rtree.test
+44
-0
mysql-test/t/gis.test
mysql-test/t/gis.test
+7
-0
mysql-test/t/key.test
mysql-test/t/key.test
+11
-0
mysql-test/t/myisam.test
mysql-test/t/myisam.test
+12
-0
scripts/make_binary_distribution.sh
scripts/make_binary_distribution.sh
+14
-4
sql-common/client.c
sql-common/client.c
+48
-36
sql/item_geofunc.h
sql/item_geofunc.h
+2
-0
sql/item_timefunc.cc
sql/item_timefunc.cc
+6
-5
sql/opt_sum.cc
sql/opt_sum.cc
+6
-0
sql/sql_class.cc
sql/sql_class.cc
+3
-3
sql/sql_parse.cc
sql/sql_parse.cc
+38
-27
sql/table.cc
sql/table.cc
+0
-21
support-files/mysql.spec.sh
support-files/mysql.spec.sh
+1
-0
No files found.
include/sql_common.h
View file @
6bf9e0ff
...
@@ -22,6 +22,7 @@ extern const char *not_error_sqlstate;
...
@@ -22,6 +22,7 @@ extern const char *not_error_sqlstate;
extern
"C"
{
extern
"C"
{
#endif
#endif
extern
CHARSET_INFO
*
default_client_charset_info
;
MYSQL_FIELD
*
unpack_fields
(
MYSQL_DATA
*
data
,
MEM_ROOT
*
alloc
,
uint
fields
,
MYSQL_FIELD
*
unpack_fields
(
MYSQL_DATA
*
data
,
MEM_ROOT
*
alloc
,
uint
fields
,
my_bool
default_value
,
uint
server_capabilities
);
my_bool
default_value
,
uint
server_capabilities
);
void
free_rows
(
MYSQL_DATA
*
cur
);
void
free_rows
(
MYSQL_DATA
*
cur
);
...
...
libmysqld/lib_sql.cc
View file @
6bf9e0ff
...
@@ -37,6 +37,8 @@ extern "C"
...
@@ -37,6 +37,8 @@ extern "C"
int
check_user
(
THD
*
thd
,
enum
enum_server_command
command
,
int
check_user
(
THD
*
thd
,
enum
enum_server_command
command
,
const
char
*
passwd
,
uint
passwd_len
,
const
char
*
db
,
const
char
*
passwd
,
uint
passwd_len
,
const
char
*
db
,
bool
check_count
);
bool
check_count
);
void
thd_init_client_charset
(
THD
*
thd
,
uint
cs_number
);
C_MODE_START
C_MODE_START
#include <mysql.h>
#include <mysql.h>
...
@@ -600,11 +602,14 @@ void *create_embedded_thd(int client_flag, char *db)
...
@@ -600,11 +602,14 @@ void *create_embedded_thd(int client_flag, char *db)
return
NULL
;
return
NULL
;
}
}
#ifdef NO_EMBEDDED_ACCESS_CHECKS
#ifdef NO_EMBEDDED_ACCESS_CHECKS
int
check_embedded_connection
(
MYSQL
*
mysql
)
int
check_embedded_connection
(
MYSQL
*
mysql
)
{
{
int
result
;
int
result
;
THD
*
thd
=
(
THD
*
)
mysql
->
thd
;
THD
*
thd
=
(
THD
*
)
mysql
->
thd
;
thd_init_client_charset
(
thd
,
mysql
->
charset
->
number
);
thd
->
update_charset
();
Security_context
*
sctx
=
thd
->
security_ctx
;
Security_context
*
sctx
=
thd
->
security_ctx
;
sctx
->
host_or_ip
=
sctx
->
host
=
(
char
*
)
my_localhost
;
sctx
->
host_or_ip
=
sctx
->
host
=
(
char
*
)
my_localhost
;
strmake
(
sctx
->
priv_host
,
(
char
*
)
my_localhost
,
MAX_HOSTNAME
-
1
);
strmake
(
sctx
->
priv_host
,
(
char
*
)
my_localhost
,
MAX_HOSTNAME
-
1
);
...
@@ -623,6 +628,8 @@ int check_embedded_connection(MYSQL *mysql)
...
@@ -623,6 +628,8 @@ int check_embedded_connection(MYSQL *mysql)
char
scramble_buff
[
SCRAMBLE_LENGTH
];
char
scramble_buff
[
SCRAMBLE_LENGTH
];
int
passwd_len
;
int
passwd_len
;
thd_init_client_charset
(
thd
,
mysql
->
charset
->
number
);
thd
->
update_charset
();
if
(
mysql
->
options
.
client_ip
)
if
(
mysql
->
options
.
client_ip
)
{
{
sctx
->
host
=
my_strdup
(
mysql
->
options
.
client_ip
,
MYF
(
0
));
sctx
->
host
=
my_strdup
(
mysql
->
options
.
client_ip
,
MYF
(
0
));
...
...
libmysqld/libmysqld.c
View file @
6bf9e0ff
...
@@ -90,49 +90,7 @@ static void end_server(MYSQL *mysql)
...
@@ -90,49 +90,7 @@ static void end_server(MYSQL *mysql)
}
}
static
int
mysql_init_charset
(
MYSQL
*
mysql
)
int
mysql_init_character_set
(
MYSQL
*
mysql
);
{
char
charset_name_buff
[
16
],
*
charset_name
;
if
((
charset_name
=
mysql
->
options
.
charset_name
))
{
const
char
*
save
=
charsets_dir
;
if
(
mysql
->
options
.
charset_dir
)
charsets_dir
=
mysql
->
options
.
charset_dir
;
mysql
->
charset
=
get_charset_by_name
(
mysql
->
options
.
charset_name
,
MYF
(
MY_WME
));
charsets_dir
=
save
;
}
else
if
(
mysql
->
server_language
)
{
charset_name
=
charset_name_buff
;
sprintf
(
charset_name
,
"%d"
,
mysql
->
server_language
);
/* In case of errors */
mysql
->
charset
=
get_charset
((
uint8
)
mysql
->
server_language
,
MYF
(
MY_WME
));
}
else
mysql
->
charset
=
default_charset_info
;
if
(
!
mysql
->
charset
)
{
mysql
->
net
.
last_errno
=
CR_CANT_READ_CHARSET
;
strmov
(
mysql
->
net
.
sqlstate
,
"HY0000"
);
if
(
mysql
->
options
.
charset_dir
)
sprintf
(
mysql
->
net
.
last_error
,
ER
(
mysql
->
net
.
last_errno
),
charset_name
?
charset_name
:
"unknown"
,
mysql
->
options
.
charset_dir
);
else
{
char
cs_dir_name
[
FN_REFLEN
];
get_charsets_dir
(
cs_dir_name
);
sprintf
(
mysql
->
net
.
last_error
,
ER
(
mysql
->
net
.
last_errno
),
charset_name
?
charset_name
:
"unknown"
,
cs_dir_name
);
}
return
mysql
->
net
.
last_errno
;
}
return
0
;
}
MYSQL
*
STDCALL
MYSQL
*
STDCALL
mysql_real_connect
(
MYSQL
*
mysql
,
const
char
*
host
,
const
char
*
user
,
mysql_real_connect
(
MYSQL
*
mysql
,
const
char
*
host
,
const
char
*
user
,
...
@@ -222,10 +180,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
...
@@ -222,10 +180,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
init_embedded_mysql
(
mysql
,
client_flag
,
db_name
);
init_embedded_mysql
(
mysql
,
client_flag
,
db_name
);
if
(
check_embedded_connection
(
mysql
))
if
(
mysql_init_character_set
(
mysql
))
goto
error
;
goto
error
;
if
(
mysql_init_charset
(
mysql
))
if
(
check_embedded_connection
(
mysql
))
goto
error
;
goto
error
;
mysql
->
server_status
=
SERVER_STATUS_AUTOCOMMIT
;
mysql
->
server_status
=
SERVER_STATUS_AUTOCOMMIT
;
...
...
myisam/mi_check.c
View file @
6bf9e0ff
...
@@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
...
@@ -1158,13 +1158,14 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
#ifdef HAVE_RTREE_KEYS
#ifdef HAVE_RTREE_KEYS
(
keyinfo
->
flag
&
HA_SPATIAL
)
?
(
keyinfo
->
flag
&
HA_SPATIAL
)
?
rtree_find_first
(
info
,
key
,
info
->
lastkey
,
key_length
,
rtree_find_first
(
info
,
key
,
info
->
lastkey
,
key_length
,
SEARCH_SAME
)
:
MBR_EQUAL
|
MBR_DATA
)
:
#endif
#endif
_mi_search
(
info
,
keyinfo
,
info
->
lastkey
,
key_length
,
_mi_search
(
info
,
keyinfo
,
info
->
lastkey
,
key_length
,
SEARCH_SAME
,
info
->
s
->
state
.
key_root
[
key
]);
SEARCH_SAME
,
info
->
s
->
state
.
key_root
[
key
]);
if
(
search_result
)
if
(
search_result
)
{
{
mi_check_print_error
(
param
,
"Record at: %10s Can't find key for index: %2d"
,
mi_check_print_error
(
param
,
"Record at: %10s "
"Can't find key for index: %2d"
,
llstr
(
start_recpos
,
llbuff
),
key
+
1
);
llstr
(
start_recpos
,
llbuff
),
key
+
1
);
if
(
error
++
>
MAXERR
||
!
(
param
->
testflag
&
T_VERBOSE
))
if
(
error
++
>
MAXERR
||
!
(
param
->
testflag
&
T_VERBOSE
))
goto
err2
;
goto
err2
;
...
...
myisam/mi_create.c
View file @
6bf9e0ff
...
@@ -59,6 +59,8 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -59,6 +59,8 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
my_off_t
key_root
[
MI_MAX_POSSIBLE_KEY
],
key_del
[
MI_MAX_KEY_BLOCK_SIZE
];
my_off_t
key_root
[
MI_MAX_POSSIBLE_KEY
],
key_del
[
MI_MAX_KEY_BLOCK_SIZE
];
MI_CREATE_INFO
tmp_create_info
;
MI_CREATE_INFO
tmp_create_info
;
DBUG_ENTER
(
"mi_create"
);
DBUG_ENTER
(
"mi_create"
);
DBUG_PRINT
(
"enter"
,
(
"keys: %u columns: %u uniques: %u flags: %u"
,
keys
,
columns
,
uniques
,
flags
));
if
(
!
ci
)
if
(
!
ci
)
{
{
...
@@ -471,6 +473,16 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -471,6 +473,16 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
uniques
*
MI_UNIQUEDEF_SIZE
+
uniques
*
MI_UNIQUEDEF_SIZE
+
(
key_segs
+
unique_key_parts
)
*
HA_KEYSEG_SIZE
+
(
key_segs
+
unique_key_parts
)
*
HA_KEYSEG_SIZE
+
columns
*
MI_COLUMNDEF_SIZE
);
columns
*
MI_COLUMNDEF_SIZE
);
DBUG_PRINT
(
"info"
,
(
"info_length: %u"
,
info_length
));
/* There are only 16 bits for the total header length. */
if
(
info_length
>
65535
)
{
my_printf_error
(
0
,
"MyISAM table '%s' has too many columns and/or "
"indexes and/or unique constraints."
,
MYF
(
0
),
name
+
dirname_length
(
name
));
my_errno
=
HA_WRONG_CREATE_OPTION
;
goto
err
;
}
bmove
(
share
.
state
.
header
.
file_version
,(
byte
*
)
myisam_file_magic
,
4
);
bmove
(
share
.
state
.
header
.
file_version
,(
byte
*
)
myisam_file_magic
,
4
);
ci
->
old_options
=
options
|
(
ci
->
old_options
&
HA_OPTION_TEMP_COMPRESS_RECORD
?
ci
->
old_options
=
options
|
(
ci
->
old_options
&
HA_OPTION_TEMP_COMPRESS_RECORD
?
...
@@ -620,6 +632,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -620,6 +632,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
errpos
=
3
;
errpos
=
3
;
}
}
DBUG_PRINT
(
"info"
,
(
"write state info and base info"
));
if
(
mi_state_info_write
(
file
,
&
share
.
state
,
2
)
||
if
(
mi_state_info_write
(
file
,
&
share
.
state
,
2
)
||
mi_base_info_write
(
file
,
&
share
.
base
))
mi_base_info_write
(
file
,
&
share
.
base
))
goto
err
;
goto
err
;
...
@@ -633,6 +646,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -633,6 +646,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
#endif
#endif
/* Write key and keyseg definitions */
/* Write key and keyseg definitions */
DBUG_PRINT
(
"info"
,
(
"write key and keyseg definitions"
));
for
(
i
=
0
;
i
<
share
.
base
.
keys
-
uniques
;
i
++
)
for
(
i
=
0
;
i
<
share
.
base
.
keys
-
uniques
;
i
++
)
{
{
uint
sp_segs
=
(
keydefs
[
i
].
flag
&
HA_SPATIAL
)
?
2
*
SPDIMS
:
0
;
uint
sp_segs
=
(
keydefs
[
i
].
flag
&
HA_SPATIAL
)
?
2
*
SPDIMS
:
0
;
...
@@ -683,6 +697,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -683,6 +697,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
}
}
/* Save unique definition */
/* Save unique definition */
DBUG_PRINT
(
"info"
,
(
"write unique definitions"
));
for
(
i
=
0
;
i
<
share
.
state
.
header
.
uniques
;
i
++
)
for
(
i
=
0
;
i
<
share
.
state
.
header
.
uniques
;
i
++
)
{
{
HA_KEYSEG
*
keyseg_end
;
HA_KEYSEG
*
keyseg_end
;
...
@@ -713,6 +728,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -713,6 +728,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
goto
err
;
goto
err
;
}
}
}
}
DBUG_PRINT
(
"info"
,
(
"write field definitions"
));
for
(
i
=
0
;
i
<
share
.
base
.
fields
;
i
++
)
for
(
i
=
0
;
i
<
share
.
base
.
fields
;
i
++
)
if
(
mi_recinfo_write
(
file
,
&
recinfo
[
i
]))
if
(
mi_recinfo_write
(
file
,
&
recinfo
[
i
]))
goto
err
;
goto
err
;
...
@@ -727,6 +743,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
...
@@ -727,6 +743,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
#endif
#endif
/* Enlarge files */
/* Enlarge files */
DBUG_PRINT
(
"info"
,
(
"enlarge to keystart: %lu"
,
(
ulong
)
share
.
base
.
keystart
));
if
(
my_chsize
(
file
,(
ulong
)
share
.
base
.
keystart
,
0
,
MYF
(
0
)))
if
(
my_chsize
(
file
,(
ulong
)
share
.
base
.
keystart
,
0
,
MYF
(
0
)))
goto
err
;
goto
err
;
...
...
myisam/mi_delete_table.c
View file @
6bf9e0ff
...
@@ -34,12 +34,24 @@ int mi_delete_table(const char *name)
...
@@ -34,12 +34,24 @@ int mi_delete_table(const char *name)
#ifdef USE_RAID
#ifdef USE_RAID
{
{
MI_INFO
*
info
;
MI_INFO
*
info
;
/* we use 'open_for_repair' to be able to delete a crashed table */
/*
if
(
!
(
info
=
mi_open
(
name
,
O_RDONLY
,
HA_OPEN_FOR_REPAIR
)))
When built with RAID support, we need to determine if this table
DBUG_RETURN
(
my_errno
);
makes use of the raid feature. If yes, we need to remove all raid
raid_type
=
info
->
s
->
base
.
raid_type
;
chunks. This is done with my_raid_delete(). Unfortunately it is
raid_chunks
=
info
->
s
->
base
.
raid_chunks
;
necessary to open the table just to check this. We use
mi_close
(
info
);
'open_for_repair' to be able to open even a crashed table. If even
this open fails, we assume no raid configuration for this table
and try to remove the normal data file only. This may however
leave the raid chunks behind.
*/
if
(
!
(
info
=
mi_open
(
name
,
O_RDONLY
,
HA_OPEN_FOR_REPAIR
)))
raid_type
=
0
;
else
{
raid_type
=
info
->
s
->
base
.
raid_type
;
raid_chunks
=
info
->
s
->
base
.
raid_chunks
;
mi_close
(
info
);
}
}
}
#ifdef EXTRA_DEBUG
#ifdef EXTRA_DEBUG
check_table_is_closed
(
name
,
"delete"
);
check_table_is_closed
(
name
,
"delete"
);
...
...
myisam/mi_dynrec.c
View file @
6bf9e0ff
...
@@ -1155,6 +1155,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
...
@@ -1155,6 +1155,9 @@ int _mi_read_dynamic_record(MI_INFO *info, my_off_t filepos, byte *buf)
info
->
rec_cache
.
pos_in_file
<=
block_info
.
next_filepos
&&
info
->
rec_cache
.
pos_in_file
<=
block_info
.
next_filepos
&&
flush_io_cache
(
&
info
->
rec_cache
))
flush_io_cache
(
&
info
->
rec_cache
))
goto
err
;
goto
err
;
/* A corrupted table can have wrong pointers. (Bug# 19835) */
if
(
block_info
.
next_filepos
==
HA_OFFSET_ERROR
)
goto
panic
;
info
->
rec_cache
.
seek_not_done
=
1
;
info
->
rec_cache
.
seek_not_done
=
1
;
if
((
b_type
=
_mi_get_block_info
(
&
block_info
,
file
,
if
((
b_type
=
_mi_get_block_info
(
&
block_info
,
file
,
block_info
.
next_filepos
))
block_info
.
next_filepos
))
...
...
myisam/mi_key.c
View file @
6bf9e0ff
...
@@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
...
@@ -64,7 +64,7 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
TODO: nulls processing
TODO: nulls processing
*/
*/
#ifdef HAVE_SPATIAL
#ifdef HAVE_SPATIAL
return
sp_make_key
(
info
,
keynr
,
key
,
record
,
filepos
);
DBUG_RETURN
(
sp_make_key
(
info
,
keynr
,
key
,
record
,
filepos
)
);
#else
#else
DBUG_ASSERT
(
0
);
/* mi_open should check that this never happens*/
DBUG_ASSERT
(
0
);
/* mi_open should check that this never happens*/
#endif
#endif
...
...
myisam/mi_rkey.c
View file @
6bf9e0ff
...
@@ -68,6 +68,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
...
@@ -68,6 +68,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
if
(
fast_mi_readinfo
(
info
))
if
(
fast_mi_readinfo
(
info
))
goto
err
;
goto
err
;
if
(
share
->
concurrent_insert
)
if
(
share
->
concurrent_insert
)
rw_rdlock
(
&
share
->
key_root_lock
[
inx
]);
rw_rdlock
(
&
share
->
key_root_lock
[
inx
]);
...
@@ -90,24 +91,35 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
...
@@ -90,24 +91,35 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
case
HA_KEY_ALG_BTREE
:
case
HA_KEY_ALG_BTREE
:
default:
default:
if
(
!
_mi_search
(
info
,
keyinfo
,
key_buff
,
use_key_length
,
if
(
!
_mi_search
(
info
,
keyinfo
,
key_buff
,
use_key_length
,
myisam_read_vec
[
search_flag
],
info
->
s
->
state
.
key_root
[
inx
]))
myisam_read_vec
[
search_flag
],
info
->
s
->
state
.
key_root
[
inx
]))
{
{
while
(
info
->
lastpos
>=
info
->
state
->
data_file_length
)
/*
If we are searching for an exact key (including the data pointer)
and this was added by an concurrent insert,
then the result is "key not found".
*/
if
((
search_flag
==
HA_READ_KEY_EXACT
)
&&
(
info
->
lastpos
>=
info
->
state
->
data_file_length
))
{
my_errno
=
HA_ERR_KEY_NOT_FOUND
;
info
->
lastpos
=
HA_OFFSET_ERROR
;
}
else
while
(
info
->
lastpos
>=
info
->
state
->
data_file_length
)
{
{
/*
/*
Skip rows that are inserted by other threads since we got a lock
Skip rows that are inserted by other threads since we got a lock
Note that this can only happen if we are not searching after an
Note that this can only happen if we are not searching after an
exact key, because the keys are sorted according to position
exact key, because the keys are sorted according to position
*/
*/
if
(
_mi_search_next
(
info
,
keyinfo
,
info
->
lastkey
,
if
(
_mi_search_next
(
info
,
keyinfo
,
info
->
lastkey
,
info
->
lastkey_length
,
info
->
lastkey_length
,
myisam_readnext_vec
[
search_flag
],
myisam_readnext_vec
[
search_flag
],
info
->
s
->
state
.
key_root
[
inx
]))
info
->
s
->
state
.
key_root
[
inx
]))
break
;
break
;
}
}
}
}
}
}
if
(
share
->
concurrent_insert
)
if
(
share
->
concurrent_insert
)
rw_unlock
(
&
share
->
key_root_lock
[
inx
]);
rw_unlock
(
&
share
->
key_root_lock
[
inx
]);
...
...
myisam/rt_index.c
View file @
6bf9e0ff
...
@@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
...
@@ -183,9 +183,11 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
return
-
1
;
return
-
1
;
}
}
/* Save searched key */
/*
memcpy
(
info
->
first_mbr_key
,
key
,
keyinfo
->
keylength
-
Save searched key, include data pointer.
info
->
s
->
base
.
rec_reflength
);
The data pointer is required if the search_flag contains MBR_DATA.
*/
memcpy
(
info
->
first_mbr_key
,
key
,
keyinfo
->
keylength
);
info
->
last_rkey_length
=
key_length
;
info
->
last_rkey_length
=
key_length
;
info
->
rtree_recursion_depth
=
-
1
;
info
->
rtree_recursion_depth
=
-
1
;
...
...
myisam/rt_mbr.c
View file @
6bf9e0ff
...
@@ -52,10 +52,14 @@
...
@@ -52,10 +52,14 @@
if (EQUAL_CMP(amin, amax, bmin, bmax)) \
if (EQUAL_CMP(amin, amax, bmin, bmax)) \
return 1; \
return 1; \
} \
} \
else
/* if (nextflag & MBR_DISJOINT) */
\
else
if (nextflag & MBR_DISJOINT)
\
{ \
{ \
if (DISJOINT_CMP(amin, amax, bmin, bmax)) \
if (DISJOINT_CMP(amin, amax, bmin, bmax)) \
return 1; \
return 1; \
}\
else
/* if unknown comparison operator */
\
{ \
DBUG_ASSERT(0); \
}
}
#define RT_CMP_KORR(type, korr_func, len, nextflag) \
#define RT_CMP_KORR(type, korr_func, len, nextflag) \
...
...
mysql-test/r/func_sapdb.result
View file @
6bf9e0ff
...
@@ -81,6 +81,12 @@ makedate(1997,1)
...
@@ -81,6 +81,12 @@ makedate(1997,1)
select makedate(1997,0);
select makedate(1997,0);
makedate(1997,0)
makedate(1997,0)
NULL
NULL
select makedate(9999,365);
makedate(9999,365)
9999-12-31
select makedate(9999,366);
makedate(9999,366)
NULL
select addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002");
select addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002");
addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
addtime("1997-12-31 23:59:59.999999", "1 1:1:1.000002")
1998-01-02 01:01:01.000001
1998-01-02 01:01:01.000001
...
...
mysql-test/r/func_time.result
View file @
6bf9e0ff
...
@@ -360,6 +360,12 @@ extract(SECOND FROM "1999-01-02 10:11:12")
...
@@ -360,6 +360,12 @@ extract(SECOND FROM "1999-01-02 10:11:12")
select extract(MONTH FROM "2001-02-00");
select extract(MONTH FROM "2001-02-00");
extract(MONTH FROM "2001-02-00")
extract(MONTH FROM "2001-02-00")
2
2
SELECT DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
DATE_SUB(str_to_date('9999-12-31 00:01:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
9999-12-31 00:00:00
SELECT DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE);
DATE_ADD(str_to_date('9999-12-30 23:59:00','%Y-%m-%d %H:%i:%s'), INTERVAL 1 MINUTE)
9999-12-31 00:00:00
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
quarter
quarter
1
1
...
...
mysql-test/r/gis-rtree.result
View file @
6bf9e0ff
...
@@ -816,3 +816,43 @@ check table t1 extended;
...
@@ -816,3 +816,43 @@ check table t1 extended;
Table Op Msg_type Msg_text
Table Op Msg_type Msg_text
test.t1 check status OK
test.t1 check status OK
drop table t1;
drop table t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
CREATE TABLE t1 (
c1 geometry NOT NULL default '',
SPATIAL KEY i1 (c1(32))
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'));
INSERT INTO t1 (c1) VALUES (
PolygonFromText('POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'));
CHECK TABLE t1 EXTENDED;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
mysql-test/r/gis.result
View file @
6bf9e0ff
...
@@ -694,3 +694,13 @@ alter table t1 add primary key pti(pt);
...
@@ -694,3 +694,13 @@ alter table t1 add primary key pti(pt);
ERROR 42000: BLOB/TEXT column 'pt' used in key specification without a key length
ERROR 42000: BLOB/TEXT column 'pt' used in key specification without a key length
alter table t1 add primary key pti(pt(20));
alter table t1 add primary key pti(pt(20));
drop table t1;
drop table t1;
create table t1 (g GEOMETRY);
select * from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 g g 255 4294967295 0 Y 144 0 63
g
select asbinary(g) from t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def asbinary(g) 252 8192 0 Y 128 0 63
asbinary(g)
drop table t1;
mysql-test/r/key.result
View file @
6bf9e0ff
...
@@ -330,6 +330,16 @@ alter table t1 add key (c1,c1,c2);
...
@@ -330,6 +330,16 @@ alter table t1 add key (c1,c1,c2);
ERROR 42S21: Duplicate column name 'c1'
ERROR 42S21: Duplicate column name 'c1'
drop table t1;
drop table t1;
create table t1 (
create table t1 (
i1 INT NOT NULL,
i2 INT NOT NULL,
UNIQUE i1idx (i1),
UNIQUE i2idx (i2));
desc t1;
Field Type Null Key Default Extra
i1 int(11) NO UNI
i2 int(11) NO UNI
drop table t1;
create table t1 (
c1 int,
c1 int,
c2 varchar(20) not null,
c2 varchar(20) not null,
primary key (c1),
primary key (c1),
...
...
mysql-test/r/myisam.result
View file @
6bf9e0ff
...
@@ -747,6 +747,19 @@ select count(id1) from t1 where id2 = 10;
...
@@ -747,6 +747,19 @@ select count(id1) from t1 where id2 = 10;
count(id1)
count(id1)
5
5
drop table t1;
drop table t1;
CREATE TABLE t1(a TINYINT, KEY(a)) ENGINE=MyISAM;
INSERT INTO t1 VALUES(1);
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
MAX(a)
1
ALTER TABLE t1 DISABLE KEYS;
SELECT MAX(a) FROM t1;
MAX(a)
1
SELECT MAX(a) FROM t1 IGNORE INDEX(a);
MAX(a)
1
DROP TABLE t1;
CREATE TABLE t1(a CHAR(9), b VARCHAR(7)) ENGINE=MyISAM;
CREATE TABLE t1(a CHAR(9), b VARCHAR(7)) ENGINE=MyISAM;
INSERT INTO t1(a) VALUES('xxxxxxxxx'),('xxxxxxxxx');
INSERT INTO t1(a) VALUES('xxxxxxxxx'),('xxxxxxxxx');
UPDATE t1 AS ta1,t1 AS ta2 SET ta1.b='aaaaaa',ta2.b='bbbbbb';
UPDATE t1 AS ta1,t1 AS ta2 SET ta1.b='aaaaaa',ta2.b='bbbbbb';
...
...
mysql-test/r/symlink.result
View file @
6bf9e0ff
...
@@ -74,18 +74,24 @@ t9 CREATE TABLE `t9` (
...
@@ -74,18 +74,24 @@ t9 CREATE TABLE `t9` (
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
) ENGINE=MyISAM AUTO_INCREMENT=16725 DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/' INDEX DIRECTORY='MYSQLTEST_VARDIR/run/'
drop database mysqltest;
drop database mysqltest;
create table t1 (a int not null) engine=myisam;
create table t1 (a int not null) engine=myisam;
Warnings:
Warning 0 DATA DIRECTORY option ignored
show create table t1;
show create table t1;
Table Create Table
Table Create Table
t1 CREATE TABLE `t1` (
t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL
`a` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
) ENGINE=MyISAM DEFAULT CHARSET=latin1
alter table t1 add b int;
alter table t1 add b int;
Warnings:
Warning 0 DATA DIRECTORY option ignored
show create table t1;
show create table t1;
Table Create Table
Table Create Table
t1 CREATE TABLE `t1` (
t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL,
`a` int(11) NOT NULL,
`b` int(11) default NULL
`b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Warnings:
Warning 0 INDEX DIRECTORY option ignored
show create table t1;
show create table t1;
Table Create Table
Table Create Table
t1 CREATE TABLE `t1` (
t1 CREATE TABLE `t1` (
...
...
mysql-test/t/func_sapdb.test
View file @
6bf9e0ff
...
@@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001");
...
@@ -43,6 +43,8 @@ select weekofyear("1997-11-30 23:59:59.000001");
select
makedate
(
1997
,
1
);
select
makedate
(
1997
,
1
);
select
makedate
(
1997
,
0
);
select
makedate
(
1997
,
0
);
select
makedate
(
9999
,
365
);
select
makedate
(
9999
,
366
);
#Time functions
#Time functions
...
...
mysql-test/t/func_time.test
View file @
6bf9e0ff
...
@@ -140,6 +140,10 @@ select extract(SECOND FROM "1999-01-02 10:11:12");
...
@@ -140,6 +140,10 @@ select extract(SECOND FROM "1999-01-02 10:11:12");
select
extract
(
MONTH
FROM
"2001-02-00"
);
select
extract
(
MONTH
FROM
"2001-02-00"
);
#
#
# MySQL Bugs: #12356: DATE_SUB or DATE_ADD incorrectly returns null
#
SELECT
DATE_SUB
(
str_to_date
(
'9999-12-31 00:01:00'
,
'%Y-%m-%d %H:%i:%s'
),
INTERVAL
1
MINUTE
);
SELECT
DATE_ADD
(
str_to_date
(
'9999-12-30 23:59:00'
,
'%Y-%m-%d %H:%i:%s'
),
INTERVAL
1
MINUTE
);
# test EXTRACT QUARTER (Bug #18100)
# test EXTRACT QUARTER (Bug #18100)
#
#
...
...
mysql-test/t/gis-rtree.test
View file @
6bf9e0ff
...
@@ -187,4 +187,48 @@ check table t1 extended;
...
@@ -187,4 +187,48 @@ check table t1 extended;
drop
table
t1
;
drop
table
t1
;
#
# Bug#17877 - Corrupted spatial index
#
CREATE
TABLE
t1
(
c1
geometry
NOT
NULL
default
''
,
SPATIAL
KEY
i1
(
c1
(
32
))
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
# This showed a missing key.
CHECK
TABLE
t1
EXTENDED
;
DROP
TABLE
t1
;
#
CREATE
TABLE
t1
(
c1
geometry
NOT
NULL
default
''
,
SPATIAL
KEY
i1
(
c1
(
32
))
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-65.7402776999 -96.6686111000,
-65.7372222000 -96.5516666000,
-65.8502777000 -96.5461111000,
-65.8527777000 -96.6627777000,
-65.7402776999 -96.6686111000))'
));
# This is the same as the first insert to get a non-unique key.
INSERT
INTO
t1
(
c1
)
VALUES
(
PolygonFromText
(
'POLYGON((-18.6086111000 -66.9327777000,
-18.6055555000 -66.8158332999,
-18.7186111000 -66.8102777000,
-18.7211111000 -66.9269443999,
-18.6086111000 -66.9327777000))'
));
# This showed (and still shows) OK.
CHECK
TABLE
t1
EXTENDED
;
DROP
TABLE
t1
;
# End of 4.1 tests
# End of 4.1 tests
mysql-test/t/gis.test
View file @
6bf9e0ff
...
@@ -409,3 +409,10 @@ create table t1(pt GEOMETRY);
...
@@ -409,3 +409,10 @@ create table t1(pt GEOMETRY);
alter
table
t1
add
primary
key
pti
(
pt
);
alter
table
t1
add
primary
key
pti
(
pt
);
alter
table
t1
add
primary
key
pti
(
pt
(
20
));
alter
table
t1
add
primary
key
pti
(
pt
(
20
));
drop
table
t1
;
drop
table
t1
;
--
enable_metadata
create
table
t1
(
g
GEOMETRY
);
select
*
from
t1
;
select
asbinary
(
g
)
from
t1
;
--
disable_metadata
drop
table
t1
;
mysql-test/t/key.test
View file @
6bf9e0ff
...
@@ -325,6 +325,17 @@ alter table t1 add key (c1,c2,c1);
...
@@ -325,6 +325,17 @@ alter table t1 add key (c1,c2,c1);
alter
table
t1
add
key
(
c1
,
c1
,
c2
);
alter
table
t1
add
key
(
c1
,
c1
,
c2
);
drop
table
t1
;
drop
table
t1
;
#
# Bug#11228: DESC shows arbitrary column as "PRI"
#
create
table
t1
(
i1
INT
NOT
NULL
,
i2
INT
NOT
NULL
,
UNIQUE
i1idx
(
i1
),
UNIQUE
i2idx
(
i2
));
desc
t1
;
drop
table
t1
;
#
#
# Bug#12565 - ERROR 1034 when running simple UPDATE or DELETE
# Bug#12565 - ERROR 1034 when running simple UPDATE or DELETE
# on large MyISAM table
# on large MyISAM table
...
...
mysql-test/t/myisam.test
View file @
6bf9e0ff
...
@@ -697,6 +697,18 @@ select count(*) from t1 where id2 = 10;
...
@@ -697,6 +697,18 @@ select count(*) from t1 where id2 = 10;
select
count
(
id1
)
from
t1
where
id2
=
10
;
select
count
(
id1
)
from
t1
where
id2
=
10
;
drop
table
t1
;
drop
table
t1
;
#
# BUG##20357 - Got error 124 from storage engine using MIN and MAX functions
# in queries
#
CREATE
TABLE
t1
(
a
TINYINT
,
KEY
(
a
))
ENGINE
=
MyISAM
;
INSERT
INTO
t1
VALUES
(
1
);
SELECT
MAX
(
a
)
FROM
t1
IGNORE
INDEX
(
a
);
ALTER
TABLE
t1
DISABLE
KEYS
;
SELECT
MAX
(
a
)
FROM
t1
;
SELECT
MAX
(
a
)
FROM
t1
IGNORE
INDEX
(
a
);
DROP
TABLE
t1
;
#
#
# BUG#18036 - update of table joined to self reports table as crashed
# BUG#18036 - update of table joined to self reports table as crashed
#
#
...
...
scripts/make_binary_distribution.sh
View file @
6bf9e0ff
...
@@ -178,11 +178,21 @@ if [ $BASE_SYSTEM = "netware" ] ; then
...
@@ -178,11 +178,21 @@ if [ $BASE_SYSTEM = "netware" ] ; then
fi
fi
copyfileto
$BASE
/lib
\
copyfileto
$BASE
/lib
\
libmysql/.libs/libmysqlclient.a libmysql/.libs/libmysqlclient.so
*
\
libmysql/.libs/libmysqlclient.a
\
libmysql/libmysqlclient.
*
libmysql_r/.libs/libmysqlclient_r.a
\
libmysql/.libs/libmysqlclient.so
*
\
libmysql_r/.libs/libmysqlclient_r.so
*
libmysql_r/libmysqlclient_r.
*
\
libmysql/.libs/libmysqlclient.sl
*
\
libmysql/.libs/libmysqlclient
*
.dylib
\
libmysql/libmysqlclient.
*
\
libmysql_r/.libs/libmysqlclient_r.a
\
libmysql_r/.libs/libmysqlclient_r.so
*
\
libmysql_r/.libs/libmysqlclient_r.sl
*
\
libmysql_r/.libs/libmysqlclient_r
*
.dylib
\
libmysql_r/libmysqlclient_r.
*
\
libmysqld/.libs/libmysqld.a
\
libmysqld/.libs/libmysqld.so
*
\
libmysqld/.libs/libmysqld.sl
*
\
libmysqld/.libs/libmysqld
*
.dylib
\
mysys/libmysys.a strings/libmystrings.a dbug/libdbug.a
\
mysys/libmysys.a strings/libmystrings.a dbug/libdbug.a
\
libmysqld/.libs/libmysqld.a libmysqld/.libs/libmysqld.so
*
\
libmysqld/libmysqld.a netware/libmysql.imp
\
libmysqld/libmysqld.a netware/libmysql.imp
\
zlib/.libs/libz.a
zlib/.libs/libz.a
...
...
sql-common/client.c
View file @
6bf9e0ff
...
@@ -130,6 +130,8 @@ static void mysql_close_free(MYSQL *mysql);
...
@@ -130,6 +130,8 @@ static void mysql_close_free(MYSQL *mysql);
static
int
wait_for_data
(
my_socket
fd
,
uint
timeout
);
static
int
wait_for_data
(
my_socket
fd
,
uint
timeout
);
#endif
#endif
CHARSET_INFO
*
default_client_charset_info
=
&
my_charset_latin1
;
/****************************************************************************
/****************************************************************************
A modified version of connect(). my_connect() allows you to specify
A modified version of connect(). my_connect() allows you to specify
...
@@ -1431,7 +1433,7 @@ mysql_init(MYSQL *mysql)
...
@@ -1431,7 +1433,7 @@ mysql_init(MYSQL *mysql)
bzero
((
char
*
)
(
mysql
),
sizeof
(
*
(
mysql
)));
bzero
((
char
*
)
(
mysql
),
sizeof
(
*
(
mysql
)));
mysql
->
options
.
connect_timeout
=
CONNECT_TIMEOUT
;
mysql
->
options
.
connect_timeout
=
CONNECT_TIMEOUT
;
mysql
->
last_used_con
=
mysql
->
next_slave
=
mysql
->
master
=
mysql
;
mysql
->
last_used_con
=
mysql
->
next_slave
=
mysql
->
master
=
mysql
;
mysql
->
charset
=
default_charset_info
;
mysql
->
charset
=
default_c
lient_c
harset_info
;
strmov
(
mysql
->
net
.
sqlstate
,
not_error_sqlstate
);
strmov
(
mysql
->
net
.
sqlstate
,
not_error_sqlstate
);
/*
/*
By default, we are a replication pivot. The caller must reset it
By default, we are a replication pivot. The caller must reset it
...
@@ -1660,6 +1662,50 @@ static MYSQL_METHODS client_methods=
...
@@ -1660,6 +1662,50 @@ static MYSQL_METHODS client_methods=
#endif
#endif
};
};
C_MODE_START
int
mysql_init_character_set
(
MYSQL
*
mysql
)
{
NET
*
net
=
&
mysql
->
net
;
/* Set character set */
if
(
!
mysql
->
options
.
charset_name
&&
!
(
mysql
->
options
.
charset_name
=
my_strdup
(
MYSQL_DEFAULT_CHARSET_NAME
,
MYF
(
MY_WME
))))
return
1
;
{
const
char
*
save
=
charsets_dir
;
if
(
mysql
->
options
.
charset_dir
)
charsets_dir
=
mysql
->
options
.
charset_dir
;
mysql
->
charset
=
get_charset_by_csname
(
mysql
->
options
.
charset_name
,
MY_CS_PRIMARY
,
MYF
(
MY_WME
));
charsets_dir
=
save
;
}
if
(
!
mysql
->
charset
)
{
net
->
last_errno
=
CR_CANT_READ_CHARSET
;
strmov
(
net
->
sqlstate
,
unknown_sqlstate
);
if
(
mysql
->
options
.
charset_dir
)
my_snprintf
(
net
->
last_error
,
sizeof
(
net
->
last_error
)
-
1
,
ER
(
net
->
last_errno
),
mysql
->
options
.
charset_name
,
mysql
->
options
.
charset_dir
);
else
{
char
cs_dir_name
[
FN_REFLEN
];
get_charsets_dir
(
cs_dir_name
);
my_snprintf
(
net
->
last_error
,
sizeof
(
net
->
last_error
)
-
1
,
ER
(
net
->
last_errno
),
mysql
->
options
.
charset_name
,
cs_dir_name
);
}
return
1
;
}
return
0
;
}
C_MODE_END
MYSQL
*
MYSQL
*
CLI_MYSQL_REAL_CONNECT
(
MYSQL
*
mysql
,
const
char
*
host
,
const
char
*
user
,
CLI_MYSQL_REAL_CONNECT
(
MYSQL
*
mysql
,
const
char
*
host
,
const
char
*
user
,
const
char
*
passwd
,
const
char
*
db
,
const
char
*
passwd
,
const
char
*
db
,
...
@@ -1997,42 +2043,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
...
@@ -1997,42 +2043,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
goto
error
;
goto
error
;
}
}
/* Set character set */
if
(
mysql_init_character_set
(
mysql
))
if
(
!
mysql
->
options
.
charset_name
&&
!
(
mysql
->
options
.
charset_name
=
my_strdup
(
MYSQL_DEFAULT_CHARSET_NAME
,
MYF
(
MY_WME
))))
goto
error
;
{
const
char
*
save
=
charsets_dir
;
if
(
mysql
->
options
.
charset_dir
)
charsets_dir
=
mysql
->
options
.
charset_dir
;
mysql
->
charset
=
get_charset_by_csname
(
mysql
->
options
.
charset_name
,
MY_CS_PRIMARY
,
MYF
(
MY_WME
));
charsets_dir
=
save
;
}
if
(
!
mysql
->
charset
)
{
net
->
last_errno
=
CR_CANT_READ_CHARSET
;
strmov
(
net
->
sqlstate
,
unknown_sqlstate
);
if
(
mysql
->
options
.
charset_dir
)
my_snprintf
(
net
->
last_error
,
sizeof
(
net
->
last_error
)
-
1
,
ER
(
net
->
last_errno
),
mysql
->
options
.
charset_name
,
mysql
->
options
.
charset_dir
);
else
{
char
cs_dir_name
[
FN_REFLEN
];
get_charsets_dir
(
cs_dir_name
);
my_snprintf
(
net
->
last_error
,
sizeof
(
net
->
last_error
)
-
1
,
ER
(
net
->
last_errno
),
mysql
->
options
.
charset_name
,
cs_dir_name
);
}
goto
error
;
goto
error
;
}
/* Save connection information */
/* Save connection information */
if
(
!
my_multi_malloc
(
MYF
(
0
),
if
(
!
my_multi_malloc
(
MYF
(
0
),
...
...
sql/item_geofunc.h
View file @
6bf9e0ff
...
@@ -32,6 +32,7 @@ class Item_geometry_func: public Item_str_func
...
@@ -32,6 +32,7 @@ class Item_geometry_func: public Item_str_func
Item_geometry_func
(
Item
*
a
,
Item
*
b
,
Item
*
c
)
:
Item_str_func
(
a
,
b
,
c
)
{}
Item_geometry_func
(
Item
*
a
,
Item
*
b
,
Item
*
c
)
:
Item_str_func
(
a
,
b
,
c
)
{}
Item_geometry_func
(
List
<
Item
>
&
list
)
:
Item_str_func
(
list
)
{}
Item_geometry_func
(
List
<
Item
>
&
list
)
:
Item_str_func
(
list
)
{}
void
fix_length_and_dec
();
void
fix_length_and_dec
();
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_GEOMETRY
;
}
};
};
class
Item_func_geometry_from_text
:
public
Item_geometry_func
class
Item_func_geometry_from_text
:
public
Item_geometry_func
...
@@ -67,6 +68,7 @@ class Item_func_as_wkb: public Item_geometry_func
...
@@ -67,6 +68,7 @@ class Item_func_as_wkb: public Item_geometry_func
Item_func_as_wkb
(
Item
*
a
)
:
Item_geometry_func
(
a
)
{}
Item_func_as_wkb
(
Item
*
a
)
:
Item_geometry_func
(
a
)
{}
const
char
*
func_name
()
const
{
return
"aswkb"
;
}
const
char
*
func_name
()
const
{
return
"aswkb"
;
}
String
*
val_str
(
String
*
);
String
*
val_str
(
String
*
);
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_BLOB
;
}
};
};
class
Item_func_geometry_type
:
public
Item_str_func
class
Item_func_geometry_type
:
public
Item_str_func
...
...
sql/item_timefunc.cc
View file @
6bf9e0ff
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
/* TODO: Move month and days to language files */
/* TODO: Move month and days to language files */
/* Day number for Dec 31st, 9999 */
#define MAX_DAY_NUMBER 3652424L
#define MAX_DAY_NUMBER 3652424L
static
const
char
*
month_names
[]
=
static
const
char
*
month_names
[]
=
...
@@ -408,7 +409,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
...
@@ -408,7 +409,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
if
(
yearday
>
0
)
if
(
yearday
>
0
)
{
{
uint
days
=
calc_daynr
(
l_time
->
year
,
1
,
1
)
+
yearday
-
1
;
uint
days
=
calc_daynr
(
l_time
->
year
,
1
,
1
)
+
yearday
-
1
;
if
(
days
<=
0
||
days
>
=
MAX_DAY_NUMBER
)
if
(
days
<=
0
||
days
>
MAX_DAY_NUMBER
)
goto
err
;
goto
err
;
get_date_from_daynr
(
days
,
&
l_time
->
year
,
&
l_time
->
month
,
&
l_time
->
day
);
get_date_from_daynr
(
days
,
&
l_time
->
year
,
&
l_time
->
month
,
&
l_time
->
day
);
}
}
...
@@ -454,7 +455,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
...
@@ -454,7 +455,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
(
weekday
-
1
);
(
weekday
-
1
);
}
}
if
(
days
<=
0
||
days
>
=
MAX_DAY_NUMBER
)
if
(
days
<=
0
||
days
>
MAX_DAY_NUMBER
)
goto
err
;
goto
err
;
get_date_from_daynr
(
days
,
&
l_time
->
year
,
&
l_time
->
month
,
&
l_time
->
day
);
get_date_from_daynr
(
days
,
&
l_time
->
year
,
&
l_time
->
month
,
&
l_time
->
day
);
}
}
...
@@ -2035,7 +2036,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
...
@@ -2035,7 +2036,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
ltime
->
hour
=
(
uint
)
(
sec
/
3600
);
ltime
->
hour
=
(
uint
)
(
sec
/
3600
);
daynr
=
calc_daynr
(
ltime
->
year
,
ltime
->
month
,
1
)
+
days
;
daynr
=
calc_daynr
(
ltime
->
year
,
ltime
->
month
,
1
)
+
days
;
/* Day number from year 0 to 9999-12-31 */
/* Day number from year 0 to 9999-12-31 */
if
((
ulonglong
)
daynr
>
=
MAX_DAY_NUMBER
)
if
((
ulonglong
)
daynr
>
MAX_DAY_NUMBER
)
goto
invalid_date
;
goto
invalid_date
;
get_date_from_daynr
((
long
)
daynr
,
&
ltime
->
year
,
&
ltime
->
month
,
get_date_from_daynr
((
long
)
daynr
,
&
ltime
->
year
,
&
ltime
->
month
,
&
ltime
->
day
);
&
ltime
->
day
);
...
@@ -2046,7 +2047,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
...
@@ -2046,7 +2047,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, uint fuzzy_date)
period
=
(
calc_daynr
(
ltime
->
year
,
ltime
->
month
,
ltime
->
day
)
+
period
=
(
calc_daynr
(
ltime
->
year
,
ltime
->
month
,
ltime
->
day
)
+
sign
*
(
long
)
interval
.
day
);
sign
*
(
long
)
interval
.
day
);
/* Daynumber from year 0 to 9999-12-31 */
/* Daynumber from year 0 to 9999-12-31 */
if
((
ulong
)
period
>
=
MAX_DAY_NUMBER
)
if
((
ulong
)
period
>
MAX_DAY_NUMBER
)
goto
invalid_date
;
goto
invalid_date
;
get_date_from_daynr
((
long
)
period
,
&
ltime
->
year
,
&
ltime
->
month
,
&
ltime
->
day
);
get_date_from_daynr
((
long
)
period
,
&
ltime
->
year
,
&
ltime
->
month
,
&
ltime
->
day
);
break
;
break
;
...
@@ -2570,7 +2571,7 @@ String *Item_func_makedate::val_str(String *str)
...
@@ -2570,7 +2571,7 @@ String *Item_func_makedate::val_str(String *str)
days
=
calc_daynr
(
yearnr
,
1
,
1
)
+
daynr
-
1
;
days
=
calc_daynr
(
yearnr
,
1
,
1
)
+
daynr
-
1
;
/* Day number from year 0 to 9999-12-31 */
/* Day number from year 0 to 9999-12-31 */
if
(
days
>=
0
&&
days
<
MAX_DAY_NUMBER
)
if
(
days
>=
0
&&
days
<
=
MAX_DAY_NUMBER
)
{
{
null_value
=
0
;
null_value
=
0
;
get_date_from_daynr
(
days
,
&
l_time
.
year
,
&
l_time
.
month
,
&
l_time
.
day
);
get_date_from_daynr
(
days
,
&
l_time
.
year
,
&
l_time
.
month
,
&
l_time
.
day
);
...
...
sql/opt_sum.cc
View file @
6bf9e0ff
...
@@ -701,6 +701,12 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
...
@@ -701,6 +701,12 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
{
{
KEY_PART_INFO
*
part
,
*
part_end
;
KEY_PART_INFO
*
part
,
*
part_end
;
key_part_map
key_part_to_use
=
0
;
key_part_map
key_part_to_use
=
0
;
/*
Perform a check if index is not disabled by ALTER TABLE
or IGNORE INDEX.
*/
if
(
!
table
->
keys_in_use_for_query
.
is_set
(
idx
))
continue
;
uint
jdx
=
0
;
uint
jdx
=
0
;
*
prefix_len
=
0
;
*
prefix_len
=
0
;
for
(
part
=
keyinfo
->
key_part
,
part_end
=
part
+
keyinfo
->
key_parts
;
for
(
part
=
keyinfo
->
key_part
,
part_end
=
part
+
keyinfo
->
key_parts
;
...
...
sql/sql_class.cc
View file @
6bf9e0ff
...
@@ -930,7 +930,7 @@ bool select_send::send_data(List<Item> &items)
...
@@ -930,7 +930,7 @@ bool select_send::send_data(List<Item> &items)
Protocol
*
protocol
=
thd
->
protocol
;
Protocol
*
protocol
=
thd
->
protocol
;
char
buff
[
MAX_FIELD_WIDTH
];
char
buff
[
MAX_FIELD_WIDTH
];
String
buffer
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
);
String
buffer
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
);
DBUG_ENTER
(
"send_data"
);
DBUG_ENTER
(
"se
lect_send::se
nd_data"
);
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
Item
*
item
;
Item
*
item
;
...
@@ -1140,7 +1140,7 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
...
@@ -1140,7 +1140,7 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
bool
select_export
::
send_data
(
List
<
Item
>
&
items
)
bool
select_export
::
send_data
(
List
<
Item
>
&
items
)
{
{
DBUG_ENTER
(
"send_data"
);
DBUG_ENTER
(
"se
lect_export::se
nd_data"
);
char
buff
[
MAX_FIELD_WIDTH
],
null_buff
[
2
],
space
[
MAX_FIELD_WIDTH
];
char
buff
[
MAX_FIELD_WIDTH
],
null_buff
[
2
],
space
[
MAX_FIELD_WIDTH
];
bool
space_inited
=
0
;
bool
space_inited
=
0
;
String
tmp
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
),
*
res
;
String
tmp
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
),
*
res
;
...
@@ -1297,7 +1297,7 @@ bool select_dump::send_data(List<Item> &items)
...
@@ -1297,7 +1297,7 @@ bool select_dump::send_data(List<Item> &items)
String
tmp
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
),
*
res
;
String
tmp
(
buff
,
sizeof
(
buff
),
&
my_charset_bin
),
*
res
;
tmp
.
length
(
0
);
tmp
.
length
(
0
);
Item
*
item
;
Item
*
item
;
DBUG_ENTER
(
"send_data"
);
DBUG_ENTER
(
"se
lect_dump::se
nd_data"
);
if
(
unit
->
offset_limit_cnt
)
if
(
unit
->
offset_limit_cnt
)
{
// using limit offset,count
{
// using limit offset,count
...
...
sql/sql_parse.cc
View file @
6bf9e0ff
...
@@ -775,6 +775,37 @@ static void reset_mqh(LEX_USER *lu, bool get_them= 0)
...
@@ -775,6 +775,37 @@ static void reset_mqh(LEX_USER *lu, bool get_them= 0)
#endif
/* NO_EMBEDDED_ACCESS_CHECKS */
#endif
/* NO_EMBEDDED_ACCESS_CHECKS */
}
}
void
thd_init_client_charset
(
THD
*
thd
,
uint
cs_number
)
{
/*
Use server character set and collation if
- opt_character_set_client_handshake is not set
- client has not specified a character set
- client character set is the same as the servers
- client character set doesn't exists in server
*/
if
(
!
opt_character_set_client_handshake
||
!
(
thd
->
variables
.
character_set_client
=
get_charset
(
cs_number
,
MYF
(
0
)))
||
!
my_strcasecmp
(
&
my_charset_latin1
,
global_system_variables
.
character_set_client
->
name
,
thd
->
variables
.
character_set_client
->
name
))
{
thd
->
variables
.
character_set_client
=
global_system_variables
.
character_set_client
;
thd
->
variables
.
collation_connection
=
global_system_variables
.
collation_connection
;
thd
->
variables
.
character_set_results
=
global_system_variables
.
character_set_results
;
}
else
{
thd
->
variables
.
character_set_results
=
thd
->
variables
.
collation_connection
=
thd
->
variables
.
character_set_client
;
}
}
/*
/*
Perform handshake, authorize client and update thd ACL variables.
Perform handshake, authorize client and update thd ACL variables.
SYNOPSIS
SYNOPSIS
...
@@ -910,33 +941,7 @@ static int check_connection(THD *thd)
...
@@ -910,33 +941,7 @@ static int check_connection(THD *thd)
thd
->
client_capabilities
|=
((
ulong
)
uint2korr
(
net
->
read_pos
+
2
))
<<
16
;
thd
->
client_capabilities
|=
((
ulong
)
uint2korr
(
net
->
read_pos
+
2
))
<<
16
;
thd
->
max_client_packet_length
=
uint4korr
(
net
->
read_pos
+
4
);
thd
->
max_client_packet_length
=
uint4korr
(
net
->
read_pos
+
4
);
DBUG_PRINT
(
"info"
,
(
"client_character_set: %d"
,
(
uint
)
net
->
read_pos
[
8
]));
DBUG_PRINT
(
"info"
,
(
"client_character_set: %d"
,
(
uint
)
net
->
read_pos
[
8
]));
/*
thd_init_client_charset
(
thd
,
(
uint
)
net
->
read_pos
[
8
]);
Use server character set and collation if
- opt_character_set_client_handshake is not set
- client has not specified a character set
- client character set is the same as the servers
- client character set doesn't exists in server
*/
if
(
!
opt_character_set_client_handshake
||
!
(
thd
->
variables
.
character_set_client
=
get_charset
((
uint
)
net
->
read_pos
[
8
],
MYF
(
0
)))
||
!
my_strcasecmp
(
&
my_charset_latin1
,
global_system_variables
.
character_set_client
->
name
,
thd
->
variables
.
character_set_client
->
name
))
{
thd
->
variables
.
character_set_client
=
global_system_variables
.
character_set_client
;
thd
->
variables
.
collation_connection
=
global_system_variables
.
collation_connection
;
thd
->
variables
.
character_set_results
=
global_system_variables
.
character_set_results
;
}
else
{
thd
->
variables
.
character_set_results
=
thd
->
variables
.
collation_connection
=
thd
->
variables
.
character_set_client
;
}
thd
->
update_charset
();
thd
->
update_charset
();
end
=
(
char
*
)
net
->
read_pos
+
32
;
end
=
(
char
*
)
net
->
read_pos
+
32
;
}
}
...
@@ -3033,6 +3038,12 @@ mysql_execute_command(THD *thd)
...
@@ -3033,6 +3038,12 @@ mysql_execute_command(THD *thd)
}
}
}
}
/* Don't yet allow changing of symlinks with ALTER TABLE */
/* Don't yet allow changing of symlinks with ALTER TABLE */
if
(
lex
->
create_info
.
data_file_name
)
push_warning
(
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
0
,
"DATA DIRECTORY option ignored"
);
if
(
lex
->
create_info
.
index_file_name
)
push_warning
(
thd
,
MYSQL_ERROR
::
WARN_LEVEL_WARN
,
0
,
"INDEX DIRECTORY option ignored"
);
lex
->
create_info
.
data_file_name
=
lex
->
create_info
.
index_file_name
=
0
;
lex
->
create_info
.
data_file_name
=
lex
->
create_info
.
index_file_name
=
0
;
/* ALTER TABLE ends previous transaction */
/* ALTER TABLE ends previous transaction */
if
(
end_active_trans
(
thd
))
if
(
end_active_trans
(
thd
))
...
...
sql/table.cc
View file @
6bf9e0ff
...
@@ -678,27 +678,6 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
...
@@ -678,27 +678,6 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
if
(
outparam
->
key_info
[
key
].
flags
&
HA_FULLTEXT
)
if
(
outparam
->
key_info
[
key
].
flags
&
HA_FULLTEXT
)
outparam
->
key_info
[
key
].
algorithm
=
HA_KEY_ALG_FULLTEXT
;
outparam
->
key_info
[
key
].
algorithm
=
HA_KEY_ALG_FULLTEXT
;
if
(
primary_key
>=
MAX_KEY
&&
(
keyinfo
->
flags
&
HA_NOSAME
))
{
/*
If the UNIQUE key doesn't have NULL columns and is not a part key
declare this as a primary key.
*/
primary_key
=
key
;
for
(
i
=
0
;
i
<
keyinfo
->
key_parts
;
i
++
)
{
uint
fieldnr
=
key_part
[
i
].
fieldnr
;
if
(
!
fieldnr
||
outparam
->
field
[
fieldnr
-
1
]
->
null_ptr
||
outparam
->
field
[
fieldnr
-
1
]
->
key_length
()
!=
key_part
[
i
].
length
)
{
primary_key
=
MAX_KEY
;
// Can't be used
break
;
}
}
}
for
(
i
=
0
;
i
<
keyinfo
->
key_parts
;
key_part
++
,
i
++
)
for
(
i
=
0
;
i
<
keyinfo
->
key_parts
;
key_part
++
,
i
++
)
{
{
if
(
new_field_pack_flag
<=
1
)
if
(
new_field_pack_flag
<=
1
)
...
...
support-files/mysql.spec.sh
View file @
6bf9e0ff
...
@@ -155,6 +155,7 @@ Summary: MySQL - Benchmarks and test system
...
@@ -155,6 +155,7 @@ Summary: MySQL - Benchmarks and test system
Group: Applications/Databases
Group: Applications/Databases
Provides: mysql-bench
Provides: mysql-bench
Obsoletes: mysql-bench
Obsoletes: mysql-bench
AutoReqProv: no
%description bench
%description bench
This package contains MySQL benchmark scripts and data.
This package contains MySQL benchmark scripts and data.
...
...
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