mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge
sql/ha_ndbcluster.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/sql_table.cc: Auto merged sql/ha_ndbcluster.h: SCCS merged
This commit is contained in:
@ -779,3 +779,4 @@ ndb/config/config.mk
|
|||||||
ndb/src/common/mgmcommon/printConfig/*.d
|
ndb/src/common/mgmcommon/printConfig/*.d
|
||||||
ndb/src/mgmclient/test_cpcd/*.d
|
ndb/src/mgmclient/test_cpcd/*.d
|
||||||
*.d
|
*.d
|
||||||
|
libmysqld/examples/client_test.c
|
||||||
|
@ -29,19 +29,15 @@
|
|||||||
hp_rb_records_in_range()
|
hp_rb_records_in_range()
|
||||||
info HEAP handler
|
info HEAP handler
|
||||||
inx Index to use
|
inx Index to use
|
||||||
start_key Start of range. Null pointer if from first key
|
min_key Min key. Is = 0 if no min range
|
||||||
start_key_len Length of start key
|
max_key Max key. Is = 0 if no max range
|
||||||
start_search_flag Flag if start key should be included or not
|
|
||||||
end_key End of range. Null pointer if to last key
|
|
||||||
end_key_len Length of end key
|
|
||||||
end_search_flag Flag if start key should be included or not
|
|
||||||
|
|
||||||
NOTES
|
NOTES
|
||||||
start_search_flag can have one of the following values:
|
min_key.flag can have one of the following values:
|
||||||
HA_READ_KEY_EXACT Include the key in the range
|
HA_READ_KEY_EXACT Include the key in the range
|
||||||
HA_READ_AFTER_KEY Don't include key in range
|
HA_READ_AFTER_KEY Don't include key in range
|
||||||
|
|
||||||
end_search_flag can have one of the following values:
|
max_key.flag can have one of the following values:
|
||||||
HA_READ_BEFORE_KEY Don't include key in range
|
HA_READ_BEFORE_KEY Don't include key in range
|
||||||
HA_READ_AFTER_KEY Include all 'end_key' values in the range
|
HA_READ_AFTER_KEY Include all 'end_key' values in the range
|
||||||
|
|
||||||
@ -52,11 +48,8 @@
|
|||||||
the range.
|
the range.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
|
ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, key_range *min_key,
|
||||||
uint start_key_len,
|
key_range *max_key)
|
||||||
enum ha_rkey_function start_search_flag,
|
|
||||||
const byte *end_key, uint end_key_len,
|
|
||||||
enum ha_rkey_function end_search_flag)
|
|
||||||
{
|
{
|
||||||
ha_rows start_pos, end_pos;
|
ha_rows start_pos, end_pos;
|
||||||
HP_KEYDEF *keyinfo= info->s->keydef + inx;
|
HP_KEYDEF *keyinfo= info->s->keydef + inx;
|
||||||
@ -67,12 +60,12 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
|
|||||||
info->lastinx= inx;
|
info->lastinx= inx;
|
||||||
custom_arg.keyseg= keyinfo->seg;
|
custom_arg.keyseg= keyinfo->seg;
|
||||||
custom_arg.search_flag= SEARCH_FIND | SEARCH_SAME;
|
custom_arg.search_flag= SEARCH_FIND | SEARCH_SAME;
|
||||||
if (start_key)
|
if (min_key)
|
||||||
{
|
{
|
||||||
custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf,
|
custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf,
|
||||||
(uchar*) start_key,
|
(uchar*) min_key->key,
|
||||||
start_key_len);
|
min_key->length);
|
||||||
start_pos= tree_record_pos(rb_tree, info->recbuf, start_search_flag,
|
start_pos= tree_record_pos(rb_tree, info->recbuf, min_key->flag,
|
||||||
&custom_arg);
|
&custom_arg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -80,11 +73,12 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
|
|||||||
start_pos= 0;
|
start_pos= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end_key)
|
if (max_key)
|
||||||
{
|
{
|
||||||
custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf,
|
custom_arg.key_length= hp_rb_pack_key(keyinfo, (uchar*) info->recbuf,
|
||||||
(uchar*) end_key, end_key_len);
|
(uchar*) max_key->key,
|
||||||
end_pos= tree_record_pos(rb_tree, info->recbuf, end_search_flag,
|
max_key->length);
|
||||||
|
end_pos= tree_record_pos(rb_tree, info->recbuf, max_key->flag,
|
||||||
&custom_arg);
|
&custom_arg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -100,12 +94,13 @@ ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
|
|||||||
(end_pos == start_pos ? (ha_rows) 1 : end_pos - start_pos));
|
(end_pos == start_pos ? (ha_rows) 1 : end_pos - start_pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Search after a record based on a key */
|
/* Search after a record based on a key */
|
||||||
/* Sets info->current_ptr to found record */
|
/* Sets info->current_ptr to found record */
|
||||||
/* next_flag: Search=0, next=1, prev =2, same =3 */
|
/* next_flag: Search=0, next=1, prev =2, same =3 */
|
||||||
|
|
||||||
byte *hp_search(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *key,
|
byte *hp_search(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *key,
|
||||||
uint nextflag)
|
uint nextflag)
|
||||||
{
|
{
|
||||||
reg1 HASH_INFO *pos,*prev_ptr;
|
reg1 HASH_INFO *pos,*prev_ptr;
|
||||||
int flag;
|
int flag;
|
||||||
|
@ -182,11 +182,8 @@ extern int heap_disable_indexes(HP_INFO *info);
|
|||||||
extern int heap_enable_indexes(HP_INFO *info);
|
extern int heap_enable_indexes(HP_INFO *info);
|
||||||
extern int heap_indexes_are_disabled(HP_INFO *info);
|
extern int heap_indexes_are_disabled(HP_INFO *info);
|
||||||
extern void heap_update_auto_increment(HP_INFO *info, const byte *record);
|
extern void heap_update_auto_increment(HP_INFO *info, const byte *record);
|
||||||
ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, const byte *start_key,
|
ha_rows hp_rb_records_in_range(HP_INFO *info, int inx, key_range *min_key,
|
||||||
uint start_key_len,
|
key_range *max_key);
|
||||||
enum ha_rkey_function start_search_flag,
|
|
||||||
const byte *end_key, uint end_key_len,
|
|
||||||
enum ha_rkey_function end_search_flag);
|
|
||||||
int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
|
int heap_rkey(HP_INFO *info, byte *record, int inx, const byte *key,
|
||||||
uint key_len, enum ha_rkey_function find_flag);
|
uint key_len, enum ha_rkey_function find_flag);
|
||||||
extern gptr heap_find(HP_INFO *info,int inx,const byte *key);
|
extern gptr heap_find(HP_INFO *info,int inx,const byte *key);
|
||||||
|
@ -349,6 +349,16 @@ enum data_file_type {
|
|||||||
STATIC_RECORD,DYNAMIC_RECORD,COMPRESSED_RECORD
|
STATIC_RECORD,DYNAMIC_RECORD,COMPRESSED_RECORD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* For key ranges */
|
||||||
|
|
||||||
|
typedef struct st_key_range
|
||||||
|
{
|
||||||
|
const byte *key;
|
||||||
|
uint length;
|
||||||
|
enum ha_rkey_function flag;
|
||||||
|
} key_range;
|
||||||
|
|
||||||
|
|
||||||
/* For number of records */
|
/* For number of records */
|
||||||
#ifdef BIG_TABLES
|
#ifdef BIG_TABLES
|
||||||
#define rows2double(A) ulonglong2double(A)
|
#define rows2double(A) ulonglong2double(A)
|
||||||
|
@ -55,6 +55,12 @@ extern void bitmap_set_bit(MY_BITMAP *map, uint bitmap_bit);
|
|||||||
extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size);
|
extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size);
|
||||||
extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2);
|
extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2);
|
||||||
extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2);
|
extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2);
|
||||||
|
|
||||||
|
/* Fast, not thread safe, bitmap functions */
|
||||||
|
#define bitmap_fast_set_bit(MAP, BIT) (MAP)->bitmap[(BIT) / 8] |= (1 << ((BIT) & 7))
|
||||||
|
#define bitmap_fast_clear_bit(MAP, BIT) (MAP)->bitmap[(BIT) / 8] &= ~ (1 << ((BIT) & 7))
|
||||||
|
#define bitmap_fast_is_set(MAP, BIT) (MAP)->bitmap[(BIT) / 8] & (1 << ((BIT) & 7))
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -231,10 +231,7 @@ extern int mi_extra(struct st_myisam_info *file,
|
|||||||
enum ha_extra_function function,
|
enum ha_extra_function function,
|
||||||
void *extra_arg);
|
void *extra_arg);
|
||||||
extern ha_rows mi_records_in_range(struct st_myisam_info *info,int inx,
|
extern ha_rows mi_records_in_range(struct st_myisam_info *info,int inx,
|
||||||
const byte *start_key,uint start_key_len,
|
key_range *min_key, key_range *max_key);
|
||||||
enum ha_rkey_function start_search_flag,
|
|
||||||
const byte *end_key,uint end_key_len,
|
|
||||||
enum ha_rkey_function end_search_flag);
|
|
||||||
extern int mi_log(int activate_log);
|
extern int mi_log(int activate_log);
|
||||||
extern int mi_is_changed(struct st_myisam_info *info);
|
extern int mi_is_changed(struct st_myisam_info *info);
|
||||||
extern int mi_delete_all_rows(struct st_myisam_info *info);
|
extern int mi_delete_all_rows(struct st_myisam_info *info);
|
||||||
|
@ -101,10 +101,7 @@ extern int myrg_extra(MYRG_INFO *file,enum ha_extra_function function,
|
|||||||
void *extra_arg);
|
void *extra_arg);
|
||||||
extern void myrg_extrafunc(MYRG_INFO *info,invalidator_by_filename inv);
|
extern void myrg_extrafunc(MYRG_INFO *info,invalidator_by_filename inv);
|
||||||
extern ha_rows myrg_records_in_range(MYRG_INFO *info,int inx,
|
extern ha_rows myrg_records_in_range(MYRG_INFO *info,int inx,
|
||||||
const byte *start_key,uint start_key_len,
|
key_range *min_key, key_range *max_key);
|
||||||
enum ha_rkey_function start_search_flag,
|
|
||||||
const byte *end_key,uint end_key_len,
|
|
||||||
enum ha_rkey_function end_search_flag);
|
|
||||||
|
|
||||||
extern ulonglong myrg_position(MYRG_INFO *info);
|
extern ulonglong myrg_position(MYRG_INFO *info);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -399,7 +399,7 @@ btr_cur_search_to_nth_level(
|
|||||||
retry_page_get:
|
retry_page_get:
|
||||||
page = buf_page_get_gen(space, page_no, rw_latch, guess,
|
page = buf_page_get_gen(space, page_no, rw_latch, guess,
|
||||||
buf_mode,
|
buf_mode,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
mtr);
|
mtr);
|
||||||
if (page == NULL) {
|
if (page == NULL) {
|
||||||
/* This must be a search to perform an insert;
|
/* This must be a search to perform an insert;
|
||||||
@ -580,7 +580,7 @@ btr_cur_open_at_index_side(
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
page = buf_page_get_gen(space, page_no, RW_NO_LATCH, NULL,
|
page = buf_page_get_gen(space, page_no, RW_NO_LATCH, NULL,
|
||||||
BUF_GET,
|
BUF_GET,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
mtr);
|
mtr);
|
||||||
ut_ad(0 == ut_dulint_cmp(tree->id,
|
ut_ad(0 == ut_dulint_cmp(tree->id,
|
||||||
btr_page_get_index_id(page)));
|
btr_page_get_index_id(page)));
|
||||||
@ -689,7 +689,7 @@ btr_cur_open_at_rnd_pos(
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
page = buf_page_get_gen(space, page_no, RW_NO_LATCH, NULL,
|
page = buf_page_get_gen(space, page_no, RW_NO_LATCH, NULL,
|
||||||
BUF_GET,
|
BUF_GET,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
mtr);
|
mtr);
|
||||||
ut_ad(0 == ut_dulint_cmp(tree->id,
|
ut_ad(0 == ut_dulint_cmp(tree->id,
|
||||||
btr_page_get_index_id(page)));
|
btr_page_get_index_id(page)));
|
||||||
|
@ -764,7 +764,7 @@ btr_search_guess_on_hash(
|
|||||||
|
|
||||||
success = buf_page_get_known_nowait(latch_mode, page,
|
success = buf_page_get_known_nowait(latch_mode, page,
|
||||||
BUF_MAKE_YOUNG,
|
BUF_MAKE_YOUNG,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
mtr);
|
mtr);
|
||||||
|
|
||||||
rw_lock_s_unlock(&btr_search_latch);
|
rw_lock_s_unlock(&btr_search_latch);
|
||||||
@ -1048,7 +1048,7 @@ btr_search_drop_page_hash_when_freed(
|
|||||||
having to fear a deadlock. */
|
having to fear a deadlock. */
|
||||||
|
|
||||||
page = buf_page_get_gen(space, page_no, RW_S_LATCH, NULL,
|
page = buf_page_get_gen(space, page_no, RW_S_LATCH, NULL,
|
||||||
BUF_GET_IF_IN_POOL, IB__FILE__, __LINE__,
|
BUF_GET_IF_IN_POOL, __FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
|
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
|
@ -1048,7 +1048,7 @@ buf_page_get_gen(
|
|||||||
buf_frame_t* guess, /* in: guessed frame or NULL */
|
buf_frame_t* guess, /* in: guessed frame or NULL */
|
||||||
ulint mode, /* in: BUF_GET, BUF_GET_IF_IN_POOL,
|
ulint mode, /* in: BUF_GET, BUF_GET_IF_IN_POOL,
|
||||||
BUF_GET_NO_LATCH, BUF_GET_NOWAIT */
|
BUF_GET_NO_LATCH, BUF_GET_NOWAIT */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr) /* in: mini-transaction */
|
mtr_t* mtr) /* in: mini-transaction */
|
||||||
{
|
{
|
||||||
@ -1257,7 +1257,7 @@ buf_page_optimistic_get_func(
|
|||||||
frames */
|
frames */
|
||||||
dulint modify_clock,/* in: modify clock value if mode is
|
dulint modify_clock,/* in: modify clock value if mode is
|
||||||
..._GUESS_ON_CLOCK */
|
..._GUESS_ON_CLOCK */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr) /* in: mini-transaction */
|
mtr_t* mtr) /* in: mini-transaction */
|
||||||
{
|
{
|
||||||
@ -1382,7 +1382,7 @@ buf_page_get_known_nowait(
|
|||||||
ulint rw_latch,/* in: RW_S_LATCH, RW_X_LATCH */
|
ulint rw_latch,/* in: RW_S_LATCH, RW_X_LATCH */
|
||||||
buf_frame_t* guess, /* in: the known page frame */
|
buf_frame_t* guess, /* in: the known page frame */
|
||||||
ulint mode, /* in: BUF_MAKE_YOUNG or BUF_KEEP_OLD */
|
ulint mode, /* in: BUF_MAKE_YOUNG or BUF_KEEP_OLD */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr) /* in: mini-transaction */
|
mtr_t* mtr) /* in: mini-transaction */
|
||||||
{
|
{
|
||||||
@ -1742,7 +1742,7 @@ buf_page_create(
|
|||||||
buf_LRU_add_block(block, FALSE);
|
buf_LRU_add_block(block, FALSE);
|
||||||
|
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
buf_block_buf_fix_inc_debug(block, IB__FILE__, __LINE__);
|
buf_block_buf_fix_inc_debug(block, __FILE__, __LINE__);
|
||||||
#else
|
#else
|
||||||
buf_block_buf_fix_inc(block);
|
buf_block_buf_fix_inc(block);
|
||||||
#endif
|
#endif
|
||||||
|
@ -3042,7 +3042,7 @@ loop:
|
|||||||
if (page) {
|
if (page) {
|
||||||
ibool success = buf_page_get_known_nowait(RW_X_LATCH, page,
|
ibool success = buf_page_get_known_nowait(RW_X_LATCH, page,
|
||||||
BUF_KEEP_OLD,
|
BUF_KEEP_OLD,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
ut_a(success);
|
ut_a(success);
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
|
@ -132,7 +132,7 @@ to improve debugging. Only values RW_S_LATCH and RW_X_LATCH are allowed
|
|||||||
in LA! */
|
in LA! */
|
||||||
#define buf_page_get(SP, OF, LA, MTR) buf_page_get_gen(\
|
#define buf_page_get(SP, OF, LA, MTR) buf_page_get_gen(\
|
||||||
SP, OF, LA, NULL,\
|
SP, OF, LA, NULL,\
|
||||||
BUF_GET, IB__FILE__, __LINE__, MTR)
|
BUF_GET, __FILE__, __LINE__, MTR)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use these macros to bufferfix a page with no latching. Remember not to
|
Use these macros to bufferfix a page with no latching. Remember not to
|
||||||
read the contents of the page unless you know it is safe. Do not modify
|
read the contents of the page unless you know it is safe. Do not modify
|
||||||
@ -141,19 +141,19 @@ error-prone programming not to set a latch, and it should be used
|
|||||||
with care. */
|
with care. */
|
||||||
#define buf_page_get_with_no_latch(SP, OF, MTR) buf_page_get_gen(\
|
#define buf_page_get_with_no_latch(SP, OF, MTR) buf_page_get_gen(\
|
||||||
SP, OF, RW_NO_LATCH, NULL,\
|
SP, OF, RW_NO_LATCH, NULL,\
|
||||||
BUF_GET_NO_LATCH, IB__FILE__, __LINE__, MTR)
|
BUF_GET_NO_LATCH, __FILE__, __LINE__, MTR)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macros should be used instead of buf_page_get_gen, to
|
NOTE! The following macros should be used instead of buf_page_get_gen, to
|
||||||
improve debugging. Only values RW_S_LATCH and RW_X_LATCH are allowed as LA! */
|
improve debugging. Only values RW_S_LATCH and RW_X_LATCH are allowed as LA! */
|
||||||
#define buf_page_get_nowait(SP, OF, LA, MTR) buf_page_get_gen(\
|
#define buf_page_get_nowait(SP, OF, LA, MTR) buf_page_get_gen(\
|
||||||
SP, OF, LA, NULL,\
|
SP, OF, LA, NULL,\
|
||||||
BUF_GET_NOWAIT, IB__FILE__, __LINE__, MTR)
|
BUF_GET_NOWAIT, __FILE__, __LINE__, MTR)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macros should be used instead of
|
NOTE! The following macros should be used instead of
|
||||||
buf_page_optimistic_get_func, to improve debugging. Only values RW_S_LATCH and
|
buf_page_optimistic_get_func, to improve debugging. Only values RW_S_LATCH and
|
||||||
RW_X_LATCH are allowed as LA! */
|
RW_X_LATCH are allowed as LA! */
|
||||||
#define buf_page_optimistic_get(LA, BL, G, MC, MTR) buf_page_optimistic_get_func(\
|
#define buf_page_optimistic_get(LA, BL, G, MC, MTR) buf_page_optimistic_get_func(\
|
||||||
LA, BL, G, MC, IB__FILE__, __LINE__, MTR)
|
LA, BL, G, MC, __FILE__, __LINE__, MTR)
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
This is the general function used to get optimistic access to a database
|
This is the general function used to get optimistic access to a database
|
||||||
page. */
|
page. */
|
||||||
@ -168,7 +168,7 @@ buf_page_optimistic_get_func(
|
|||||||
frames */
|
frames */
|
||||||
dulint modify_clock,/* in: modify clock value if mode is
|
dulint modify_clock,/* in: modify clock value if mode is
|
||||||
..._GUESS_ON_CLOCK */
|
..._GUESS_ON_CLOCK */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr); /* in: mini-transaction */
|
mtr_t* mtr); /* in: mini-transaction */
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
@ -201,7 +201,7 @@ buf_page_get_known_nowait(
|
|||||||
ulint rw_latch,/* in: RW_S_LATCH, RW_X_LATCH */
|
ulint rw_latch,/* in: RW_S_LATCH, RW_X_LATCH */
|
||||||
buf_frame_t* guess, /* in: the known page frame */
|
buf_frame_t* guess, /* in: the known page frame */
|
||||||
ulint mode, /* in: BUF_MAKE_YOUNG or BUF_KEEP_OLD */
|
ulint mode, /* in: BUF_MAKE_YOUNG or BUF_KEEP_OLD */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr); /* in: mini-transaction */
|
mtr_t* mtr); /* in: mini-transaction */
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
@ -217,7 +217,7 @@ buf_page_get_gen(
|
|||||||
buf_frame_t* guess, /* in: guessed frame or NULL */
|
buf_frame_t* guess, /* in: guessed frame or NULL */
|
||||||
ulint mode, /* in: BUF_GET, BUF_GET_IF_IN_POOL,
|
ulint mode, /* in: BUF_GET, BUF_GET_IF_IN_POOL,
|
||||||
BUF_GET_NO_LATCH */
|
BUF_GET_NO_LATCH */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line where called */
|
ulint line, /* in: line where called */
|
||||||
mtr_t* mtr); /* in: mini-transaction */
|
mtr_t* mtr); /* in: mini-transaction */
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -585,7 +585,7 @@ buf_page_get_release_on_io(
|
|||||||
|
|
||||||
frame = buf_page_get_gen(space, offset, rw_latch, guess,
|
frame = buf_page_get_gen(space, offset, rw_latch, guess,
|
||||||
BUF_GET_IF_IN_POOL,
|
BUF_GET_IF_IN_POOL,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
mtr);
|
mtr);
|
||||||
if (frame != NULL) {
|
if (frame != NULL) {
|
||||||
|
|
||||||
|
@ -64,14 +64,14 @@ heap creation. */
|
|||||||
|
|
||||||
#define mem_heap_create(N) mem_heap_create_func(\
|
#define mem_heap_create(N) mem_heap_create_func(\
|
||||||
(N), NULL, MEM_HEAP_DYNAMIC,\
|
(N), NULL, MEM_HEAP_DYNAMIC,\
|
||||||
IB__FILE__, __LINE__)
|
__FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function! Macro for memory
|
Use this macro instead of the corresponding function! Macro for memory
|
||||||
heap creation. */
|
heap creation. */
|
||||||
|
|
||||||
#define mem_heap_create_in_buffer(N) mem_heap_create_func(\
|
#define mem_heap_create_in_buffer(N) mem_heap_create_func(\
|
||||||
(N), NULL, MEM_HEAP_BUFFER,\
|
(N), NULL, MEM_HEAP_BUFFER,\
|
||||||
IB__FILE__, __LINE__)
|
__FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function! Macro for memory
|
Use this macro instead of the corresponding function! Macro for memory
|
||||||
heap creation. */
|
heap creation. */
|
||||||
@ -79,7 +79,7 @@ heap creation. */
|
|||||||
#define mem_heap_create_in_btr_search(N) mem_heap_create_func(\
|
#define mem_heap_create_in_btr_search(N) mem_heap_create_func(\
|
||||||
(N), NULL, MEM_HEAP_BTR_SEARCH |\
|
(N), NULL, MEM_HEAP_BTR_SEARCH |\
|
||||||
MEM_HEAP_BUFFER,\
|
MEM_HEAP_BUFFER,\
|
||||||
IB__FILE__, __LINE__)
|
__FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function! Macro for fast
|
Use this macro instead of the corresponding function! Macro for fast
|
||||||
memory heap creation. An initial block of memory B is given by the
|
memory heap creation. An initial block of memory B is given by the
|
||||||
@ -88,14 +88,14 @@ mem_heap_free. See the parameter comment in mem_heap_create_func below. */
|
|||||||
|
|
||||||
#define mem_heap_fast_create(N, B) mem_heap_create_func(\
|
#define mem_heap_fast_create(N, B) mem_heap_create_func(\
|
||||||
(N), (B), MEM_HEAP_DYNAMIC,\
|
(N), (B), MEM_HEAP_DYNAMIC,\
|
||||||
IB__FILE__, __LINE__)
|
__FILE__, __LINE__)
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function! Macro for memory
|
Use this macro instead of the corresponding function! Macro for memory
|
||||||
heap freeing. */
|
heap freeing. */
|
||||||
|
|
||||||
#define mem_heap_free(heap) mem_heap_free_func(\
|
#define mem_heap_free(heap) mem_heap_free_func(\
|
||||||
(heap), IB__FILE__, __LINE__)
|
(heap), __FILE__, __LINE__)
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
NOTE: Use the corresponding macros instead of this function. Creates a
|
NOTE: Use the corresponding macros instead of this function. Creates a
|
||||||
memory heap which allocates memory from dynamic space. For debugging
|
memory heap which allocates memory from dynamic space. For debugging
|
||||||
@ -105,26 +105,27 @@ UNIV_INLINE
|
|||||||
mem_heap_t*
|
mem_heap_t*
|
||||||
mem_heap_create_func(
|
mem_heap_create_func(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
/* out, own: memory heap */
|
/* out, own: memory heap */
|
||||||
ulint n, /* in: desired start block size,
|
ulint n, /* in: desired start block size,
|
||||||
this means that a single user buffer
|
this means that a single user buffer
|
||||||
of size n will fit in the block,
|
of size n will fit in the block,
|
||||||
0 creates a default size block;
|
0 creates a default size block;
|
||||||
if init_block is not NULL, n tells
|
if init_block is not NULL, n tells
|
||||||
its size in bytes */
|
its size in bytes */
|
||||||
void* init_block, /* in: if very fast creation is
|
void* init_block, /* in: if very fast creation is
|
||||||
wanted, the caller can reserve some
|
wanted, the caller can reserve some
|
||||||
memory from its stack, for example,
|
memory from its stack, for example,
|
||||||
and pass it as the the initial block
|
and pass it as the the initial block
|
||||||
to the heap: then no OS call of malloc
|
to the heap: then no OS call of malloc
|
||||||
is needed at the creation. CAUTION:
|
is needed at the creation. CAUTION:
|
||||||
the caller must make sure the initial
|
the caller must make sure the initial
|
||||||
block is not unintentionally erased
|
block is not unintentionally erased
|
||||||
(if allocated in the stack), before
|
(if allocated in the stack), before
|
||||||
the memory heap is explicitly freed. */
|
the memory heap is explicitly freed. */
|
||||||
ulint type, /* in: MEM_HEAP_DYNAMIC or MEM_HEAP_BUFFER */
|
ulint type, /* in: MEM_HEAP_DYNAMIC
|
||||||
char* file_name, /* in: file name where created */
|
or MEM_HEAP_BUFFER */
|
||||||
ulint line /* in: line where created */
|
const char* file_name, /* in: file name where created */
|
||||||
|
ulint line /* in: line where created */
|
||||||
);
|
);
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
NOTE: Use the corresponding macro instead of this function. Frees the space
|
NOTE: Use the corresponding macro instead of this function. Frees the space
|
||||||
@ -135,7 +136,7 @@ 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 */
|
||||||
char* file_name __attribute__((unused)),
|
const char* file_name __attribute__((unused)),
|
||||||
/* in: file name where freed */
|
/* in: file name where freed */
|
||||||
ulint line __attribute__((unused)));
|
ulint line __attribute__((unused)));
|
||||||
/* in: line where freed */
|
/* in: line where freed */
|
||||||
@ -206,13 +207,13 @@ mem_heap_get_size(
|
|||||||
Use this macro instead of the corresponding function!
|
Use this macro instead of the corresponding function!
|
||||||
Macro for memory buffer allocation */
|
Macro for memory buffer allocation */
|
||||||
|
|
||||||
#define mem_alloc(N) mem_alloc_func((N), IB__FILE__, __LINE__)
|
#define mem_alloc(N) mem_alloc_func((N), __FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function!
|
Use this macro instead of the corresponding function!
|
||||||
Macro for memory buffer allocation */
|
Macro for memory buffer allocation */
|
||||||
|
|
||||||
#define mem_alloc_noninline(N) mem_alloc_func_noninline(\
|
#define mem_alloc_noninline(N) mem_alloc_func_noninline(\
|
||||||
(N), IB__FILE__, __LINE__)
|
(N), __FILE__, __LINE__)
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
NOTE: Use the corresponding macro instead of this function.
|
NOTE: Use the corresponding macro instead of this function.
|
||||||
Allocates a single buffer of memory from the dynamic memory of
|
Allocates a single buffer of memory from the dynamic memory of
|
||||||
@ -222,11 +223,11 @@ UNIV_INLINE
|
|||||||
void*
|
void*
|
||||||
mem_alloc_func(
|
mem_alloc_func(
|
||||||
/*===========*/
|
/*===========*/
|
||||||
/* out, own: free storage, NULL
|
/* out, own: free storage, NULL
|
||||||
if did not succeed */
|
if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
ulint n, /* in: desired number of bytes */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
);
|
);
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
NOTE: Use the corresponding macro instead of this function.
|
NOTE: Use the corresponding macro instead of this function.
|
||||||
@ -237,17 +238,17 @@ with mem_free. */
|
|||||||
void*
|
void*
|
||||||
mem_alloc_func_noninline(
|
mem_alloc_func_noninline(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
/* out, own: free storage, NULL if did not
|
/* out, own: free storage,
|
||||||
succeed */
|
NULL if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
ulint n, /* in: desired number of bytes */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
);
|
);
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
Use this macro instead of the corresponding function!
|
Use this macro instead of the corresponding function!
|
||||||
Macro for memory buffer freeing */
|
Macro for memory buffer freeing */
|
||||||
|
|
||||||
#define mem_free(PTR) mem_free_func((PTR), IB__FILE__, __LINE__)
|
#define mem_free(PTR) mem_free_func((PTR), __FILE__, __LINE__)
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
NOTE: Use the corresponding macro instead of this function.
|
NOTE: Use the corresponding macro instead of this function.
|
||||||
Frees a single buffer of storage from
|
Frees a single buffer of storage from
|
||||||
@ -256,9 +257,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
mem_free_func(
|
mem_free_func(
|
||||||
/*==========*/
|
/*==========*/
|
||||||
void* ptr, /* in, own: buffer to be freed */
|
void* ptr, /* in, own: buffer to be freed */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
);
|
);
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
Implements realloc. */
|
Implements realloc. */
|
||||||
@ -266,11 +267,12 @@ UNIV_INLINE
|
|||||||
void*
|
void*
|
||||||
mem_realloc(
|
mem_realloc(
|
||||||
/*========*/
|
/*========*/
|
||||||
/* out, own: free storage, NULL if did not succeed */
|
/* out, own: free storage,
|
||||||
void* buf, /* in: pointer to an old buffer */
|
NULL if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
void* buf, /* in: pointer to an old buffer */
|
||||||
char* file_name,/* in: file name where called */
|
ulint n, /* in: desired number of bytes */
|
||||||
ulint line); /* in: line where called */
|
const char* file_name, /* in: file name where called */
|
||||||
|
ulint line); /* in: line where called */
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Duplicates a NUL-terminated string. */
|
Duplicates a NUL-terminated string. */
|
||||||
|
@ -16,18 +16,18 @@ Creates a memory heap block where data can be allocated. */
|
|||||||
mem_block_t*
|
mem_block_t*
|
||||||
mem_heap_create_block(
|
mem_heap_create_block(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
/* out, own: memory heap block, NULL if did not
|
/* out, own: memory heap block,
|
||||||
succeed */
|
NULL if did not succeed */
|
||||||
mem_heap_t* heap,/* in: memory heap or NULL if first block should
|
mem_heap_t* heap, /* in: memory heap or NULL if first block
|
||||||
be created */
|
should be created */
|
||||||
ulint n, /* in: number of bytes needed for user data, or
|
ulint n, /* in: number of bytes needed for user data, or
|
||||||
if init_block is not NULL, its size in bytes */
|
if init_block is not NULL, its size in bytes */
|
||||||
void* init_block, /* in: init block in fast create, type must be
|
void* init_block, /* in: init block in fast create,
|
||||||
MEM_HEAP_DYNAMIC */
|
type must be MEM_HEAP_DYNAMIC */
|
||||||
ulint type, /* in: type of heap: MEM_HEAP_DYNAMIC or
|
ulint type, /* in: type of heap: MEM_HEAP_DYNAMIC or
|
||||||
MEM_HEAP_BUFFER */
|
MEM_HEAP_BUFFER */
|
||||||
char* file_name,/* in: file name where created */
|
const char* file_name,/* in: file name where created */
|
||||||
ulint line); /* in: line where created */
|
ulint line); /* in: line where created */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Frees a block from a memory heap. */
|
Frees a block from a memory heap. */
|
||||||
|
|
||||||
@ -377,27 +377,27 @@ UNIV_INLINE
|
|||||||
mem_heap_t*
|
mem_heap_t*
|
||||||
mem_heap_create_func(
|
mem_heap_create_func(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
/* out, own: memory heap */
|
/* out, own: memory heap */
|
||||||
ulint n, /* in: desired start block size,
|
ulint n, /* in: desired start block size,
|
||||||
this means that a single user buffer
|
this means that a single user buffer
|
||||||
of size n will fit in the block,
|
of size n will fit in the block,
|
||||||
0 creates a default size block;
|
0 creates a default size block;
|
||||||
if init_block is not NULL, n tells
|
if init_block is not NULL, n tells
|
||||||
its size in bytes */
|
its size in bytes */
|
||||||
void* init_block, /* in: if very fast creation is
|
void* init_block, /* in: if very fast creation is
|
||||||
wanted, the caller can reserve some
|
wanted, the caller can reserve some
|
||||||
memory from its stack, for example,
|
memory from its stack, for example,
|
||||||
and pass it as the the initial block
|
and pass it as the the initial block
|
||||||
to the heap: then no OS call of malloc
|
to the heap: then no OS call of malloc
|
||||||
is needed at the creation. CAUTION:
|
is needed at the creation. CAUTION:
|
||||||
the caller must make sure the initial
|
the caller must make sure the initial
|
||||||
block is not unintentionally erased
|
block is not unintentionally erased
|
||||||
(if allocated in the stack), before
|
(if allocated in the stack), before
|
||||||
the memory heap is explicitly freed. */
|
the memory heap is explicitly freed. */
|
||||||
ulint type, /* in: MEM_HEAP_DYNAMIC, or MEM_HEAP_BUFFER
|
ulint type, /* in: MEM_HEAP_DYNAMIC
|
||||||
possibly ORed to MEM_HEAP_BTR_SEARCH */
|
or MEM_HEAP_BUFFER */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mem_block_t* block;
|
mem_block_t* block;
|
||||||
@ -440,10 +440,9 @@ 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 */
|
||||||
char* file_name __attribute__((unused)),
|
const char* file_name __attribute__((unused)),
|
||||||
/* in: file name where freed */
|
/* in: file name where freed */
|
||||||
ulint line __attribute__((unused)))
|
ulint line __attribute__((unused)))
|
||||||
/* in: line where freed */
|
|
||||||
{
|
{
|
||||||
mem_block_t* block;
|
mem_block_t* block;
|
||||||
mem_block_t* prev_block;
|
mem_block_t* prev_block;
|
||||||
@ -486,11 +485,11 @@ UNIV_INLINE
|
|||||||
void*
|
void*
|
||||||
mem_alloc_func(
|
mem_alloc_func(
|
||||||
/*===========*/
|
/*===========*/
|
||||||
/* out, own: free storage, NULL if did not
|
/* out, own: free storage, NULL
|
||||||
succeed */
|
if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
ulint n, /* in: desired number of bytes */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mem_heap_t* heap;
|
mem_heap_t* heap;
|
||||||
@ -523,9 +522,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
mem_free_func(
|
mem_free_func(
|
||||||
/*==========*/
|
/*==========*/
|
||||||
void* ptr, /* in, own: buffer to be freed */
|
void* ptr, /* in, own: buffer to be freed */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mem_heap_t* heap;
|
mem_heap_t* heap;
|
||||||
@ -569,11 +568,12 @@ UNIV_INLINE
|
|||||||
void*
|
void*
|
||||||
mem_realloc(
|
mem_realloc(
|
||||||
/*========*/
|
/*========*/
|
||||||
/* out, own: free storage, NULL if did not succeed */
|
/* out, own: free storage,
|
||||||
void* buf, /* in: pointer to an old buffer */
|
NULL if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
void* buf, /* in: pointer to an old buffer */
|
||||||
char* file_name,/* in: file name where called */
|
ulint n, /* in: desired number of bytes */
|
||||||
ulint line) /* in: line where called */
|
const char* file_name, /* in: file name where called */
|
||||||
|
ulint line) /* in: line where called */
|
||||||
{
|
{
|
||||||
mem_free(buf);
|
mem_free(buf);
|
||||||
|
|
||||||
|
@ -198,11 +198,11 @@ mtr_read_dulint(
|
|||||||
mtr_t* mtr); /* in: mini-transaction handle */
|
mtr_t* mtr); /* in: mini-transaction handle */
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
This macro locks an rw-lock in s-mode. */
|
This macro locks an rw-lock in s-mode. */
|
||||||
#define mtr_s_lock(B, MTR) mtr_s_lock_func((B), IB__FILE__, __LINE__,\
|
#define mtr_s_lock(B, MTR) mtr_s_lock_func((B), __FILE__, __LINE__,\
|
||||||
(MTR))
|
(MTR))
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
This macro locks an rw-lock in x-mode. */
|
This macro locks an rw-lock in x-mode. */
|
||||||
#define mtr_x_lock(B, MTR) mtr_x_lock_func((B), IB__FILE__, __LINE__,\
|
#define mtr_x_lock(B, MTR) mtr_x_lock_func((B), __FILE__, __LINE__,\
|
||||||
(MTR))
|
(MTR))
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
NOTE! Use the macro above!
|
NOTE! Use the macro above!
|
||||||
@ -212,7 +212,7 @@ void
|
|||||||
mtr_s_lock_func(
|
mtr_s_lock_func(
|
||||||
/*============*/
|
/*============*/
|
||||||
rw_lock_t* lock, /* in: rw-lock */
|
rw_lock_t* lock, /* in: rw-lock */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line number */
|
ulint line, /* in: line number */
|
||||||
mtr_t* mtr); /* in: mtr */
|
mtr_t* mtr); /* in: mtr */
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
@ -223,7 +223,7 @@ void
|
|||||||
mtr_x_lock_func(
|
mtr_x_lock_func(
|
||||||
/*============*/
|
/*============*/
|
||||||
rw_lock_t* lock, /* in: rw-lock */
|
rw_lock_t* lock, /* in: rw-lock */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line number */
|
ulint line, /* in: line number */
|
||||||
mtr_t* mtr); /* in: mtr */
|
mtr_t* mtr); /* in: mtr */
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ void
|
|||||||
mtr_s_lock_func(
|
mtr_s_lock_func(
|
||||||
/*============*/
|
/*============*/
|
||||||
rw_lock_t* lock, /* in: rw-lock */
|
rw_lock_t* lock, /* in: rw-lock */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line number */
|
ulint line, /* in: line number */
|
||||||
mtr_t* mtr) /* in: mtr */
|
mtr_t* mtr) /* in: mtr */
|
||||||
{
|
{
|
||||||
@ -236,7 +236,7 @@ void
|
|||||||
mtr_x_lock_func(
|
mtr_x_lock_func(
|
||||||
/*============*/
|
/*============*/
|
||||||
rw_lock_t* lock, /* in: rw-lock */
|
rw_lock_t* lock, /* in: rw-lock */
|
||||||
char* file, /* in: file name */
|
const char* file, /* in: file name */
|
||||||
ulint line, /* in: line number */
|
ulint line, /* in: line number */
|
||||||
mtr_t* mtr) /* in: mtr */
|
mtr_t* mtr) /* in: mtr */
|
||||||
{
|
{
|
||||||
|
@ -92,7 +92,7 @@ Called by yyparse on error. */
|
|||||||
void
|
void
|
||||||
yyerror(
|
yyerror(
|
||||||
/*====*/
|
/*====*/
|
||||||
char* s); /* in: error message string */
|
const char* s); /* in: error message string */
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Parses a variable declaration. */
|
Parses a variable declaration. */
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ sync_array_reserve_cell(
|
|||||||
sync_array_t* arr, /* in: wait array */
|
sync_array_t* arr, /* in: wait array */
|
||||||
void* object, /* in: pointer to the object to wait for */
|
void* object, /* in: pointer to the object to wait for */
|
||||||
ulint type, /* in: lock request type */
|
ulint type, /* in: lock request type */
|
||||||
char* file, /* in: file where requested */
|
const char* file, /* in: file where requested */
|
||||||
ulint line, /* in: line where requested */
|
ulint line, /* in: line where requested */
|
||||||
ulint* index); /* out: index of the reserved cell */
|
ulint* index); /* out: index of the reserved cell */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -92,7 +92,7 @@ loop:
|
|||||||
loop_count++;
|
loop_count++;
|
||||||
ut_ad(loop_count < 15);
|
ut_ad(loop_count < 15);
|
||||||
|
|
||||||
if (mutex_enter_nowait(mutex, IB__FILE__, __LINE__) == 0) {
|
if (mutex_enter_nowait(mutex, __FILE__, __LINE__) == 0) {
|
||||||
/* Succeeded! */
|
/* Succeeded! */
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@ -105,7 +105,7 @@ loop:
|
|||||||
/* Order is important here: FIRST reset event, then set waiters */
|
/* Order is important here: FIRST reset event, then set waiters */
|
||||||
ip_mutex_set_waiters(ip_mutex, 1);
|
ip_mutex_set_waiters(ip_mutex, 1);
|
||||||
|
|
||||||
if (mutex_enter_nowait(mutex, IB__FILE__, __LINE__) == 0) {
|
if (mutex_enter_nowait(mutex, __FILE__, __LINE__) == 0) {
|
||||||
/* Succeeded! */
|
/* Succeeded! */
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
|
@ -62,7 +62,7 @@ location (which must be appropriately aligned). The rw-lock is initialized
|
|||||||
to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free
|
to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free
|
||||||
is necessary only if the memory block containing it is freed. */
|
is necessary only if the memory block containing it is freed. */
|
||||||
|
|
||||||
#define rw_lock_create(L) rw_lock_create_func((L), IB__FILE__, __LINE__)
|
#define rw_lock_create(L) rw_lock_create_func((L), __FILE__, __LINE__)
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Creates, or rather, initializes an rw-lock object in a specified memory
|
Creates, or rather, initializes an rw-lock object in a specified memory
|
||||||
@ -74,7 +74,7 @@ void
|
|||||||
rw_lock_create_func(
|
rw_lock_create_func(
|
||||||
/*================*/
|
/*================*/
|
||||||
rw_lock_t* lock, /* in: pointer to memory */
|
rw_lock_t* lock, /* in: pointer to memory */
|
||||||
char* cfile_name, /* in: file name where created */
|
const char* cfile_name, /* in: file name where created */
|
||||||
ulint cline); /* in: file line where created */
|
ulint cline); /* in: file line where created */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Calling this function is obligatory only if the memory buffer containing
|
Calling this function is obligatory only if the memory buffer containing
|
||||||
@ -100,19 +100,19 @@ NOTE! The following macros should be used in rw s-locking, not the
|
|||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_s_lock(M) rw_lock_s_lock_func(\
|
#define rw_lock_s_lock(M) rw_lock_s_lock_func(\
|
||||||
(M), 0, IB__FILE__, __LINE__)
|
(M), 0, __FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macros should be used in rw s-locking, not the
|
NOTE! The following macros should be used in rw s-locking, not the
|
||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_s_lock_gen(M, P) rw_lock_s_lock_func(\
|
#define rw_lock_s_lock_gen(M, P) rw_lock_s_lock_func(\
|
||||||
(M), (P), IB__FILE__, __LINE__)
|
(M), (P), __FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macros should be used in rw s-locking, not the
|
NOTE! The following macros should be used in rw s-locking, not the
|
||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_s_lock_nowait(M) rw_lock_s_lock_func_nowait(\
|
#define rw_lock_s_lock_nowait(M) rw_lock_s_lock_func_nowait(\
|
||||||
(M), IB__FILE__, __LINE__)
|
(M), __FILE__, __LINE__)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
NOTE! Use the corresponding macro, not directly this function, except if
|
NOTE! Use the corresponding macro, not directly this function, except if
|
||||||
you supply the file name and line number. Lock an rw-lock in shared mode
|
you supply the file name and line number. Lock an rw-lock in shared mode
|
||||||
@ -127,7 +127,7 @@ rw_lock_s_lock_func(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
NOTE! Use the corresponding macro, not directly this function, except if
|
NOTE! Use the corresponding macro, not directly this function, except if
|
||||||
@ -139,7 +139,7 @@ rw_lock_s_lock_func_nowait(
|
|||||||
/*=======================*/
|
/*=======================*/
|
||||||
/* out: TRUE if success */
|
/* out: TRUE if success */
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
NOTE! Use the corresponding macro, not directly this function! Lock an
|
NOTE! Use the corresponding macro, not directly this function! Lock an
|
||||||
@ -151,7 +151,7 @@ rw_lock_x_lock_func_nowait(
|
|||||||
/*=======================*/
|
/*=======================*/
|
||||||
/* out: TRUE if success */
|
/* out: TRUE if success */
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Releases a shared mode lock. */
|
Releases a shared mode lock. */
|
||||||
@ -186,19 +186,19 @@ NOTE! The following macro should be used in rw x-locking, not the
|
|||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_x_lock(M) rw_lock_x_lock_func(\
|
#define rw_lock_x_lock(M) rw_lock_x_lock_func(\
|
||||||
(M), 0, IB__FILE__, __LINE__)
|
(M), 0, __FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macro should be used in rw x-locking, not the
|
NOTE! The following macro should be used in rw x-locking, not the
|
||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_x_lock_gen(M, P) rw_lock_x_lock_func(\
|
#define rw_lock_x_lock_gen(M, P) rw_lock_x_lock_func(\
|
||||||
(M), (P), IB__FILE__, __LINE__)
|
(M), (P), __FILE__, __LINE__)
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
NOTE! The following macros should be used in rw x-locking, not the
|
NOTE! The following macros should be used in rw x-locking, not the
|
||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define rw_lock_x_lock_nowait(M) rw_lock_x_lock_func_nowait(\
|
#define rw_lock_x_lock_nowait(M) rw_lock_x_lock_func_nowait(\
|
||||||
(M), IB__FILE__, __LINE__)
|
(M), __FILE__, __LINE__)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
NOTE! Use the corresponding macro, not directly this function! Lock an
|
NOTE! Use the corresponding macro, not directly this function! Lock an
|
||||||
rw-lock in exclusive mode for the current thread. If the rw-lock is locked
|
rw-lock in exclusive mode for the current thread. If the rw-lock is locked
|
||||||
@ -215,7 +215,7 @@ rw_lock_x_lock_func(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Releases an exclusive mode lock. */
|
Releases an exclusive mode lock. */
|
||||||
@ -253,9 +253,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
rw_lock_s_lock_direct(
|
rw_lock_s_lock_direct(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
rw_lock_t* lock /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
,char* file_name, /* in: file name where lock requested */
|
const char* file_name, /* in: file name where requested */
|
||||||
ulint line /* in: line where requested */
|
ulint line /* in: line where lock requested */
|
||||||
);
|
);
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Low-level function which locks an rw-lock in x-mode when we know that it
|
Low-level function which locks an rw-lock in x-mode when we know that it
|
||||||
@ -265,9 +265,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
rw_lock_x_lock_direct(
|
rw_lock_x_lock_direct(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
rw_lock_t* lock /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
,char* file_name, /* in: file name where lock requested */
|
const char* file_name, /* in: file name where requested */
|
||||||
ulint line /* in: line where requested */
|
ulint line /* in: line where lock requested */
|
||||||
);
|
);
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
This function is used in the insert buffer to move the ownership of an
|
This function is used in the insert buffer to move the ownership of an
|
||||||
@ -451,10 +451,10 @@ struct rw_lock_struct {
|
|||||||
#endif /* UNIV_SYNC_DEBUG */
|
#endif /* UNIV_SYNC_DEBUG */
|
||||||
ulint level; /* Level in the global latching
|
ulint level; /* Level in the global latching
|
||||||
order; default SYNC_LEVEL_NONE */
|
order; default SYNC_LEVEL_NONE */
|
||||||
char* cfile_name; /* File name where lock created */
|
const char* cfile_name;/* File name where lock created */
|
||||||
ulint cline; /* Line where created */
|
ulint cline; /* Line where created */
|
||||||
char* last_s_file_name;/* File name where last time s-locked */
|
const char* last_s_file_name;/* File name where last s-locked */
|
||||||
char* last_x_file_name;/* File name where last time x-locked */
|
const char* last_x_file_name;/* File name where last x-locked */
|
||||||
ulint last_s_line; /* Line number where last time s-locked */
|
ulint last_s_line; /* Line number where last time s-locked */
|
||||||
ulint last_x_line; /* Line number where last time x-locked */
|
ulint last_x_line; /* Line number where last time x-locked */
|
||||||
ulint magic_n;
|
ulint magic_n;
|
||||||
@ -471,7 +471,7 @@ struct rw_lock_debug_struct {
|
|||||||
ulint pass; /* Pass value given in the lock operation */
|
ulint pass; /* Pass value given in the lock operation */
|
||||||
ulint lock_type; /* Type of the lock: RW_LOCK_EX,
|
ulint lock_type; /* Type of the lock: RW_LOCK_EX,
|
||||||
RW_LOCK_SHARED, RW_LOCK_WAIT_EX */
|
RW_LOCK_SHARED, RW_LOCK_WAIT_EX */
|
||||||
char* file_name; /* File name where the lock was obtained */
|
const char* file_name;/* File name where the lock was obtained */
|
||||||
ulint line; /* Line where the rw-lock was locked */
|
ulint line; /* Line where the rw-lock was locked */
|
||||||
UT_LIST_NODE_T(rw_lock_debug_t) list;
|
UT_LIST_NODE_T(rw_lock_debug_t) list;
|
||||||
/* Debug structs are linked in a two-way
|
/* Debug structs are linked in a two-way
|
||||||
|
@ -18,7 +18,7 @@ rw_lock_s_lock_spin(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
@ -130,7 +130,7 @@ rw_lock_s_lock_low(
|
|||||||
ulint pass __attribute__((unused)),
|
ulint pass __attribute__((unused)),
|
||||||
/* in: pass value; != 0, if the lock will be
|
/* in: pass value; != 0, if the lock will be
|
||||||
passed to another thread to unlock */
|
passed to another thread to unlock */
|
||||||
char* file_name, /* in: file name where lock requested */
|
const char* file_name, /* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
@ -163,9 +163,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
rw_lock_s_lock_direct(
|
rw_lock_s_lock_direct(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name, /* in: file name where requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where lock requested */
|
||||||
{
|
{
|
||||||
ut_ad(lock->writer == RW_LOCK_NOT_LOCKED);
|
ut_ad(lock->writer == RW_LOCK_NOT_LOCKED);
|
||||||
ut_ad(rw_lock_get_reader_count(lock) == 0);
|
ut_ad(rw_lock_get_reader_count(lock) == 0);
|
||||||
@ -189,9 +189,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
rw_lock_x_lock_direct(
|
rw_lock_x_lock_direct(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name, /* in: file name where lock requested */
|
const char* file_name, /* in: file name where requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where lock requested */
|
||||||
{
|
{
|
||||||
ut_ad(rw_lock_validate(lock));
|
ut_ad(rw_lock_validate(lock));
|
||||||
ut_ad(rw_lock_get_reader_count(lock) == 0);
|
ut_ad(rw_lock_get_reader_count(lock) == 0);
|
||||||
@ -223,7 +223,7 @@ rw_lock_s_lock_func(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name, /* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
/* NOTE: As we do not know the thread ids for threads which have
|
/* NOTE: As we do not know the thread ids for threads which have
|
||||||
@ -267,7 +267,7 @@ rw_lock_s_lock_func_nowait(
|
|||||||
/*=======================*/
|
/*=======================*/
|
||||||
/* out: TRUE if success */
|
/* out: TRUE if success */
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
ibool success = FALSE;
|
ibool success = FALSE;
|
||||||
@ -304,7 +304,7 @@ rw_lock_x_lock_func_nowait(
|
|||||||
/*=======================*/
|
/*=======================*/
|
||||||
/* out: TRUE if success */
|
/* out: TRUE if success */
|
||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
char* file_name, /* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
ibool success = FALSE;
|
ibool success = FALSE;
|
||||||
|
@ -36,7 +36,7 @@ in the reset state. Explicit freeing of the mutex with mutex_free is
|
|||||||
necessary only if the memory block containing it is freed. */
|
necessary only if the memory block containing it is freed. */
|
||||||
|
|
||||||
|
|
||||||
#define mutex_create(M) mutex_create_func((M), IB__FILE__, __LINE__)
|
#define mutex_create(M) mutex_create_func((M), __FILE__, __LINE__)
|
||||||
/*===================*/
|
/*===================*/
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Creates, or rather, initializes a mutex object in a specified memory
|
Creates, or rather, initializes a mutex object in a specified memory
|
||||||
@ -48,7 +48,7 @@ void
|
|||||||
mutex_create_func(
|
mutex_create_func(
|
||||||
/*==============*/
|
/*==============*/
|
||||||
mutex_t* mutex, /* in: pointer to memory */
|
mutex_t* mutex, /* in: pointer to memory */
|
||||||
char* cfile_name, /* in: file name where created */
|
const char* cfile_name, /* in: file name where created */
|
||||||
ulint cline); /* in: file line where created */
|
ulint cline); /* in: file line where created */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Calling this function is obligatory only if the memory buffer containing
|
Calling this function is obligatory only if the memory buffer containing
|
||||||
@ -64,7 +64,7 @@ mutex_free(
|
|||||||
NOTE! The following macro should be used in mutex locking, not the
|
NOTE! The following macro should be used in mutex locking, not the
|
||||||
corresponding function. */
|
corresponding function. */
|
||||||
|
|
||||||
#define mutex_enter(M) mutex_enter_func((M), IB__FILE__, __LINE__)
|
#define mutex_enter(M) mutex_enter_func((M), __FILE__, __LINE__)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
A noninlined function that reserves a mutex. In ha_innodb.cc we have disabled
|
A noninlined function that reserves a mutex. In ha_innodb.cc we have disabled
|
||||||
inlining of InnoDB functions, and no inlined functions should be called from
|
inlining of InnoDB functions, and no inlined functions should be called from
|
||||||
@ -80,7 +80,7 @@ corresponding function. */
|
|||||||
|
|
||||||
/* NOTE! currently same as mutex_enter! */
|
/* NOTE! currently same as mutex_enter! */
|
||||||
|
|
||||||
#define mutex_enter_fast(M) mutex_enter_func((M), IB__FILE__, __LINE__)
|
#define mutex_enter_fast(M) mutex_enter_func((M), __FILE__, __LINE__)
|
||||||
#define mutex_enter_fast_func mutex_enter_func;
|
#define mutex_enter_fast_func mutex_enter_func;
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
NOTE! Use the corresponding macro in the header file, not this function
|
NOTE! Use the corresponding macro in the header file, not this function
|
||||||
@ -92,7 +92,7 @@ void
|
|||||||
mutex_enter_func(
|
mutex_enter_func(
|
||||||
/*=============*/
|
/*=============*/
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name, /* in: file name where locked */
|
const char* file_name, /* in: file name where locked */
|
||||||
ulint line); /* in: line where locked */
|
ulint line); /* in: line where locked */
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
Tries to lock the mutex for the current thread. If the lock is not acquired
|
Tries to lock the mutex for the current thread. If the lock is not acquired
|
||||||
@ -103,9 +103,9 @@ mutex_enter_nowait(
|
|||||||
/*===============*/
|
/*===============*/
|
||||||
/* out: 0 if succeed, 1 if not */
|
/* out: 0 if succeed, 1 if not */
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name, /* in: file name where mutex
|
const char* file_name, /* in: file name where mutex
|
||||||
requested */
|
requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
Unlocks a mutex owned by the current thread. */
|
Unlocks a mutex owned by the current thread. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
@ -470,7 +470,7 @@ struct mutex_struct {
|
|||||||
#endif /* UNIV_SYNC_DEBUG */
|
#endif /* UNIV_SYNC_DEBUG */
|
||||||
ulint level; /* Level in the global latching
|
ulint level; /* Level in the global latching
|
||||||
order; default SYNC_LEVEL_NONE */
|
order; default SYNC_LEVEL_NONE */
|
||||||
char* cfile_name; /* File name where mutex created */
|
const char* cfile_name;/* File name where mutex created */
|
||||||
ulint cline; /* Line where created */
|
ulint cline; /* Line where created */
|
||||||
ulint magic_n;
|
ulint magic_n;
|
||||||
};
|
};
|
||||||
|
@ -23,7 +23,7 @@ void
|
|||||||
mutex_spin_wait(
|
mutex_spin_wait(
|
||||||
/*============*/
|
/*============*/
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name,/* in: file name where mutex requested */
|
const char* file_name,/* in: file name where mutex requested */
|
||||||
ulint line); /* in: line where requested */
|
ulint line); /* in: line where requested */
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
@ -241,9 +241,9 @@ UNIV_INLINE
|
|||||||
void
|
void
|
||||||
mutex_enter_func(
|
mutex_enter_func(
|
||||||
/*=============*/
|
/*=============*/
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name,/* in: file name where locked */
|
const char* file_name, /* in: file name where locked */
|
||||||
ulint line) /* in: line where locked */
|
ulint line) /* in: line where locked */
|
||||||
{
|
{
|
||||||
ut_ad(mutex_validate(mutex));
|
ut_ad(mutex_validate(mutex));
|
||||||
|
|
||||||
|
@ -242,11 +242,6 @@ contains the sum of the following flag and the locally stored len. */
|
|||||||
|
|
||||||
#define UNIV_EXTERN_STORAGE_FIELD (UNIV_SQL_NULL - UNIV_PAGE_SIZE)
|
#define UNIV_EXTERN_STORAGE_FIELD (UNIV_SQL_NULL - UNIV_PAGE_SIZE)
|
||||||
|
|
||||||
/* The following definition of __FILE__ removes compiler warnings
|
|
||||||
associated with const char* / char* mismatches with __FILE__ */
|
|
||||||
|
|
||||||
#define IB__FILE__ ((char*)__FILE__)
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "ut0dbg.h"
|
#include "ut0dbg.h"
|
||||||
#include "ut0ut.h"
|
#include "ut0ut.h"
|
||||||
|
@ -27,7 +27,7 @@ extern const char* ut_dbg_msg_stop;
|
|||||||
if (!((ulint)(EXPR) + ut_dbg_zero)) {\
|
if (!((ulint)(EXPR) + ut_dbg_zero)) {\
|
||||||
ut_print_timestamp(stderr);\
|
ut_print_timestamp(stderr);\
|
||||||
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
||||||
os_thread_pf(os_thread_get_curr_id()), IB__FILE__,\
|
os_thread_pf(os_thread_get_curr_id()), __FILE__,\
|
||||||
(ulint)__LINE__);\
|
(ulint)__LINE__);\
|
||||||
fputs("InnoDB: Failing assertion: " #EXPR "\n", stderr);\
|
fputs("InnoDB: Failing assertion: " #EXPR "\n", stderr);\
|
||||||
fputs(ut_dbg_msg_trap, stderr);\
|
fputs(ut_dbg_msg_trap, stderr);\
|
||||||
@ -36,7 +36,7 @@ extern const char* ut_dbg_msg_stop;
|
|||||||
}\
|
}\
|
||||||
if (ut_dbg_stop_threads) {\
|
if (ut_dbg_stop_threads) {\
|
||||||
fprintf(stderr, ut_dbg_msg_stop,\
|
fprintf(stderr, ut_dbg_msg_stop,\
|
||||||
os_thread_pf(os_thread_get_curr_id()), IB__FILE__, (ulint)__LINE__);\
|
os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\
|
||||||
os_thread_sleep(1000000000);\
|
os_thread_sleep(1000000000);\
|
||||||
}\
|
}\
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -44,7 +44,7 @@ extern const char* ut_dbg_msg_stop;
|
|||||||
#define ut_error do {\
|
#define ut_error do {\
|
||||||
ut_print_timestamp(stderr);\
|
ut_print_timestamp(stderr);\
|
||||||
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
fprintf(stderr, ut_dbg_msg_assert_fail,\
|
||||||
os_thread_pf(os_thread_get_curr_id()), IB__FILE__, (ulint)__LINE__);\
|
os_thread_pf(os_thread_get_curr_id()), __FILE__, (ulint)__LINE__);\
|
||||||
fprintf(stderr, ut_dbg_msg_trap);\
|
fprintf(stderr, ut_dbg_msg_trap);\
|
||||||
ut_dbg_stop_threads = TRUE;\
|
ut_dbg_stop_threads = TRUE;\
|
||||||
if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\
|
if (*(ut_dbg_null_ptr)) ut_dbg_null_ptr = NULL;\
|
||||||
|
@ -18,15 +18,15 @@ extern ulint ut_total_allocated_memory;
|
|||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void*
|
void*
|
||||||
ut_memcpy(void* dest, void* sour, ulint n);
|
ut_memcpy(void* dest, const void* sour, ulint n);
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void*
|
void*
|
||||||
ut_memmove(void* dest, void* sour, ulint n);
|
ut_memmove(void* dest, const void* sour, ulint n);
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
int
|
int
|
||||||
ut_memcmp(void* str1, void* str2, ulint n);
|
ut_memcmp(const void* str1, const void* str2, ulint n);
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
@ -75,7 +75,7 @@ ut_free_all_mem(void);
|
|||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
char*
|
char*
|
||||||
ut_strcpy(char* dest, char* sour);
|
ut_strcpy(char* dest, const char* sour);
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
ulint
|
ulint
|
||||||
@ -83,7 +83,7 @@ ut_strlen(const char* str);
|
|||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
int
|
int
|
||||||
ut_strcmp(void* str1, void* str2);
|
ut_strcmp(const void* str1, const void* str2);
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Determine the length of a string when it is quoted with ut_strcpyq(). */
|
Determine the length of a string when it is quoted with ut_strcpyq(). */
|
||||||
@ -118,17 +118,6 @@ ut_memcpyq(
|
|||||||
const char* src, /* in: string to be quoted */
|
const char* src, /* in: string to be quoted */
|
||||||
ulint len); /* in: length of src */
|
ulint len); /* in: length of src */
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
Catenates two strings into newly allocated memory. The memory must be freed
|
|
||||||
using mem_free. */
|
|
||||||
|
|
||||||
char*
|
|
||||||
ut_str_catenate(
|
|
||||||
/*============*/
|
|
||||||
/* out, own: catenated null-terminated string */
|
|
||||||
char* str1, /* in: null-terminated string */
|
|
||||||
char* str2); /* in: null-terminated string */
|
|
||||||
|
|
||||||
#ifndef UNIV_NONINL
|
#ifndef UNIV_NONINL
|
||||||
#include "ut0mem.ic"
|
#include "ut0mem.ic"
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,28 +8,28 @@ Created 5/30/1994 Heikki Tuuri
|
|||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void*
|
void*
|
||||||
ut_memcpy(void* dest, void* sour, ulint n)
|
ut_memcpy(void* dest, const void* sour, ulint n)
|
||||||
{
|
{
|
||||||
return(memcpy(dest, sour, n));
|
return(memcpy(dest, sour, n));
|
||||||
}
|
}
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void*
|
void*
|
||||||
ut_memmove(void* dest, void* sour, ulint n)
|
ut_memmove(void* dest, const void* sour, ulint n)
|
||||||
{
|
{
|
||||||
return(memmove(dest, sour, n));
|
return(memmove(dest, sour, n));
|
||||||
}
|
}
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
int
|
int
|
||||||
ut_memcmp(void* str1, void* str2, ulint n)
|
ut_memcmp(const void* str1, const void* str2, ulint n)
|
||||||
{
|
{
|
||||||
return(memcmp(str1, str2, n));
|
return(memcmp(str1, str2, n));
|
||||||
}
|
}
|
||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
char*
|
char*
|
||||||
ut_strcpy(char* dest, char* sour)
|
ut_strcpy(char* dest, const char* sour)
|
||||||
{
|
{
|
||||||
return(strcpy(dest, sour));
|
return(strcpy(dest, sour));
|
||||||
}
|
}
|
||||||
@ -43,9 +43,9 @@ ut_strlen(const char* str)
|
|||||||
|
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
int
|
int
|
||||||
ut_strcmp(void* str1, void* str2)
|
ut_strcmp(const void* str1, const void* str2)
|
||||||
{
|
{
|
||||||
return(strcmp((char*)str1, (char*)str2));
|
return(strcmp((const char*)str1, (const char*)str2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -3889,7 +3889,7 @@ lock_rec_print(
|
|||||||
|
|
||||||
page = buf_page_get_gen(space, page_no, RW_NO_LATCH,
|
page = buf_page_get_gen(space, page_no, RW_NO_LATCH,
|
||||||
NULL, BUF_GET_IF_IN_POOL,
|
NULL, BUF_GET_IF_IN_POOL,
|
||||||
IB__FILE__, __LINE__, &mtr);
|
__FILE__, __LINE__, &mtr);
|
||||||
if (page) {
|
if (page) {
|
||||||
page = buf_page_get_nowait(space, page_no, RW_S_LATCH, &mtr);
|
page = buf_page_get_nowait(space, page_no, RW_S_LATCH, &mtr);
|
||||||
|
|
||||||
|
@ -1080,7 +1080,7 @@ recv_recover_page(
|
|||||||
|
|
||||||
success = buf_page_get_known_nowait(RW_X_LATCH, page,
|
success = buf_page_get_known_nowait(RW_X_LATCH, page,
|
||||||
BUF_KEEP_OLD,
|
BUF_KEEP_OLD,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
ut_a(success);
|
ut_a(success);
|
||||||
|
|
||||||
@ -1664,7 +1664,7 @@ recv_compare_spaces(
|
|||||||
|
|
||||||
frame = buf_page_get_gen(space1, page_no, RW_S_LATCH, NULL,
|
frame = buf_page_get_gen(space1, page_no, RW_S_LATCH, NULL,
|
||||||
BUF_GET_IF_IN_POOL,
|
BUF_GET_IF_IN_POOL,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
if (frame) {
|
if (frame) {
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
@ -1679,7 +1679,7 @@ recv_compare_spaces(
|
|||||||
|
|
||||||
frame = buf_page_get_gen(space2, page_no, RW_S_LATCH, NULL,
|
frame = buf_page_get_gen(space2, page_no, RW_S_LATCH, NULL,
|
||||||
BUF_GET_IF_IN_POOL,
|
BUF_GET_IF_IN_POOL,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
if (frame) {
|
if (frame) {
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
|
@ -92,11 +92,11 @@ with mem_free. */
|
|||||||
void*
|
void*
|
||||||
mem_alloc_func_noninline(
|
mem_alloc_func_noninline(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
/* out, own: free storage, NULL if did not
|
/* out, own: free storage,
|
||||||
succeed */
|
NULL if did not succeed */
|
||||||
ulint n, /* in: desired number of bytes */
|
ulint n, /* in: desired number of bytes */
|
||||||
char* file_name, /* in: file name where created */
|
const char* file_name, /* in: file name where created */
|
||||||
ulint line /* in: line where created */
|
ulint line /* in: line where created */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return(mem_alloc_func(n, file_name, line));
|
return(mem_alloc_func(n, file_name, line));
|
||||||
@ -108,18 +108,18 @@ Creates a memory heap block where data can be allocated. */
|
|||||||
mem_block_t*
|
mem_block_t*
|
||||||
mem_heap_create_block(
|
mem_heap_create_block(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
/* out, own: memory heap block, NULL if did not
|
/* out, own: memory heap block,
|
||||||
succeed */
|
NULL if did not succeed */
|
||||||
mem_heap_t* heap,/* in: memory heap or NULL if first block should
|
mem_heap_t* heap, /* in: memory heap or NULL if first block
|
||||||
be created */
|
should be created */
|
||||||
ulint n, /* in: number of bytes needed for user data, or
|
ulint n, /* in: number of bytes needed for user data, or
|
||||||
if init_block is not NULL, its size in bytes */
|
if init_block is not NULL, its size in bytes */
|
||||||
void* init_block, /* in: init block in fast create, type must be
|
void* init_block, /* in: init block in fast create,
|
||||||
MEM_HEAP_DYNAMIC */
|
type must be MEM_HEAP_DYNAMIC */
|
||||||
ulint type, /* in: type of heap: MEM_HEAP_DYNAMIC, or
|
ulint type, /* in: type of heap: MEM_HEAP_DYNAMIC or
|
||||||
MEM_HEAP_BUFFER possibly ORed to MEM_HEAP_BTR_SEARCH */
|
MEM_HEAP_BUFFER */
|
||||||
char* file_name,/* in: file name where created */
|
const char* file_name,/* in: file name where created */
|
||||||
ulint line) /* in: line where created */
|
ulint line) /* in: line where created */
|
||||||
{
|
{
|
||||||
mem_block_t* block;
|
mem_block_t* block;
|
||||||
ulint len;
|
ulint len;
|
||||||
|
@ -369,7 +369,16 @@ os_file_handle_error(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__WIN__) && !defined(UNIV_HOTBACKUP)
|
#undef USE_FILE_LOCK
|
||||||
|
#define USE_FILE_LOCK
|
||||||
|
#if defined(UNIV_HOTBACKUP) || defined(__WIN__) || defined(__FreeBSD__)
|
||||||
|
/* InnoDB Hot Backup does not lock the data files.
|
||||||
|
* On Windows, mandatory locking is used.
|
||||||
|
* On FreeBSD with LinuxThreads, advisory locking does not work properly.
|
||||||
|
*/
|
||||||
|
# undef USE_FILE_LOCK
|
||||||
|
#endif
|
||||||
|
#ifdef USE_FILE_LOCK
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
Obtain an exclusive lock on a file. */
|
Obtain an exclusive lock on a file. */
|
||||||
static
|
static
|
||||||
@ -393,7 +402,7 @@ os_file_lock(
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* !defined(__WIN__) && !defined(UNIV_HOTBACKUP) */
|
#endif /* USE_FILE_LOCK */
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
Does error handling when a file operation fails. */
|
Does error handling when a file operation fails. */
|
||||||
@ -852,7 +861,7 @@ try_again:
|
|||||||
if (retry) {
|
if (retry) {
|
||||||
goto try_again;
|
goto try_again;
|
||||||
}
|
}
|
||||||
#ifndef UNIV_HOTBACKUP
|
#ifdef USE_FILE_LOCK
|
||||||
} else if (os_file_lock(file, name)) {
|
} else if (os_file_lock(file, name)) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
file = -1;
|
file = -1;
|
||||||
@ -961,7 +970,7 @@ os_file_create_simple_no_error_handling(
|
|||||||
|
|
||||||
if (file == -1) {
|
if (file == -1) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
#ifndef UNIV_HOTBACKUP
|
#ifdef USE_FILE_LOCK
|
||||||
} else if (os_file_lock(file, name)) {
|
} else if (os_file_lock(file, name)) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
file = -1;
|
file = -1;
|
||||||
@ -1172,7 +1181,7 @@ try_again:
|
|||||||
if (retry) {
|
if (retry) {
|
||||||
goto try_again;
|
goto try_again;
|
||||||
}
|
}
|
||||||
#ifndef UNIV_HOTBACKUP
|
#ifdef USE_FILE_LOCK
|
||||||
} else if (os_file_lock(file, name)) {
|
} else if (os_file_lock(file, name)) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
file = -1;
|
file = -1;
|
||||||
|
@ -1713,7 +1713,8 @@ Called by yyparse on error. */
|
|||||||
void
|
void
|
||||||
yyerror(
|
yyerror(
|
||||||
/*====*/
|
/*====*/
|
||||||
char* s __attribute__((unused))) /* in: error message string */
|
const char* s __attribute__((unused)))
|
||||||
|
/* in: error message string */
|
||||||
{
|
{
|
||||||
ut_ad(s);
|
ut_ad(s);
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ struct sync_cell_struct {
|
|||||||
rw_lock_t* old_wait_rw_lock;/* the latest wait rw-lock in cell */
|
rw_lock_t* old_wait_rw_lock;/* the latest wait rw-lock in cell */
|
||||||
ulint request_type; /* lock type requested on the
|
ulint request_type; /* lock type requested on the
|
||||||
object */
|
object */
|
||||||
char* file; /* in debug version file where
|
const char* file; /* in debug version file where
|
||||||
requested */
|
requested */
|
||||||
ulint line; /* in debug version line where
|
ulint line; /* in debug version line where
|
||||||
requested */
|
requested */
|
||||||
@ -329,7 +329,7 @@ sync_array_reserve_cell(
|
|||||||
sync_array_t* arr, /* in: wait array */
|
sync_array_t* arr, /* in: wait array */
|
||||||
void* object, /* in: pointer to the object to wait for */
|
void* object, /* in: pointer to the object to wait for */
|
||||||
ulint type, /* in: lock request type */
|
ulint type, /* in: lock request type */
|
||||||
char* file, /* in: file where requested */
|
const char* file, /* in: file where requested */
|
||||||
ulint line, /* in: line where requested */
|
ulint line, /* in: line where requested */
|
||||||
ulint* index) /* out: index of the reserved cell */
|
ulint* index) /* out: index of the reserved cell */
|
||||||
{
|
{
|
||||||
|
@ -89,7 +89,7 @@ void
|
|||||||
rw_lock_create_func(
|
rw_lock_create_func(
|
||||||
/*================*/
|
/*================*/
|
||||||
rw_lock_t* lock, /* in: pointer to memory */
|
rw_lock_t* lock, /* in: pointer to memory */
|
||||||
char* cfile_name, /* in: file name where created */
|
const char* cfile_name, /* in: file name where created */
|
||||||
ulint cline) /* in: file line where created */
|
ulint cline) /* in: file line where created */
|
||||||
{
|
{
|
||||||
/* If this is the very first time a synchronization
|
/* If this is the very first time a synchronization
|
||||||
@ -213,7 +213,7 @@ rw_lock_s_lock_spin(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock
|
ulint pass, /* in: pass value; != 0, if the lock
|
||||||
will be passed to another thread to unlock */
|
will be passed to another thread to unlock */
|
||||||
char* file_name, /* in: file name where lock requested */
|
const char* file_name, /* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
ulint index; /* index of the reserved wait cell */
|
ulint index; /* index of the reserved wait cell */
|
||||||
@ -324,7 +324,7 @@ rw_lock_x_lock_low(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
@ -429,7 +429,7 @@ rw_lock_x_lock_func(
|
|||||||
rw_lock_t* lock, /* in: pointer to rw-lock */
|
rw_lock_t* lock, /* in: pointer to rw-lock */
|
||||||
ulint pass, /* in: pass value; != 0, if the lock will
|
ulint pass, /* in: pass value; != 0, if the lock will
|
||||||
be passed to another thread to unlock */
|
be passed to another thread to unlock */
|
||||||
char* file_name,/* in: file name where lock requested */
|
const char* file_name,/* in: file name where lock requested */
|
||||||
ulint line) /* in: line where requested */
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
ulint index; /* index of the reserved wait cell */
|
ulint index; /* index of the reserved wait cell */
|
||||||
@ -551,7 +551,7 @@ rw_lock_debug_mutex_enter(void)
|
|||||||
{
|
{
|
||||||
loop:
|
loop:
|
||||||
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
||||||
IB__FILE__, __LINE__)) {
|
__FILE__, __LINE__)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,7 +560,7 @@ loop:
|
|||||||
rw_lock_debug_waiters = TRUE;
|
rw_lock_debug_waiters = TRUE;
|
||||||
|
|
||||||
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
if (0 == mutex_enter_nowait(&rw_lock_debug_mutex,
|
||||||
IB__FILE__, __LINE__)) {
|
__FILE__, __LINE__)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ void
|
|||||||
mutex_create_func(
|
mutex_create_func(
|
||||||
/*==============*/
|
/*==============*/
|
||||||
mutex_t* mutex, /* in: pointer to memory */
|
mutex_t* mutex, /* in: pointer to memory */
|
||||||
char* cfile_name, /* in: file name where created */
|
const char* cfile_name, /* in: file name where created */
|
||||||
ulint cline) /* in: file line where created */
|
ulint cline) /* in: file line where created */
|
||||||
{
|
{
|
||||||
#if defined(_WIN32) && defined(UNIV_CAN_USE_X86_ASSEMBLER)
|
#if defined(_WIN32) && defined(UNIV_CAN_USE_X86_ASSEMBLER)
|
||||||
@ -294,10 +294,10 @@ mutex_enter_nowait(
|
|||||||
/*===============*/
|
/*===============*/
|
||||||
/* out: 0 if succeed, 1 if not */
|
/* out: 0 if succeed, 1 if not */
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name __attribute__((unused)),
|
const char* file_name __attribute__((unused)),
|
||||||
/* in: file name where mutex
|
/* in: file name where mutex
|
||||||
requested */
|
requested */
|
||||||
ulint line __attribute__((unused)))
|
ulint line __attribute__((unused)))
|
||||||
/* in: line where requested */
|
/* in: line where requested */
|
||||||
{
|
{
|
||||||
ut_ad(mutex_validate(mutex));
|
ut_ad(mutex_validate(mutex));
|
||||||
@ -357,9 +357,10 @@ for the mutex before suspending the thread. */
|
|||||||
void
|
void
|
||||||
mutex_spin_wait(
|
mutex_spin_wait(
|
||||||
/*============*/
|
/*============*/
|
||||||
mutex_t* mutex, /* in: pointer to mutex */
|
mutex_t* mutex, /* in: pointer to mutex */
|
||||||
char* file_name, /* in: file name where mutex requested */
|
const char* file_name, /* in: file name where
|
||||||
ulint line) /* in: line where requested */
|
mutex requested */
|
||||||
|
ulint line) /* in: line where requested */
|
||||||
{
|
{
|
||||||
ulint index; /* index of the reserved wait cell */
|
ulint index; /* index of the reserved wait cell */
|
||||||
ulint i; /* spin round count */
|
ulint i; /* spin round count */
|
||||||
|
@ -1067,7 +1067,7 @@ trx_undo_report_row_operation(
|
|||||||
undo_page = buf_page_get_gen(undo->space, page_no,
|
undo_page = buf_page_get_gen(undo->space, page_no,
|
||||||
RW_X_LATCH, undo->guess_page,
|
RW_X_LATCH, undo->guess_page,
|
||||||
BUF_GET,
|
BUF_GET,
|
||||||
IB__FILE__, __LINE__,
|
__FILE__, __LINE__,
|
||||||
&mtr);
|
&mtr);
|
||||||
|
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
|
@ -273,29 +273,3 @@ ut_memcpyq(
|
|||||||
|
|
||||||
return(dest);
|
return(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
Catenates two strings into newly allocated memory. The memory must be freed
|
|
||||||
using mem_free. */
|
|
||||||
|
|
||||||
char*
|
|
||||||
ut_str_catenate(
|
|
||||||
/*============*/
|
|
||||||
/* out, own: catenated null-terminated string */
|
|
||||||
char* str1, /* in: null-terminated string */
|
|
||||||
char* str2) /* in: null-terminated string */
|
|
||||||
{
|
|
||||||
ulint len1;
|
|
||||||
ulint len2;
|
|
||||||
char* str;
|
|
||||||
|
|
||||||
len1 = ut_strlen(str1);
|
|
||||||
len2 = ut_strlen(str2);
|
|
||||||
|
|
||||||
str = mem_alloc(len1 + len2 + 1);
|
|
||||||
|
|
||||||
ut_memcpy(str, str1, len1);
|
|
||||||
ut_memcpy(str + len1, str2, len2 + 1);
|
|
||||||
|
|
||||||
return(str);
|
|
||||||
}
|
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
noinst_PROGRAMS = mysqltest mysql
|
noinst_PROGRAMS = mysqltest mysql client_test
|
||||||
client_sources = $(mysqltest_SOURCES) $(mysql_SOURCES)
|
client_sources = $(mysqltest_SOURCES) $(mysql_SOURCES)
|
||||||
|
tests_sources= $(client_test_SOURCES)
|
||||||
|
|
||||||
link_sources:
|
link_sources:
|
||||||
for f in $(client_sources); do \
|
for f in $(client_sources); do \
|
||||||
rm -f $(srcdir)/$$f; \
|
rm -f $(srcdir)/$$f; \
|
||||||
@LN_CP_F@ $(srcdir)/../../client/$$f $(srcdir)/$$f; \
|
@LN_CP_F@ $(srcdir)/../../client/$$f $(srcdir)/$$f; \
|
||||||
done;
|
done;
|
||||||
|
for f in $(tests_sources); do \
|
||||||
|
rm -f $(srcdir)/$$f; \
|
||||||
|
@LN_CP_F@ $(srcdir)/../../tests/$$f $(srcdir)/$$f; \
|
||||||
|
done;
|
||||||
|
|
||||||
DEFS = -DEMBEDDED_LIBRARY
|
DEFS = -DEMBEDDED_LIBRARY
|
||||||
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \
|
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include -I$(srcdir) \
|
||||||
@ -21,8 +26,12 @@ mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \
|
|||||||
my_readline.h sql_string.h completion_hash.h
|
my_readline.h sql_string.h completion_hash.h
|
||||||
mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD)
|
mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD)
|
||||||
|
|
||||||
|
client_test_LINK = $(CXXLINK)
|
||||||
|
client_test_SOURCES = client_test.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(client_sources)
|
rm -f $(client_sources)
|
||||||
|
rm -f $(tests_sources)
|
||||||
|
|
||||||
# Don't update the files from bitkeeper
|
# Don't update the files from bitkeeper
|
||||||
%::SCCS/s.%
|
%::SCCS/s.%
|
||||||
|
@ -30,15 +30,27 @@ static uint _mi_keynr(MI_INFO *info,MI_KEYDEF *keyinfo,uchar *page,
|
|||||||
uchar *keypos,uint *ret_max_key);
|
uchar *keypos,uint *ret_max_key);
|
||||||
|
|
||||||
|
|
||||||
/* If start_key = 0 assume read from start */
|
/*
|
||||||
/* If end_key = 0 assume read to end */
|
Estimate how many records there is in a given range
|
||||||
/* Returns HA_POS_ERROR on error */
|
|
||||||
|
|
||||||
ha_rows mi_records_in_range(MI_INFO *info, int inx, const byte *start_key,
|
SYNOPSIS
|
||||||
uint start_key_len,
|
mi_records_in_range()
|
||||||
enum ha_rkey_function start_search_flag,
|
info MyISAM handler
|
||||||
const byte *end_key, uint end_key_len,
|
inx Index to use
|
||||||
enum ha_rkey_function end_search_flag)
|
min_key Min key. Is = 0 if no min range
|
||||||
|
max_key Max key. Is = 0 if no max range
|
||||||
|
|
||||||
|
NOTES
|
||||||
|
We should ONLY return 0 if there is no rows in range
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
HA_POS_ERROR error (or we can't estimate number of rows)
|
||||||
|
number Estimated number of rows
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
ha_rows mi_records_in_range(MI_INFO *info, int inx, key_range *min_key,
|
||||||
|
key_range *max_key)
|
||||||
{
|
{
|
||||||
ha_rows start_pos,end_pos,res;
|
ha_rows start_pos,end_pos,res;
|
||||||
DBUG_ENTER("mi_records_in_range");
|
DBUG_ENTER("mi_records_in_range");
|
||||||
@ -54,27 +66,31 @@ ha_rows mi_records_in_range(MI_INFO *info, int inx, const byte *start_key,
|
|||||||
|
|
||||||
switch(info->s->keyinfo[inx].key_alg){
|
switch(info->s->keyinfo[inx].key_alg){
|
||||||
case HA_KEY_ALG_RTREE:
|
case HA_KEY_ALG_RTREE:
|
||||||
{
|
{
|
||||||
uchar * key_buff;
|
uchar * key_buff;
|
||||||
if (start_key_len == 0)
|
uint start_key_len;
|
||||||
start_key_len=USE_WHOLE_KEY;
|
|
||||||
key_buff=info->lastkey+info->s->base.max_key_length;
|
key_buff= info->lastkey+info->s->base.max_key_length;
|
||||||
start_key_len= _mi_pack_key(info,inx,key_buff,(uchar*) start_key,
|
start_key_len= _mi_pack_key(info,inx, key_buff,
|
||||||
start_key_len, (HA_KEYSEG**) 0);
|
(uchar*) min_key->key, min_key->length,
|
||||||
res=rtree_estimate(info, inx, key_buff, start_key_len, myisam_read_vec[start_search_flag]);
|
(HA_KEYSEG**) 0);
|
||||||
res=res?res:1;
|
res= rtree_estimate(info, inx, key_buff, start_key_len,
|
||||||
break;
|
myisam_read_vec[min_key->flag]);
|
||||||
}
|
res= res ? res : 1; /* Don't return 0 */
|
||||||
|
break;
|
||||||
|
}
|
||||||
case HA_KEY_ALG_BTREE:
|
case HA_KEY_ALG_BTREE:
|
||||||
default:
|
default:
|
||||||
start_pos= (start_key ?
|
start_pos= (min_key ?
|
||||||
_mi_record_pos(info,start_key,start_key_len,start_search_flag) :
|
_mi_record_pos(info, min_key->key, min_key->length,
|
||||||
(ha_rows) 0);
|
min_key->flag) :
|
||||||
end_pos= (end_key ?
|
(ha_rows) 0);
|
||||||
_mi_record_pos(info,end_key,end_key_len,end_search_flag) :
|
end_pos= (max_key ?
|
||||||
info->state->records+ (ha_rows) 1);
|
_mi_record_pos(info, max_key->key, max_key->length,
|
||||||
res=end_pos < start_pos ? (ha_rows) 0 :
|
max_key->flag) :
|
||||||
(end_pos == start_pos ? (ha_rows) 1 : end_pos-start_pos);
|
info->state->records+ (ha_rows) 1);
|
||||||
|
res= (end_pos < start_pos ? (ha_rows) 0 :
|
||||||
|
(end_pos == start_pos ? (ha_rows) 1 : end_pos-start_pos));
|
||||||
if (start_pos == HA_POS_ERROR || end_pos == HA_POS_ERROR)
|
if (start_pos == HA_POS_ERROR || end_pos == HA_POS_ERROR)
|
||||||
res=HA_POS_ERROR;
|
res=HA_POS_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -606,13 +606,20 @@ int main(int argc, char *argv[])
|
|||||||
mi_status(file,&info,HA_STATUS_VARIABLE);
|
mi_status(file,&info,HA_STATUS_VARIABLE);
|
||||||
for (i=0 ; i < info.keys ; i++)
|
for (i=0 ; i < info.keys ; i++)
|
||||||
{
|
{
|
||||||
|
key_range min_key, max_key;
|
||||||
if (mi_rfirst(file,read_record,(int) i) ||
|
if (mi_rfirst(file,read_record,(int) i) ||
|
||||||
mi_rlast(file,read_record2,(int) i))
|
mi_rlast(file,read_record2,(int) i))
|
||||||
goto err;
|
goto err;
|
||||||
copy_key(file,(uint) i,(uchar*) read_record,(uchar*) key);
|
copy_key(file,(uint) i,(uchar*) read_record,(uchar*) key);
|
||||||
copy_key(file,(uint) i,(uchar*) read_record2,(uchar*) key2);
|
copy_key(file,(uint) i,(uchar*) read_record2,(uchar*) key2);
|
||||||
range_records=mi_records_in_range(file,(int) i,key,0,HA_READ_KEY_EXACT,
|
min_key.key= key;
|
||||||
key2,0,HA_READ_AFTER_KEY);
|
min_key.length= USE_WHOLE_KEY;
|
||||||
|
min_key.flag= HA_READ_KEY_EXACT;
|
||||||
|
max_key.key= key2;
|
||||||
|
max_key.length= USE_WHOLE_KEY;
|
||||||
|
max_key.flag= HA_READ_AFTER_KEY;
|
||||||
|
|
||||||
|
range_records= mi_records_in_range(file,(int) i, &min_key, &max_key);
|
||||||
if (range_records < info.records*8/10 ||
|
if (range_records < info.records*8/10 ||
|
||||||
range_records > info.records*12/10)
|
range_records > info.records*12/10)
|
||||||
{
|
{
|
||||||
@ -634,12 +641,19 @@ int main(int argc, char *argv[])
|
|||||||
for (k=rnd(1000)+1 ; k>0 && key1[k] == 0 ; k--) ;
|
for (k=rnd(1000)+1 ; k>0 && key1[k] == 0 ; k--) ;
|
||||||
if (j != 0 && k != 0)
|
if (j != 0 && k != 0)
|
||||||
{
|
{
|
||||||
|
key_range min_key, max_key;
|
||||||
if (j > k)
|
if (j > k)
|
||||||
swap(int,j,k);
|
swap(int,j,k);
|
||||||
sprintf(key,"%6d",j);
|
sprintf(key,"%6d",j);
|
||||||
sprintf(key2,"%6d",k);
|
sprintf(key2,"%6d",k);
|
||||||
range_records=mi_records_in_range(file,0,key,0,HA_READ_AFTER_KEY,
|
|
||||||
key2,0,HA_READ_BEFORE_KEY);
|
min_key.key= key;
|
||||||
|
min_key.length= USE_WHOLE_KEY;
|
||||||
|
min_key.flag= HA_READ_AFTER_KEY;
|
||||||
|
max_key.key= key2;
|
||||||
|
max_key.length= USE_WHOLE_KEY;
|
||||||
|
max_key.flag= HA_READ_BEFORE_KEY;
|
||||||
|
range_records= mi_records_in_range(file, 0, &min_key, &max_key);
|
||||||
records=0;
|
records=0;
|
||||||
for (j++ ; j < k ; j++)
|
for (j++ ; j < k ; j++)
|
||||||
records+=key1[j];
|
records+=key1[j];
|
||||||
|
@ -39,7 +39,6 @@ int main(int argc __attribute__((unused)),char *argv[] __attribute__((unused)))
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int run_test(const char *filename)
|
int run_test(const char *filename)
|
||||||
{
|
{
|
||||||
MI_INFO *file;
|
MI_INFO *file;
|
||||||
@ -48,6 +47,7 @@ int run_test(const char *filename)
|
|||||||
MI_COLUMNDEF recinfo[20];
|
MI_COLUMNDEF recinfo[20];
|
||||||
MI_KEYDEF keyinfo[20];
|
MI_KEYDEF keyinfo[20];
|
||||||
HA_KEYSEG keyseg[20];
|
HA_KEYSEG keyseg[20];
|
||||||
|
key_range range;
|
||||||
|
|
||||||
int silent=0;
|
int silent=0;
|
||||||
int opt_unique=0;
|
int opt_unique=0;
|
||||||
@ -66,15 +66,12 @@ int run_test(const char *filename)
|
|||||||
int upd= 10;
|
int upd= 10;
|
||||||
ha_rows hrows;
|
ha_rows hrows;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Define a column for NULLs and DEL markers*/
|
/* Define a column for NULLs and DEL markers*/
|
||||||
|
|
||||||
recinfo[0].type=FIELD_NORMAL;
|
recinfo[0].type=FIELD_NORMAL;
|
||||||
recinfo[0].length=1; /* For NULL bits */
|
recinfo[0].length=1; /* For NULL bits */
|
||||||
rec_length=1;
|
rec_length=1;
|
||||||
|
|
||||||
|
|
||||||
/* Define 2*ndims columns for coordinates*/
|
/* Define 2*ndims columns for coordinates*/
|
||||||
|
|
||||||
for (i=1; i<=2*ndims ;i++){
|
for (i=1; i<=2*ndims ;i++){
|
||||||
@ -83,7 +80,6 @@ int run_test(const char *filename)
|
|||||||
rec_length+=key_length;
|
rec_length+=key_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Define a key with 2*ndims segments */
|
/* Define a key with 2*ndims segments */
|
||||||
|
|
||||||
keyinfo[0].seg=keyseg;
|
keyinfo[0].seg=keyseg;
|
||||||
@ -101,8 +97,7 @@ int run_test(const char *filename)
|
|||||||
keyinfo[0].seg[i].language=default_charset_info->number;
|
keyinfo[0].seg[i].language=default_charset_info->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
if(!silent)
|
|
||||||
printf("- Creating isam-file\n");
|
printf("- Creating isam-file\n");
|
||||||
|
|
||||||
bzero((char*) &create_info,sizeof(create_info));
|
bzero((char*) &create_info,sizeof(create_info));
|
||||||
@ -115,15 +110,11 @@ int run_test(const char *filename)
|
|||||||
recinfo,uniques,&uniquedef,&create_info,create_flag))
|
recinfo,uniques,&uniquedef,&create_info,create_flag))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
|
|
||||||
|
|
||||||
if(!silent)
|
|
||||||
printf("- Open isam-file\n");
|
printf("- Open isam-file\n");
|
||||||
|
|
||||||
if (!(file=mi_open(filename,2,HA_OPEN_ABORT_IF_LOCKED)))
|
if (!(file=mi_open(filename,2,HA_OPEN_ABORT_IF_LOCKED)))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Writing key:s\n");
|
printf("- Writing key:s\n");
|
||||||
@ -144,11 +135,9 @@ int run_test(const char *filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((error=read_with_pos(file,silent)))
|
||||||
if((error=read_with_pos(file,silent)))
|
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Reading rows with key\n");
|
printf("- Reading rows with key\n");
|
||||||
|
|
||||||
@ -160,12 +149,12 @@ int run_test(const char *filename)
|
|||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rkey(file,read_record,0,record+1,0,HA_READ_MBR_EQUAL);
|
error=mi_rkey(file,read_record,0,record+1,0,HA_READ_MBR_EQUAL);
|
||||||
|
|
||||||
if(error && error!=HA_ERR_KEY_NOT_FOUND)
|
if (error && error!=HA_ERR_KEY_NOT_FOUND)
|
||||||
{
|
{
|
||||||
printf(" mi_rkey: %3d errno: %3d\n",error,my_errno);
|
printf(" mi_rkey: %3d errno: %3d\n",error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if(error == HA_ERR_KEY_NOT_FOUND)
|
if (error == HA_ERR_KEY_NOT_FOUND)
|
||||||
{
|
{
|
||||||
print_record(record,mi_position(file)," NOT FOUND\n");
|
print_record(record,mi_position(file)," NOT FOUND\n");
|
||||||
continue;
|
continue;
|
||||||
@ -173,10 +162,6 @@ int run_test(const char *filename)
|
|||||||
print_record(read_record,mi_position(file),"\n");
|
print_record(read_record,mi_position(file),"\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Deleting rows\n");
|
printf("- Deleting rows\n");
|
||||||
for (i=0; i < nrecords/4; i++)
|
for (i=0; i < nrecords/4; i++)
|
||||||
@ -184,7 +169,7 @@ int run_test(const char *filename)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
@ -192,14 +177,13 @@ int run_test(const char *filename)
|
|||||||
print_record(read_record,mi_position(file),"\n");
|
print_record(read_record,mi_position(file),"\n");
|
||||||
|
|
||||||
error=mi_delete(file,read_record);
|
error=mi_delete(file,read_record);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_delete: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_delete: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Updating rows with position\n");
|
printf("- Updating rows with position\n");
|
||||||
for (i=0; i < (nrecords - nrecords/4) ; i++)
|
for (i=0; i < (nrecords - nrecords/4) ; i++)
|
||||||
@ -207,9 +191,9 @@ int run_test(const char *filename)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_RECORD_DELETED)
|
if (error==HA_ERR_RECORD_DELETED)
|
||||||
continue;
|
continue;
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
@ -219,19 +203,16 @@ int run_test(const char *filename)
|
|||||||
printf("\t-> ");
|
printf("\t-> ");
|
||||||
print_record(record,mi_position(file),"\n");
|
print_record(record,mi_position(file),"\n");
|
||||||
error=mi_update(file,read_record,record);
|
error=mi_update(file,read_record,record);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_update: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_update: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((error=read_with_pos(file,silent)))
|
||||||
if((error=read_with_pos(file,silent)))
|
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_rkey then a sequence of mi_rnext_same\n");
|
printf("- Test mi_rkey then a sequence of mi_rnext_same\n");
|
||||||
|
|
||||||
@ -246,25 +227,20 @@ int run_test(const char *filename)
|
|||||||
print_record(read_record,mi_position(file)," mi_rkey\n");
|
print_record(read_record,mi_position(file)," mi_rkey\n");
|
||||||
row_count=1;
|
row_count=1;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
do {
|
{
|
||||||
if((error=mi_rnext_same(file,read_record)))
|
if ((error=mi_rnext_same(file,read_record)))
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
print_record(read_record,mi_position(file)," mi_rnext_same\n");
|
print_record(read_record,mi_position(file)," mi_rnext_same\n");
|
||||||
row_count++;
|
row_count++;
|
||||||
}while(1);
|
}
|
||||||
printf(" %d rows\n",row_count);
|
printf(" %d rows\n",row_count);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_rfirst then a sequence of mi_rnext\n");
|
printf("- Test mi_rfirst then a sequence of mi_rnext\n");
|
||||||
|
|
||||||
@ -277,10 +253,11 @@ int run_test(const char *filename)
|
|||||||
row_count=1;
|
row_count=1;
|
||||||
print_record(read_record,mi_position(file)," mi_frirst\n");
|
print_record(read_record,mi_position(file)," mi_frirst\n");
|
||||||
|
|
||||||
for(i=0;i<nrecords;i++) {
|
for (i=0;i<nrecords;i++)
|
||||||
if((error=mi_rnext(file,read_record,0)))
|
{
|
||||||
|
if ((error=mi_rnext(file,read_record,0)))
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
@ -290,16 +267,18 @@ int run_test(const char *filename)
|
|||||||
}
|
}
|
||||||
printf(" %d rows\n",row_count);
|
printf(" %d rows\n",row_count);
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_records_in_range()\n");
|
printf("- Test mi_records_in_range()\n");
|
||||||
|
|
||||||
create_record1(record, nrecords*4/5);
|
create_record1(record, nrecords*4/5);
|
||||||
print_record(record,0,"\n");
|
print_record(record,0,"\n");
|
||||||
hrows=mi_records_in_range(file,0,record+1,0,HA_READ_MBR_INTERSECT,record+1,0,0);
|
|
||||||
|
range.key= record+1;
|
||||||
|
range.length= 1000; /* Big enough */
|
||||||
|
range.flag= HA_READ_MBR_INTERSECT;
|
||||||
|
hrows= mi_records_in_range(file,0, &range, (key_range*) 0);
|
||||||
printf(" %ld rows\n", (long) hrows);
|
printf(" %ld rows\n", (long) hrows);
|
||||||
|
|
||||||
|
|
||||||
if (mi_close(file)) goto err;
|
if (mi_close(file)) goto err;
|
||||||
my_end(MY_CHECK_ERROR);
|
my_end(MY_CHECK_ERROR);
|
||||||
|
|
||||||
@ -325,11 +304,11 @@ static int read_with_pos (MI_INFO * file,int silent)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
if(error==HA_ERR_RECORD_DELETED)
|
if (error==HA_ERR_RECORD_DELETED)
|
||||||
continue;
|
continue;
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
return error;
|
return error;
|
||||||
|
@ -32,10 +32,10 @@ static void print_key(const char *key,const char * tail);
|
|||||||
static int run_test(const char *filename);
|
static int run_test(const char *filename);
|
||||||
static int read_with_pos(MI_INFO * file, int silent);
|
static int read_with_pos(MI_INFO * file, int silent);
|
||||||
|
|
||||||
static int rtree_CreateLineStringWKB(double *ords, uint n_dims, uint n_points, uchar *wkb);
|
static int rtree_CreateLineStringWKB(double *ords, uint n_dims, uint n_points,
|
||||||
|
uchar *wkb);
|
||||||
static void rtree_PrintWKB(uchar *wkb, uint n_dims);
|
static void rtree_PrintWKB(uchar *wkb, uint n_dims);
|
||||||
|
|
||||||
|
|
||||||
static char blob_key[MAX_REC_LENGTH];
|
static char blob_key[MAX_REC_LENGTH];
|
||||||
|
|
||||||
|
|
||||||
@ -46,7 +46,6 @@ int main(int argc __attribute__((unused)),char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int run_test(const char *filename)
|
int run_test(const char *filename)
|
||||||
{
|
{
|
||||||
MI_INFO *file;
|
MI_INFO *file;
|
||||||
@ -55,7 +54,7 @@ int run_test(const char *filename)
|
|||||||
MI_COLUMNDEF recinfo[20];
|
MI_COLUMNDEF recinfo[20];
|
||||||
MI_KEYDEF keyinfo[20];
|
MI_KEYDEF keyinfo[20];
|
||||||
HA_KEYSEG keyseg[20];
|
HA_KEYSEG keyseg[20];
|
||||||
|
key_range min_range, max_range;
|
||||||
int silent=0;
|
int silent=0;
|
||||||
int create_flag=0;
|
int create_flag=0;
|
||||||
int null_fields=0;
|
int null_fields=0;
|
||||||
@ -100,7 +99,7 @@ int run_test(const char *filename)
|
|||||||
keyinfo[0].seg[0].bit_start=4; /* Long BLOB */
|
keyinfo[0].seg[0].bit_start=4; /* Long BLOB */
|
||||||
|
|
||||||
|
|
||||||
if(!silent)
|
if (!silent)
|
||||||
printf("- Creating isam-file\n");
|
printf("- Creating isam-file\n");
|
||||||
|
|
||||||
bzero((char*) &create_info,sizeof(create_info));
|
bzero((char*) &create_info,sizeof(create_info));
|
||||||
@ -113,17 +112,12 @@ int run_test(const char *filename)
|
|||||||
recinfo,uniques,&uniquedef,&create_info,create_flag))
|
recinfo,uniques,&uniquedef,&create_info,create_flag))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
|
|
||||||
|
|
||||||
if(!silent)
|
|
||||||
printf("- Open isam-file\n");
|
printf("- Open isam-file\n");
|
||||||
|
|
||||||
if (!(file=mi_open(filename,2,HA_OPEN_ABORT_IF_LOCKED)))
|
if (!(file=mi_open(filename,2,HA_OPEN_ABORT_IF_LOCKED)))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Writing key:s\n");
|
printf("- Writing key:s\n");
|
||||||
|
|
||||||
@ -143,11 +137,9 @@ int run_test(const char *filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((error=read_with_pos(file,silent)))
|
||||||
if((error=read_with_pos(file,silent)))
|
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Deleting rows with position\n");
|
printf("- Deleting rows with position\n");
|
||||||
for (i=0; i < nrecords/4; i++)
|
for (i=0; i < nrecords/4; i++)
|
||||||
@ -155,23 +147,20 @@ int run_test(const char *filename)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
print_record(read_record,mi_position(file),"\n");
|
print_record(read_record,mi_position(file),"\n");
|
||||||
error=mi_delete(file,read_record);
|
error=mi_delete(file,read_record);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_delete: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_delete: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Updating rows with position\n");
|
printf("- Updating rows with position\n");
|
||||||
for (i=0; i < nrecords/2 ; i++)
|
for (i=0; i < nrecords/2 ; i++)
|
||||||
@ -179,9 +168,9 @@ int run_test(const char *filename)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_RECORD_DELETED)
|
if (error==HA_ERR_RECORD_DELETED)
|
||||||
continue;
|
continue;
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
@ -191,20 +180,16 @@ int run_test(const char *filename)
|
|||||||
printf("\t-> ");
|
printf("\t-> ");
|
||||||
print_record(record,mi_position(file),"\n");
|
print_record(record,mi_position(file),"\n");
|
||||||
error=mi_update(file,read_record,record);
|
error=mi_update(file,read_record,record);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
printf("pos: %2d mi_update: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_update: %3d errno: %3d\n",i,error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((error=read_with_pos(file,silent)))
|
||||||
|
|
||||||
if((error=read_with_pos(file,silent)))
|
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_rkey then a sequence of mi_rnext_same\n");
|
printf("- Test mi_rkey then a sequence of mi_rnext_same\n");
|
||||||
|
|
||||||
@ -219,25 +204,20 @@ int run_test(const char *filename)
|
|||||||
print_record(read_record,mi_position(file)," mi_rkey\n");
|
print_record(read_record,mi_position(file)," mi_rkey\n");
|
||||||
row_count=1;
|
row_count=1;
|
||||||
|
|
||||||
|
for (;;)
|
||||||
do {
|
{
|
||||||
if((error=mi_rnext_same(file,read_record)))
|
if ((error=mi_rnext_same(file,read_record)))
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
print_record(read_record,mi_position(file)," mi_rnext_same\n");
|
print_record(read_record,mi_position(file)," mi_rnext_same\n");
|
||||||
row_count++;
|
row_count++;
|
||||||
}while(1);
|
}
|
||||||
printf(" %d rows\n",row_count);
|
printf(" %d rows\n",row_count);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_rfirst then a sequence of mi_rnext\n");
|
printf("- Test mi_rfirst then a sequence of mi_rnext\n");
|
||||||
|
|
||||||
@ -251,9 +231,9 @@ int run_test(const char *filename)
|
|||||||
print_record(read_record,mi_position(file)," mi_frirst\n");
|
print_record(read_record,mi_position(file)," mi_frirst\n");
|
||||||
|
|
||||||
for(i=0;i<nrecords;i++) {
|
for(i=0;i<nrecords;i++) {
|
||||||
if((error=mi_rnext(file,read_record,0)))
|
if ((error=mi_rnext(file,read_record,0)))
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
printf("mi_next: %3d errno: %3d\n",error,my_errno);
|
||||||
goto err;
|
goto err;
|
||||||
@ -263,22 +243,22 @@ int run_test(const char *filename)
|
|||||||
}
|
}
|
||||||
printf(" %d rows\n",row_count);
|
printf(" %d rows\n",row_count);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
printf("- Test mi_records_in_range()\n");
|
printf("- Test mi_records_in_range()\n");
|
||||||
|
|
||||||
create_key(key, nrecords*upd);
|
create_key(key, nrecords*upd);
|
||||||
print_key(key," INTERSECT\n");
|
print_key(key," INTERSECT\n");
|
||||||
hrows=mi_records_in_range(file,0,key,0,HA_READ_MBR_INTERSECT,record+1,0,
|
min_range.key= key;
|
||||||
HA_READ_KEY_EXACT);
|
min_range.length= 1000; /* Big enough */
|
||||||
|
min_range.flag= HA_READ_MBR_INTERSECT;
|
||||||
|
max_range.key= record+1;
|
||||||
|
max_range.length= 1000; /* Big enough */
|
||||||
|
max_range.flag= HA_READ_KEY_EXACT;
|
||||||
|
hrows= mi_records_in_range(file,0, &min_range, &max_range);
|
||||||
printf(" %ld rows\n", (long) hrows);
|
printf(" %ld rows\n", (long) hrows);
|
||||||
|
|
||||||
|
|
||||||
if (mi_close(file)) goto err;
|
if (mi_close(file)) goto err;
|
||||||
my_end(MY_CHECK_ERROR);
|
my_end(MY_CHECK_ERROR);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
@ -287,7 +267,6 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int read_with_pos (MI_INFO * file,int silent)
|
static int read_with_pos (MI_INFO * file,int silent)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
@ -302,11 +281,11 @@ static int read_with_pos (MI_INFO * file,int silent)
|
|||||||
my_errno=0;
|
my_errno=0;
|
||||||
bzero((char*) read_record,MAX_REC_LENGTH);
|
bzero((char*) read_record,MAX_REC_LENGTH);
|
||||||
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
error=mi_rrnd(file,read_record,i == 0 ? 0L : HA_OFFSET_ERROR);
|
||||||
if(error)
|
if (error)
|
||||||
{
|
{
|
||||||
if(error==HA_ERR_END_OF_FILE)
|
if (error==HA_ERR_END_OF_FILE)
|
||||||
break;
|
break;
|
||||||
if(error==HA_ERR_RECORD_DELETED)
|
if (error==HA_ERR_RECORD_DELETED)
|
||||||
continue;
|
continue;
|
||||||
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
printf("pos: %2d mi_rrnd: %3d errno: %3d\n",i,error,my_errno);
|
||||||
return error;
|
return error;
|
||||||
@ -351,7 +330,7 @@ static void print_record(char * record, my_off_t offs,const char * tail)
|
|||||||
pos+=4;
|
pos+=4;
|
||||||
printf(" len=%d ",len);
|
printf(" len=%d ",len);
|
||||||
memcpy_fixed(&ptr,pos,sizeof(char*));
|
memcpy_fixed(&ptr,pos,sizeof(char*));
|
||||||
if(ptr)
|
if (ptr)
|
||||||
rtree_PrintWKB((uchar*) ptr,SPDIMS);
|
rtree_PrintWKB((uchar*) ptr,SPDIMS);
|
||||||
else
|
else
|
||||||
printf("<NULL> ");
|
printf("<NULL> ");
|
||||||
@ -360,7 +339,6 @@ static void print_record(char * record, my_off_t offs,const char * tail)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOT_USED
|
#ifdef NOT_USED
|
||||||
static void create_point(char *record,uint rownr)
|
static void create_point(char *record,uint rownr)
|
||||||
{
|
{
|
||||||
@ -447,7 +425,6 @@ static void print_key(const char *key,const char * tail)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOT_USED
|
#ifdef NOT_USED
|
||||||
|
|
||||||
static int rtree_CreatePointWKB(double *ords, uint n_dims, uchar *wkb)
|
static int rtree_CreatePointWKB(double *ords, uint n_dims, uchar *wkb)
|
||||||
@ -489,6 +466,7 @@ static int rtree_CreateLineStringWKB(double *ords, uint n_dims, uint n_points,
|
|||||||
return 9 + n_points * n_dims * 8;
|
return 9 + n_points * n_dims * 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void rtree_PrintWKB(uchar *wkb, uint n_dims)
|
static void rtree_PrintWKB(uchar *wkb, uint n_dims)
|
||||||
{
|
{
|
||||||
uint wkb_type;
|
uint wkb_type;
|
||||||
|
@ -16,20 +16,15 @@
|
|||||||
|
|
||||||
#include "myrg_def.h"
|
#include "myrg_def.h"
|
||||||
|
|
||||||
ha_rows myrg_records_in_range(MYRG_INFO *info, int inx, const byte *start_key,
|
ha_rows myrg_records_in_range(MYRG_INFO *info, int inx,
|
||||||
uint start_key_len,
|
key_range *min_key, key_range *max_key)
|
||||||
enum ha_rkey_function start_search_flag,
|
|
||||||
const byte *end_key, uint end_key_len,
|
|
||||||
enum ha_rkey_function end_search_flag)
|
|
||||||
{
|
{
|
||||||
ha_rows records=0, res;
|
ha_rows records=0, res;
|
||||||
MYRG_TABLE *table;
|
MYRG_TABLE *table;
|
||||||
|
|
||||||
for (table=info->open_tables ; table != info->end_table ; table++)
|
for (table=info->open_tables ; table != info->end_table ; table++)
|
||||||
{
|
{
|
||||||
res=mi_records_in_range(table->table, inx,
|
res= mi_records_in_range(table->table, inx, min_key, max_key);
|
||||||
start_key, start_key_len, start_search_flag,
|
|
||||||
end_key, end_key_len, end_search_flag);
|
|
||||||
if (res == HA_POS_ERROR)
|
if (res == HA_POS_ERROR)
|
||||||
return HA_POS_ERROR;
|
return HA_POS_ERROR;
|
||||||
if (records > HA_POS_ERROR - res)
|
if (records > HA_POS_ERROR - res)
|
||||||
|
@ -142,7 +142,7 @@ explain extended select last_insert_id();
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache last_insert_id() AS `last_insert_id()`
|
Note 1003 select sql_no_cache last_insert_id() AS `last_insert_id()`
|
||||||
insert into t1 set i = 254;
|
insert into t1 set i = 254;
|
||||||
ERROR 23000: Duplicate entry '254' for key 1
|
ERROR 23000: Duplicate entry '254' for key 1
|
||||||
select last_insert_id();
|
select last_insert_id();
|
||||||
|
@ -7,5 +7,5 @@ explain extended select count(distinct n) from t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 index NULL n 4 NULL 200 Using index
|
1 SIMPLE t1 index NULL n 4 NULL 200 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority count(distinct test.t1.n) AS `count(distinct n)` from test.t1
|
Note 1003 select count(distinct test.t1.n) AS `count(distinct n)` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -27,7 +27,7 @@ explain extended select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" E
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (case 1 when 1 then _latin1'one' when 2 then _latin1'two' else _latin1'more' end) AS `CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END`
|
Note 1003 select (case 1 when 1 then _latin1'one' when 2 then _latin1'two' else _latin1'more' end) AS `CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END`
|
||||||
select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
|
select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
|
||||||
CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END
|
CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END
|
||||||
two
|
two
|
||||||
@ -66,7 +66,7 @@ explain extended select case a when 1 then 2 when 2 then 3 else 0 end as fcase,
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (case test.t1.a when 1 then 2 when 2 then 3 else 0 end) AS `fcase`,count(0) AS `count(*)` from test.t1 group by (case test.t1.a when 1 then 2 when 2 then 3 else 0 end)
|
Note 1003 select (case test.t1.a when 1 then 2 when 2 then 3 else 0 end) AS `fcase`,count(0) AS `count(*)` from test.t1 group by (case test.t1.a when 1 then 2 when 2 then 3 else 0 end)
|
||||||
select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase;
|
select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase;
|
||||||
fcase count(*)
|
fcase count(*)
|
||||||
nothing 2
|
nothing 2
|
||||||
@ -141,7 +141,7 @@ COALESCE('a' COLLATE latin1_bin,'b');
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority coalesce(1) AS `COALESCE(1)`,coalesce(1.0) AS `COALESCE(1.0)`,coalesce(_latin1'a') AS `COALESCE('a')`,coalesce(1,1.0) AS `COALESCE(1,1.0)`,coalesce(1,_latin1'1') AS `COALESCE(1,'1')`,coalesce(1.1,_latin1'1') AS `COALESCE(1.1,'1')`,coalesce((_latin1'a' collate _latin1'latin1_bin'),_latin1'b') AS `COALESCE('a' COLLATE latin1_bin,'b')`
|
Note 1003 select coalesce(1) AS `COALESCE(1)`,coalesce(1.0) AS `COALESCE(1.0)`,coalesce(_latin1'a') AS `COALESCE('a')`,coalesce(1,1.0) AS `COALESCE(1,1.0)`,coalesce(1,_latin1'1') AS `COALESCE(1,'1')`,coalesce(1.1,_latin1'1') AS `COALESCE(1.1,'1')`,coalesce((_latin1'a' collate _latin1'latin1_bin'),_latin1'b') AS `COALESCE('a' COLLATE latin1_bin,'b')`
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
|
@ -20,7 +20,7 @@ explain extended select ~5, cast(~5 as signed);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority ~(5) AS `~5`,cast(~(5) as signed) AS `cast(~5 as signed)`
|
Note 1003 select ~(5) AS `~5`,cast(~(5) as signed) AS `cast(~5 as signed)`
|
||||||
select cast(5 as unsigned) -6.0;
|
select cast(5 as unsigned) -6.0;
|
||||||
cast(5 as unsigned) -6.0
|
cast(5 as unsigned) -6.0
|
||||||
-1.0
|
-1.0
|
||||||
|
@ -519,7 +519,7 @@ explain extended SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority charset(_latin1'a') AS `charset('a')`,collation(_latin1'a') AS `collation('a')`,coercibility(_latin1'a') AS `coercibility('a')`,(_latin1'a' = _latin1'A') AS `'a'='A'`
|
Note 1003 select charset(_latin1'a') AS `charset('a')`,collation(_latin1'a') AS `collation('a')`,coercibility(_latin1'a') AS `coercibility('a')`,(_latin1'a' = _latin1'A') AS `'a'='A'`
|
||||||
SET CHARACTER SET koi8r;
|
SET CHARACTER SET koi8r;
|
||||||
SHOW VARIABLES LIKE 'collation_client';
|
SHOW VARIABLES LIKE 'collation_client';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
|
@ -331,7 +331,7 @@ explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM",
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority makedate(1997,1) AS `makedate(1997,1)`,addtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff(_latin1'01.01.97 11:59:59.000001 PM',_latin1'31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date(_latin1'15-01-2001 12:59:59',_latin1'%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond(_latin1'1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
|
Note 1003 select makedate(1997,1) AS `makedate(1997,1)`,addtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff(_latin1'01.01.97 11:59:59.000001 PM',_latin1'31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date(_latin1'15-01-2001 12:59:59',_latin1'%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond(_latin1'1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
|
||||||
create table t1 (d date);
|
create table t1 (d date);
|
||||||
insert into t1 values ('2004-07-14'),('2005-07-14');
|
insert into t1 values ('2004-07-14'),('2005-07-14');
|
||||||
select date_format(d,"%d") from t1 order by 1;
|
select date_format(d,"%d") from t1 order by 1;
|
||||||
|
@ -44,3 +44,12 @@ explain select count(*) from t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set names koi8r;
|
||||||
|
create table <20><><EFBFBD> (<28><><EFBFBD>0 int, <20><><EFBFBD>1 int, key <20><><EFBFBD>0 (<28><><EFBFBD>0), key <20><><EFBFBD>01 (<28><><EFBFBD>0,<2C><><EFBFBD>1));
|
||||||
|
insert into <20><><EFBFBD> (<28><><EFBFBD>0) values (1);
|
||||||
|
insert into <20><><EFBFBD> (<28><><EFBFBD>0) values (2);
|
||||||
|
explain select <20><><EFBFBD>0 from <20><><EFBFBD> where <20><><EFBFBD>0=1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE <09><><EFBFBD> ref <09><><EFBFBD>0,<2C><><EFBFBD>01 <09><><EFBFBD>0 5 const 1 Using where; Using index
|
||||||
|
drop table <20><><EFBFBD>;
|
||||||
|
set names latin1;
|
||||||
|
@ -17,7 +17,7 @@ explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 fulltext a a 0 1 Using where
|
1 SIMPLE t1 fulltext a a 0 1 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'collections'))
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'collections'))
|
||||||
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
||||||
a b
|
a b
|
||||||
Full-text indexes are called collections
|
Full-text indexes are called collections
|
||||||
@ -78,7 +78,7 @@ explain extended select * from t1 where MATCH(a,b) AGAINST("support -collections
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 fulltext a a 0 1 Using where
|
1 SIMPLE t1 fulltext a a 0 1 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'support -collections' in boolean mode))
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'support -collections' in boolean mode))
|
||||||
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
|
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
|
||||||
a b
|
a b
|
||||||
MySQL has now support for full-text search
|
MySQL has now support for full-text search
|
||||||
|
@ -11,7 +11,7 @@ explain extended select uncompress(compress(@test_compress_string));
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache uncompress(compress((@test_compress_string))) AS `uncompress(compress(@test_compress_string))`
|
Note 1003 select sql_no_cache uncompress(compress((@test_compress_string))) AS `uncompress(compress(@test_compress_string))`
|
||||||
select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
|
select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
|
||||||
uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)
|
uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)
|
||||||
1
|
1
|
||||||
@ -19,7 +19,7 @@ explain extended select uncompressed_length(compress(@test_compress_string))=len
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache (uncompressed_length(compress((@test_compress_string))) = length((@test_compress_string))) AS `uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)`
|
Note 1003 select sql_no_cache (uncompressed_length(compress((@test_compress_string))) = length((@test_compress_string))) AS `uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)`
|
||||||
select uncompressed_length(compress(@test_compress_string));
|
select uncompressed_length(compress(@test_compress_string));
|
||||||
uncompressed_length(compress(@test_compress_string))
|
uncompressed_length(compress(@test_compress_string))
|
||||||
117
|
117
|
||||||
|
@ -91,4 +91,4 @@ explain extended select password('idkfa '), old_password('idkfa');
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority password(_latin1'idkfa ') AS `password('idkfa ')`,old_password(_latin1'idkfa') AS `old_password('idkfa')`
|
Note 1003 select password(_latin1'idkfa ') AS `password('idkfa ')`,old_password(_latin1'idkfa') AS `old_password('idkfa')`
|
||||||
|
@ -8,7 +8,7 @@ explain extended select default(str), default(strnull), default(intg), default(r
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority default(test.t1.str) AS `default(str)`,default(test.t1.strnull) AS `default(strnull)`,default(test.t1.intg) AS `default(intg)`,default(test.t1.rel) AS `default(rel)` from test.t1
|
Note 1003 select default(test.t1.str) AS `default(str)`,default(test.t1.strnull) AS `default(strnull)`,default(test.t1.intg) AS `default(intg)`,default(test.t1.rel) AS `default(rel)` from test.t1
|
||||||
select * from t1 where str <> default(str);
|
select * from t1 where str <> default(str);
|
||||||
str strnull intg rel
|
str strnull intg rel
|
||||||
0 0
|
0 0
|
||||||
|
@ -138,4 +138,4 @@ explain extended select des_decrypt(des_encrypt("hello",4),'password2'), des_dec
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority des_decrypt(des_encrypt(_latin1'hello',4),_latin1'password2') AS `des_decrypt(des_encrypt("hello",4),'password2')`,des_decrypt(des_encrypt(_latin1'hello',_latin1'hidden')) AS `des_decrypt(des_encrypt("hello","hidden"))`
|
Note 1003 select des_decrypt(des_encrypt(_latin1'hello',4),_latin1'password2') AS `des_decrypt(des_encrypt("hello",4),'password2')`,des_decrypt(des_encrypt(_latin1'hello',_latin1'hidden')) AS `des_decrypt(des_encrypt("hello","hidden"))`
|
||||||
|
@ -18,7 +18,7 @@ explain extended select grp,group_concat(c) from t1 group by grp;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(test.t1.c seperator ',') AS `group_concat(c)` from test.t1 group by test.t1.grp
|
Note 1003 select test.t1.grp AS `grp`,group_concat(test.t1.c seperator ',') AS `group_concat(c)` from test.t1 group by test.t1.grp
|
||||||
select grp,group_concat(a,c) from t1 group by grp;
|
select grp,group_concat(a,c) from t1 group by grp;
|
||||||
grp group_concat(a,c)
|
grp group_concat(a,c)
|
||||||
1 1a
|
1 1a
|
||||||
@ -93,7 +93,7 @@ explain extended select grp,group_concat(distinct c order by c desc) from t1 gro
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c desc)` from test.t1 group by test.t1.grp
|
Note 1003 select test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c desc)` from test.t1 group by test.t1.grp
|
||||||
select grp,group_concat(c order by c separator ",") from t1 group by grp;
|
select grp,group_concat(c order by c separator ",") from t1 group by grp;
|
||||||
grp group_concat(c order by c separator ",")
|
grp group_concat(c order by c separator ",")
|
||||||
1 a
|
1 a
|
||||||
@ -113,7 +113,7 @@ explain extended select grp,group_concat(distinct c order by c separator ",") fr
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c separator ",")` from test.t1 group by test.t1.grp
|
Note 1003 select test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c separator ",")` from test.t1 group by test.t1.grp
|
||||||
select grp,group_concat(distinct c order by c desc separator ",") from t1 group by grp;
|
select grp,group_concat(distinct c order by c desc separator ",") from t1 group by grp;
|
||||||
grp group_concat(distinct c order by c desc separator ",")
|
grp group_concat(distinct c order by c desc separator ",")
|
||||||
1 a
|
1 a
|
||||||
@ -301,3 +301,12 @@ a c grp
|
|||||||
2 4 4
|
2 4 4
|
||||||
1 2 5
|
1 2 5
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1 ( a int );
|
||||||
|
CREATE TABLE t2 ( a int );
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
SELECT GROUP_CONCAT(t1.a*t2.a ORDER BY t2.a) FROM t1, t2 GROUP BY t1.a;
|
||||||
|
GROUP_CONCAT(t1.a*t2.a ORDER BY t2.a)
|
||||||
|
1,2
|
||||||
|
2,4
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -265,7 +265,7 @@ explain extended select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority big_result test.t1.a AS `a`,count(test.t1.b) AS `count(b)`,sum(test.t1.b) AS `sum(b)`,avg(test.t1.b) AS `avg(b)`,std(test.t1.b) AS `std(b)`,min(test.t1.b) AS `min(b)`,max(test.t1.b) AS `max(b)`,bit_and(test.t1.b) AS `bit_and(b)`,bit_or(test.t1.b) AS `bit_or(b)`,bit_xor(test.t1.b) AS `bit_xor(b)` from test.t1 group by test.t1.a
|
Note 1003 select sql_big_result test.t1.a AS `a`,count(test.t1.b) AS `count(b)`,sum(test.t1.b) AS `sum(b)`,avg(test.t1.b) AS `avg(b)`,std(test.t1.b) AS `std(b)`,min(test.t1.b) AS `min(b)`,max(test.t1.b) AS `max(b)`,bit_and(test.t1.b) AS `bit_and(b)`,bit_or(test.t1.b) AS `bit_or(b)`,bit_xor(test.t1.b) AS `bit_xor(b)` from test.t1 group by test.t1.a
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (col int);
|
create table t1 (col int);
|
||||||
insert into t1 values (-1), (-2), (-3);
|
insert into t1 values (-1), (-2), (-3);
|
||||||
|
@ -43,7 +43,7 @@ explain extended select if(u=1,st,binary st) s from t1 where st like "%a%" order
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where; Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY')) AS `s` from test.t1 where (test.t1.st like _latin1'%a%') order by if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY'))
|
Note 1003 select if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY')) AS `s` from test.t1 where (test.t1.st like _latin1'%a%') order by if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY'))
|
||||||
select nullif(u=0, 'test') from t1;
|
select nullif(u=0, 'test') from t1;
|
||||||
nullif(u=0, 'test')
|
nullif(u=0, 'test')
|
||||||
NULL
|
NULL
|
||||||
@ -57,7 +57,7 @@ explain extended select nullif(u=0, 'test') from t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 7
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 7
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority nullif((test.t1.u = 0),_latin1'test') AS `nullif(u=0, 'test')` from test.t1
|
Note 1003 select nullif((test.t1.u = 0),_latin1'test') AS `nullif(u=0, 'test')` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select NULLIF(NULL,NULL), NULLIF(NULL,1), NULLIF(NULL,1.0), NULLIF(NULL,"test");
|
select NULLIF(NULL,NULL), NULLIF(NULL,1), NULLIF(NULL,1.0), NULLIF(NULL,"test");
|
||||||
NULLIF(NULL,NULL) NULLIF(NULL,1) NULLIF(NULL,1.0) NULLIF(NULL,"test")
|
NULLIF(NULL,NULL) NULLIF(NULL,1) NULLIF(NULL,1.0) NULLIF(NULL,"test")
|
||||||
|
@ -146,7 +146,7 @@ explain extended select * from t1 where 'a' in (a,b,c collate latin1_bin);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1 where (_latin1'a' in (test.t1.a,test.t1.b,(test.t1.c collate _latin1'latin1_bin')))
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1 where (_latin1'a' in (test.t1.a,test.t1.b,(test.t1.c collate _latin1'latin1_bin')))
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select '1.0' in (1,2);
|
select '1.0' in (1,2);
|
||||||
'1.0' in (1,2)
|
'1.0' in (1,2)
|
||||||
|
@ -5,7 +5,7 @@ explain extended select floor(5.5),floor(-5.5);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority floor(5.5) AS `floor(5.5)`,floor(-(5.5)) AS `floor(-5.5)`
|
Note 1003 select floor(5.5) AS `floor(5.5)`,floor(-(5.5)) AS `floor(-5.5)`
|
||||||
select ceiling(5.5),ceiling(-5.5);
|
select ceiling(5.5),ceiling(-5.5);
|
||||||
ceiling(5.5) ceiling(-5.5)
|
ceiling(5.5) ceiling(-5.5)
|
||||||
6 -5
|
6 -5
|
||||||
@ -13,7 +13,7 @@ explain extended select ceiling(5.5),ceiling(-5.5);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority ceiling(5.5) AS `ceiling(5.5)`,ceiling(-(5.5)) AS `ceiling(-5.5)`
|
Note 1003 select ceiling(5.5) AS `ceiling(5.5)`,ceiling(-(5.5)) AS `ceiling(-5.5)`
|
||||||
select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1);
|
select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1);
|
||||||
truncate(52.64,1) truncate(52.64,2) truncate(52.64,-1) truncate(52.64,-2) truncate(-52.64,1) truncate(-52.64,-1)
|
truncate(52.64,1) truncate(52.64,2) truncate(52.64,-1) truncate(52.64,-2) truncate(-52.64,1) truncate(-52.64,-1)
|
||||||
52.6 52.64 50 0 -52.6 -50
|
52.6 52.64 50 0 -52.6 -50
|
||||||
@ -21,7 +21,7 @@ explain extended select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),t
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority truncate(52.64,1) AS `truncate(52.64,1)`,truncate(52.64,2) AS `truncate(52.64,2)`,truncate(52.64,-(1)) AS `truncate(52.64,-1)`,truncate(52.64,-(2)) AS `truncate(52.64,-2)`,truncate(-(52.64),1) AS `truncate(-52.64,1)`,truncate(-(52.64),-(1)) AS `truncate(-52.64,-1)`
|
Note 1003 select truncate(52.64,1) AS `truncate(52.64,1)`,truncate(52.64,2) AS `truncate(52.64,2)`,truncate(52.64,-(1)) AS `truncate(52.64,-1)`,truncate(52.64,-(2)) AS `truncate(52.64,-2)`,truncate(-(52.64),1) AS `truncate(-52.64,1)`,truncate(-(52.64),-(1)) AS `truncate(-52.64,-1)`
|
||||||
select round(5.5),round(-5.5);
|
select round(5.5),round(-5.5);
|
||||||
round(5.5) round(-5.5)
|
round(5.5) round(-5.5)
|
||||||
6 -6
|
6 -6
|
||||||
@ -29,7 +29,7 @@ explain extended select round(5.5),round(-5.5);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority round(5.5,0) AS `round(5.5)`,round(-(5.5),0) AS `round(-5.5)`
|
Note 1003 select round(5.5,0) AS `round(5.5)`,round(-(5.5),0) AS `round(-5.5)`
|
||||||
select round(5.64,1),round(5.64,2),round(5.64,-1),round(5.64,-2);
|
select round(5.64,1),round(5.64,2),round(5.64,-1),round(5.64,-2);
|
||||||
round(5.64,1) round(5.64,2) round(5.64,-1) round(5.64,-2)
|
round(5.64,1) round(5.64,2) round(5.64,-1) round(5.64,-2)
|
||||||
5.6 5.64 10 0
|
5.6 5.64 10 0
|
||||||
@ -40,7 +40,7 @@ explain extended select abs(-10), sign(-5), sign(5), sign(0);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority abs(-(10)) AS `abs(-10)`,sign(-(5)) AS `sign(-5)`,sign(5) AS `sign(5)`,sign(0) AS `sign(0)`
|
Note 1003 select abs(-(10)) AS `abs(-10)`,sign(-(5)) AS `sign(-5)`,sign(5) AS `sign(5)`,sign(0) AS `sign(0)`
|
||||||
select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(1,1),log(3,9),log(-1,2),log(NULL,2);
|
select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(1,1),log(3,9),log(-1,2),log(NULL,2);
|
||||||
log(exp(10)) exp(log(sqrt(10))*2) log(-1) log(NULL) log(1,1) log(3,9) log(-1,2) log(NULL,2)
|
log(exp(10)) exp(log(sqrt(10))*2) log(-1) log(NULL) log(1,1) log(3,9) log(-1,2) log(NULL,2)
|
||||||
10.000000 10.000000 NULL NULL NULL 2.000000 NULL NULL
|
10.000000 10.000000 NULL NULL NULL 2.000000 NULL NULL
|
||||||
@ -48,7 +48,7 @@ explain extended select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority log(exp(10)) AS `log(exp(10))`,exp((log(sqrt(10)) * 2)) AS `exp(log(sqrt(10))*2)`,log(-(1)) AS `log(-1)`,log(NULL) AS `log(NULL)`,log(1,1) AS `log(1,1)`,log(3,9) AS `log(3,9)`,log(-(1),2) AS `log(-1,2)`,log(NULL,2) AS `log(NULL,2)`
|
Note 1003 select log(exp(10)) AS `log(exp(10))`,exp((log(sqrt(10)) * 2)) AS `exp(log(sqrt(10))*2)`,log(-(1)) AS `log(-1)`,log(NULL) AS `log(NULL)`,log(1,1) AS `log(1,1)`,log(3,9) AS `log(3,9)`,log(-(1),2) AS `log(-1,2)`,log(NULL,2) AS `log(NULL,2)`
|
||||||
select ln(exp(10)),exp(ln(sqrt(10))*2),ln(-1),ln(0),ln(NULL);
|
select ln(exp(10)),exp(ln(sqrt(10))*2),ln(-1),ln(0),ln(NULL);
|
||||||
ln(exp(10)) exp(ln(sqrt(10))*2) ln(-1) ln(0) ln(NULL)
|
ln(exp(10)) exp(ln(sqrt(10))*2) ln(-1) ln(0) ln(NULL)
|
||||||
10.000000 10.000000 NULL NULL NULL
|
10.000000 10.000000 NULL NULL NULL
|
||||||
@ -56,7 +56,7 @@ explain extended select ln(exp(10)),exp(ln(sqrt(10))*2),ln(-1),ln(0),ln(NULL);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority ln(exp(10)) AS `ln(exp(10))`,exp((ln(sqrt(10)) * 2)) AS `exp(ln(sqrt(10))*2)`,ln(-(1)) AS `ln(-1)`,ln(0) AS `ln(0)`,ln(NULL) AS `ln(NULL)`
|
Note 1003 select ln(exp(10)) AS `ln(exp(10))`,exp((ln(sqrt(10)) * 2)) AS `exp(ln(sqrt(10))*2)`,ln(-(1)) AS `ln(-1)`,ln(0) AS `ln(0)`,ln(NULL) AS `ln(NULL)`
|
||||||
select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
|
select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
|
||||||
log2(8) log2(15) log2(-2) log2(0) log2(NULL)
|
log2(8) log2(15) log2(-2) log2(0) log2(NULL)
|
||||||
3.000000 3.906891 NULL NULL NULL
|
3.000000 3.906891 NULL NULL NULL
|
||||||
@ -64,7 +64,7 @@ explain extended select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority log2(8) AS `log2(8)`,log2(15) AS `log2(15)`,log2(-(2)) AS `log2(-2)`,log2(0) AS `log2(0)`,log2(NULL) AS `log2(NULL)`
|
Note 1003 select log2(8) AS `log2(8)`,log2(15) AS `log2(15)`,log2(-(2)) AS `log2(-2)`,log2(0) AS `log2(0)`,log2(NULL) AS `log2(NULL)`
|
||||||
select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
|
select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
|
||||||
log10(100) log10(18) log10(-4) log10(0) log10(NULL)
|
log10(100) log10(18) log10(-4) log10(0) log10(NULL)
|
||||||
2.000000 1.255273 NULL NULL NULL
|
2.000000 1.255273 NULL NULL NULL
|
||||||
@ -72,7 +72,7 @@ explain extended select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority log10(100) AS `log10(100)`,log10(18) AS `log10(18)`,log10(-(4)) AS `log10(-4)`,log10(0) AS `log10(0)`,log10(NULL) AS `log10(NULL)`
|
Note 1003 select log10(100) AS `log10(100)`,log10(18) AS `log10(18)`,log10(-(4)) AS `log10(-4)`,log10(0) AS `log10(0)`,log10(NULL) AS `log10(NULL)`
|
||||||
select pow(10,log10(10)),power(2,4);
|
select pow(10,log10(10)),power(2,4);
|
||||||
pow(10,log10(10)) power(2,4)
|
pow(10,log10(10)) power(2,4)
|
||||||
10.000000 16.000000
|
10.000000 16.000000
|
||||||
@ -80,7 +80,7 @@ explain extended select pow(10,log10(10)),power(2,4);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority pow(10,log10(10)) AS `pow(10,log10(10))`,pow(2,4) AS `power(2,4)`
|
Note 1003 select pow(10,log10(10)) AS `pow(10,log10(10))`,pow(2,4) AS `power(2,4)`
|
||||||
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
set @@rand_seed1=10000000,@@rand_seed2=1000000;
|
||||||
select rand(999999),rand();
|
select rand(999999),rand();
|
||||||
rand(999999) rand()
|
rand(999999) rand()
|
||||||
@ -89,7 +89,7 @@ explain extended select rand(999999),rand();
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache rand(999999) AS `rand(999999)`,rand() AS `rand()`
|
Note 1003 select sql_no_cache rand(999999) AS `rand(999999)`,rand() AS `rand()`
|
||||||
select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
|
select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
|
||||||
pi() sin(pi()/2) cos(pi()/2) abs(tan(pi())) cot(1) asin(1) acos(0) atan(1)
|
pi() sin(pi()/2) cos(pi()/2) abs(tan(pi())) cot(1) asin(1) acos(0) atan(1)
|
||||||
3.141593 1.000000 0.000000 0.000000 0.64209262 1.570796 1.570796 0.785398
|
3.141593 1.000000 0.000000 0.000000 0.64209262 1.570796 1.570796 0.785398
|
||||||
@ -97,7 +97,7 @@ explain extended select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority pi() AS `pi()`,sin((pi() / 2)) AS `sin(pi()/2)`,cos((pi() / 2)) AS `cos(pi()/2)`,abs(tan(pi())) AS `abs(tan(pi()))`,(1 / tan(1)) AS `cot(1)`,asin(1) AS `asin(1)`,acos(0) AS `acos(0)`,atan(1) AS `atan(1)`
|
Note 1003 select pi() AS `pi()`,sin((pi() / 2)) AS `sin(pi()/2)`,cos((pi() / 2)) AS `cos(pi()/2)`,abs(tan(pi())) AS `abs(tan(pi()))`,(1 / tan(1)) AS `cot(1)`,asin(1) AS `asin(1)`,acos(0) AS `acos(0)`,atan(1) AS `atan(1)`
|
||||||
select degrees(pi()),radians(360);
|
select degrees(pi()),radians(360);
|
||||||
degrees(pi()) radians(360)
|
degrees(pi()) radians(360)
|
||||||
180 6.2831853071796
|
180 6.2831853071796
|
||||||
@ -123,4 +123,4 @@ explain extended select degrees(pi()),radians(360);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority degrees(pi()) AS `degrees(pi())`,radians(360) AS `radians(360)`
|
Note 1003 select degrees(pi()) AS `degrees(pi())`,radians(360) AS `radians(360)`
|
||||||
|
@ -5,7 +5,7 @@ explain extended select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (1 + 1) AS `1+1`,(1 - 1) AS `1-1`,(1 + (1 * 2)) AS `1+1*2`,(8 / 5) AS `8/5`,(8 % 5) AS `8%5`,(8 % 5) AS `mod(8,5)`,((8 % 5) | 0) AS `mod(8,5)|0`,(-((1 + 1)) * -(2)) AS `-(1+1)*-2`
|
Note 1003 select (1 + 1) AS `1+1`,(1 - 1) AS `1-1`,(1 + (1 * 2)) AS `1+1*2`,(8 / 5) AS `8/5`,(8 % 5) AS `8%5`,(8 % 5) AS `mod(8,5)`,((8 % 5) | 0) AS `mod(8,5)|0`,(-((1 + 1)) * -(2)) AS `-(1+1)*-2`
|
||||||
select 1 | (1+1),5 & 3,bit_count(7) ;
|
select 1 | (1+1),5 & 3,bit_count(7) ;
|
||||||
1 | (1+1) 5 & 3 bit_count(7)
|
1 | (1+1) 5 & 3 bit_count(7)
|
||||||
3 1 3
|
3 1 3
|
||||||
@ -13,7 +13,7 @@ explain extended select 1 | (1+1),5 & 3,bit_count(7) ;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (1 | (1 + 1)) AS `1 | (1+1)`,(5 & 3) AS `5 & 3`,bit_count(7) AS `bit_count(7)`
|
Note 1003 select (1 | (1 + 1)) AS `1 | (1+1)`,(5 & 3) AS `5 & 3`,bit_count(7) AS `bit_count(7)`
|
||||||
select 1 << 32,1 << 63, 1 << 64, 4 >> 2, 4 >> 63, 1<< 63 >> 60;
|
select 1 << 32,1 << 63, 1 << 64, 4 >> 2, 4 >> 63, 1<< 63 >> 60;
|
||||||
1 << 32 1 << 63 1 << 64 4 >> 2 4 >> 63 1<< 63 >> 60
|
1 << 32 1 << 63 1 << 64 4 >> 2 4 >> 63 1<< 63 >> 60
|
||||||
4294967296 9223372036854775808 0 1 0 8
|
4294967296 9223372036854775808 0 1 0 8
|
||||||
|
@ -40,7 +40,7 @@ explain extended select * from t1 where xxx regexp('is a test of some long text
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.xxx AS `xxx` from test.t1 where (test.t1.xxx regexp _latin1'is a test of some long text to')
|
Note 1003 select test.t1.xxx AS `xxx` from test.t1 where (test.t1.xxx regexp _latin1'is a test of some long text to')
|
||||||
select * from t1 where xxx regexp('is a test of some long text to ');
|
select * from t1 where xxx regexp('is a test of some long text to ');
|
||||||
xxx
|
xxx
|
||||||
this is a test of some long text to see what happens
|
this is a test of some long text to see what happens
|
||||||
|
@ -5,7 +5,7 @@ explain extended select INTERVAL(55,10,20,30,40,50,60,70,80,90,100),interval(3,1
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority interval((55,10,20,30,40,50,60,70,80,90,100)) AS `INTERVAL(55,10,20,30,40,50,60,70,80,90,100)`,interval((3,1,(1 + 1),(((1 + 1) + 1) + 1))) AS `interval(3,1,1+1,1+1+1+1)`,field(_latin1'IBM',_latin1'NCA',_latin1'ICL',_latin1'SUN',_latin1'IBM',_latin1'DIGITAL') AS `field("IBM","NCA","ICL","SUN","IBM","DIGITAL")`,field(_latin1'A',_latin1'B',_latin1'C') AS `field("A","B","C")`,elt(2,_latin1'ONE',_latin1'TWO',_latin1'THREE') AS `elt(2,"ONE","TWO","THREE")`,interval((0,1,2,3,4)) AS `interval(0,1,2,3,4)`,(elt(1,1,2,3) | 0) AS `elt(1,1,2,3)|0`,(elt(1,1.1,1.2,1.3) + 0) AS `elt(1,1.1,1.2,1.3)+0`
|
Note 1003 select interval((55,10,20,30,40,50,60,70,80,90,100)) AS `INTERVAL(55,10,20,30,40,50,60,70,80,90,100)`,interval((3,1,(1 + 1),(((1 + 1) + 1) + 1))) AS `interval(3,1,1+1,1+1+1+1)`,field(_latin1'IBM',_latin1'NCA',_latin1'ICL',_latin1'SUN',_latin1'IBM',_latin1'DIGITAL') AS `field("IBM","NCA","ICL","SUN","IBM","DIGITAL")`,field(_latin1'A',_latin1'B',_latin1'C') AS `field("A","B","C")`,elt(2,_latin1'ONE',_latin1'TWO',_latin1'THREE') AS `elt(2,"ONE","TWO","THREE")`,interval((0,1,2,3,4)) AS `interval(0,1,2,3,4)`,(elt(1,1,2,3) | 0) AS `elt(1,1,2,3)|0`,(elt(1,1.1,1.2,1.3) + 0) AS `elt(1,1.1,1.2,1.3)+0`
|
||||||
SELECT INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56);
|
SELECT INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56);
|
||||||
INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56)
|
INTERVAL(13, 7, 14, 21, 28, 35, 42, 49, 56)
|
||||||
1
|
1
|
||||||
|
@ -622,7 +622,7 @@ explain extended select md5('hello'), sha('abc'), sha1('abc'), soundex(''), 'moo
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,(_latin1'HE' collate _latin1'BINARY') AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate _latin1'latin1_bin'),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substr_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000))) AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
Note 1003 select md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,(_latin1'HE' collate _latin1'BINARY') AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate _latin1'latin1_bin'),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n \r\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n \r\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`,replace(_latin1'aaaa',_latin1'a',_latin1'b') AS `replace('aaaa','a','b')`,insert(_latin1'txs',2,1,_latin1'hi') AS `insert('txs',2,1,'hi')`,left(_latin2'a',1) AS `left(_latin2'a',1)`,right(_latin2'a',1) AS `right(_latin2'a',1)`,lcase(_latin2'a') AS `lcase(_latin2'a')`,ucase(_latin2'a') AS `ucase(_latin2'a')`,substr(_latin1'abcdefg',3,2) AS `SUBSTR('abcdefg',3,2)`,substr_index(_latin1'1abcd;2abcd;3abcd;4abcd',_latin1';',2) AS `substring_index("1abcd;2abcd;3abcd;4abcd", ';', 2)`,trim(_latin2' a ') AS `trim(_latin2' a ')`,ltrim(_latin2' a ') AS `ltrim(_latin2' a ')`,rtrim(_latin2' a ') AS `rtrim(_latin2' a ')`,decode(encode(repeat(_latin1'a',100000))) AS `decode(encode(repeat("a",100000),"monty"),"monty")`
|
||||||
SELECT lpad(12345, 5, "#");
|
SELECT lpad(12345, 5, "#");
|
||||||
lpad(12345, 5, "#")
|
lpad(12345, 5, "#")
|
||||||
12345
|
12345
|
||||||
|
@ -41,7 +41,7 @@ explain extended select database(), user();
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache database() AS `database()`,user() AS `user()`
|
Note 1003 select sql_no_cache database() AS `database()`,user() AS `user()`
|
||||||
create table t1 (version char(40)) select database(), user(), version() as 'version';
|
create table t1 (version char(40)) select database(), user(), version() as 'version';
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
|
@ -48,7 +48,7 @@ explain extended select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (3 ^ 11) AS `3 ^ 11`,(1 ^ 1) AS `1 ^ 1`,(1 ^ 0) AS `1 ^ 0`,(1 ^ NULL) AS `1 ^ NULL`,(NULL ^ 1) AS `NULL ^ 1`
|
Note 1003 select (3 ^ 11) AS `3 ^ 11`,(1 ^ 1) AS `1 ^ 1`,(1 ^ 0) AS `1 ^ 0`,(1 ^ NULL) AS `1 ^ NULL`,(NULL ^ 1) AS `NULL ^ 1`
|
||||||
select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
|
select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
|
||||||
1 XOR 1 1 XOR 0 0 XOR 1 0 XOR 0 NULL XOR 1 1 XOR NULL 0 XOR NULL
|
1 XOR 1 1 XOR 0 0 XOR 1 0 XOR 0 NULL XOR 1 1 XOR NULL 0 XOR NULL
|
||||||
0 1 1 0 NULL NULL NULL
|
0 1 1 0 NULL NULL NULL
|
||||||
@ -62,7 +62,7 @@ explain extended select 10 % 7, 10 mod 7, 10 div 3;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (10 % 7) AS `10 % 7`,(10 % 7) AS `10 mod 7`,(10 DIV 3) AS `10 div 3`
|
Note 1003 select (10 % 7) AS `10 % 7`,(10 % 7) AS `10 mod 7`,(10 DIV 3) AS `10 div 3`
|
||||||
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
|
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
|
||||||
(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2
|
(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2
|
||||||
18446744073709551615 18446744073709551615 9223372036854775807
|
18446744073709551615 18446744073709551615 9223372036854775807
|
||||||
@ -70,7 +70,7 @@ explain extended select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority ((1 << 64) - 1) AS `(1 << 64)-1`,(((1 << 64) - 1) DIV 1) AS `((1 << 64)-1) DIV 1`,(((1 << 64) - 1) DIV 2) AS `((1 << 64)-1) DIV 2`
|
Note 1003 select ((1 << 64) - 1) AS `(1 << 64)-1`,(((1 << 64) - 1) DIV 1) AS `((1 << 64)-1) DIV 1`,(((1 << 64) - 1) DIV 2) AS `((1 << 64)-1) DIV 2`
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
insert t1 values (1);
|
insert t1 values (1);
|
||||||
select * from t1 where 1 xor 1;
|
select * from t1 where 1 xor 1;
|
||||||
@ -79,7 +79,7 @@ explain extended select * from t1 where 1 xor 1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a` from test.t1 where (1 xor 1)
|
Note 1003 select test.t1.a AS `a` from test.t1 where (1 xor 1)
|
||||||
select - a from t1;
|
select - a from t1;
|
||||||
- a
|
- a
|
||||||
-1
|
-1
|
||||||
@ -87,7 +87,7 @@ explain extended select - a from t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority -(test.t1.a) AS `- a` from test.t1
|
Note 1003 select -(test.t1.a) AS `- a` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
|
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
|
||||||
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
|
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
|
||||||
@ -108,7 +108,7 @@ explain extended select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (_koi8r'a' = (_koi8r'A' collate _latin1'koi8r_general_ci')) AS `_koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci`
|
Note 1003 select (_koi8r'a' = (_koi8r'A' collate _latin1'koi8r_general_ci')) AS `_koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci`
|
||||||
select _koi8r'a' = _koi8r'A' COLLATE koi8r_bin;
|
select _koi8r'a' = _koi8r'A' COLLATE koi8r_bin;
|
||||||
_koi8r'a' = _koi8r'A' COLLATE koi8r_bin
|
_koi8r'a' = _koi8r'A' COLLATE koi8r_bin
|
||||||
0
|
0
|
||||||
|
@ -584,7 +584,7 @@ explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_d
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(to_days(curdate())) - weekday(to_days(now()))) AS `weekday(curdate())-weekday(now())`,dayname(to_days(_latin1'1962-03-03')) AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
Note 1003 select sql_no_cache period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(to_days(curdate())) - weekday(to_days(now()))) AS `weekday(curdate())-weekday(now())`,dayname(to_days(_latin1'1962-03-03')) AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
|
||||||
SET @TMP=NOW();
|
SET @TMP=NOW();
|
||||||
CREATE TABLE t1 (d DATETIME);
|
CREATE TABLE t1 (d DATETIME);
|
||||||
INSERT INTO t1 VALUES (NOW());
|
INSERT INTO t1 VALUES (NOW());
|
||||||
|
@ -228,7 +228,7 @@ explain extended select Dimension(g), GeometryType(g), IsEmpty(g), AsText(Envelo
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21
|
1 SIMPLE gis_geometry ALL NULL NULL NULL NULL 21
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority dimension(test.gis_geometry.g) AS `Dimension(g)`,geometrytype(test.gis_geometry.g) AS `GeometryType(g)`,isempty(test.gis_geometry.g) AS `IsEmpty(g)`,astext(envelope(test.gis_geometry.g)) AS `AsText(Envelope(g))` from test.gis_geometry
|
Note 1003 select dimension(test.gis_geometry.g) AS `Dimension(g)`,geometrytype(test.gis_geometry.g) AS `GeometryType(g)`,isempty(test.gis_geometry.g) AS `IsEmpty(g)`,astext(envelope(test.gis_geometry.g)) AS `AsText(Envelope(g))` from test.gis_geometry
|
||||||
SELECT fid, X(g) FROM gis_point;
|
SELECT fid, X(g) FROM gis_point;
|
||||||
fid X(g)
|
fid X(g)
|
||||||
101 10
|
101 10
|
||||||
@ -245,7 +245,7 @@ explain extended select X(g),Y(g) FROM gis_point;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_point ALL NULL NULL NULL NULL 4
|
1 SIMPLE gis_point ALL NULL NULL NULL NULL 4
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority x(test.gis_point.g) AS `X(g)`,y(test.gis_point.g) AS `Y(g)` from test.gis_point
|
Note 1003 select x(test.gis_point.g) AS `X(g)`,y(test.gis_point.g) AS `Y(g)` from test.gis_point
|
||||||
SELECT fid, AsText(StartPoint(g)) FROM gis_line;
|
SELECT fid, AsText(StartPoint(g)) FROM gis_line;
|
||||||
fid AsText(StartPoint(g))
|
fid AsText(StartPoint(g))
|
||||||
105 POINT(0 0)
|
105 POINT(0 0)
|
||||||
@ -280,7 +280,7 @@ explain extended select AsText(StartPoint(g)),AsText(EndPoint(g)),GLength(g),Num
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_line ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_line ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority astext(startpoint(test.gis_line.g)) AS `AsText(StartPoint(g))`,astext(endpoint(test.gis_line.g)) AS `AsText(EndPoint(g))`,glength(test.gis_line.g) AS `GLength(g)`,numpoints(test.gis_line.g) AS `NumPoints(g)`,astext(pointn(test.gis_line.g,2)) AS `AsText(PointN(g, 2))`,isclosed(test.gis_line.g) AS `IsClosed(g)` from test.gis_line
|
Note 1003 select astext(startpoint(test.gis_line.g)) AS `AsText(StartPoint(g))`,astext(endpoint(test.gis_line.g)) AS `AsText(EndPoint(g))`,glength(test.gis_line.g) AS `GLength(g)`,numpoints(test.gis_line.g) AS `NumPoints(g)`,astext(pointn(test.gis_line.g,2)) AS `AsText(PointN(g, 2))`,isclosed(test.gis_line.g) AS `IsClosed(g)` from test.gis_line
|
||||||
SELECT fid, AsText(Centroid(g)) FROM gis_polygon;
|
SELECT fid, AsText(Centroid(g)) FROM gis_polygon;
|
||||||
fid AsText(Centroid(g))
|
fid AsText(Centroid(g))
|
||||||
108 POINT(15 15)
|
108 POINT(15 15)
|
||||||
@ -310,7 +310,7 @@ explain extended select AsText(Centroid(g)),Area(g),AsText(ExteriorRing(g)),NumI
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_polygon ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_polygon ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority astext(centroid(test.gis_polygon.g)) AS `AsText(Centroid(g))`,area(test.gis_polygon.g) AS `Area(g)`,astext(exteriorring(test.gis_polygon.g)) AS `AsText(ExteriorRing(g))`,numinteriorrings(test.gis_polygon.g) AS `NumInteriorRings(g)`,astext(interiorringn(test.gis_polygon.g,1)) AS `AsText(InteriorRingN(g, 1))` from test.gis_polygon
|
Note 1003 select astext(centroid(test.gis_polygon.g)) AS `AsText(Centroid(g))`,area(test.gis_polygon.g) AS `Area(g)`,astext(exteriorring(test.gis_polygon.g)) AS `AsText(ExteriorRing(g))`,numinteriorrings(test.gis_polygon.g) AS `NumInteriorRings(g)`,astext(interiorringn(test.gis_polygon.g,1)) AS `AsText(InteriorRingN(g, 1))` from test.gis_polygon
|
||||||
SELECT fid, IsClosed(g) FROM gis_multi_line;
|
SELECT fid, IsClosed(g) FROM gis_multi_line;
|
||||||
fid IsClosed(g)
|
fid IsClosed(g)
|
||||||
114 0
|
114 0
|
||||||
@ -349,7 +349,7 @@ explain extended SELECT fid, NumGeometries(g) from gis_multi_point;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.gis_multi_point.fid AS `fid`,numgeometries(test.gis_multi_point.g) AS `NumGeometries(g)` from test.gis_multi_point
|
Note 1003 select test.gis_multi_point.fid AS `fid`,numgeometries(test.gis_multi_point.g) AS `NumGeometries(g)` from test.gis_multi_point
|
||||||
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
||||||
fid AsText(GeometryN(g, 2))
|
fid AsText(GeometryN(g, 2))
|
||||||
111 POINT(10 10)
|
111 POINT(10 10)
|
||||||
@ -377,7 +377,7 @@ explain extended SELECT fid, AsText(GeometryN(g, 2)) from gis_multi_point;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
1 SIMPLE gis_multi_point ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.gis_multi_point.fid AS `fid`,astext(geometryn(test.gis_multi_point.g,2)) AS `AsText(GeometryN(g, 2))` from test.gis_multi_point
|
Note 1003 select test.gis_multi_point.fid AS `fid`,astext(geometryn(test.gis_multi_point.g,2)) AS `AsText(GeometryN(g, 2))` from test.gis_multi_point
|
||||||
SELECT g1.fid as first, g2.fid as second,
|
SELECT g1.fid as first, g2.fid as second,
|
||||||
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
Within(g1.g, g2.g) as w, Contains(g1.g, g2.g) as c, Overlaps(g1.g, g2.g) as o,
|
||||||
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
Equals(g1.g, g2.g) as e, Disjoint(g1.g, g2.g) as d, Touches(g1.g, g2.g) as t,
|
||||||
@ -397,7 +397,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
1 SIMPLE g1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||||
1 SIMPLE g2 ALL NULL NULL NULL NULL 2
|
1 SIMPLE g2 ALL NULL NULL NULL NULL 2
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.g1.fid AS `first`,test.g2.fid AS `second`,within(test.g1.g,test.g2.g) AS `w`,contains(test.g1.g,test.g2.g) AS `c`,overlaps(test.g1.g,test.g2.g) AS `o`,equals(test.g1.g,test.g2.g) AS `e`,disjoint(test.g1.g,test.g2.g) AS `d`,touches(test.g1.g,test.g2.g) AS `t`,intersects(test.g1.g,test.g2.g) AS `i`,crosses(test.g1.g,test.g2.g) AS `r` from test.gis_geometrycollection g1 join test.gis_geometrycollection g2 order by test.g1.fid,test.g2.fid
|
Note 1003 select test.g1.fid AS `first`,test.g2.fid AS `second`,within(test.g1.g,test.g2.g) AS `w`,contains(test.g1.g,test.g2.g) AS `c`,overlaps(test.g1.g,test.g2.g) AS `o`,equals(test.g1.g,test.g2.g) AS `e`,disjoint(test.g1.g,test.g2.g) AS `d`,touches(test.g1.g,test.g2.g) AS `t`,intersects(test.g1.g,test.g2.g) AS `i`,crosses(test.g1.g,test.g2.g) AS `r` from test.gis_geometrycollection g1 join test.gis_geometrycollection g2 order by test.g1.fid,test.g2.fid
|
||||||
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
DROP TABLE gis_point, gis_line, gis_polygon, gis_multi_point, gis_multi_line, gis_multi_polygon, gis_geometrycollection, gis_geometry;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
gp point,
|
gp point,
|
||||||
@ -439,12 +439,12 @@ explain extended SELECT AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)'))))`
|
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(GeometryFromText('POINT(1 4)'))))`
|
||||||
explain extended SELECT AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))));
|
explain extended SELECT AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))));
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))))`
|
Note 1003 select astext(geometryfromwkb(aswkb(geometryfromtext(_latin1'POINT(1 4)')))) AS `AsText(GeometryFromWKB(AsWKB(PointFromText('POINT(1 4)'))))`
|
||||||
SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
|
SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
|
||||||
SRID(GeomFromText('LineString(1 1,2 2)',101))
|
SRID(GeomFromText('LineString(1 1,2 2)',101))
|
||||||
101
|
101
|
||||||
@ -452,12 +452,12 @@ explain extended SELECT SRID(GeomFromText('LineString(1 1,2 2)',101));
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority srid(geometryfromtext(_latin1'LineString(1 1,2 2)',101)) AS `SRID(GeomFromText('LineString(1 1,2 2)',101))`
|
Note 1003 select srid(geometryfromtext(_latin1'LineString(1 1,2 2)',101)) AS `SRID(GeomFromText('LineString(1 1,2 2)',101))`
|
||||||
explain extended select issimple(MultiPoint(Point(3, 6), Point(4, 10))), issimple(Point(3, 6));
|
explain extended select issimple(MultiPoint(Point(3, 6), Point(4, 10))), issimple(Point(3, 6));
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority issimple(multipoint(point(3,6),point(4,10))) AS `issimple(MultiPoint(Point(3, 6), Point(4, 10)))`,issimple(point(3,6)) AS `issimple(Point(3, 6))`
|
Note 1003 select issimple(multipoint(point(3,6),point(4,10))) AS `issimple(MultiPoint(Point(3, 6), Point(4, 10)))`,issimple(point(3,6)) AS `issimple(Point(3, 6))`
|
||||||
create table t1 (a geometry not null);
|
create table t1 (a geometry not null);
|
||||||
insert into t1 values (GeomFromText('Point(1 2)'));
|
insert into t1 values (GeomFromText('Point(1 2)'));
|
||||||
insert into t1 values ('Garbage');
|
insert into t1 values ('Garbage');
|
||||||
|
@ -204,3 +204,27 @@ show grants for mysqltest_1@localhost;
|
|||||||
Grants for mysqltest_1@localhost
|
Grants for mysqltest_1@localhost
|
||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'
|
||||||
drop user mysqltest_1@localhost;
|
drop user mysqltest_1@localhost;
|
||||||
|
SET NAMES koi8r;
|
||||||
|
CREATE DATABASE <20><>;
|
||||||
|
USE <20><>;
|
||||||
|
CREATE TABLE <20><><EFBFBD> (<28><><EFBFBD> int);
|
||||||
|
GRANT SELECT ON <20><>.* TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
Grants for <20><><EFBFBD><EFBFBD>@localhost
|
||||||
|
GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
GRANT SELECT ON `<60><>`.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
REVOKE SELECT ON <20><>.* FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
GRANT SELECT ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
Grants for <20><><EFBFBD><EFBFBD>@localhost
|
||||||
|
GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
GRANT SELECT ON `<60><>`.`<60><><EFBFBD>` TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
REVOKE SELECT ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
GRANT SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
Grants for <20><><EFBFBD><EFBFBD>@localhost
|
||||||
|
GRANT USAGE ON *.* TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
GRANT SELECT (<28><><EFBFBD>) ON `<60><>`.`<60><><EFBFBD>` TO '<27><><EFBFBD><EFBFBD>'@'localhost'
|
||||||
|
REVOKE SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
DROP DATABASE <20><>;
|
||||||
|
SET NAMES latin1;
|
||||||
|
@ -288,7 +288,7 @@ explain extended select sql_big_result spid,sum(userid) from t1 group by spid de
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority big_result test.t1.spID AS `spid`,sum(test.t1.userID) AS `sum(userid)` from test.t1 group by test.t1.spID desc
|
Note 1003 select sql_big_result test.t1.spID AS `spid`,sum(test.t1.userID) AS `sum(userid)` from test.t1 group by test.t1.spID desc
|
||||||
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
|
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using filesort
|
||||||
|
@ -12,7 +12,7 @@ explain extended select count(a) as b from t1 where a=0 having b >=0;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority count(test.t1.a) AS `b` from test.t1 where (test.t1.a = 0) having (count(test.t1.a) >= 0)
|
Note 1003 select count(test.t1.a) AS `b` from test.t1 where (test.t1.a = 0) having (count(test.t1.a) >= 0)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
raw_id int(10) NOT NULL default '0',
|
raw_id int(10) NOT NULL default '0',
|
||||||
|
@ -1538,6 +1538,60 @@ t2 CREATE TABLE `t2` (
|
|||||||
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id2`, `id`) REFERENCES `t1` (`id`, `id2`)
|
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id2`, `id`) REFERENCES `t1` (`id`, `id2`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id), primary key (id), index (id,id2)) engine = innodb;
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`id` int(11) NOT NULL auto_increment,
|
||||||
|
`id2` int(11) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `id` (`id`,`id2`),
|
||||||
|
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
drop table t2;
|
||||||
|
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id)) engine= innodb;
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`id` int(11) NOT NULL auto_increment,
|
||||||
|
`id2` int(11) NOT NULL default '0',
|
||||||
|
KEY `t1_id_fk` (`id`),
|
||||||
|
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
alter table t2 add index id_test (id), add index id_test2 (id,id2);
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`id` int(11) NOT NULL auto_increment,
|
||||||
|
`id2` int(11) NOT NULL default '0',
|
||||||
|
KEY `id_test` (`id`),
|
||||||
|
KEY `id_test2` (`id`,`id2`),
|
||||||
|
CONSTRAINT `t1_id_fk` FOREIGN KEY (`id`) REFERENCES `t1` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
drop table t2;
|
||||||
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
|
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
|
||||||
ERROR HY000: Can't create table './test/t2.frm' (errno: 150)
|
ERROR HY000: Can't create table './test/t2.frm' (errno: 150)
|
||||||
drop table t1;
|
create table t2 (a int auto_increment primary key, b int, index(b), foreign key (b) references t1(id), unique(b)) engine=innodb;
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`a` int(11) NOT NULL auto_increment,
|
||||||
|
`b` int(11) default NULL,
|
||||||
|
PRIMARY KEY (`a`),
|
||||||
|
UNIQUE KEY `b_2` (`b`),
|
||||||
|
KEY `b` (`b`),
|
||||||
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
drop table t2;
|
||||||
|
create table t2 (a int auto_increment primary key, b int, foreign key (b) references t1(id), foreign key (b) references t1(id), unique(b)) engine=innodb;
|
||||||
|
show create table t2;
|
||||||
|
Table Create Table
|
||||||
|
t2 CREATE TABLE `t2` (
|
||||||
|
`a` int(11) NOT NULL auto_increment,
|
||||||
|
`b` int(11) default NULL,
|
||||||
|
PRIMARY KEY (`a`),
|
||||||
|
UNIQUE KEY `b` (`b`),
|
||||||
|
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`b`) REFERENCES `t1` (`id`),
|
||||||
|
CONSTRAINT `t2_ibfk_2` FOREIGN KEY (`b`) REFERENCES `t1` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
|
drop table t2, t1;
|
||||||
|
@ -60,12 +60,12 @@ explain extended SELECT *, VALUES(a) FROM t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c`,values(test.t1.a) AS `VALUES(a)` from test.t1
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c`,values(test.t1.a) AS `VALUES(a)` from test.t1
|
||||||
explain extended select * from t1 where values(a);
|
explain extended select * from t1 where values(a);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
create table t1(a int primary key, b int);
|
create table t1(a int primary key, b int);
|
||||||
insert into t1 values(1,1),(2,2),(3,3),(4,4),(5,5);
|
insert into t1 values(1,1),(2,2),(3,3),(4,4),(5,5);
|
||||||
|
@ -6,7 +6,7 @@ explain extended select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnu
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority NULL AS `NULL`,NULL AS `NULL`,isnull(NULL) AS `isnull(null)`,isnull((1 / 0)) AS `isnull(1/0)`,isnull(((1 / 0) = NULL)) AS `isnull(1/0 = null)`,ifnull(NULL,1) AS `ifnull(null,1)`,ifnull(NULL,_latin1'TRUE') AS `ifnull(null,"TRUE")`,ifnull(_latin1'TRUE',_latin1'ERROR') AS `ifnull("TRUE","ERROR")`,isnull((1 / 0)) AS `1/0 is null`,(1 is not null) AS `1 is not null`
|
Note 1003 select NULL AS `NULL`,NULL AS `NULL`,isnull(NULL) AS `isnull(null)`,isnull((1 / 0)) AS `isnull(1/0)`,isnull(((1 / 0) = NULL)) AS `isnull(1/0 = null)`,ifnull(NULL,1) AS `ifnull(null,1)`,ifnull(NULL,_latin1'TRUE') AS `ifnull(null,"TRUE")`,ifnull(_latin1'TRUE',_latin1'ERROR') AS `ifnull("TRUE","ERROR")`,isnull((1 / 0)) AS `1/0 is null`,(1 is not null) AS `1 is not null`
|
||||||
select 1 | NULL,1 & NULL,1+NULL,1-NULL;
|
select 1 | NULL,1 & NULL,1+NULL,1-NULL;
|
||||||
1 | NULL 1 & NULL 1+NULL 1-NULL
|
1 | NULL 1 & NULL 1+NULL 1-NULL
|
||||||
NULL NULL NULL NULL
|
NULL NULL NULL NULL
|
||||||
@ -32,7 +32,7 @@ explain extended select 2 between null and 1,2 between 3 AND NULL,NULL between 1
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (2 between NULL and 1) AS `2 between null and 1`,(2 between 3 and NULL) AS `2 between 3 AND NULL`,(NULL between 1 and 2) AS `NULL between 1 and 2`,(2 between NULL and 3) AS `2 between NULL and 3`,(2 between 1 and NULL) AS `2 between 1 AND null`
|
Note 1003 select (2 between NULL and 1) AS `2 between null and 1`,(2 between 3 and NULL) AS `2 between 3 AND NULL`,(NULL between 1 and 2) AS `NULL between 1 and 2`,(2 between NULL and 3) AS `2 between NULL and 3`,(2 between 1 and NULL) AS `2 between 1 AND null`
|
||||||
SELECT NULL AND NULL, 1 AND NULL, NULL AND 1, NULL OR NULL, 0 OR NULL, NULL OR 0;
|
SELECT NULL AND NULL, 1 AND NULL, NULL AND 1, NULL OR NULL, 0 OR NULL, NULL OR 0;
|
||||||
NULL AND NULL 1 AND NULL NULL AND 1 NULL OR NULL 0 OR NULL NULL OR 0
|
NULL AND NULL 1 AND NULL NULL AND 1 NULL OR NULL 0 OR NULL NULL OR 0
|
||||||
NULL NULL NULL NULL NULL NULL
|
NULL NULL NULL NULL NULL NULL
|
||||||
@ -49,7 +49,7 @@ explain extended select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),ine
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority inet_ntoa(NULL) AS `inet_ntoa(null)`,inet_aton(NULL) AS `inet_aton(null)`,inet_aton(_latin1'122.256') AS `inet_aton("122.256")`,inet_aton(_latin1'122.226.') AS `inet_aton("122.226.")`,inet_aton(_latin1'') AS `inet_aton("")`
|
Note 1003 select inet_ntoa(NULL) AS `inet_ntoa(null)`,inet_aton(NULL) AS `inet_aton(null)`,inet_aton(_latin1'122.256') AS `inet_aton("122.256")`,inet_aton(_latin1'122.226.') AS `inet_aton("122.226.")`,inet_aton(_latin1'') AS `inet_aton("")`
|
||||||
create table t1 (x int);
|
create table t1 (x int);
|
||||||
insert into t1 values (null);
|
insert into t1 values (null);
|
||||||
select * from t1 where x != 0;
|
select * from t1 where x != 0;
|
||||||
|
@ -85,7 +85,7 @@ explain extended select product, country_id , year, sum(profit) from t1 group by
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using temporary; Using filesort
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using temporary; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.product AS `product`,test.t1.country_id AS `country_id`,test.t1.year AS `year`,sum(test.t1.profit) AS `sum(profit)` from test.t1 group by test.t1.product,test.t1.country_id,test.t1.year with rollup
|
Note 1003 select test.t1.product AS `product`,test.t1.country_id AS `country_id`,test.t1.year AS `year`,sum(test.t1.profit) AS `sum(profit)` from test.t1 group by test.t1.product,test.t1.country_id,test.t1.year with rollup
|
||||||
select product, country_id , sum(profit) from t1 group by product desc, country_id with rollup;
|
select product, country_id , sum(profit) from t1 group by product desc, country_id with rollup;
|
||||||
product country_id sum(profit)
|
product country_id sum(profit)
|
||||||
TV 1 400
|
TV 1 400
|
||||||
|
@ -85,6 +85,15 @@ i
|
|||||||
1
|
1
|
||||||
3
|
3
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 ( pk int primary key, name varchar(255) not null, number varchar(255) not null);
|
||||||
|
insert into t1 values (1, 'Gamma', '123'), (2, 'Gamma Ext', '123a'), (3, 'Alpha', '001'), (4, 'Beta', '200c');
|
||||||
|
select distinct t1.name as 'Building Name',t1.number as 'Building Number' from t1 order by t1.name asc;
|
||||||
|
Building Name Building Number
|
||||||
|
Gamma 123
|
||||||
|
Gamma Ext 123a
|
||||||
|
Alpha 001
|
||||||
|
Beta 200c
|
||||||
|
drop table t1;
|
||||||
create table t1 (id int not null,col1 int not null,col2 int not null,index(col1));
|
create table t1 (id int not null,col1 int not null,col2 int not null,index(col1));
|
||||||
insert into t1 values(1,2,2),(2,2,1),(3,1,2),(4,1,1),(5,1,4),(6,2,3),(7,3,1),(8,2,4);
|
insert into t1 values(1,2,2),(2,2,1),(3,1,2),(4,1,1),(5,1,4),(6,2,3),(7,3,1),(8,2,4);
|
||||||
select * from t1 order by col1,col2;
|
select * from t1 order by col1,col2;
|
||||||
|
@ -305,7 +305,7 @@ explain extended select benchmark(1,1) from t1;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache benchmark(1,1) AS `benchmark(1,1)` from test.t1
|
Note 1003 select sql_no_cache benchmark(1,1) AS `benchmark(1,1)` from test.t1
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 0
|
Qcache_queries_in_cache 0
|
||||||
|
@ -44,7 +44,7 @@ explain extended select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,N
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority ((1,2,(3,4)) in ((3,2,(3,4)),(1,2,(3,NULL)))) AS `row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)))`
|
Note 1003 select ((1,2,(3,4)) in ((3,2,(3,4)),(1,2,(3,NULL)))) AS `row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)))`
|
||||||
SELECT (1,2,3)=(0,NULL,3);
|
SELECT (1,2,3)=(0,NULL,3);
|
||||||
(1,2,3)=(0,NULL,3)
|
(1,2,3)=(0,NULL,3)
|
||||||
0
|
0
|
||||||
|
@ -44,7 +44,7 @@ explain extended select get_lock("hold_slave",10);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache get_lock(_latin1'hold_slave',10) AS `get_lock("hold_slave",10)`
|
Note 1003 select sql_no_cache get_lock(_latin1'hold_slave',10) AS `get_lock("hold_slave",10)`
|
||||||
start slave;
|
start slave;
|
||||||
select release_lock("hold_slave");
|
select release_lock("hold_slave");
|
||||||
release_lock("hold_slave")
|
release_lock("hold_slave")
|
||||||
@ -53,7 +53,7 @@ explain extended select release_lock("hold_slave");
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache release_lock(_latin1'hold_slave') AS `release_lock("hold_slave")`
|
Note 1003 select sql_no_cache release_lock(_latin1'hold_slave') AS `release_lock("hold_slave")`
|
||||||
unlock tables;
|
unlock tables;
|
||||||
create table t2(id int);
|
create table t2(id int);
|
||||||
insert into t2 values(connection_id());
|
insert into t2 values(connection_id());
|
||||||
|
@ -25,7 +25,7 @@ explain extended select is_free_lock("lock"), is_used_lock("lock");
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
|
Note 1003 select sql_no_cache is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
|
||||||
select is_free_lock("lock2");
|
select is_free_lock("lock2");
|
||||||
is_free_lock("lock2")
|
is_free_lock("lock2")
|
||||||
1
|
1
|
||||||
|
@ -11,7 +11,7 @@ explain extended select master_pos_wait('master-bin.999999',0,2);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
Note 1003 select sql_no_cache master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
|
||||||
select master_pos_wait('master-bin.999999',0);
|
select master_pos_wait('master-bin.999999',0);
|
||||||
stop slave sql_thread;
|
stop slave sql_thread;
|
||||||
master_pos_wait('master-bin.999999',0)
|
master_pos_wait('master-bin.999999',0)
|
||||||
|
@ -1470,7 +1470,7 @@ explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 Using where
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority count(0) AS `count(*)`,min(test.t2.fld4) AS `min(fld4)`,max(test.t2.fld4) AS `max(fld4)`,sum(test.t2.fld1) AS `sum(fld1)`,avg(test.t2.fld1) AS `avg(fld1)`,std(test.t2.fld1) AS `std(fld1)`,variance(test.t2.fld1) AS `variance(fld1)` from test.t2 where ((test.t2.companynr = 34) and (test.t2.fld4 <> _latin1''))
|
Note 1003 select count(0) AS `count(*)`,min(test.t2.fld4) AS `min(fld4)`,max(test.t2.fld4) AS `max(fld4)`,sum(test.t2.fld1) AS `sum(fld1)`,avg(test.t2.fld1) AS `avg(fld1)`,std(test.t2.fld1) AS `std(fld1)`,variance(test.t2.fld1) AS `variance(fld1)` from test.t2 where ((test.t2.companynr = 34) and (test.t2.fld4 <> _latin1''))
|
||||||
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
|
||||||
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
|
||||||
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
|
||||||
|
@ -7,7 +7,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1003 select high_priority 2 AS `(select 2)`
|
Note 1003 select 2 AS `(select 2)`
|
||||||
SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
SELECT (SELECT 1) UNION SELECT (SELECT 2);
|
||||||
(SELECT 1)
|
(SELECT 1)
|
||||||
1
|
1
|
||||||
@ -19,7 +19,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1249 Select 4 was reduced during optimisation
|
Note 1249 Select 4 was reduced during optimisation
|
||||||
Note 1003 select high_priority 1 AS `(SELECT 1)` union select 2 AS `(SELECT 2)`
|
Note 1003 select 1 AS `(SELECT 1)` union select 2 AS `(SELECT 2)`
|
||||||
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
SELECT (SELECT (SELECT 0 UNION SELECT 0));
|
||||||
(SELECT (SELECT 0 UNION SELECT 0))
|
(SELECT (SELECT 0 UNION SELECT 0))
|
||||||
0
|
0
|
||||||
@ -30,7 +30,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
4 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
4 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1003 select high_priority (select 0 AS `0` union select 0 AS `0`) AS `(SELECT (SELECT 0 UNION SELECT 0))`
|
Note 1003 select (select 0 AS `0` union select 0 AS `0`) AS `(SELECT (SELECT 0 UNION SELECT 0))`
|
||||||
SELECT (SELECT 1 FROM (SELECT 1) as b HAVING a=1) as a;
|
SELECT (SELECT 1 FROM (SELECT 1) as b HAVING a=1) as a;
|
||||||
ERROR 42S22: Reference 'a' not supported (forward reference in item list)
|
ERROR 42S22: Reference 'a' not supported (forward reference in item list)
|
||||||
SELECT (SELECT 1 FROM (SELECT 1) as b HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) as c HAVING a=1) as b;
|
SELECT (SELECT 1 FROM (SELECT 1) as b HAVING b=1) as a,(SELECT 1 FROM (SELECT 1) as c HAVING a=1) as b;
|
||||||
@ -48,7 +48,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 'a' of SELECT #3 was resolved in SELECT #1
|
Note 1276 Field or reference 'a' of SELECT #3 was resolved in SELECT #1
|
||||||
Note 1276 Field or reference 'b.a' of SELECT #3 was resolved in SELECT #1
|
Note 1276 Field or reference 'b.a' of SELECT #3 was resolved in SELECT #1
|
||||||
Note 1003 select high_priority 1 AS `1` from (select 1 AS `a`) b having ((select b.a AS `a`) = 1)
|
Note 1003 select 1 AS `1` from (select 1 AS `a`) b having ((select b.a AS `a`) = 1)
|
||||||
SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1;
|
SELECT 1 FROM (SELECT 1 as a) as b HAVING (SELECT a)=1;
|
||||||
1
|
1
|
||||||
1
|
1
|
||||||
@ -183,7 +183,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
3 UNION t4 ALL NULL NULL NULL NULL 3 Using where; Using filesort
|
3 UNION t4 ALL NULL NULL NULL NULL 3 Using where; Using filesort
|
||||||
4 SUBQUERY t2 ALL NULL NULL NULL NULL 2
|
4 SUBQUERY t2 ALL NULL NULL NULL NULL 2
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 (select high_priority test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.b = (select test.t3.a AS `a` from test.t3 order by test.t3.a desc limit 1))) union (select test.t4.a AS `a`,test.t4.b AS `b` from test.t4 where (test.t4.b = (select (max(test.t2.a) * 4) AS `max(t2.a)*4` from test.t2)) order by test.t4.a)
|
Note 1003 (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.b = (select test.t3.a AS `a` from test.t3 order by test.t3.a desc limit 1))) union (select test.t4.a AS `a`,test.t4.b AS `b` from test.t4 where (test.t4.b = (select (max(test.t2.a) * 4) AS `max(t2.a)*4` from test.t2)) order by test.t4.a)
|
||||||
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
||||||
(select a from t3 where a<t2.a*4 order by 1 desc limit 1) a
|
(select a from t3 where a<t2.a*4 order by 1 desc limit 1) a
|
||||||
3 1
|
3 1
|
||||||
@ -199,7 +199,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
3 DERIVED t2 ALL NULL NULL NULL NULL 2 Using where
|
3 DERIVED t2 ALL NULL NULL NULL NULL 2 Using where
|
||||||
2 SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where; Using filesort
|
2 SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (select test.t3.a AS `a` from test.t3 where (test.t3.a < 8) order by test.t3.a desc limit 1) AS `(select t3.a from t3 where a<8 order by 1 desc limit 1)`,tt.a AS `a` from (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a > 1)) tt
|
Note 1003 select (select test.t3.a AS `a` from test.t3 where (test.t3.a < 8) order by test.t3.a desc limit 1) AS `(select t3.a from t3 where a<8 order by 1 desc limit 1)`,tt.a AS `a` from (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a > 1)) tt
|
||||||
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3) order by 1 desc limit 1);
|
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3) order by 1 desc limit 1);
|
||||||
a
|
a
|
||||||
2
|
2
|
||||||
@ -220,7 +220,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
3 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 't4.a' of SELECT #3 was resolved in SELECT #1
|
Note 1276 Field or reference 't4.a' of SELECT #3 was resolved in SELECT #1
|
||||||
Note 1003 select high_priority test.t4.b AS `b`,(select avg((test.t2.a + (select min(test.t3.a) AS `min(t3.a)` from test.t3 where (test.t3.a >= test.t4.a)))) AS `avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a))` from test.t2) AS `(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2)` from test.t4
|
Note 1003 select test.t4.b AS `b`,(select avg((test.t2.a + (select min(test.t3.a) AS `min(t3.a)` from test.t3 where (test.t3.a >= test.t4.a)))) AS `avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a))` from test.t2) AS `(select avg(t2.a+(select min(t3.a) from t3 where t3.a >= t4.a)) from t2)` from test.t4
|
||||||
select * from t3 where exists (select * from t2 where t2.b=t3.a);
|
select * from t3 where exists (select * from t2 where t2.b=t3.a);
|
||||||
a
|
a
|
||||||
7
|
7
|
||||||
@ -266,7 +266,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 3
|
2 SUBQUERY t2 ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t3.a AS `a` from test.t3 where (test.t3.a >= (select min(test.t2.b) from test.t2))
|
Note 1003 select test.t3.a AS `a` from test.t3 where (test.t3.a >= (select min(test.t2.b) from test.t2))
|
||||||
select * from t3 where a >= all (select b from t2);
|
select * from t3 where a >= all (select b from t2);
|
||||||
a
|
a
|
||||||
7
|
7
|
||||||
@ -309,7 +309,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 't2.a' of SELECT #2 was resolved in SELECT #1
|
Note 1276 Field or reference 't2.a' of SELECT #2 was resolved in SELECT #1
|
||||||
Note 1276 Field or reference 't2.a' of SELECT #3 was resolved in SELECT #1
|
Note 1276 Field or reference 't2.a' of SELECT #3 was resolved in SELECT #1
|
||||||
Note 1003 select high_priority (select test.t1.a AS `a` from test.t1 where (test.t1.a = test.t2.a) union select test.t5.a AS `a` from test.t5 where (test.t5.a = test.t2.a)) AS `(select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a)`,test.t2.a AS `a` from test.t2
|
Note 1003 select (select test.t1.a AS `a` from test.t1 where (test.t1.a = test.t2.a) union select test.t5.a AS `a` from test.t5 where (test.t5.a = test.t2.a)) AS `(select a from t1 where t1.a=t2.a union select a from t5 where t5.a=t2.a)`,test.t2.a AS `a` from test.t2
|
||||||
select (select a from t1 where t1.a=t2.a union all select a from t5 where t5.a=t2.a), a from t2;
|
select (select a from t1 where t1.a=t2.a union all select a from t5 where t5.a=t2.a), a from t2;
|
||||||
ERROR 21000: Subquery returns more than 1 row
|
ERROR 21000: Subquery returns more than 1 row
|
||||||
create table t6 (patient_uq int, clinic_uq int, index i1 (clinic_uq));
|
create table t6 (patient_uq int, clinic_uq int, index i1 (clinic_uq));
|
||||||
@ -327,7 +327,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 DEPENDENT SUBQUERY t7 eq_ref PRIMARY PRIMARY 4 test.t6.clinic_uq 1
|
2 DEPENDENT SUBQUERY t7 eq_ref PRIMARY PRIMARY 4 test.t6.clinic_uq 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 'clinic_uq' of SELECT #2 was resolved in SELECT #1
|
Note 1276 Field or reference 'clinic_uq' of SELECT #2 was resolved in SELECT #1
|
||||||
Note 1003 select high_priority test.t6.patient_uq AS `patient_uq`,test.t6.clinic_uq AS `clinic_uq` from test.t6 where exists(select test.t7.uq AS `uq`,test.t7.name AS `name` from test.t7 where (test.t7.uq = test.t6.clinic_uq))
|
Note 1003 select test.t6.patient_uq AS `patient_uq`,test.t6.clinic_uq AS `clinic_uq` from test.t6 where exists(select test.t7.uq AS `uq`,test.t7.name AS `name` from test.t7 where (test.t7.uq = test.t6.clinic_uq))
|
||||||
select * from t1 where a= (select a from t2,t4 where t2.b=t4.b);
|
select * from t1 where a= (select a from t2,t4 where t2.b=t4.b);
|
||||||
ERROR 23000: Column: 'a' in field list is ambiguous
|
ERROR 23000: Column: 'a' in field list is ambiguous
|
||||||
drop table if exists t1,t2,t3;
|
drop table if exists t1,t2,t3;
|
||||||
@ -362,7 +362,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 SUBQUERY t8 const PRIMARY PRIMARY 35 const 1
|
2 SUBQUERY t8 const PRIMARY PRIMARY 35 const 1
|
||||||
3 SUBQUERY t8 const PRIMARY PRIMARY 35 1 Using index
|
3 SUBQUERY t8 const PRIMARY PRIMARY 35 1 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t8.pseudo AS `pseudo`,(select test.t8.email AS `email` from test.t8 where (test.t8.pseudo = (select test.t8.pseudo AS `pseudo` from test.t8 where (test.t8.pseudo = _latin1'joce')))) AS `(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce'))` from test.t8 where (test.t8.pseudo = (select test.t8.pseudo AS `pseudo` from test.t8 where (test.t8.pseudo = _latin1'joce')))
|
Note 1003 select test.t8.pseudo AS `pseudo`,(select test.t8.email AS `email` from test.t8 where (test.t8.pseudo = (select test.t8.pseudo AS `pseudo` from test.t8 where (test.t8.pseudo = _latin1'joce')))) AS `(SELECT email FROM t8 WHERE pseudo=(SELECT pseudo FROM t8 WHERE pseudo='joce'))` from test.t8 where (test.t8.pseudo = (select test.t8.pseudo AS `pseudo` from test.t8 where (test.t8.pseudo = _latin1'joce')))
|
||||||
SELECT pseudo FROM t8 WHERE pseudo=(SELECT pseudo,email FROM
|
SELECT pseudo FROM t8 WHERE pseudo=(SELECT pseudo,email FROM
|
||||||
t8 WHERE pseudo='joce');
|
t8 WHERE pseudo='joce');
|
||||||
ERROR 21000: Operand should contain 1 column(s)
|
ERROR 21000: Operand should contain 1 column(s)
|
||||||
@ -388,13 +388,13 @@ EXPLAIN EXTENDED SELECT DISTINCT date FROM t1 WHERE date='2002-08-03';
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 index NULL PRIMARY 41 NULL 2 Using where; Using index
|
1 SIMPLE t1 index NULL PRIMARY 41 NULL 2 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority distinct test.t1.date AS `date` from test.t1 where (test.t1.date = 20020803)
|
Note 1003 select distinct test.t1.date AS `date` from test.t1 where (test.t1.date = 20020803)
|
||||||
EXPLAIN EXTENDED SELECT (SELECT DISTINCT date FROM t1 WHERE date='2002-08-03');
|
EXPLAIN EXTENDED SELECT (SELECT DISTINCT date FROM t1 WHERE date='2002-08-03');
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
2 SUBQUERY t1 index NULL PRIMARY 41 NULL 2 Using where; Using index
|
2 SUBQUERY t1 index NULL PRIMARY 41 NULL 2 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority (select distinct test.t1.date AS `date` from test.t1 where (test.t1.date = 20020803)) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')`
|
Note 1003 select (select distinct test.t1.date AS `date` from test.t1 where (test.t1.date = 20020803)) AS `(SELECT DISTINCT date FROM t1 WHERE date='2002-08-03')`
|
||||||
SELECT DISTINCT date FROM t1 WHERE date='2002-08-03';
|
SELECT DISTINCT date FROM t1 WHERE date='2002-08-03';
|
||||||
date
|
date
|
||||||
2002-08-03
|
2002-08-03
|
||||||
@ -414,7 +414,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
3 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority 1 AS `1` from test.t1
|
Note 1003 select 1 AS `1` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
|
`numeropost` mediumint(8) unsigned NOT NULL auto_increment,
|
||||||
@ -534,13 +534,13 @@ EXPLAIN EXTENDED SELECT MAX(numreponse) FROM t1 WHERE numeropost='1';
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority max(test.t1.numreponse) AS `MAX(numreponse)` from test.t1 where (test.t1.numeropost = _latin1'1')
|
Note 1003 select max(test.t1.numreponse) AS `MAX(numreponse)` from test.t1 where (test.t1.numeropost = _latin1'1')
|
||||||
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
|
EXPLAIN EXTENDED SELECT numreponse FROM t1 WHERE numeropost='1' AND numreponse=(SELECT MAX(numreponse) FROM t1 WHERE numeropost='1');
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 const PRIMARY,numreponse PRIMARY 7 const,const 1 Using index
|
1 PRIMARY t1 const PRIMARY,numreponse PRIMARY 7 const,const 1 Using index
|
||||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.numreponse AS `numreponse` from test.t1 where ((test.t1.numeropost = _latin1'1') and (test.t1.numreponse = 3))
|
Note 1003 select test.t1.numreponse AS `numreponse` from test.t1 where ((test.t1.numeropost = _latin1'1') and (test.t1.numreponse = 3))
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (a int(1));
|
CREATE TABLE t1 (a int(1));
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
@ -708,7 +708,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 ref id id 5 const 1 Using where; Using index
|
1 PRIMARY t2 ref id id 5 const 1 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1003 select high_priority test.t2.id AS `id` from test.t2 where (test.t2.id = 1)
|
Note 1003 select test.t2.id AS `id` from test.t2 where (test.t2.id = 1)
|
||||||
SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id
|
id
|
||||||
1
|
1
|
||||||
@ -721,14 +721,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1249 Select 3 was reduced during optimisation
|
Note 1249 Select 3 was reduced during optimisation
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1003 select high_priority test.t2.id AS `id` from test.t2 where (test.t2.id = (1 + 1))
|
Note 1003 select test.t2.id AS `id` from test.t2 where (test.t2.id = (1 + 1))
|
||||||
EXPLAIN EXTENDED SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
EXPLAIN EXTENDED SELECT * FROM t2 WHERE id IN (SELECT 1 UNION SELECT 3);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t2 index NULL id 5 NULL 2 Using where; Using index
|
1 PRIMARY t2 index NULL id 5 NULL 2 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.id AS `id` from test.t2 where <in_optimizer>(test.t2.id,<exists>(select 1 AS `Not_used` having (<cache>(test.t2.id) = <null_helper>(1)) union select 1 AS `Not_used` having (<cache>(test.t2.id) = <null_helper>(3))))
|
Note 1003 select test.t2.id AS `id` from test.t2 where <in_optimizer>(test.t2.id,<exists>(select 1 AS `Not_used` having (<cache>(test.t2.id) = <null_helper>(1)) union select 1 AS `Not_used` having (<cache>(test.t2.id) = <null_helper>(3))))
|
||||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||||
id
|
id
|
||||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||||
@ -854,7 +854,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 'a' of SELECT #2 was resolved in SELECT #1
|
Note 1276 Field or reference 'a' of SELECT #2 was resolved in SELECT #1
|
||||||
Note 1249 Select 2 was reduced during optimisation
|
Note 1249 Select 2 was reduced during optimisation
|
||||||
Note 1003 select high_priority (test.t1.a + 1) AS `(select a+1)` from test.t1
|
Note 1003 select (test.t1.a + 1) AS `(select a+1)` from test.t1
|
||||||
select (select a+1) from t1;
|
select (select a+1) from t1;
|
||||||
(select a+1)
|
(select a+1)
|
||||||
2.5
|
2.5
|
||||||
@ -876,7 +876,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 index NULL PRIMARY 4 NULL 4 Using index
|
1 PRIMARY t1 index NULL PRIMARY 4 NULL 4 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery a a 5 func 2 Using index
|
2 DEPENDENT SUBQUERY t2 index_subquery a a 5 func 2 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,<in_optimizer>(test.t1.a,<exists>(<index_lookup>(<cache>(test.t1.a) in t2 on a chicking NULL))) AS `t1.a in (select t2.a from t2)` from test.t1
|
Note 1003 select test.t1.a AS `a`,<in_optimizer>(test.t1.a,<exists>(<index_lookup>(<cache>(test.t1.a) in t2 on a chicking NULL))) AS `t1.a in (select t2.a from t2)` from test.t1
|
||||||
CREATE TABLE t3 (a int(11) default '0');
|
CREATE TABLE t3 (a int(11) default '0');
|
||||||
INSERT INTO t3 VALUES (1),(2),(3);
|
INSERT INTO t3 VALUES (1),(2),(3);
|
||||||
SELECT t1.a, t1.a in (select t2.a from t2,t3 where t3.a=t2.a) FROM t1;
|
SELECT t1.a, t1.a in (select t2.a from t2,t3 where t3.a=t2.a) FROM t1;
|
||||||
@ -891,7 +891,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 DEPENDENT SUBQUERY t2 ref_or_null a a 5 func 2 Using where; Using index
|
2 DEPENDENT SUBQUERY t2 ref_or_null a a 5 func 2 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
2 DEPENDENT SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.a AS `a`,<in_optimizer>(test.t1.a,<exists>(select 1 AS `Not_used` from test.t2 join test.t3 where ((test.t3.a = test.t2.a) and ((<cache>(test.t1.a) = test.t2.a) or isnull(test.t2.a))) having <is_not_null_test>(test.t2.a))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from test.t1
|
Note 1003 select test.t1.a AS `a`,<in_optimizer>(test.t1.a,<exists>(select 1 AS `Not_used` from test.t2 join test.t3 where ((test.t3.a = test.t2.a) and ((<cache>(test.t1.a) = test.t2.a) or isnull(test.t2.a))) having <is_not_null_test>(test.t2.a))) AS `t1.a in (select t2.a from t2,t3 where t3.a=t2.a)` from test.t1
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
create table t1 (a float);
|
create table t1 (a float);
|
||||||
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
select 10.5 IN (SELECT * from t1 LIMIT 1);
|
||||||
@ -1001,19 +1001,19 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache (select no_cache rand() AS `RAND()` from test.t1) AS `(SELECT RAND() FROM t1)` from test.t1
|
Note 1003 select sql_no_cache (select sql_no_cache rand() AS `RAND()` from test.t1) AS `(SELECT RAND() FROM t1)` from test.t1
|
||||||
EXPLAIN EXTENDED SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1;
|
EXPLAIN EXTENDED SELECT (SELECT ENCRYPT('test') FROM t1) FROM t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache (select no_cache ecrypt(_latin1'test') AS `ENCRYPT('test')` from test.t1) AS `(SELECT ENCRYPT('test') FROM t1)` from test.t1
|
Note 1003 select sql_no_cache (select sql_no_cache ecrypt(_latin1'test') AS `ENCRYPT('test')` from test.t1) AS `(SELECT ENCRYPT('test') FROM t1)` from test.t1
|
||||||
EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
EXPLAIN EXTENDED SELECT (SELECT BENCHMARK(1,1) FROM t1) FROM t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache (select no_cache benchmark(1,1) AS `BENCHMARK(1,1)` from test.t1) AS `(SELECT BENCHMARK(1,1) FROM t1)` from test.t1
|
Note 1003 select sql_no_cache (select sql_no_cache benchmark(1,1) AS `BENCHMARK(1,1)` from test.t1) AS `(SELECT BENCHMARK(1,1) FROM t1)` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`mot` varchar(30) character set latin1 NOT NULL default '',
|
`mot` varchar(30) character set latin1 NOT NULL default '',
|
||||||
@ -1108,7 +1108,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
2 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||||
3 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
3 UNCACHEABLE SUBQUERY t1 ALL NULL NULL NULL NULL 3
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache test.t1.a AS `a`,(select no_cache (select no_cache rand() AS `rand()` from test.t1 limit 1) AS `(select rand() from t1 limit 1)` from test.t1 limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from test.t1
|
Note 1003 select sql_no_cache test.t1.a AS `a`,(select sql_no_cache (select sql_no_cache rand() AS `rand()` from test.t1 limit 1) AS `(select rand() from t1 limit 1)` from test.t1 limit 1) AS `(select (select rand() from t1 limit 1) from t1 limit 1)` from test.t1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent);
|
select t1.Continent, t2.Name, t2.Population from t1 LEFT JOIN t2 ON t1.Code = t2.Country where t2.Population IN (select max(t2.Population) AS Population from t2, t1 where t2.Country = t1.Code group by Continent);
|
||||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
@ -1162,7 +1162,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority <in_optimizer>(0,<exists>(select 1 AS `Not_used` from test.t1 a)) AS `0 IN (SELECT 1 FROM t1 a)`
|
Note 1003 select <in_optimizer>(0,<exists>(select 1 AS `Not_used` from test.t1 a)) AS `0 IN (SELECT 1 FROM t1 a)`
|
||||||
INSERT INTO t1 (pseudo) VALUES ('test1');
|
INSERT INTO t1 (pseudo) VALUES ('test1');
|
||||||
SELECT 0 IN (SELECT 1 FROM t1 a);
|
SELECT 0 IN (SELECT 1 FROM t1 a);
|
||||||
0 IN (SELECT 1 FROM t1 a)
|
0 IN (SELECT 1 FROM t1 a)
|
||||||
@ -1172,7 +1172,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority <in_optimizer>(0,<exists>(select 1 AS `Not_used` from test.t1 a)) AS `0 IN (SELECT 1 FROM t1 a)`
|
Note 1003 select <in_optimizer>(0,<exists>(select 1 AS `Not_used` from test.t1 a)) AS `0 IN (SELECT 1 FROM t1 a)`
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE `t1` (
|
CREATE TABLE `t1` (
|
||||||
`i` int(11) NOT NULL default '0',
|
`i` int(11) NOT NULL default '0',
|
||||||
@ -1216,7 +1216,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 ref salary salary 5 const 1 Using where
|
1 PRIMARY t1 ref salary salary 5 const 1 Using where
|
||||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.id AS `id` from test.t1 where (test.t1.salary = (select max(test.t1.salary) AS `MAX(salary)` from test.t1))
|
Note 1003 select test.t1.id AS `id` from test.t1 where (test.t1.salary = (select max(test.t1.salary) AS `MAX(salary)` from test.t1))
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
ID int(10) unsigned NOT NULL auto_increment,
|
ID int(10) unsigned NOT NULL auto_increment,
|
||||||
@ -1283,7 +1283,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 Using where; Using index
|
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index
|
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<primary_index_lookup>(<cache>(test.t2.a) in t1 on PRIMARY)))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<primary_index_lookup>(<cache>(test.t2.a) in t1 on PRIMARY)))
|
||||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||||
a
|
a
|
||||||
2
|
2
|
||||||
@ -1293,7 +1293,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 Using where; Using index
|
1 PRIMARY t2 index NULL PRIMARY 4 NULL 4 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<primary_index_lookup>(<cache>(test.t2.a) in t1 on PRIMARY where (test.t1.b <> 30))))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<primary_index_lookup>(<cache>(test.t2.a) in t1 on PRIMARY where (test.t1.b <> 30))))
|
||||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||||
a
|
a
|
||||||
2
|
2
|
||||||
@ -1304,7 +1304,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 Using where
|
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 func 1 Using where
|
||||||
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 Using where; Using index
|
2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(select 1 AS `Not_used` from test.t1 join test.t3 where ((test.t1.b = test.t3.a) and (<cache>(test.t2.a) = test.t1.a))))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(select 1 AS `Not_used` from test.t1 join test.t3 where ((test.t1.b = test.t3.a) and (<cache>(test.t2.a) = test.t1.a))))
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
create table t1 (a int, b int, index a (a,b));
|
create table t1 (a int, b int, index a (a,b));
|
||||||
create table t2 (a int, index a (a));
|
create table t2 (a int, index a (a));
|
||||||
@ -1322,7 +1322,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index
|
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a)))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a)))
|
||||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||||
a
|
a
|
||||||
2
|
2
|
||||||
@ -1332,7 +1332,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index; Using where
|
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index; Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a where (test.t1.b <> 30))))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a where (test.t1.b <> 30))))
|
||||||
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
select * from t2 where t2.a in (select t1.a from t1,t3 where t1.b=t3.a);
|
||||||
a
|
a
|
||||||
2
|
2
|
||||||
@ -1343,7 +1343,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
2 DEPENDENT SUBQUERY t1 ref a a 5 func 1001 Using where; Using index
|
2 DEPENDENT SUBQUERY t1 ref a a 5 func 1001 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t3 index a a 5 NULL 3 Using where; Using index
|
2 DEPENDENT SUBQUERY t3 index a a 5 NULL 3 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(select 1 AS `Not_used` from test.t1 join test.t3 where ((test.t1.b = test.t3.a) and (<cache>(test.t2.a) = test.t1.a))))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(select 1 AS `Not_used` from test.t1 join test.t3 where ((test.t1.b = test.t3.a) and (<cache>(test.t2.a) = test.t1.a))))
|
||||||
insert into t1 values (3,31);
|
insert into t1 values (3,31);
|
||||||
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
select * from t2 where t2.a in (select a from t1 where t1.b <> 30);
|
||||||
a
|
a
|
||||||
@ -1359,7 +1359,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
1 PRIMARY t2 index NULL a 5 NULL 4 Using where; Using index
|
||||||
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index; Using where
|
2 DEPENDENT SUBQUERY t1 index_subquery a a 5 func 1001 Using index; Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a where (test.t1.b <> 30))))
|
Note 1003 select test.t2.a AS `a` from test.t2 where <in_optimizer>(test.t2.a,<exists>(<index_lookup>(<cache>(test.t2.a) in t1 on a where (test.t1.b <> 30))))
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
create table t1 (a int, b int);
|
create table t1 (a int, b int);
|
||||||
create table t2 (a int, b int);
|
create table t2 (a int, b int);
|
||||||
@ -1416,7 +1416,7 @@ explain extended (select * from t1);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 (select high_priority test.t1.s1 AS `s1` from test.t1)
|
Note 1003 (select test.t1.s1 AS `s1` from test.t1)
|
||||||
(select * from t1);
|
(select * from t1);
|
||||||
s1
|
s1
|
||||||
tttt
|
tttt
|
||||||
@ -1450,25 +1450,25 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from test.t1
|
Note 1003 select test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from test.t1
|
||||||
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.s1 AS `s1`,<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL))) AS `s1 = ANY (SELECT s1 FROM t2)` from test.t1
|
Note 1003 select test.t1.s1 AS `s1`,<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL))) AS `s1 = ANY (SELECT s1 FROM t2)` from test.t1
|
||||||
explain extended select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
|
explain extended select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 <> ALL (SELECT s1 FROM t2)` from test.t1
|
Note 1003 select test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 <> ALL (SELECT s1 FROM t2)` from test.t1
|
||||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 1 Using index; Using where
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 1 Using index; Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL where (test.t2.s1 < _latin1'a2'))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from test.t1
|
Note 1003 select test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL where (test.t2.s1 < _latin1'a2'))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from test.t1
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t2 (a int, b int);
|
create table t2 (a int, b int);
|
||||||
create table t3 (a int);
|
create table t3 (a int);
|
||||||
@ -1483,7 +1483,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
2 SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
2 SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t3.a AS `a` from test.t3 where <not>((test.t3.a < (select max(test.t2.b) from test.t2)))
|
Note 1003 select test.t3.a AS `a` from test.t3 where <not>((test.t3.a < (select max(test.t2.b) from test.t2)))
|
||||||
insert into t2 values (2,2), (2,1), (3,3), (3,1);
|
insert into t2 values (2,2), (2,1), (3,3), (3,1);
|
||||||
select * from t3 where a > all (select max(b) from t2 group by a);
|
select * from t3 where a > all (select max(b) from t2 group by a);
|
||||||
a
|
a
|
||||||
@ -1494,7 +1494,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
|
||||||
2 SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
2 SUBQUERY t2 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t3.a AS `a` from test.t3 where <not>((test.t3.a <= <max>(select max(test.t2.b) AS `max(b)` from test.t2 group by test.t2.a)))
|
Note 1003 select test.t3.a AS `a` from test.t3 where <not>((test.t3.a <= <max>(select max(test.t2.b) AS `max(b)` from test.t2 group by test.t2.a)))
|
||||||
drop table t2, t3;
|
drop table t2, t3;
|
||||||
CREATE TABLE `t1` ( `id` mediumint(9) NOT NULL auto_increment, `taskid` bigint(20) NOT NULL default '0', `dbid` int(11) NOT NULL default '0', `create_date` datetime NOT NULL default '0000-00-00 00:00:00', `last_update` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM CHARSET=latin1 AUTO_INCREMENT=3 ;
|
CREATE TABLE `t1` ( `id` mediumint(9) NOT NULL auto_increment, `taskid` bigint(20) NOT NULL default '0', `dbid` int(11) NOT NULL default '0', `create_date` datetime NOT NULL default '0000-00-00 00:00:00', `last_update` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM CHARSET=latin1 AUTO_INCREMENT=3 ;
|
||||||
INSERT INTO `t1` (`id`, `taskid`, `dbid`, `create_date`,`last_update`) VALUES (1, 1, 15, '2003-09-29 10:31:36', '2003-09-29 10:31:36'), (2, 1, 21, now(), now());
|
INSERT INTO `t1` (`id`, `taskid`, `dbid`, `create_date`,`last_update`) VALUES (1, 1, 15, '2003-09-29 10:31:36', '2003-09-29 10:31:36'), (2, 1, 21, now(), now());
|
||||||
@ -1659,14 +1659,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 12 Using where
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 12 Using where
|
||||||
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
2 DEPENDENT SUBQUERY t1 unique_subquery PRIMARY PRIMARY 4 func 1 Using index; Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.id AS `id`,test.t1.text AS `text` from test.t1 where not(<in_optimizer>(test.t1.id,<exists>(<primary_index_lookup>(<cache>(test.t1.id) in t1 on PRIMARY where (test.t1.id < 8)))))
|
Note 1003 select test.t1.id AS `id`,test.t1.text AS `text` from test.t1 where not(<in_optimizer>(test.t1.id,<exists>(<primary_index_lookup>(<cache>(test.t1.id) in t1 on PRIMARY where (test.t1.id < 8)))))
|
||||||
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
|
explain extended select * from t1 as tt where not exists (select id from t1 where id < 8 and (id = tt.id or id is null) having id is not null);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY tt ALL NULL NULL NULL NULL 12 Using where
|
1 PRIMARY tt ALL NULL NULL NULL NULL 12 Using where
|
||||||
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 test.tt.id 7 Using where; Using index
|
2 DEPENDENT SUBQUERY t1 eq_ref PRIMARY PRIMARY 4 test.tt.id 7 Using where; Using index
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1276 Field or reference 'tt.id' of SELECT #2 was resolved in SELECT #1
|
Note 1276 Field or reference 'tt.id' of SELECT #2 was resolved in SELECT #1
|
||||||
Note 1003 select high_priority test.tt.id AS `id`,test.tt.text AS `text` from test.t1 tt where not(exists(select test.t1.id AS `id` from test.t1 where ((test.t1.id < 8) and ((test.t1.id = test.tt.id) or isnull(test.t1.id))) having (test.t1.id is not null)))
|
Note 1003 select test.tt.id AS `id`,test.tt.text AS `text` from test.t1 tt where not(exists(select test.t1.id AS `id` from test.t1 where ((test.t1.id < 8) and ((test.t1.id = test.tt.id) or isnull(test.t1.id))) having (test.t1.id is not null)))
|
||||||
insert into t1 (id, text) values (1000, 'text1000'), (1001, 'text1001');
|
insert into t1 (id, text) values (1000, 'text1000'), (1001, 'text1001');
|
||||||
create table t2 (id int not null, text varchar(20) not null default '', primary key (id));
|
create table t2 (id int not null, text varchar(20) not null default '', primary key (id));
|
||||||
insert into t2 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text1'), (12, 'text2'), (13, 'text3'), (14, 'text4'), (15, 'text5'), (16, 'text6'), (17, 'text7'), (18, 'text8'), (19, 'text9'), (20, 'text10'),(21, 'text1'), (22, 'text2'), (23, 'text3'), (24, 'text4'), (25, 'text5'), (26, 'text6'), (27, 'text7'), (28, 'text8'), (29, 'text9'), (30, 'text10'), (31, 'text1'), (32, 'text2'), (33, 'text3'), (34, 'text4'), (35, 'text5'), (36, 'text6'), (37, 'text7'), (38, 'text8'), (39, 'text9'), (40, 'text10'), (41, 'text1'), (42, 'text2'), (43, 'text3'), (44, 'text4'), (45, 'text5'), (46, 'text6'), (47, 'text7'), (48, 'text8'), (49, 'text9'), (50, 'text10');
|
insert into t2 (id, text) values (1, 'text1'), (2, 'text2'), (3, 'text3'), (4, 'text4'), (5, 'text5'), (6, 'text6'), (7, 'text7'), (8, 'text8'), (9, 'text9'), (10, 'text10'), (11, 'text1'), (12, 'text2'), (13, 'text3'), (14, 'text4'), (15, 'text5'), (16, 'text6'), (17, 'text7'), (18, 'text8'), (19, 'text9'), (20, 'text10'),(21, 'text1'), (22, 'text2'), (23, 'text3'), (24, 'text4'), (25, 'text5'), (26, 'text6'), (27, 'text7'), (28, 'text8'), (29, 'text9'), (30, 'text10'), (31, 'text1'), (32, 'text2'), (33, 'text3'), (34, 'text4'), (35, 'text5'), (36, 'text6'), (37, 'text7'), (38, 'text8'), (39, 'text9'), (40, 'text10'), (41, 'text1'), (42, 'text2'), (43, 'text3'), (44, 'text4'), (45, 'text5'), (46, 'text6'), (47, 'text7'), (48, 'text8'), (49, 'text9'), (50, 'text10');
|
||||||
@ -1692,7 +1692,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE b eq_ref PRIMARY PRIMARY 4 test.a.id 2
|
1 SIMPLE b eq_ref PRIMARY PRIMARY 4 test.a.id 2
|
||||||
1 SIMPLE c eq_ref PRIMARY PRIMARY 4 func 1 Using where
|
1 SIMPLE c eq_ref PRIMARY PRIMARY 4 func 1 Using where
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.a.id AS `id`,test.a.text AS `text`,test.b.id AS `id`,test.b.text AS `text`,test.c.id AS `id`,test.c.text AS `text` from test.t1 a left join test.t2 b on(((test.a.id = test.b.id) or isnull(test.b.id))) join test.t1 c where (if(isnull(test.b.id),1000,test.b.id) = test.c.id)
|
Note 1003 select test.a.id AS `id`,test.a.text AS `text`,test.b.id AS `id`,test.b.text AS `text`,test.c.id AS `id`,test.c.text AS `text` from test.t1 a left join test.t2 b on(((test.a.id = test.b.id) or isnull(test.b.id))) join test.t1 c where (if(isnull(test.b.id),1000,test.b.id) = test.c.id)
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
insert into t1 values (1);
|
insert into t1 values (1);
|
||||||
@ -1719,3 +1719,92 @@ SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t
|
|||||||
id c
|
id c
|
||||||
1 1
|
1 1
|
||||||
2 0
|
2 0
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
CREATE TABLE t1 ( a int, b int );
|
||||||
|
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
||||||
|
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
ALTER TABLE t1 ADD INDEX (a);
|
||||||
|
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
a
|
||||||
|
1
|
||||||
|
3
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -507,7 +507,7 @@ coercibility(load_file('../../std_data/words.dat'));
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache charset(load_file(_latin1'../../std_data/words.dat')) AS `charset(load_file('../../std_data/words.dat'))`,collation(load_file(_latin1'../../std_data/words.dat')) AS `collation(load_file('../../std_data/words.dat'))`,coercibility(load_file(_latin1'../../std_data/words.dat')) AS `coercibility(load_file('../../std_data/words.dat'))`
|
Note 1003 select sql_no_cache charset(load_file(_latin1'../../std_data/words.dat')) AS `charset(load_file('../../std_data/words.dat'))`,collation(load_file(_latin1'../../std_data/words.dat')) AS `collation(load_file('../../std_data/words.dat'))`,coercibility(load_file(_latin1'../../std_data/words.dat')) AS `coercibility(load_file('../../std_data/words.dat'))`
|
||||||
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
|
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
|
||||||
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
|
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
|
||||||
if(imagem is null, "ERROR", "OK") length(imagem)
|
if(imagem is null, "ERROR", "OK") length(imagem)
|
||||||
|
@ -87,7 +87,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||||
2 UNION t2 ALL NULL NULL NULL NULL 4 Using filesort
|
2 UNION t2 ALL NULL NULL NULL NULL 4 Using filesort
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 (select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 limit 2) union all (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 order by test.t2.a limit 1) order by b desc
|
Note 1003 (select test.t1.a AS `a`,test.t1.b AS `b` from test.t1 limit 2) union all (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 order by test.t2.a limit 1) order by b desc
|
||||||
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
|
||||||
a b
|
a b
|
||||||
1 a
|
1 a
|
||||||
@ -476,7 +476,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 const PRIMARY PRIMARY 4 const 1
|
1 PRIMARY t1 const PRIMARY PRIMARY 4 const 1
|
||||||
2 UNION t2 const PRIMARY PRIMARY 4 const 1
|
2 UNION t2 const PRIMARY PRIMARY 4 const 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 (select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (test.t1.a = 1)) union (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a = 1))
|
Note 1003 (select test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (test.t1.a = 1)) union (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a = 1))
|
||||||
(select * from t1 where a=5) union (select * from t2 where a=1);
|
(select * from t1 where a=5) union (select * from t2 where a=1);
|
||||||
a b
|
a b
|
||||||
1 10
|
1 10
|
||||||
|
@ -15,7 +15,7 @@ explain extended select * from t1 where UNIQ=0x38afba1d73e6a18a;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 const UNIQ UNIQ 8 const 1
|
1 SIMPLE t1 const UNIQ UNIQ 8 const 1
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority test.t1.ID AS `ID`,test.t1.UNIQ AS `UNIQ` from test.t1 where (test.t1.UNIQ = 4084688022709641610)
|
Note 1003 select test.t1.ID AS `ID`,test.t1.UNIQ AS `UNIQ` from test.t1 where (test.t1.UNIQ = 4084688022709641610)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select x'hello';
|
select x'hello';
|
||||||
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'x'hello'' at line 1
|
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'x'hello'' at line 1
|
||||||
|
@ -26,7 +26,7 @@ explain extended select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache (@t1:=((@t2:=1) + (@t3:=4))) AS `@t1:=(@t2:=1)+@t3:=4`,(@t1) AS `@t1`,(@t2) AS `@t2`,(@t3) AS `@t3`
|
Note 1003 select sql_no_cache (@t1:=((@t2:=1) + (@t3:=4))) AS `@t1:=(@t2:=1)+@t3:=4`,(@t1) AS `@t1`,(@t2) AS `@t2`,(@t3) AS `@t3`
|
||||||
select @t5;
|
select @t5;
|
||||||
@t5
|
@t5
|
||||||
1.23456
|
1.23456
|
||||||
@ -85,7 +85,7 @@ explain extended select last_insert_id(345);
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache last_insert_id(345) AS `last_insert_id(345)`
|
Note 1003 select sql_no_cache last_insert_id(345) AS `last_insert_id(345)`
|
||||||
select @@IDENTITY,last_insert_id(), @@identity;
|
select @@IDENTITY,last_insert_id(), @@identity;
|
||||||
@@IDENTITY last_insert_id() @@identity
|
@@IDENTITY last_insert_id() @@identity
|
||||||
345 345 345
|
345 345 345
|
||||||
@ -93,7 +93,7 @@ explain extended select @@IDENTITY,last_insert_id(), @@identity;
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select high_priority no_cache 345 AS `@@IDENTITY`,last_insert_id() AS `last_insert_id()`,345 AS `@@identity`
|
Note 1003 select sql_no_cache 345 AS `@@IDENTITY`,last_insert_id() AS `last_insert_id()`,345 AS `@@identity`
|
||||||
set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF", big_tables="ON";
|
set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF", big_tables="ON";
|
||||||
set global concurrent_insert=ON;
|
set global concurrent_insert=ON;
|
||||||
show variables like 'concurrent_insert';
|
show variables like 'concurrent_insert';
|
||||||
|
@ -30,3 +30,14 @@ explain select count(*) from t1;
|
|||||||
insert into t1 values(1);
|
insert into t1 values(1);
|
||||||
explain select count(*) from t1;
|
explain select count(*) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #3403 Wrong encoding in EXPLAIN SELECT output
|
||||||
|
#
|
||||||
|
set names koi8r;
|
||||||
|
create table <20><><EFBFBD> (<28><><EFBFBD>0 int, <20><><EFBFBD>1 int, key <20><><EFBFBD>0 (<28><><EFBFBD>0), key <20><><EFBFBD>01 (<28><><EFBFBD>0,<2C><><EFBFBD>1));
|
||||||
|
insert into <20><><EFBFBD> (<28><><EFBFBD>0) values (1);
|
||||||
|
insert into <20><><EFBFBD> (<28><><EFBFBD>0) values (2);
|
||||||
|
explain select <20><><EFBFBD>0 from <20><><EFBFBD> where <20><><EFBFBD>0=1;
|
||||||
|
drop table <20><><EFBFBD>;
|
||||||
|
set names latin1;
|
||||||
|
@ -179,3 +179,13 @@ select group_concat(c order by (select mid(group_concat(c order by a),1,5) from
|
|||||||
|
|
||||||
select a,c,(select group_concat(c order by a) from t2 where a=t1.a) as grp from t1 order by grp;
|
select a,c,(select group_concat(c order by a) from t2 where a=t1.a) as grp from t1 order by grp;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# group_concat of expression with GROUP BY and external GROUP BY
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( a int );
|
||||||
|
CREATE TABLE t2 ( a int );
|
||||||
|
INSERT INTO t1 VALUES (1), (2);
|
||||||
|
INSERT INTO t2 VALUES (1), (2);
|
||||||
|
SELECT GROUP_CONCAT(t1.a*t2.a ORDER BY t2.a) FROM t1, t2 GROUP BY t1.a;
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -148,3 +148,26 @@ grant usage on *.* to mysqltest_1@localhost identified by "password";
|
|||||||
grant select, update, insert on test.* to mysqltest@localhost;
|
grant select, update, insert on test.* to mysqltest@localhost;
|
||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
drop user mysqltest_1@localhost;
|
drop user mysqltest_1@localhost;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #3403 Wrong encodin in SHOW GRANTS output
|
||||||
|
#
|
||||||
|
SET NAMES koi8r;
|
||||||
|
CREATE DATABASE <20><>;
|
||||||
|
USE <20><>;
|
||||||
|
CREATE TABLE <20><><EFBFBD> (<28><><EFBFBD> int);
|
||||||
|
|
||||||
|
GRANT SELECT ON <20><>.* TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
REVOKE SELECT ON <20><>.* FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
|
||||||
|
GRANT SELECT ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
REVOKE SELECT ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
|
||||||
|
GRANT SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> TO <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
SHOW GRANTS FOR <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
REVOKE SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||||
|
|
||||||
|
DROP DATABASE <20><>;
|
||||||
|
SET NAMES latin1;
|
||||||
|
@ -1082,8 +1082,28 @@ create table t2 (id int(11) not null, id2 int(11) not null, unique (id,id2),cons
|
|||||||
show create table t2;
|
show create table t2;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
|
|
||||||
|
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id), primary key (id), index (id,id2)) engine = innodb;
|
||||||
|
show create table t2;
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
|
create table t2 (id int(11) not null auto_increment, id2 int(11) not null, constraint t1_id_fk foreign key (id) references t1 (id)) engine= innodb;
|
||||||
|
show create table t2;
|
||||||
|
alter table t2 add index id_test (id), add index id_test2 (id,id2);
|
||||||
|
show create table t2;
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
# Test error handling
|
# Test error handling
|
||||||
--error 1005
|
--error 1005
|
||||||
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
|
create table t2 (id int(11) not null, id2 int(11) not null, constraint t1_id_fk foreign key (id2,id) references t1 (id)) engine = innodb;
|
||||||
|
|
||||||
drop table t1;
|
# bug#3749
|
||||||
|
|
||||||
|
create table t2 (a int auto_increment primary key, b int, index(b), foreign key (b) references t1(id), unique(b)) engine=innodb;
|
||||||
|
show create table t2;
|
||||||
|
drop table t2;
|
||||||
|
create table t2 (a int auto_increment primary key, b int, foreign key (b) references t1(id), foreign key (b) references t1(id), unique(b)) engine=innodb;
|
||||||
|
show create table t2;
|
||||||
|
drop table t2, t1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,6 +79,16 @@ select distinct i from t1 order by 1-i;
|
|||||||
select distinct i from t1 order by mod(i,2),i;
|
select distinct i from t1 order by mod(i,2),i;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# bug#3681
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 ( pk int primary key, name varchar(255) not null, number varchar(255) not null);
|
||||||
|
insert into t1 values (1, 'Gamma', '123'), (2, 'Gamma Ext', '123a'), (3, 'Alpha', '001'), (4, 'Beta', '200c');
|
||||||
|
select distinct t1.name as 'Building Name',t1.number as 'Building Number' from t1 order by t1.name asc;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Order by on first index part
|
# Order by on first index part
|
||||||
#
|
#
|
||||||
|
@ -1125,4 +1125,36 @@ INSERT INTO t1 VALUES (1), (2);
|
|||||||
INSERT INTO t2 VALUES (1);
|
INSERT INTO t2 VALUES (1);
|
||||||
SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id);
|
SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id);
|
||||||
SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id) ORDER BY t1.id;
|
SELECT t1.id, ( SELECT COUNT(t.id) FROM t2 AS t WHERE t.id = t1.id ) AS c FROM t1 LEFT JOIN t2 USING (id) ORDER BY t1.id;
|
||||||
DROP TABLE t1,t2
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# ALL/ANY test
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( a int, b int );
|
||||||
|
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
|
||||||
|
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
ALTER TABLE t1 ADD INDEX (a);
|
||||||
|
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 WHERE b = 2 );
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -104,7 +104,7 @@ void bitmap_set_bit(MY_BITMAP *map, uint bitmap_bit)
|
|||||||
{
|
{
|
||||||
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
||||||
bitmap_lock(map);
|
bitmap_lock(map);
|
||||||
map->bitmap[bitmap_bit / 8] |= (1 << (bitmap_bit & 7));
|
bitmap_fast_set_bit(map, bitmap_bit);
|
||||||
bitmap_unlock(map);
|
bitmap_unlock(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ void bitmap_clear_bit(MY_BITMAP *map, uint bitmap_bit)
|
|||||||
{
|
{
|
||||||
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
||||||
bitmap_lock(map);
|
bitmap_lock(map);
|
||||||
map->bitmap[bitmap_bit / 8] &= ~ (1 << (bitmap_bit & 7));
|
bitmap_fast_clear_bit(map, bitmap_bit);
|
||||||
bitmap_unlock(map);
|
bitmap_unlock(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ my_bool bitmap_is_set_all(const MY_BITMAP *map)
|
|||||||
my_bool bitmap_is_set(const MY_BITMAP *map, uint bitmap_bit)
|
my_bool bitmap_is_set(const MY_BITMAP *map, uint bitmap_bit)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
DBUG_ASSERT(map->bitmap && bitmap_bit < map->bitmap_size*8);
|
||||||
return map->bitmap[bitmap_bit / 8] & (1 << (bitmap_bit & 7));
|
return bitmap_fast_is_set(map, bitmap_bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ SHLIBEXT := sl
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(NDB_OS), MACOSX)
|
ifeq ($(NDB_OS), MACOSX)
|
||||||
CCFLAGS_TOP += -DNDBOUT_UINTPTR
|
|
||||||
SHLIBEXT := dylib
|
SHLIBEXT := dylib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -6,9 +6,11 @@ SHELL := /bin/sh
|
|||||||
C++ := gcc$(GCC_VERSION)
|
C++ := gcc$(GCC_VERSION)
|
||||||
CC := gcc$(GCC_VERSION)
|
CC := gcc$(GCC_VERSION)
|
||||||
AR_RCS := $(PURE) ar rcs
|
AR_RCS := $(PURE) ar rcs
|
||||||
SO := gcc$(GCC_VERSION) -shared -lpthread -o
|
SO := gcc$(GCC_VERSION) -shared -lpthread -o
|
||||||
|
#SO := gcc$(GCC_VERSION) -shared -o
|
||||||
|
|
||||||
MAKEDEPEND := gcc$(GCC_VERSION) -M
|
MAKEDEPEND := gcc$(GCC_VERSION) -M
|
||||||
|
#MAKEDEPEND := gcc$(GCC_VERSION) -M -nostdinc -nostdinc++
|
||||||
PIC := -fPIC
|
PIC := -fPIC
|
||||||
|
|
||||||
RPCGENFLAGS := -M -C -N
|
RPCGENFLAGS := -M -C -N
|
||||||
@ -27,7 +29,8 @@ else
|
|||||||
CCFLAGS_WARNINGS = -Wno-long-long -Wall
|
CCFLAGS_WARNINGS = -Wno-long-long -Wall
|
||||||
endif
|
endif
|
||||||
# Add these for more warnings -Weffc++ -W
|
# Add these for more warnings -Weffc++ -W
|
||||||
CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
|
CCFLAGS_TOP =
|
||||||
|
#CCFLAGS_TOP = -DSAFE_MUTEX
|
||||||
CCFLAGS_TOP += -fno-rtti -fno-exceptions
|
CCFLAGS_TOP += -fno-rtti -fno-exceptions
|
||||||
|
|
||||||
ifeq (RELEASE, $(NDB_VERSION))
|
ifeq (RELEASE, $(NDB_VERSION))
|
||||||
@ -53,4 +56,5 @@ LINK.cc = $(PURE) $(CC) $(CCFLAGS) $(LDFLAGS)
|
|||||||
|
|
||||||
LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
|
LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
|
||||||
|
|
||||||
LDFLAGS_LAST = -lpthread -lrt $(NDB_TOP)/src/common/portlib/gcc.cpp
|
LDFLAGS_LAST = -lrt -lpthread $(NDB_TOP)/src/common/portlib/gcc.cpp
|
||||||
|
#LDFLAGS_LAST = -lrt $(NDB_TOP)/src/common/portlib/gcc.cpp $(NDB_TOP)/../mysys/libmysys.a $(NDB_TOP)/../dbug/libdbug.a $(NDB_TOP)/../regex/libregex.a $(NDB_TOP)/../strings/libmystrings.a -lpthread
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
* @file ndb_types.h
|
* @file ndb_types.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SYS_TYPES_H
|
#ifndef NDB_TYPES_H
|
||||||
#define SYS_TYPES_H
|
#define NDB_TYPES_H
|
||||||
|
|
||||||
typedef char Int8;
|
typedef char Int8;
|
||||||
typedef unsigned char Uint8;
|
typedef unsigned char Uint8;
|
||||||
@ -33,7 +33,13 @@ typedef unsigned int UintR;
|
|||||||
#ifdef __SIZE_TYPE__
|
#ifdef __SIZE_TYPE__
|
||||||
typedef __SIZE_TYPE__ UintPtr;
|
typedef __SIZE_TYPE__ UintPtr;
|
||||||
#else
|
#else
|
||||||
|
#include <my_config.h>
|
||||||
|
#ifdef HAVE_STDINT_H
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
#include <inttypes.h>
|
||||||
|
#endif
|
||||||
typedef uintptr_t UintPtr;
|
typedef uintptr_t UintPtr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#ifdef NDB_WIN32
|
#ifdef NDB_WIN32
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#include <windows.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -36,7 +35,7 @@ typedef SEMAPHORE NdbMutex;
|
|||||||
#elif defined NDB_WIN32
|
#elif defined NDB_WIN32
|
||||||
typedef CRITICAL_SECTION NdbMutex;
|
typedef CRITICAL_SECTION NdbMutex;
|
||||||
#else
|
#else
|
||||||
#include <my_pthread.h>
|
#include <pthread.h>
|
||||||
typedef pthread_mutex_t NdbMutex;
|
typedef pthread_mutex_t NdbMutex;
|
||||||
#define NDB_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
#define NDB_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,6 +21,5 @@
|
|||||||
|
|
||||||
#define CRLF "\r\n"
|
#define CRLF "\r\n"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <ndb_global.h>
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user