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
ba71026e
Commit
ba71026e
authored
May 09, 2006
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix HA_ERR_RECORD_DELETED for falcon
parent
7b111efc
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 @
ba71026e
...
...
@@ -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 @
ba71026e
...
...
@@ -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