Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
9d0cedff
Commit
9d0cedff
authored
Sep 22, 2006
by
istruewing@chilla.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into chilla.local:/home/mydev/mysql-4.0-bug14400
parents
7d0b042e
bb2a7fec
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
17 deletions
+53
-17
myisam/mi_rkey.c
myisam/mi_rkey.c
+22
-17
mysql-test/r/myisam.result
mysql-test/r/myisam.result
+13
-0
mysql-test/t/myisam.test
mysql-test/t/myisam.test
+18
-0
No files found.
myisam/mi_rkey.c
View file @
9d0cedff
...
...
@@ -78,24 +78,17 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
if
(
!
_mi_search
(
info
,
keyinfo
,
key_buff
,
use_key_length
,
myisam_read_vec
[
search_flag
],
info
->
s
->
state
.
key_root
[
inx
]))
{
if
(
info
->
lastpos
>=
info
->
state
->
data_file_length
)
{
do
{
uint
not_used
;
/*
If we are searching for an exact key, abort if we find a bigger
key.
If we searching for a partial key (or using >, >=, < or <=) and
the data is outside of the data file, we need to continue searching
for the first key inside the data file
*/
if
(
search_flag
==
HA_READ_KEY_EXACT
&&
(
use_key_length
==
USE_WHOLE_KEY
||
_mi_key_cmp
(
keyinfo
->
seg
,
key_buff
,
info
->
lastkey
,
use_key_length
,
SEARCH_FIND
,
&
not_used
)))
if
(
info
->
lastpos
>=
info
->
state
->
data_file_length
&&
(
search_flag
!=
HA_READ_KEY_EXACT
||
last_used_keyseg
!=
keyinfo
->
seg
+
keyinfo
->
keysegs
))
do
{
my_errno
=
HA_ERR_END_OF_FILE
;
info
->
lastpos
=
HA_OFFSET_ERROR
;
break
;
}
uint
not_used
;
/*
Skip rows that are inserted by other threads since we got a lock
Note that this can only happen if we are not searching after an
...
...
@@ -107,8 +100,20 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
myisam_readnext_vec
[
search_flag
],
info
->
s
->
state
.
key_root
[
inx
]))
break
;
/*
Check that the found key does still match the search.
_mi_search_next() delivers the next key regardless of its
value.
*/
if
(
search_flag
==
HA_READ_KEY_EXACT
&&
_mi_key_cmp
(
keyinfo
->
seg
,
key_buff
,
info
->
lastkey
,
use_key_length
,
SEARCH_FIND
,
&
not_used
))
{
my_errno
=
HA_ERR_KEY_NOT_FOUND
;
info
->
lastpos
=
HA_OFFSET_ERROR
;
break
;
}
while
(
info
->
lastpos
>=
info
->
state
->
data_file_length
);
}
while
(
info
->
lastpos
>=
info
->
state
->
data_file_length
);
}
}
if
(
share
->
concurrent_insert
)
...
...
mysql-test/r/myisam.result
View file @
9d0cedff
...
...
@@ -487,3 +487,16 @@ a a b
1 1 1
2 2 1
drop table t1,t2;
CREATE TABLE t1 (c1 varchar(250) NOT NULL);
CREATE TABLE t2 (c1 varchar(250) NOT NULL, PRIMARY KEY (c1));
INSERT INTO t1 VALUES ('test000001'), ('test000002'), ('test000003');
INSERT INTO t2 VALUES ('test000002'), ('test000003'), ('test000004');
LOCK TABLES t1 READ LOCAL, t2 READ LOCAL;
SELECT t1.c1 AS t1c1, t2.c1 AS t2c1 FROM t1, t2
WHERE t1.c1 = t2.c1 HAVING t1c1 != t2c1;
t1c1 t2c1
INSERT INTO t2 VALUES ('test000001'), ('test000005');
SELECT t1.c1 AS t1c1, t2.c1 AS t2c1 FROM t1, t2
WHERE t1.c1 = t2.c1 HAVING t1c1 != t2c1;
t1c1 t2c1
DROP TABLE t1,t2;
mysql-test/t/myisam.test
View file @
9d0cedff
...
...
@@ -461,6 +461,7 @@ drop table t1;
#
# Bug #14400 Join could miss concurrently inserted row
#
# Partial key.
create
table
t1
(
a
int
not
null
,
primary
key
(
a
));
create
table
t2
(
a
int
not
null
,
b
int
not
null
,
primary
key
(
a
,
b
));
insert
into
t1
values
(
1
),(
2
),(
3
),(
4
),(
5
),(
6
);
...
...
@@ -473,5 +474,22 @@ disconnect root;
connection
default
;
select
straight_join
*
from
t1
,
t2
force
index
(
primary
)
where
t1
.
a
=
t2
.
a
;
drop
table
t1
,
t2
;
#
# Full key.
CREATE
TABLE
t1
(
c1
varchar
(
250
)
NOT
NULL
);
CREATE
TABLE
t2
(
c1
varchar
(
250
)
NOT
NULL
,
PRIMARY
KEY
(
c1
));
INSERT
INTO
t1
VALUES
(
'test000001'
),
(
'test000002'
),
(
'test000003'
);
INSERT
INTO
t2
VALUES
(
'test000002'
),
(
'test000003'
),
(
'test000004'
);
LOCK
TABLES
t1
READ
LOCAL
,
t2
READ
LOCAL
;
SELECT
t1
.
c1
AS
t1c1
,
t2
.
c1
AS
t2c1
FROM
t1
,
t2
WHERE
t1
.
c1
=
t2
.
c1
HAVING
t1c1
!=
t2c1
;
connect
(
con1
,
localhost
,
root
,,);
connection
con1
;
INSERT
INTO
t2
VALUES
(
'test000001'
),
(
'test000005'
);
disconnect
con1
;
connection
default
;
SELECT
t1
.
c1
AS
t1c1
,
t2
.
c1
AS
t2c1
FROM
t1
,
t2
WHERE
t1
.
c1
=
t2
.
c1
HAVING
t1c1
!=
t2c1
;
DROP
TABLE
t1
,
t2
;
# end of 4.0 tests
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