Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
625b57b5
Commit
625b57b5
authored
Nov 17, 2002
by
wax@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move MI_SORT_PARAM and BUFFPEK to myisamdef.h, delete KEY_STORE, change functions
of store keys to temp. file
parent
ffb82f1c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
112 deletions
+105
-112
include/myisam.h
include/myisam.h
+0
-27
myisam/myisamdef.h
myisam/myisamdef.h
+38
-1
myisam/sort.c
myisam/sort.c
+67
-84
No files found.
include/myisam.h
View file @
625b57b5
...
...
@@ -360,31 +360,6 @@ typedef struct st_sort_info
pthread_cond_t
cond
;
}
SORT_INFO
;
typedef
struct
st_mi_sort_param
{
pthread_t
thr
;
IO_CACHE
read_cache
,
tempfile
,
tempfile_for_exceptions
;
DYNAMIC_ARRAY
buffpek
;
ulonglong
unique
[
MI_MAX_KEY_SEG
+
1
];
my_off_t
pos
,
max_pos
,
filepos
,
start_recpos
;
uint
key
,
key_length
,
real_key_length
,
sortbuff_size
;
uint
maxbuffers
,
keys
,
find_length
,
sort_keys_length
;
my_bool
fix_datafile
,
master
;
MI_KEYDEF
*
keyinfo
;
SORT_INFO
*
sort_info
;
uchar
**
sort_keys
;
byte
*
rec_buff
;
void
*
wordlist
,
*
wordptr
;
char
*
record
;
MY_TMPDIR
*
tmpdir
;
int
(
*
key_cmp
)(
struct
st_mi_sort_param
*
,
const
void
*
,
const
void
*
);
int
(
*
key_read
)(
struct
st_mi_sort_param
*
,
void
*
);
int
(
*
key_write
)(
struct
st_mi_sort_param
*
,
const
void
*
);
void
(
*
lock_in_memory
)(
MI_CHECK
*
);
}
MI_SORT_PARAM
;
/* functions in mi_check */
void
myisamchk_init
(
MI_CHECK
*
param
);
int
chk_status
(
MI_CHECK
*
param
,
MI_INFO
*
info
);
...
...
@@ -415,9 +390,7 @@ int filecopy(MI_CHECK *param, File to,File from,my_off_t start,
my_off_t
length
,
const
char
*
type
);
int
movepoint
(
MI_INFO
*
info
,
byte
*
record
,
my_off_t
oldpos
,
my_off_t
newpos
,
uint
prot_key
);
int
sort_write_record
(
MI_SORT_PARAM
*
sort_param
);
int
write_data_suffix
(
SORT_INFO
*
sort_info
,
my_bool
fix_datafile
);
int
_create_index_by_sort
(
MI_SORT_PARAM
*
info
,
my_bool
no_messages
,
ulong
);
int
test_if_almost_full
(
MI_INFO
*
info
);
int
recreate_table
(
MI_CHECK
*
param
,
MI_INFO
**
org_info
,
char
*
filename
);
void
mi_disable_non_unique_index
(
MI_INFO
*
info
,
ha_rows
rows
);
...
...
myisam/myisamdef.h
View file @
625b57b5
...
...
@@ -275,7 +275,41 @@ struct st_myisam_info {
int
rtree_recursion_depth
;
};
typedef
struct
st_buffpek
{
my_off_t
file_pos
;
/* Where we are in the sort file */
uchar
*
base
,
*
key
;
/* Key pointers */
ha_rows
count
;
/* Number of rows in table */
ulong
mem_count
;
/* numbers of keys in memory */
ulong
max_keys
;
/* Max keys in buffert */
}
BUFFPEK
;
typedef
struct
st_mi_sort_param
{
pthread_t
thr
;
IO_CACHE
read_cache
,
tempfile
,
tempfile_for_exceptions
;
DYNAMIC_ARRAY
buffpek
;
ulonglong
unique
[
MI_MAX_KEY_SEG
+
1
];
my_off_t
pos
,
max_pos
,
filepos
,
start_recpos
;
uint
key
,
key_length
,
real_key_length
,
sortbuff_size
;
uint
maxbuffers
,
keys
,
find_length
,
sort_keys_length
;
my_bool
fix_datafile
,
master
;
MI_KEYDEF
*
keyinfo
;
SORT_INFO
*
sort_info
;
uchar
**
sort_keys
;
byte
*
rec_buff
;
void
*
wordlist
,
*
wordptr
;
char
*
record
;
MY_TMPDIR
*
tmpdir
;
int
(
*
key_cmp
)(
struct
st_mi_sort_param
*
,
const
void
*
,
const
void
*
);
int
(
*
key_read
)(
struct
st_mi_sort_param
*
,
void
*
);
int
(
*
key_write
)(
struct
st_mi_sort_param
*
,
const
void
*
);
void
(
*
lock_in_memory
)(
MI_CHECK
*
);
NEAR
int
(
*
write_keys
)(
struct
st_mi_sort_param
*
,
register
uchar
**
,
uint
,
struct
st_buffpek
*
,
IO_CACHE
*
);
NEAR
uint
(
*
read_to_buffer
)(
IO_CACHE
*
,
struct
st_buffpek
*
,
uint
);
NEAR
int
(
*
write_key
)(
struct
st_mi_sort_param
*
,
IO_CACHE
*
,
char
*
,
uint
,
uint
);
}
MI_SORT_PARAM
;
/* Some defines used by isam-funktions */
#define USE_WHOLE_KEY MI_MAX_KEY_BUFF*2
/* Use whole key in _mi_search() */
...
...
@@ -658,6 +692,9 @@ int thr_write_keys(MI_SORT_PARAM *sort_param);
pthread_handler_decl
(
thr_find_all_keys
,
arg
);
#endif
int
sort_write_record
(
MI_SORT_PARAM
*
sort_param
);
int
_create_index_by_sort
(
MI_SORT_PARAM
*
info
,
my_bool
no_messages
,
ulong
);
#ifdef __cplusplus
}
#endif
...
...
myisam/sort.c
View file @
625b57b5
...
...
@@ -39,25 +39,10 @@
#define MYF_RW MYF(MY_NABP | MY_WME | MY_WAIT_IF_FULL)
#define DISK_BUFFER_SIZE (IO_SIZE*16)
typedef
struct
st_buffpek
{
my_off_t
file_pos
;
/* Where we are in the sort file */
uchar
*
base
,
*
key
;
/* Key pointers */
ha_rows
count
;
/* Number of rows in table */
ulong
mem_count
;
/* numbers of keys in memory */
ulong
max_keys
;
/* Max keys in buffert */
}
BUFFPEK
;
/*
Pointers of functions for store and read keys from temp file
*/
typedef
struct
st_key_store
{
NEAR
int
(
*
write_keys
)(
struct
st_mi_sort_param
*
,
register
uchar
**
,
uint
,
struct
st_buffpek
*
,
IO_CACHE
*
);
NEAR
uint
(
*
read_to_buffer
)(
IO_CACHE
*
,
struct
st_buffpek
*
,
uint
);
NEAR
int
(
*
write_key
)(
struct
st_mi_sort_param
*
,
IO_CACHE
*
,
char
*
,
uint
,
uint
);
}
KEY_STORE
;
extern
void
print_error
_VARARGS
((
const
char
*
fmt
,...));
...
...
@@ -67,8 +52,7 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info,uint keys,
uchar
**
sort_keys
,
DYNAMIC_ARRAY
*
buffpek
,
int
*
maxbuffer
,
IO_CACHE
*
tempfile
,
IO_CACHE
*
tempfile_for_exceptions
,
KEY_STORE
*
key_store
);
IO_CACHE
*
tempfile_for_exceptions
);
static
int
NEAR_F
write_keys
(
MI_SORT_PARAM
*
info
,
uchar
**
sort_keys
,
uint
count
,
BUFFPEK
*
buffpek
,
IO_CACHE
*
tempfile
);
static
int
NEAR_F
write_key
(
MI_SORT_PARAM
*
info
,
uchar
*
key
,
...
...
@@ -78,16 +62,15 @@ static int NEAR_F write_index(MI_SORT_PARAM *info,uchar * *sort_keys,
static
int
NEAR_F
merge_many_buff
(
MI_SORT_PARAM
*
info
,
uint
keys
,
uchar
*
*
sort_keys
,
BUFFPEK
*
buffpek
,
int
*
maxbuffer
,
IO_CACHE
*
t_file
,
KEY_STORE
*
key_store
);
IO_CACHE
*
t_file
);
static
uint
NEAR_F
read_to_buffer
(
IO_CACHE
*
fromfile
,
BUFFPEK
*
buffpek
,
uint
sort_length
);
static
int
NEAR_F
merge_buffers
(
MI_SORT_PARAM
*
info
,
uint
keys
,
IO_CACHE
*
from_file
,
IO_CACHE
*
to_file
,
uchar
*
*
sort_keys
,
BUFFPEK
*
lastbuff
,
BUFFPEK
*
Fb
,
BUFFPEK
*
Tb
,
KEY_STORE
*
key_store
);
BUFFPEK
*
Fb
,
BUFFPEK
*
Tb
);
static
int
NEAR_F
merge_index
(
MI_SORT_PARAM
*
,
uint
,
uchar
**
,
BUFFPEK
*
,
int
,
IO_CACHE
*
,
KEY_STORE
*
);
IO_CACHE
*
);
static
int
NEAR_F
write_keys_varlen
(
MI_SORT_PARAM
*
info
,
uchar
**
sort_keys
,
uint
count
,
BUFFPEK
*
buffpek
,
IO_CACHE
*
tempfile
);
...
...
@@ -97,7 +80,7 @@ static int NEAR_F write_merge_key(MI_SORT_PARAM *info, IO_CACHE *to_file,char* k
uint
sort_length
,
uint
count
)
;
static
int
NEAR_F
write_merge_key_varlen
(
MI_SORT_PARAM
*
info
,
IO_CACHE
*
to_file
,
char
*
key
,
uint
sort_length
,
uint
count
);
inline
int
my_var_write
(
MI_SORT_PARAM
*
info
,
IO_CACHE
*
to_file
,
char
*
bufs
);
/*
Creates a index of sorted keys
...
...
@@ -121,22 +104,20 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
ha_rows
records
;
uchar
**
sort_keys
;
IO_CACHE
tempfile
,
tempfile_for_exceptions
;
KEY_STORE
key_store
;
DBUG_ENTER
(
"_create_index_by_sort"
);
DBUG_PRINT
(
"enter"
,(
"sort_length: %d"
,
info
->
key_length
));
if
((
info
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_TEXT
)
||
(
info
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_VARTEXT
))
if
(
info
->
keyinfo
->
flag
&&
HA_VAR_LENGTH_KEY
)
{
key_store
.
write_keys
=
write_keys_varlen
;
key_store
.
read_to_buffer
=
read_to_buffer_varlen
;
key_store
.
write_key
=
write_merge_key_varlen
;
info
->
write_keys
=
write_keys_varlen
;
info
->
read_to_buffer
=
read_to_buffer_varlen
;
info
->
write_key
=
write_merge_key_varlen
;
}
else
{
key_store
.
write_keys
=
write_keys
;
key_store
.
read_to_buffer
=
read_to_buffer
;
key_store
.
write_key
=
write_merge_key
;
info
->
write_keys
=
write_keys
;
info
->
read_to_buffer
=
read_to_buffer
;
info
->
write_key
=
write_merge_key
;
}
my_b_clear
(
&
tempfile
);
...
...
@@ -194,7 +175,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
printf
(
" - Searching for keys, allocating buffer for %d keys
\n
"
,
keys
);
if
((
records
=
find_all_keys
(
info
,
keys
,
sort_keys
,
&
buffpek
,
&
maxbuffer
,
&
tempfile
,
&
tempfile_for_exceptions
,
&
key_store
))
&
tempfile
,
&
tempfile_for_exceptions
))
==
HA_POS_ERROR
)
goto
err
;
/* purecov: tested */
if
(
maxbuffer
==
0
)
...
...
@@ -212,7 +193,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
if
(
!
no_messages
)
printf
(
" - Merging %lu keys
\n
"
,
records
);
/* purecov: tested */
if
(
merge_many_buff
(
info
,
keys
,
sort_keys
,
dynamic_element
(
&
buffpek
,
0
,
BUFFPEK
*
),
&
maxbuffer
,
&
tempfile
,
&
key_store
))
dynamic_element
(
&
buffpek
,
0
,
BUFFPEK
*
),
&
maxbuffer
,
&
tempfile
))
goto
err
;
/* purecov: inspected */
}
if
(
flush_io_cache
(
&
tempfile
)
||
...
...
@@ -221,7 +202,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
if
(
!
no_messages
)
puts
(
" - Last merge and dumping keys
\n
"
);
/* purecov: tested */
if
(
merge_index
(
info
,
keys
,
sort_keys
,
dynamic_element
(
&
buffpek
,
0
,
BUFFPEK
*
),
maxbuffer
,
&
tempfile
,
&
key_store
))
maxbuffer
,
&
tempfile
))
goto
err
;
/* purecov: inspected */
}
...
...
@@ -266,8 +247,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
static
ha_rows
NEAR_F
find_all_keys
(
MI_SORT_PARAM
*
info
,
uint
keys
,
uchar
**
sort_keys
,
DYNAMIC_ARRAY
*
buffpek
,
int
*
maxbuffer
,
IO_CACHE
*
tempfile
,
IO_CACHE
*
tempfile_for_exceptions
,
KEY_STORE
*
key_store
)
IO_CACHE
*
tempfile_for_exceptions
)
{
int
error
;
uint
idx
;
...
...
@@ -287,7 +267,7 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys,
if
(
++
idx
==
keys
)
{
if
(
key_store
->
write_keys
(
info
,
sort_keys
,
idx
-
1
,(
BUFFPEK
*
)
alloc_dynamic
(
buffpek
),
if
(
info
->
write_keys
(
info
,
sort_keys
,
idx
-
1
,(
BUFFPEK
*
)
alloc_dynamic
(
buffpek
),
tempfile
))
DBUG_RETURN
(
HA_POS_ERROR
);
/* purecov: inspected */
...
...
@@ -301,7 +281,7 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys,
DBUG_RETURN
(
HA_POS_ERROR
);
/* Aborted by get_key */
/* purecov: inspected */
if
(
buffpek
->
elements
)
{
if
(
key_store
->
write_keys
(
info
,
sort_keys
,
idx
,(
BUFFPEK
*
)
alloc_dynamic
(
buffpek
),
if
(
info
->
write_keys
(
info
,
sort_keys
,
idx
,(
BUFFPEK
*
)
alloc_dynamic
(
buffpek
),
tempfile
))
DBUG_RETURN
(
HA_POS_ERROR
);
/* purecov: inspected */
*
maxbuffer
=
buffpek
->
elements
-
1
;
...
...
@@ -322,7 +302,6 @@ pthread_handler_decl(thr_find_all_keys,arg)
uint
memavl
,
old_memavl
,
keys
,
sort_length
;
uint
idx
,
maxbuffer
;
uchar
**
sort_keys
=
0
;
KEY_STORE
key_store
;
error
=
1
;
...
...
@@ -331,18 +310,17 @@ pthread_handler_decl(thr_find_all_keys,arg)
if
(
info
->
sort_info
->
got_error
)
goto
err
;
if
((
info
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_TEXT
)
||
(
info
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_VARTEXT
))
if
(
info
->
keyinfo
->
flag
&&
HA_VAR_LENGTH_KEY
)
{
key_store
.
write_keys
=
write_keys_varlen
;
key_store
.
read_to_buffer
=
read_to_buffer_varlen
;
key_store
.
write_key
=
write_merge_key_varlen
;
info
->
write_keys
=
write_keys_varlen
;
info
->
read_to_buffer
=
read_to_buffer_varlen
;
info
->
write_key
=
write_merge_key_varlen
;
}
else
{
key_store
.
write_keys
=
write_keys
;
key_store
.
read_to_buffer
=
read_to_buffer
;
key_store
.
write_key
=
write_merge_key
;
info
->
write_keys
=
write_keys
;
info
->
read_to_buffer
=
read_to_buffer
;
info
->
write_key
=
write_merge_key
;
}
my_b_clear
(
&
info
->
tempfile
);
...
...
@@ -418,7 +396,7 @@ pthread_handler_decl(thr_find_all_keys,arg)
if
(
++
idx
==
keys
)
{
if
(
key_store
.
write_keys
(
info
,
sort_keys
,
idx
-
1
,
if
(
info
->
write_keys
(
info
,
sort_keys
,
idx
-
1
,
(
BUFFPEK
*
)
alloc_dynamic
(
&
info
->
buffpek
),
&
info
->
tempfile
))
goto
err
;
...
...
@@ -432,7 +410,7 @@ pthread_handler_decl(thr_find_all_keys,arg)
goto
err
;
if
(
info
->
buffpek
.
elements
)
{
if
(
key_store
.
write_keys
(
info
,
sort_keys
,
idx
,
if
(
info
->
write_keys
(
info
,
sort_keys
,
idx
,
(
BUFFPEK
*
)
alloc_dynamic
(
&
info
->
buffpek
),
&
info
->
tempfile
))
goto
err
;
info
->
keys
=
(
info
->
buffpek
.
elements
-
1
)
*
(
keys
-
1
)
+
idx
;
...
...
@@ -474,7 +452,6 @@ int thr_write_keys(MI_SORT_PARAM *sort_param)
MI_INFO
*
info
=
sort_info
->
info
;
MYISAM_SHARE
*
share
=
info
->
s
;
MI_SORT_PARAM
*
sinfo
;
KEY_STORE
key_store
;
byte
*
mergebuf
=
0
;
LINT_INIT
(
length
);
...
...
@@ -518,18 +495,17 @@ int thr_write_keys(MI_SORT_PARAM *sort_param)
{
if
(
got_error
)
continue
;
if
((
sinfo
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_TEXT
)
||
(
sinfo
->
keyinfo
->
seg
->
type
==
HA_KEYTYPE_VARTEXT
))
if
(
sinfo
->
keyinfo
->
flag
&&
HA_VAR_LENGTH_KEY
)
{
key_store
.
write_keys
=
write_keys_varlen
;
key_store
.
read_to_buffer
=
read_to_buffer_varlen
;
key_store
.
write_key
=
write_merge_key_varlen
;
sinfo
->
write_keys
=
write_keys_varlen
;
sinfo
->
read_to_buffer
=
read_to_buffer_varlen
;
sinfo
->
write_key
=
write_merge_key_varlen
;
}
else
{
key_store
.
write_keys
=
write_keys
;
key_store
.
read_to_buffer
=
read_to_buffer
;
key_store
.
write_key
=
write_merge_key
;
sinfo
->
write_keys
=
write_keys
;
sinfo
->
read_to_buffer
=
read_to_buffer
;
sinfo
->
write_key
=
write_merge_key
;
}
if
(
sinfo
->
buffpek
.
elements
)
{
...
...
@@ -555,7 +531,7 @@ int thr_write_keys(MI_SORT_PARAM *sort_param)
printf
(
"Key %d - Merging %u keys
\n
"
,
sinfo
->
key
+
1
,
sinfo
->
keys
);
if
(
merge_many_buff
(
sinfo
,
keys
,
(
uchar
**
)
mergebuf
,
dynamic_element
(
&
sinfo
->
buffpek
,
0
,
BUFFPEK
*
),
&
maxbuffer
,
&
sinfo
->
tempfile
,
&
key_store
))
&
maxbuffer
,
&
sinfo
->
tempfile
))
{
got_error
=
1
;
continue
;
...
...
@@ -571,7 +547,7 @@ int thr_write_keys(MI_SORT_PARAM *sort_param)
printf
(
"Key %d - Last merge and dumping keys
\n
"
,
sinfo
->
key
+
1
);
if
(
merge_index
(
sinfo
,
keys
,
(
uchar
**
)
mergebuf
,
dynamic_element
(
&
sinfo
->
buffpek
,
0
,
BUFFPEK
*
),
maxbuffer
,
&
sinfo
->
tempfile
,
&
key_store
)
||
maxbuffer
,
&
sinfo
->
tempfile
)
||
flush_pending_blocks
(
sinfo
))
{
got_error
=
1
;
...
...
@@ -635,10 +611,24 @@ static int NEAR_F write_keys(MI_SORT_PARAM *info, register uchar **sort_keys,
DBUG_RETURN
(
0
);
}
/* write_keys */
inline
int
my_var_write
(
MI_SORT_PARAM
*
info
,
IO_CACHE
*
to_file
,
char
*
bufs
)
{
int
err
;
uint16
len
=
_mi_keylength
(
info
->
keyinfo
,
bufs
);
if
(
err
=
my_b_write
(
to_file
,(
byte
*
)
&
len
,
sizeof
(
len
)))
return
(
err
);
if
(
err
=
my_b_write
(
to_file
,(
byte
*
)
bufs
,(
uint
)
len
))
return
(
err
);
return
(
0
);
}
static
int
NEAR_F
write_keys_varlen
(
MI_SORT_PARAM
*
info
,
register
uchar
**
sort_keys
,
uint
count
,
BUFFPEK
*
buffpek
,
IO_CACHE
*
tempfile
)
{
uchar
**
end
;
int
err
;
DBUG_ENTER
(
"write_keys_varlen"
);
qsort2
((
byte
*
)
sort_keys
,
count
,
sizeof
(
byte
*
),(
qsort2_cmp
)
info
->
key_cmp
,
...
...
@@ -652,11 +642,8 @@ static int NEAR_F write_keys_varlen(MI_SORT_PARAM *info, register uchar **sort_k
buffpek
->
count
=
count
;
for
(
end
=
sort_keys
+
count
;
sort_keys
!=
end
;
sort_keys
++
)
{
uint16
len
=
_mi_keylength
(
info
->
keyinfo
,
*
sort_keys
);
if
(
my_b_write
(
tempfile
,(
byte
*
)
&
len
,
sizeof
(
len
)))
DBUG_RETURN
(
1
);
if
(
my_b_write
(
tempfile
,(
byte
*
)
*
sort_keys
,(
uint
)
len
))
DBUG_RETURN
(
1
);
if
(
err
=
my_var_write
(
info
,
tempfile
,
*
sort_keys
))
DBUG_RETURN
(
err
);
}
DBUG_RETURN
(
0
);
}
/* write_keys_varlen */
...
...
@@ -702,8 +689,7 @@ static int NEAR_F write_index(MI_SORT_PARAM *info, register uchar **sort_keys,
static
int
NEAR_F
merge_many_buff
(
MI_SORT_PARAM
*
info
,
uint
keys
,
uchar
**
sort_keys
,
BUFFPEK
*
buffpek
,
int
*
maxbuffer
,
IO_CACHE
*
t_file
,
KEY_STORE
*
key_store
)
int
*
maxbuffer
,
IO_CACHE
*
t_file
)
{
register
int
i
;
IO_CACHE
t_file2
,
*
from_file
,
*
to_file
,
*
temp
;
...
...
@@ -726,11 +712,11 @@ static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys,
for
(
i
=
0
;
i
<=
*
maxbuffer
-
MERGEBUFF
*
3
/
2
;
i
+=
MERGEBUFF
)
{
if
(
merge_buffers
(
info
,
keys
,
from_file
,
to_file
,
sort_keys
,
lastbuff
++
,
buffpek
+
i
,
buffpek
+
i
+
MERGEBUFF
-
1
,
key_store
))
buffpek
+
i
,
buffpek
+
i
+
MERGEBUFF
-
1
))
break
;
/* purecov: inspected */
}
if
(
merge_buffers
(
info
,
keys
,
from_file
,
to_file
,
sort_keys
,
lastbuff
++
,
buffpek
+
i
,
buffpek
+
*
maxbuffer
,
key_store
))
buffpek
+
i
,
buffpek
+
*
maxbuffer
))
break
;
/* purecov: inspected */
if
(
flush_io_cache
(
to_file
))
break
;
/* purecov: inspected */
...
...
@@ -813,16 +799,13 @@ static int NEAR_F write_merge_key_varlen(MI_SORT_PARAM *info, IO_CACHE *to_file,
uint
sort_length
,
uint
count
)
{
uint
idx
;
int
err
;
u
char
*
bufs
=
key
;
char
*
bufs
=
key
;
for
(
idx
=
1
;
idx
<=
count
;
idx
++
)
{
uint16
len
=
_mi_keylength
(
info
->
keyinfo
,
bufs
);
if
(
err
=
my_b_write
(
to_file
,(
byte
*
)
&
len
,
sizeof
(
len
)))
return
(
err
);
if
(
err
=
my_b_write
(
to_file
,(
byte
*
)
bufs
,(
uint
)
len
))
return
(
err
);
int
err
;
if
(
err
=
my_var_write
(
info
,
to_file
,
bufs
))
return
(
err
);
bufs
=
bufs
+
sort_length
;
}
return
(
0
);
...
...
@@ -842,7 +825,7 @@ static int NEAR_F write_merge_key(MI_SORT_PARAM *info, IO_CACHE *to_file,char* k
static
int
NEAR_F
merge_buffers
(
MI_SORT_PARAM
*
info
,
uint
keys
,
IO_CACHE
*
from_file
,
IO_CACHE
*
to_file
,
uchar
**
sort_keys
,
BUFFPEK
*
lastbuff
,
BUFFPEK
*
Fb
,
BUFFPEK
*
Tb
,
KEY_STORE
*
key_store
)
BUFFPEK
*
Fb
,
BUFFPEK
*
Tb
)
{
int
error
;
uint
sort_length
,
maxcount
;
...
...
@@ -872,7 +855,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
count
+=
buffpek
->
count
;
buffpek
->
base
=
strpos
;
buffpek
->
max_keys
=
maxcount
;
strpos
+=
(
uint
)
(
error
=
(
int
)
key_store
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
));
strpos
+=
(
uint
)
(
error
=
(
int
)
info
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
));
if
(
error
==
-
1
)
goto
err
;
/* purecov: inspected */
queue_insert
(
&
queue
,(
char
*
)
buffpek
);
...
...
@@ -889,7 +872,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
buffpek
=
(
BUFFPEK
*
)
queue_top
(
&
queue
);
if
(
to_file
)
{
if
(
key_store
->
write_key
(
info
,
to_file
,(
byte
*
)
buffpek
->
key
,(
uint
)
sort_length
,
1
))
if
(
info
->
write_key
(
info
,
to_file
,(
byte
*
)
buffpek
->
key
,(
uint
)
sort_length
,
1
))
{
error
=
1
;
goto
err
;
/* purecov: inspected */
}
...
...
@@ -904,7 +887,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
buffpek
->
key
+=
sort_length
;
if
(
!
--
buffpek
->
mem_count
)
{
if
(
!
(
error
=
(
int
)
key_store
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
)))
if
(
!
(
error
=
(
int
)
info
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
)))
{
uchar
*
base
=
buffpek
->
base
;
uint
max_keys
=
buffpek
->
max_keys
;
...
...
@@ -944,7 +927,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
{
if
(
to_file
)
{
if
(
key_store
->
write_key
(
info
,
to_file
,(
byte
*
)
buffpek
->
key
,
if
(
info
->
write_key
(
info
,
to_file
,(
byte
*
)
buffpek
->
key
,
sort_length
,
buffpek
->
mem_count
))
{
error
=
1
;
goto
err
;
/* purecov: inspected */
...
...
@@ -965,7 +948,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
}
}
}
while
((
error
=
(
int
)
key_store
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
))
!=
-
1
&&
while
((
error
=
(
int
)
info
->
read_to_buffer
(
from_file
,
buffpek
,
sort_length
))
!=
-
1
&&
error
!=
0
);
lastbuff
->
count
=
count
;
...
...
@@ -981,11 +964,11 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
static
int
NEAR_F
merge_index
(
MI_SORT_PARAM
*
info
,
uint
keys
,
uchar
**
sort_keys
,
BUFFPEK
*
buffpek
,
int
maxbuffer
,
IO_CACHE
*
tempfile
,
KEY_STORE
*
key_store
)
BUFFPEK
*
buffpek
,
int
maxbuffer
,
IO_CACHE
*
tempfile
)
{
DBUG_ENTER
(
"merge_index"
);
if
(
merge_buffers
(
info
,
keys
,
tempfile
,(
IO_CACHE
*
)
0
,
sort_keys
,
buffpek
,
buffpek
,
buffpek
+
maxbuffer
,
key_store
))
buffpek
+
maxbuffer
))
DBUG_RETURN
(
1
);
/* purecov: inspected */
DBUG_RETURN
(
0
);
}
/* merge_index */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment