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
990ebef7
Commit
990ebef7
authored
Apr 15, 2005
by
ingo@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/mydev/mysql-4.1
into mysql.com:/home/mydev/mysql-4.1-bug9188
parents
40a0548a
3add511d
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
10 deletions
+85
-10
myisam/mi_search.c
myisam/mi_search.c
+43
-8
myisam/mi_write.c
myisam/mi_write.c
+24
-2
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+8
-0
mysql-test/t/myisam.test
mysql-test/t/myisam.test
+10
-0
No files found.
myisam/mi_search.c
View file @
990ebef7
...
...
@@ -210,9 +210,31 @@ int _mi_bin_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
}
/* _mi_bin_search */
/* Used instead of _mi_bin_search() when key is packed */
/* Puts smaller or identical key in buff */
/* Key is searched sequentially */
/*
Locate a packed key in a key page.
SYNOPSIS
_mi_seq_search()
info Open table information.
keyinfo Key definition information.
page Key page (beginning).
key Search key.
key_len Length to use from search key or USE_WHOLE_KEY
comp_flag Search flags like SEARCH_SAME etc.
ret_pos RETURN Position in key page behind this key.
buff RETURN Copy of previous or identical unpacked key.
last_key RETURN If key is last in page.
DESCRIPTION
Used instead of _mi_bin_search() when key is packed.
Puts smaller or identical key in buff.
Key is searched sequentially.
RETURN
> 0 Key in 'buff' is smaller than search key.
0 Key in 'buff' is identical to search key.
< 0 Not found.
*/
int
_mi_seq_search
(
MI_INFO
*
info
,
register
MI_KEYDEF
*
keyinfo
,
uchar
*
page
,
uchar
*
key
,
uint
key_len
,
uint
comp_flag
,
uchar
**
ret_pos
,
...
...
@@ -718,7 +740,19 @@ uint _mi_get_static_key(register MI_KEYDEF *keyinfo, uint nod_flag,
}
/* _mi_get_static_key */
/* Key with is packed against previous key or key with a NULL column */
/*
get key witch is packed against previous key or key with a NULL column.
SYNOPSIS
_mi_get_pack_key()
keyinfo key definition information.
nod_flag If nod: Length of node pointer, else zero.
page_pos RETURN position in key page behind this key.
key IN/OUT in: prev key, out: unpacked key.
RETURN
key_length + length of data pointer
*/
uint
_mi_get_pack_key
(
register
MI_KEYDEF
*
keyinfo
,
uint
nod_flag
,
register
uchar
**
page_pos
,
register
uchar
*
key
)
...
...
@@ -1339,12 +1373,12 @@ _mi_calc_var_key_length(MI_KEYDEF *keyinfo,uint nod_flag,
Keys are compressed the following way:
If the max length of first key segment <= 127
character
s the prefix is
If the max length of first key segment <= 127
byte
s the prefix is
1 byte else it's 2 byte
prefix byte
The high bit is set if this is a prefix for the prev key
prefix byte
(s)
The high bit is set if this is a prefix for the prev key
length Packed length if the previous was a prefix byte
[length]
Length character of data
[length]
data bytes ('length' bytes)
next-key-seg Next key segments
If the first segment can have NULL:
...
...
@@ -1537,7 +1571,8 @@ _mi_calc_var_pack_key_length(MI_KEYDEF *keyinfo,uint nod_flag,uchar *next_key,
s_temp
->
part_of_prev_key
=
new_ref_length
;
s_temp
->
prev_length
=
org_key_length
-
(
new_ref_length
-
pack_marker
);
s_temp
->
n_ref_length
=
s_temp
->
n_length
=
s_temp
->
prev_length
;
s_temp
->
n_ref_length
=
s_temp
->
part_of_prev_key
;
s_temp
->
n_length
=
s_temp
->
prev_length
;
n_length
=
get_pack_length
(
s_temp
->
prev_length
);
s_temp
->
prev_key
+=
(
new_ref_length
-
pack_marker
);
length
+=
s_temp
->
prev_length
+
n_length
;
...
...
myisam/mi_write.c
View file @
990ebef7
...
...
@@ -414,8 +414,30 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
}
/* w_search */
/* Insert new key at right of key_pos */
/* Returns 2 if key contains key to upper level */
/*
Insert new key.
SYNOPSIS
_mi_insert()
info Open table information.
keyinfo Key definition information.
key New key.
anc_buff Key page (beginning).
key_pos Position in key page where to insert.
key_buff Copy of previous key.
father_buff parent key page for balancing.
father_key_pos position in parent key page for balancing.
father_page position of parent key page in file.
insert_last If to append at end of page.
DESCRIPTION
Insert new key at right of key_pos.
RETURN
2 if key contains key to upper level.
0 OK.
< 0 Error.
*/
int
_mi_insert
(
register
MI_INFO
*
info
,
register
MI_KEYDEF
*
keyinfo
,
uchar
*
key
,
uchar
*
anc_buff
,
uchar
*
key_pos
,
uchar
*
key_buff
,
...
...
mysql-test/r/myisam.result
View file @
990ebef7
...
...
@@ -573,3 +573,11 @@ truncate table t1;
ERROR HY000: MyISAM table 't1' is in use (most likely by a MERGE table). Try FLUSH TABLES.
insert into t1 values (1);
drop table t1,t2;
create table t1 (c1 int, c2 varchar(4) not null default '',
key(c2(3))) default charset=utf8;
insert into t1 values (1,'A'), (2, 'B'), (3, 'A');
update t1 set c2='A B' where c1=2;
check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
mysql-test/t/myisam.test
View file @
990ebef7
...
...
@@ -550,3 +550,13 @@ truncate table t1;
insert
into
t1
values
(
1
);
drop
table
t1
,
t2
;
#
# bug9188 - Corruption Can't open file: 'table.MYI' (errno: 145)
#
create
table
t1
(
c1
int
,
c2
varchar
(
4
)
not
null
default
''
,
key
(
c2
(
3
)))
default
charset
=
utf8
;
insert
into
t1
values
(
1
,
'A'
),
(
2
,
'B'
),
(
3
,
'A'
);
update
t1
set
c2
=
'A B'
where
c1
=
2
;
check
table
t1
;
drop
table
t1
;
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