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
dc6f9ccb
Commit
dc6f9ccb
authored
May 09, 2006
by
serg@sergbook.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix HA_ERR_RECORD_DELETED for falcon
parent
c4f34104
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
86 additions
and
77 deletions
+86
-77
include/my_base.h
include/my_base.h
+1
-1
sql/opt_range.cc
sql/opt_range.cc
+85
-76
No files found.
include/my_base.h
View file @
dc6f9ccb
...
...
@@ -340,7 +340,7 @@ enum ha_base_keytype {
#define HA_ERR_WRONG_COMMAND 131
/* Command not supported */
#define HA_ERR_OLD_FILE 132
/* old databasfile */
#define HA_ERR_NO_ACTIVE_RECORD 133
/* No record read in update() */
#define HA_ERR_RECORD_DELETED 134
/*
Intern error-cod
e */
#define HA_ERR_RECORD_DELETED 134
/*
A record is not ther
e */
#define HA_ERR_RECORD_FILE_FULL 135
/* No more room in file */
#define HA_ERR_INDEX_FILE_FULL 136
/* No more room in file */
#define HA_ERR_END_OF_FILE 137
/* end in next/prev/first/last */
...
...
sql/opt_range.cc
View file @
dc6f9ccb
...
...
@@ -4306,7 +4306,8 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param,
DBUG_EXECUTE
(
"info"
,
print_ror_scans_arr
(
param
->
table
,
"building covering ROR-I"
,
ror_scan_mark
,
ror_scans_end
););
do
{
do
{
/*
Update changed sorting info:
#covered fields,
...
...
@@ -7387,64 +7388,69 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
uint
last_rowid_count
=
0
;
DBUG_ENTER
(
"QUICK_ROR_INTERSECT_SELECT::get_next"
);
/* Get a rowid for first quick and save it as a 'candidate' */
quick
=
quick_it
++
;
if
(
cpk_quick
)
do
{
do
{
/* Get a rowid for first quick and save it as a 'candidate' */
quick
=
quick_it
++
;
if
(
cpk_quick
)
{
do
{
error
=
quick
->
get_next
();
}
while
(
!
error
&&
!
cpk_quick
->
row_in_ranges
());
}
else
error
=
quick
->
get_next
();
}
while
(
!
error
&&
!
cpk_quick
->
row_in_ranges
());
}
else
error
=
quick
->
get_next
();
if
(
error
)
DBUG_RETURN
(
error
);
if
(
error
)
DBUG_RETURN
(
error
);
quick
->
file
->
position
(
quick
->
record
);
memcpy
(
last_rowid
,
quick
->
file
->
ref
,
head
->
file
->
ref_length
);
last_rowid_count
=
1
;
quick
->
file
->
position
(
quick
->
record
);
memcpy
(
last_rowid
,
quick
->
file
->
ref
,
head
->
file
->
ref_length
);
last_rowid_count
=
1
;
while
(
last_rowid_count
<
quick_selects
.
elements
)
{
if
(
!
(
quick
=
quick_it
++
))
while
(
last_rowid_count
<
quick_selects
.
elements
)
{
quick_it
.
rewind
();
quick
=
quick_it
++
;
}
do
{
if
((
error
=
quick
->
get_next
()))
DBUG_RETURN
(
error
);
quick
->
file
->
position
(
quick
->
record
);
cmp
=
head
->
file
->
cmp_ref
(
quick
->
file
->
ref
,
last_rowid
);
}
while
(
cmp
<
0
);
if
(
!
(
quick
=
quick_it
++
))
{
quick_it
.
rewind
();
quick
=
quick_it
++
;
}
/* Ok, current select 'caught up' and returned ref >= cur_ref */
if
(
cmp
>
0
)
{
/* Found a row with ref > cur_ref. Make it a new 'candidate' */
if
(
cpk_quick
)
do
{
if
((
error
=
quick
->
get_next
()))
DBUG_RETURN
(
error
);
quick
->
file
->
position
(
quick
->
record
);
cmp
=
head
->
file
->
cmp_ref
(
quick
->
file
->
ref
,
last_rowid
);
}
while
(
cmp
<
0
);
/* Ok, current select 'caught up' and returned ref >= cur_ref */
if
(
cmp
>
0
)
{
while
(
!
cpk_quick
->
row_in_ranges
())
/* Found a row with ref > cur_ref. Make it a new 'candidate' */
if
(
cpk_quick
)
{
if
((
error
=
quick
->
get_next
()))
DBUG_RETURN
(
error
);
while
(
!
cpk_quick
->
row_in_ranges
())
{
if
((
error
=
quick
->
get_next
()))
DBUG_RETURN
(
error
);
}
}
memcpy
(
last_rowid
,
quick
->
file
->
ref
,
head
->
file
->
ref_length
);
last_rowid_count
=
1
;
}
else
{
/* current 'candidate' row confirmed by this select */
last_rowid_count
++
;
}
memcpy
(
last_rowid
,
quick
->
file
->
ref
,
head
->
file
->
ref_length
);
last_rowid_count
=
1
;
}
else
{
/* current 'candidate' row confirmed by this select */
last_rowid_count
++
;
}
}
/* We get here iff we got the same row ref in all scans. */
if
(
need_to_fetch_row
)
error
=
head
->
file
->
rnd_pos
(
head
->
record
[
0
],
last_rowid
);
/* We get here iff we got the same row ref in all scans. */
if
(
need_to_fetch_row
)
error
=
head
->
file
->
rnd_pos
(
head
->
record
[
0
],
last_rowid
);
}
while
(
error
==
HA_ERR_RECORD_DELETED
);
DBUG_RETURN
(
error
);
}
...
...
@@ -7473,41 +7479,44 @@ int QUICK_ROR_UNION_SELECT::get_next()
do
{
if
(
!
queue
.
elements
)
DBUG_RETURN
(
HA_ERR_END_OF_FILE
);
/* Ok, we have a queue with >= 1 scans */
do
{
if
(
!
queue
.
elements
)
DBUG_RETURN
(
HA_ERR_END_OF_FILE
);
/* Ok, we have a queue with >= 1 scans */
quick
=
(
QUICK_SELECT_I
*
)
queue_top
(
&
queue
);
memcpy
(
cur_rowid
,
quick
->
last_rowid
,
rowid_length
);
quick
=
(
QUICK_SELECT_I
*
)
queue_top
(
&
queue
);
memcpy
(
cur_rowid
,
quick
->
last_rowid
,
rowid_length
);
/* put into queue rowid from the same stream as top element */
if
((
error
=
quick
->
get_next
()))
{
if
(
error
!=
HA_ERR_END_OF_FILE
)
DBUG_RETURN
(
error
);
queue_remove
(
&
queue
,
0
);
}
else
{
quick
->
save_last_pos
();
queue_replaced
(
&
queue
);
}
/* put into queue rowid from the same stream as top element */
if
((
error
=
quick
->
get_next
()))
{
if
(
error
!=
HA_ERR_END_OF_FILE
)
DBUG_RETURN
(
error
);
queue_remove
(
&
queue
,
0
);
}
else
{
quick
->
save_last_pos
();
queue_replaced
(
&
queue
);
}
if
(
!
have_prev_rowid
)
{
/* No rows have been returned yet */
dup_row
=
FALSE
;
have_prev_rowid
=
TRUE
;
}
else
dup_row
=
!
head
->
file
->
cmp_ref
(
cur_rowid
,
prev_rowid
);
}
while
(
dup_row
);
if
(
!
have_prev_rowid
)
{
/* No rows have been returned yet */
dup_row
=
FALSE
;
have_prev_rowid
=
TRUE
;
}
else
dup_row
=
!
head
->
file
->
cmp_ref
(
cur_rowid
,
prev_rowid
);
}
while
(
dup_row
);
tmp
=
cur_rowid
;
cur_rowid
=
prev_rowid
;
prev_rowid
=
tmp
;
tmp
=
cur_rowid
;
cur_rowid
=
prev_rowid
;
prev_rowid
=
tmp
;
error
=
head
->
file
->
rnd_pos
(
quick
->
record
,
prev_rowid
);
error
=
head
->
file
->
rnd_pos
(
quick
->
record
,
prev_rowid
);
}
while
(
error
==
HA_ERR_RECORD_DELETED
);
DBUG_RETURN
(
error
);
}
...
...
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