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
5b570777
Commit
5b570777
authored
Nov 25, 2002
by
serg@serg.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
myisammrg::index_next_same
parent
1c8e36d5
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
79 additions
and
18 deletions
+79
-18
include/myisammrg.h
include/myisammrg.h
+1
-0
myisam/mi_rkey.c
myisam/mi_rkey.c
+9
-8
myisam/mi_rrnd.c
myisam/mi_rrnd.c
+4
-1
myisam/myisamdef.h
myisam/myisamdef.h
+5
-1
myisammrg/Makefile.am
myisammrg/Makefile.am
+2
-1
myisammrg/myrg_rkey.c
myisammrg/myrg_rkey.c
+2
-2
myisammrg/myrg_rnext_same.c
myisammrg/myrg_rnext_same.c
+40
-0
sql/ha_myisammrg.cc
sql/ha_myisammrg.cc
+10
-0
sql/ha_myisammrg.h
sql/ha_myisammrg.h
+6
-5
No files found.
include/myisammrg.h
View file @
5b570777
...
@@ -84,6 +84,7 @@ extern int myrg_rfirst(MYRG_INFO *file,byte *buf,int inx);
...
@@ -84,6 +84,7 @@ extern int myrg_rfirst(MYRG_INFO *file,byte *buf,int inx);
extern
int
myrg_rlast
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rlast
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rnext
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rnext
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rprev
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rprev
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
);
extern
int
myrg_rnext_same
(
MYRG_INFO
*
file
,
byte
*
buf
);
extern
int
myrg_rkey
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
,
const
byte
*
key
,
extern
int
myrg_rkey
(
MYRG_INFO
*
file
,
byte
*
buf
,
int
inx
,
const
byte
*
key
,
uint
key_len
,
enum
ha_rkey_function
search_flag
);
uint
key_len
,
enum
ha_rkey_function
search_flag
);
extern
int
myrg_rrnd
(
MYRG_INFO
*
file
,
byte
*
buf
,
ulonglong
pos
);
extern
int
myrg_rrnd
(
MYRG_INFO
*
file
,
byte
*
buf
,
ulonglong
pos
);
...
...
myisam/mi_rkey.c
View file @
5b570777
...
@@ -38,7 +38,15 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
...
@@ -38,7 +38,15 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
info
->
update
&=
(
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
);
info
->
update
&=
(
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
);
info
->
last_key_func
=
search_flag
;
info
->
last_key_func
=
search_flag
;
if
(
!
info
->
use_packed_key
)
if
(
info
->
once_flags
&
USE_PACKED_KEYS
)
{
/* key is already packed! */
key_buff
=
info
->
lastkey
+
info
->
s
->
base
.
max_key_length
;
info
->
last_rkey_length
=
pack_key_length
=
key_len
;
bmove
(
key_buff
,
key
,
key_len
);
info
->
once_flags
&=
~
USE_PACKED_KEYS
;
}
else
{
{
if
(
key_len
==
0
)
if
(
key_len
==
0
)
key_len
=
USE_WHOLE_KEY
;
key_len
=
USE_WHOLE_KEY
;
...
@@ -48,13 +56,6 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
...
@@ -48,13 +56,6 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
DBUG_EXECUTE
(
"key"
,
_mi_print_key
(
DBUG_FILE
,
share
->
keyinfo
[
inx
].
seg
,
DBUG_EXECUTE
(
"key"
,
_mi_print_key
(
DBUG_FILE
,
share
->
keyinfo
[
inx
].
seg
,
key_buff
,
pack_key_length
););
key_buff
,
pack_key_length
););
}
}
else
{
/* key is already packed! */
key_buff
=
info
->
lastkey
+
info
->
s
->
base
.
max_key_length
;
info
->
last_rkey_length
=
pack_key_length
=
key_len
;
bmove
(
key_buff
,
key
,
key_len
);
}
if
(
fast_mi_readinfo
(
info
))
if
(
fast_mi_readinfo
(
info
))
goto
err
;
goto
err
;
...
...
myisam/mi_rrnd.c
View file @
5b570777
...
@@ -46,7 +46,10 @@ int mi_rrnd(MI_INFO *info, byte *buf, register my_off_t filepos)
...
@@ -46,7 +46,10 @@ int mi_rrnd(MI_INFO *info, byte *buf, register my_off_t filepos)
filepos
=
info
->
nextpos
;
filepos
=
info
->
nextpos
;
}
}
info
->
lastinx
=
-
1
;
/* Can't forward or backward */
if
(
info
->
once_flags
&
RRND_PRESERVE_LASTINX
)
info
->
once_flags
&=
~
RRND_PRESERVE_LASTINX
;
else
info
->
lastinx
=
-
1
;
/* Can't forward or backward */
/* Init all but update-flag */
/* Init all but update-flag */
info
->
update
&=
(
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
);
info
->
update
&=
(
HA_STATE_CHANGED
|
HA_STATE_ROW_CHANGED
);
...
...
myisam/myisamdef.h
View file @
5b570777
...
@@ -267,7 +267,7 @@ struct st_myisam_info {
...
@@ -267,7 +267,7 @@ struct st_myisam_info {
my_bool
quick_mode
;
my_bool
quick_mode
;
my_bool
page_changed
;
/* If info->buff can't be used for rnext */
my_bool
page_changed
;
/* If info->buff can't be used for rnext */
my_bool
buff_used
;
/* If info->buff has to be reread for rnext */
my_bool
buff_used
;
/* If info->buff has to be reread for rnext */
my_bool
use_packed_key
;
/* For MYISAMMRG */
my_bool
once_flags
;
/* For MYISAMMRG */
#ifdef THREAD
#ifdef THREAD
THR_LOCK_DATA
lock
;
THR_LOCK_DATA
lock
;
#endif
#endif
...
@@ -288,6 +288,10 @@ struct st_myisam_info {
...
@@ -288,6 +288,10 @@ struct st_myisam_info {
#define WRITEINFO_UPDATE_KEYFILE 1
#define WRITEINFO_UPDATE_KEYFILE 1
#define WRITEINFO_NO_UNLOCK 2
#define WRITEINFO_NO_UNLOCK 2
/* once_flags */
#define USE_PACKED_KEYS 1
#define RRND_PRESERVE_LASTINX 2
/* bits in state.changed */
/* bits in state.changed */
#define STATE_CHANGED 1
#define STATE_CHANGED 1
...
...
myisammrg/Makefile.am
View file @
5b570777
...
@@ -21,7 +21,8 @@ libmyisammrg_a_SOURCES = myrg_open.c myrg_extra.c myrg_info.c myrg_locking.c \
...
@@ -21,7 +21,8 @@ libmyisammrg_a_SOURCES = myrg_open.c myrg_extra.c myrg_info.c myrg_locking.c \
myrg_rrnd.c myrg_update.c myrg_delete.c myrg_rsame.c
\
myrg_rrnd.c myrg_update.c myrg_delete.c myrg_rsame.c
\
myrg_panic.c myrg_close.c myrg_create.c myrg_static.c
\
myrg_panic.c myrg_close.c myrg_create.c myrg_static.c
\
myrg_rkey.c myrg_rfirst.c myrg_rlast.c myrg_rnext.c
\
myrg_rkey.c myrg_rfirst.c myrg_rlast.c myrg_rnext.c
\
myrg_rprev.c myrg_queue.c myrg_write.c myrg_range.c
myrg_rprev.c myrg_queue.c myrg_write.c myrg_range.c
\
myrg_rnext_same.c
# Don't update the files from bitkeeper
# Don't update the files from bitkeeper
%
::
SCCS/s.%
%
::
SCCS/s.%
myisammrg/myrg_rkey.c
View file @
5b570777
...
@@ -62,9 +62,8 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
...
@@ -62,9 +62,8 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
}
}
else
else
{
{
mi
->
use_packed_key
=
1
;
mi
->
once_flags
|=
USE_PACKED_KEYS
;
err
=
mi_rkey
(
mi
,
0
,
inx
,
key_buff
,
pack_key_length
,
search_flag
);
err
=
mi_rkey
(
mi
,
0
,
inx
,
key_buff
,
pack_key_length
,
search_flag
);
mi
->
use_packed_key
=
0
;
}
}
info
->
last_used_table
=
table
+
1
;
info
->
last_used_table
=
table
+
1
;
...
@@ -83,5 +82,6 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
...
@@ -83,5 +82,6 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
return
HA_ERR_KEY_NOT_FOUND
;
return
HA_ERR_KEY_NOT_FOUND
;
mi
=
(
info
->
current_table
=
(
MYRG_TABLE
*
)
queue_top
(
&
(
info
->
by_key
)))
->
table
;
mi
=
(
info
->
current_table
=
(
MYRG_TABLE
*
)
queue_top
(
&
(
info
->
by_key
)))
->
table
;
mi
->
once_flags
|=
RRND_PRESERVE_LASTINX
;
return
mi_rrnd
(
mi
,
record
,
mi
->
lastpos
);
return
mi_rrnd
(
mi
,
record
,
mi
->
lastpos
);
}
}
myisammrg/myrg_rnext_same.c
0 → 100644
View file @
5b570777
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "myrg_def.h"
int
myrg_rnext_same
(
MYRG_INFO
*
info
,
byte
*
buf
)
{
uint
err
;
MI_INFO
*
mi
;
if
(
!
info
->
current_table
)
return
(
HA_ERR_KEY_NOT_FOUND
);
err
=
mi_rnext_same
(
info
->
current_table
->
table
,
buf
);
if
(
err
==
HA_ERR_END_OF_FILE
)
{
queue_remove
(
&
(
info
->
by_key
),
0
);
if
(
!
info
->
by_key
.
elements
)
return
HA_ERR_END_OF_FILE
;
mi
=
(
info
->
current_table
=
(
MYRG_TABLE
*
)
queue_top
(
&
(
info
->
by_key
)))
->
table
;
mi
->
once_flags
|=
RRND_PRESERVE_LASTINX
;
return
mi_rrnd
(
mi
,
buf
,
mi
->
lastpos
);
}
return
err
;
}
sql/ha_myisammrg.cc
View file @
5b570777
...
@@ -160,6 +160,16 @@ int ha_myisammrg::index_last(byte * buf)
...
@@ -160,6 +160,16 @@ int ha_myisammrg::index_last(byte * buf)
return
error
;
return
error
;
}
}
int
ha_myisammrg
::
index_next_same
(
byte
*
buf
,
const
byte
*
key
__attribute__
((
unused
)),
uint
length
__attribute__
((
unused
)))
{
statistic_increment
(
ha_read_next_count
,
&
LOCK_status
);
int
error
=
myrg_rnext_same
(
file
,
buf
);
table
->
status
=
error
?
STATUS_NOT_FOUND
:
0
;
return
error
;
}
int
ha_myisammrg
::
rnd_init
(
bool
scan
)
int
ha_myisammrg
::
rnd_init
(
bool
scan
)
{
{
return
myrg_extra
(
file
,
HA_EXTRA_RESET
,
0
);
return
myrg_extra
(
file
,
HA_EXTRA_RESET
,
0
);
...
...
sql/ha_myisammrg.h
View file @
5b570777
...
@@ -65,15 +65,16 @@ class ha_myisammrg: public handler
...
@@ -65,15 +65,16 @@ class ha_myisammrg: public handler
int
index_prev
(
byte
*
buf
);
int
index_prev
(
byte
*
buf
);
int
index_first
(
byte
*
buf
);
int
index_first
(
byte
*
buf
);
int
index_last
(
byte
*
buf
);
int
index_last
(
byte
*
buf
);
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
int
rnd_init
(
bool
scan
=
1
);
int
rnd_init
(
bool
scan
=
1
);
int
rnd_next
(
byte
*
buf
);
int
rnd_next
(
byte
*
buf
);
int
rnd_pos
(
byte
*
buf
,
byte
*
pos
);
int
rnd_pos
(
byte
*
buf
,
byte
*
pos
);
void
position
(
const
byte
*
record
);
void
position
(
const
byte
*
record
);
ha_rows
ha_myisammrg
::
records_in_range
(
int
inx
,
ha_rows
records_in_range
(
int
inx
,
const
byte
*
start_key
,
uint
start_key_len
,
const
byte
*
start_key
,
uint
start_key_len
,
enum
ha_rkey_function
start_search_flag
,
enum
ha_rkey_function
start_search_flag
,
const
byte
*
end_key
,
uint
end_key_len
,
const
byte
*
end_key
,
uint
end_key_len
,
enum
ha_rkey_function
end_search_flag
);
enum
ha_rkey_function
end_search_flag
);
my_off_t
row_position
()
{
return
myrg_position
(
file
);
}
my_off_t
row_position
()
{
return
myrg_position
(
file
);
}
void
info
(
uint
);
void
info
(
uint
);
int
extra
(
enum
ha_extra_function
operation
);
int
extra
(
enum
ha_extra_function
operation
);
...
...
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