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
30cab562
Commit
30cab562
authored
Nov 02, 2000
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
a6ee3f07
e735267f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
44 additions
and
74 deletions
+44
-74
myisam/ft_search.c
myisam/ft_search.c
+0
-4
sql/ha_myisam.cc
sql/ha_myisam.cc
+8
-22
sql/ha_myisam.h
sql/ha_myisam.h
+3
-2
sql/handler.h
sql/handler.h
+3
-3
sql/item_func.cc
sql/item_func.cc
+11
-16
sql/item_func.h
sql/item_func.h
+1
-1
sql/opt_ft.h
sql/opt_ft.h
+1
-10
sql/opt_range.h
sql/opt_range.h
+1
-1
sql/sql_select.cc
sql/sql_select.cc
+16
-15
No files found.
myisam/ft_search.c
View file @
30cab562
...
@@ -158,7 +158,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
...
@@ -158,7 +158,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
ALL_IN_ONE
aio
;
ALL_IN_ONE
aio
;
FT_DOCLIST
*
dlist
;
FT_DOCLIST
*
dlist
;
FT_DOC
*
dptr
;
FT_DOC
*
dptr
;
my_off_t
saved_lastpos
;
/* black magic ON */
/* black magic ON */
if
((
int
)
(
keynr
=
_mi_check_index
((
MI_INFO
*
)
info
,
keynr
))
<
0
)
if
((
int
)
(
keynr
=
_mi_check_index
((
MI_INFO
*
)
info
,
keynr
))
<
0
)
...
@@ -174,8 +173,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
...
@@ -174,8 +173,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
aio
.
keyinfo
=
aio
.
info
->
s
->
keyinfo
+
keynr
;
aio
.
keyinfo
=
aio
.
info
->
s
->
keyinfo
+
keynr
;
aio
.
key_root
=
aio
.
info
->
s
->
state
.
key_root
[
keynr
];
aio
.
key_root
=
aio
.
info
->
s
->
state
.
key_root
[
keynr
];
saved_lastpos
=
aio
.
info
->
lastpos
;
if
(
!
(
wtree
=
ft_parse
(
NULL
,
key
,
key_len
)))
return
NULL
;
if
(
!
(
wtree
=
ft_parse
(
NULL
,
key
,
key_len
)))
return
NULL
;
init_tree
(
&
aio
.
dtree
,
0
,
sizeof
(
FT_SUPERDOC
),(
qsort_cmp
)
&
FT_SUPERDOC_cmp
,
0
,
init_tree
(
&
aio
.
dtree
,
0
,
sizeof
(
FT_SUPERDOC
),(
qsort_cmp
)
&
FT_SUPERDOC_cmp
,
0
,
...
@@ -204,7 +201,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
...
@@ -204,7 +201,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
}
}
err:
err:
aio
.
info
->
lastpos
=
saved_lastpos
;
delete_tree
(
&
aio
.
dtree
);
delete_tree
(
&
aio
.
dtree
);
delete_tree
(
wtree
);
delete_tree
(
wtree
);
my_free
((
char
*
)
wtree
,
MYF
(
0
));
my_free
((
char
*
)
wtree
,
MYF
(
0
));
...
...
sql/ha_myisam.cc
View file @
30cab562
...
@@ -353,7 +353,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
...
@@ -353,7 +353,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
int
error
=
0
;
int
error
=
0
;
const
char
*
errmsg
=
""
;
const
char
*
errmsg
=
""
;
if
(
my_copy
(
src_path
,
fn_format
(
dst_path
,
table
->
path
,
""
,
if
(
my_copy
(
src_path
,
fn_format
(
dst_path
,
table
->
path
,
""
,
MI_NAME_DEXT
,
4
),
MYF
(
MY_WME
)))
MI_NAME_DEXT
,
4
),
MYF
(
MY_WME
)))
{
{
...
@@ -361,11 +361,11 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
...
@@ -361,11 +361,11 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
errmsg
=
"failed in my_copy( Error %d)"
;
errmsg
=
"failed in my_copy( Error %d)"
;
goto
err
;
goto
err
;
}
}
tmp_check_opt
.
init
();
tmp_check_opt
.
init
();
tmp_check_opt
.
quick
=
1
;
tmp_check_opt
.
quick
=
1
;
return
repair
(
thd
,
&
tmp_check_opt
);
return
repair
(
thd
,
&
tmp_check_opt
);
err:
err:
{
{
MI_CHECK
param
;
MI_CHECK
param
;
...
@@ -375,7 +375,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
...
@@ -375,7 +375,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
param
.
table_name
=
table
->
table_name
;
param
.
table_name
=
table
->
table_name
;
param
.
testflag
=
0
;
param
.
testflag
=
0
;
mi_check_print_error
(
&
param
,
errmsg
,
errno
);
mi_check_print_error
(
&
param
,
errmsg
,
errno
);
return
error
;
return
error
;
}
}
}
}
...
@@ -450,7 +450,7 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
...
@@ -450,7 +450,7 @@ int ha_myisam::repair(THD* thd, HA_CHECK_OPT *check_opt)
llstr
(
file
->
state
->
records
,
llbuff
),
llstr
(
file
->
state
->
records
,
llbuff
),
llstr
(
start_records
,
llbuff2
),
llstr
(
start_records
,
llbuff2
),
table
->
path
);
table
->
path
);
}
}
return
error
;
return
error
;
}
}
...
@@ -496,7 +496,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
...
@@ -496,7 +496,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
DBUG_RETURN
(
HA_ADMIN_FAILED
);
DBUG_RETURN
(
HA_ADMIN_FAILED
);
}
}
if
(
!
optimize
||
if
(
!
optimize
||
((
file
->
state
->
del
||
share
->
state
.
split
!=
file
->
state
->
records
)
&&
((
file
->
state
->
del
||
share
->
state
.
split
!=
file
->
state
->
records
)
&&
(
!
param
.
opt_rep_quick
||
(
!
param
.
opt_rep_quick
||
!
(
share
->
state
.
changed
&
STATE_NOT_OPTIMIZED_KEYS
))))
!
(
share
->
state
.
changed
&
STATE_NOT_OPTIMIZED_KEYS
))))
...
@@ -621,9 +621,9 @@ bool ha_myisam::check_and_repair(THD *thd)
...
@@ -621,9 +621,9 @@ bool ha_myisam::check_and_repair(THD *thd)
{
{
sql_print_error
(
"Warning: Recovering table: '%s'"
,
table
->
path
);
sql_print_error
(
"Warning: Recovering table: '%s'"
,
table
->
path
);
check_opt
.
quick
=
!
check_opt
.
retry_without_quick
&&
!
marked_crashed
;
check_opt
.
quick
=
!
check_opt
.
retry_without_quick
&&
!
marked_crashed
;
check_opt
.
flags
=
(((
myisam_recover_options
&
HA_RECOVER_BACKUP
)
?
check_opt
.
flags
=
(((
myisam_recover_options
&
HA_RECOVER_BACKUP
)
?
T_BACKUP_DATA
:
0
)
|
T_BACKUP_DATA
:
0
)
|
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
T_SAFE_REPAIR
:
0
))
|
T_AUTO_REPAIR
;
T_SAFE_REPAIR
:
0
))
|
T_AUTO_REPAIR
;
if
(
repair
(
thd
,
&
check_opt
))
if
(
repair
(
thd
,
&
check_opt
))
error
=
1
;
error
=
1
;
...
@@ -1079,20 +1079,6 @@ ha_rows ha_myisam::records_in_range(int inx,
...
@@ -1079,20 +1079,6 @@ ha_rows ha_myisam::records_in_range(int inx,
end_search_flag
);
end_search_flag
);
}
}
int
ha_myisam
::
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
if
(
ft_handler
)
return
-
1
;
// Do the search!
ft_handler
=
ft_init_search
(
file
,
inx
,(
byte
*
)
key
,
keylen
,
presort
);
if
(
!
ft_handler
)
return
(
my_errno
?
my_errno
:
-
1
);
return
0
;
}
int
ha_myisam
::
ft_read
(
byte
*
buf
)
int
ha_myisam
::
ft_read
(
byte
*
buf
)
{
{
int
error
;
int
error
;
...
...
sql/ha_myisam.h
View file @
30cab562
...
@@ -71,8 +71,9 @@ class ha_myisam: public handler
...
@@ -71,8 +71,9 @@ class ha_myisam: public handler
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
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
int
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
1
);
int
ft_init
()
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
0
)
{
if
(
!
ft_handler
)
return
1
;
ft_reinit_search
(
ft_handler
);
return
0
;
}
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
return
ft_init_search
(
file
,
inx
,(
byte
*
)
key
,
keylen
,
presort
);
}
{
return
ft_init_search
(
file
,
inx
,(
byte
*
)
key
,
keylen
,
presort
);
}
int
ft_read
(
byte
*
buf
);
int
ft_read
(
byte
*
buf
);
int
rnd_init
(
bool
scan
=
1
);
int
rnd_init
(
bool
scan
=
1
);
...
...
sql/handler.h
View file @
30cab562
...
@@ -222,9 +222,9 @@ public:
...
@@ -222,9 +222,9 @@ public:
virtual
int
index_first
(
byte
*
buf
)
=
0
;
virtual
int
index_first
(
byte
*
buf
)
=
0
;
virtual
int
index_last
(
byte
*
buf
)
=
0
;
virtual
int
index_last
(
byte
*
buf
)
=
0
;
virtual
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
virtual
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
virtual
int
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
1
)
virtual
int
ft_init
()
{
return
-
1
;
}
{
return
-
1
;
}
virtual
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
0
)
virtual
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
)
{
return
(
void
*
)
NULL
;
}
{
return
(
void
*
)
NULL
;
}
virtual
int
ft_read
(
byte
*
buf
)
{
return
-
1
;
}
virtual
int
ft_read
(
byte
*
buf
)
{
return
-
1
;
}
virtual
int
rnd_init
(
bool
scan
=
1
)
=
0
;
virtual
int
rnd_init
(
bool
scan
=
1
)
=
0
;
...
@@ -257,7 +257,7 @@ public:
...
@@ -257,7 +257,7 @@ public:
virtual
int
restore
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
);
virtual
int
restore
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
);
// assumes .frm file must exist, and you must have already called
// assumes .frm file must exist, and you must have already called
// generate_table() - it will just copy the data file and run repair
// generate_table() - it will just copy the data file and run repair
virtual
int
dump
(
THD
*
thd
,
int
fd
=
-
1
)
{
return
ER_DUMP_NOT_IMPLEMENTED
;
}
virtual
int
dump
(
THD
*
thd
,
int
fd
=
-
1
)
{
return
ER_DUMP_NOT_IMPLEMENTED
;
}
virtual
void
deactivate_non_unique_index
(
ha_rows
rows
)
{}
virtual
void
deactivate_non_unique_index
(
ha_rows
rows
)
{}
virtual
bool
activate_all_index
(
THD
*
thd
)
{
return
0
;}
virtual
bool
activate_all_index
(
THD
*
thd
)
{
return
0
;}
...
...
sql/item_func.cc
View file @
30cab562
...
@@ -1840,9 +1840,6 @@ err:
...
@@ -1840,9 +1840,6 @@ err:
double
Item_func_match
::
val
()
double
Item_func_match
::
val
()
{
{
if
(
first_call
)
init_search
();
// Don't know how to return an error from val(), so NULL will be returned
// Don't know how to return an error from val(), so NULL will be returned
if
((
null_value
=
(
ft_handler
==
NULL
)))
if
((
null_value
=
(
ft_handler
==
NULL
)))
return
0.0
;
return
0.0
;
...
@@ -1853,8 +1850,7 @@ double Item_func_match::val()
...
@@ -1853,8 +1850,7 @@ double Item_func_match::val()
}
}
else
else
{
{
/* implicit initialization was done, so we'll have to find
/* we'll have to find ft_relevance manually in ft_handler array */
ft_relevance manually in ft_handler array */
int
a
,
b
,
c
;
int
a
,
b
,
c
;
FT_DOC
*
docs
=
ft_handler
->
doc
;
FT_DOC
*
docs
=
ft_handler
->
doc
;
...
@@ -1881,9 +1877,8 @@ double Item_func_match::val()
...
@@ -1881,9 +1877,8 @@ double Item_func_match::val()
void
Item_func_match
::
init_search
()
void
Item_func_match
::
init_search
()
{
{
if
(
!
first_call
)
if
(
ft_handler
)
return
;
return
;
first_call
=
false
;
if
(
master
)
if
(
master
)
{
{
...
@@ -1893,20 +1888,19 @@ void Item_func_match::init_search()
...
@@ -1893,20 +1888,19 @@ void Item_func_match::init_search()
return
;
return
;
}
}
if
(
join_key
)
{
ft_handler
=
((
FT_DOCLIST
*
)
table
->
file
->
ft_handler
);
return
;
}
/* join won't use this ft-key, but we must to init it anyway */
String
*
ft_tmp
=
0
;
String
*
ft_tmp
=
0
;
char
tmp1
[
FT_QUERY_MAXLEN
];
char
tmp1
[
FT_QUERY_MAXLEN
];
String
tmp2
(
tmp1
,
sizeof
(
tmp1
));
String
tmp2
(
tmp1
,
sizeof
(
tmp1
));
ft_tmp
=
key_item
()
->
val_str
(
&
tmp2
);
ft_tmp
=
key_item
()
->
val_str
(
&
tmp2
);
ft_handler
=
(
FT_DOCLIST
*
)
ft_handler
=
(
FT_DOCLIST
*
)
table
->
file
->
ft_init_ext
(
key
,
(
byte
*
)
ft_tmp
->
ptr
(),
ft_tmp
->
length
());
table
->
file
->
ft_init_ext
(
key
,
(
byte
*
)
ft_tmp
->
ptr
(),
ft_tmp
->
length
(),
join_key
);
if
(
join_key
)
{
table
->
file
->
ft_handler
=
ft_handler
;
return
;
}
}
}
bool
Item_func_match
::
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
)
bool
Item_func_match
::
fix_fields
(
THD
*
thd
,
struct
st_table_list
*
tlist
)
...
@@ -1917,6 +1911,8 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist)
...
@@ -1917,6 +1911,8 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist)
/* Why testing for const_item ? Monty */
/* Why testing for const_item ? Monty */
/* I'll remove it later, but this should include modifications to
/* I'll remove it later, but this should include modifications to
find_best and auto_close as complement to auto_init code above. SerG */
find_best and auto_close as complement to auto_init code above. SerG */
/* I'd rather say now that const_item is assumed in quite a bit of
places, so it would be difficult to remove. SerG */
if
(
Item_func
::
fix_fields
(
thd
,
tlist
)
||
!
const_item
())
if
(
Item_func
::
fix_fields
(
thd
,
tlist
)
||
!
const_item
())
return
1
;
return
1
;
...
@@ -1996,7 +1992,6 @@ bool Item_func_match::fix_index()
...
@@ -1996,7 +1992,6 @@ bool Item_func_match::fix_index()
}
}
this
->
key
=
max_key
;
this
->
key
=
max_key
;
first_call
=
1
;
maybe_null
=
1
;
maybe_null
=
1
;
join_key
=
0
;
join_key
=
0
;
...
...
sql/item_func.h
View file @
30cab562
...
@@ -838,7 +838,7 @@ public:
...
@@ -838,7 +838,7 @@ public:
List
<
Item
>
fields
;
List
<
Item
>
fields
;
TABLE
*
table
;
TABLE
*
table
;
uint
key
;
uint
key
;
bool
first_call
,
join_key
;
bool
join_key
;
Item_func_match
*
master
;
Item_func_match
*
master
;
FT_DOCLIST
*
ft_handler
;
FT_DOCLIST
*
ft_handler
;
...
...
sql/opt_ft.h
View file @
30cab562
...
@@ -31,16 +31,7 @@ public:
...
@@ -31,16 +31,7 @@ public:
FT_SELECT
(
TABLE
*
table
,
TABLE_REF
*
tref
)
:
FT_SELECT
(
TABLE
*
table
,
TABLE_REF
*
tref
)
:
QUICK_SELECT
(
table
,
tref
->
key
,
1
),
ref
(
tref
)
{}
QUICK_SELECT
(
table
,
tref
->
key
,
1
),
ref
(
tref
)
{}
int
init
()
int
init
()
{
return
error
=
file
->
ft_init
();
}
{
#if 0
if (cp_buffer_from_ref(ref)) // as ft-key doesn't use store_key's
return -1;
#endif
return
error
=
file
->
ft_init
(
ref
->
key
,
ref
->
key_buff
,
ref
->
key_length
);
}
int
get_next
()
{
return
error
=
file
->
ft_read
(
record
);
}
int
get_next
()
{
return
error
=
file
->
ft_read
(
record
);
}
};
};
...
...
sql/opt_range.h
View file @
30cab562
...
@@ -71,7 +71,7 @@ public:
...
@@ -71,7 +71,7 @@ public:
double
read_time
;
double
read_time
;
QUICK_SELECT
(
TABLE
*
table
,
uint
index_arg
,
bool
no_alloc
=
0
);
QUICK_SELECT
(
TABLE
*
table
,
uint
index_arg
,
bool
no_alloc
=
0
);
virtual
~
QUICK_SELECT
();
// fixed by Sasha needs to be virtual
virtual
~
QUICK_SELECT
();
void
reset
(
void
)
{
next
=
0
;
it
.
rewind
();
}
void
reset
(
void
)
{
next
=
0
;
it
.
rewind
();
}
virtual
int
init
()
{
return
0
;
}
virtual
int
init
()
{
return
0
;
}
virtual
int
get_next
();
virtual
int
get_next
();
...
...
sql/sql_select.cc
View file @
30cab562
...
@@ -486,7 +486,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
...
@@ -486,7 +486,7 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
as in other cases the join is done before the sort.
as in other cases the join is done before the sort.
*/
*/
if
((
order
||
group
)
&&
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_ALL
&&
if
((
order
||
group
)
&&
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_ALL
&&
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_FT
&&
/* Beware! SerG */
join
.
join_tab
[
join
.
const_tables
].
type
!=
JT_FT
&&
(
order
&&
simple_order
||
group
&&
simple_group
))
(
order
&&
simple_order
||
group
&&
simple_group
))
{
{
if
(
add_ref_to_table_cond
(
thd
,
&
join
.
join_tab
[
join
.
const_tables
]))
if
(
add_ref_to_table_cond
(
thd
,
&
join
.
join_tab
[
join
.
const_tables
]))
...
@@ -522,6 +522,19 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
...
@@ -522,6 +522,19 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
goto
err
;
goto
err
;
}
}
/* Perform FULLTEXT search before all regular searches */
if
(
ftfuncs
.
elements
)
{
List_iterator
<
Item_func_match
>
li
(
ftfuncs
);
Item_func_match
*
ifm
;
DBUG_PRINT
(
"info"
,(
"Performing FULLTEXT search"
));
thd
->
proc_info
=
"FULLTEXT searching"
;
while
((
ifm
=
li
++
))
{
ifm
->
init_search
();
}
}
/* Create a tmp table if distinct or if the sort is too complicated */
/* Create a tmp table if distinct or if the sort is too complicated */
if
(
need_tmp
)
if
(
need_tmp
)
{
{
...
@@ -4438,26 +4451,14 @@ join_ft_read_first(JOIN_TAB *tab)
...
@@ -4438,26 +4451,14 @@ join_ft_read_first(JOIN_TAB *tab)
if (cp_buffer_from_ref(&tab->ref)) // as ft-key doesn't use store_key's
if (cp_buffer_from_ref(&tab->ref)) // as ft-key doesn't use store_key's
return -1; // see also FT_SELECT::init()
return -1; // see also FT_SELECT::init()
#endif
#endif
if
((
error
=
table
->
file
->
ft_init
(
tab
->
ref
.
key
,
table
->
file
->
ft_init
();
tab
->
ref
.
key_buff
,
tab
->
ref
.
key_length
)))
{
if
(
error
!=
HA_ERR_KEY_NOT_FOUND
)
{
sql_print_error
(
"ft_read_first/init: Got error %d when reading table %s"
,
error
,
table
->
path
);
table
->
file
->
print_error
(
error
,
MYF
(
0
));
return
1
;
}
return
-
1
;
}
error
=
table
->
file
->
ft_read
(
table
->
record
[
0
]);
error
=
table
->
file
->
ft_read
(
table
->
record
[
0
]);
if
(
error
)
if
(
error
)
{
{
if
(
error
!=
HA_ERR_END_OF_FILE
)
if
(
error
!=
HA_ERR_END_OF_FILE
)
{
{
sql_print_error
(
"ft_read_first
/read
: Got error %d when reading table %s"
,
sql_print_error
(
"ft_read_first: Got error %d when reading table %s"
,
error
,
table
->
path
);
error
,
table
->
path
);
table
->
file
->
print_error
(
error
,
MYF
(
0
));
table
->
file
->
print_error
(
error
,
MYF
(
0
));
return
1
;
return
1
;
...
...
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