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
2cb2beb1
Commit
2cb2beb1
authored
Nov 02, 2000
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
4d4b2944
d1a1eae0
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 @
2cb2beb1
...
...
@@ -158,7 +158,6 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key,
ALL_IN_ONE
aio
;
FT_DOCLIST
*
dlist
;
FT_DOC
*
dptr
;
my_off_t
saved_lastpos
;
/* black magic ON */
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,
aio
.
keyinfo
=
aio
.
info
->
s
->
keyinfo
+
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
;
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,
}
err:
aio
.
info
->
lastpos
=
saved_lastpos
;
delete_tree
(
&
aio
.
dtree
);
delete_tree
(
wtree
);
my_free
((
char
*
)
wtree
,
MYF
(
0
));
...
...
sql/ha_myisam.cc
View file @
2cb2beb1
...
...
@@ -353,7 +353,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
int
error
=
0
;
const
char
*
errmsg
=
""
;
if
(
my_copy
(
src_path
,
fn_format
(
dst_path
,
table
->
path
,
""
,
MI_NAME_DEXT
,
4
),
MYF
(
MY_WME
)))
{
...
...
@@ -361,11 +361,11 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
errmsg
=
"failed in my_copy( Error %d)"
;
goto
err
;
}
tmp_check_opt
.
init
();
tmp_check_opt
.
quick
=
1
;
return
repair
(
thd
,
&
tmp_check_opt
);
err:
{
MI_CHECK
param
;
...
...
@@ -375,7 +375,7 @@ int ha_myisam::restore(THD* thd, HA_CHECK_OPT *check_opt)
param
.
table_name
=
table
->
table_name
;
param
.
testflag
=
0
;
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)
llstr
(
file
->
state
->
records
,
llbuff
),
llstr
(
start_records
,
llbuff2
),
table
->
path
);
}
}
return
error
;
}
...
...
@@ -496,7 +496,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize)
DBUG_RETURN
(
HA_ADMIN_FAILED
);
}
if
(
!
optimize
||
if
(
!
optimize
||
((
file
->
state
->
del
||
share
->
state
.
split
!=
file
->
state
->
records
)
&&
(
!
param
.
opt_rep_quick
||
!
(
share
->
state
.
changed
&
STATE_NOT_OPTIMIZED_KEYS
))))
...
...
@@ -621,9 +621,9 @@ bool ha_myisam::check_and_repair(THD *thd)
{
sql_print_error
(
"Warning: Recovering table: '%s'"
,
table
->
path
);
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
)
|
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
(
!
(
myisam_recover_options
&
HA_RECOVER_FORCE
)
?
T_SAFE_REPAIR
:
0
))
|
T_AUTO_REPAIR
;
if
(
repair
(
thd
,
&
check_opt
))
error
=
1
;
...
...
@@ -1079,20 +1079,6 @@ ha_rows ha_myisam::records_in_range(int inx,
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
error
;
...
...
sql/ha_myisam.h
View file @
2cb2beb1
...
...
@@ -71,8 +71,9 @@ class ha_myisam: public handler
int
index_first
(
byte
*
buf
);
int
index_last
(
byte
*
buf
);
int
index_next_same
(
byte
*
buf
,
const
byte
*
key
,
uint
keylen
);
int
ft_init
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
1
);
void
*
ft_init_ext
(
uint
inx
,
const
byte
*
key
,
uint
keylen
,
bool
presort
=
0
)
int
ft_init
()
{
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
);
}
int
ft_read
(
byte
*
buf
);
int
rnd_init
(
bool
scan
=
1
);
...
...
sql/handler.h
View file @
2cb2beb1
...
...
@@ -222,9 +222,9 @@ class handler :public Sql_alloc
virtual
int
index_first
(
byte
*
buf
)
=
0
;
virtual
int
index_last
(
byte
*
buf
)
=
0
;
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
;
}
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
;
}
virtual
int
ft_read
(
byte
*
buf
)
{
return
-
1
;
}
virtual
int
rnd_init
(
bool
scan
=
1
)
=
0
;
...
...
@@ -257,7 +257,7 @@ class handler :public Sql_alloc
virtual
int
restore
(
THD
*
thd
,
HA_CHECK_OPT
*
check_opt
);
// assumes .frm file must exist, and you must have already called
// 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
void
deactivate_non_unique_index
(
ha_rows
rows
)
{}
virtual
bool
activate_all_index
(
THD
*
thd
)
{
return
0
;}
...
...
sql/item_func.cc
View file @
2cb2beb1
...
...
@@ -1840,9 +1840,6 @@ longlong Item_func_inet_aton::val_int()
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
if
((
null_value
=
(
ft_handler
==
NULL
)))
return
0.0
;
...
...
@@ -1853,8 +1850,7 @@ double Item_func_match::val()
}
else
{
/* implicit initialization was done, so we'll have to find
ft_relevance manually in ft_handler array */
/* we'll have to find ft_relevance manually in ft_handler array */
int
a
,
b
,
c
;
FT_DOC
*
docs
=
ft_handler
->
doc
;
...
...
@@ -1881,9 +1877,8 @@ double Item_func_match::val()
void
Item_func_match
::
init_search
()
{
if
(
!
first_call
)
if
(
ft_handler
)
return
;
first_call
=
false
;
if
(
master
)
{
...
...
@@ -1893,20 +1888,19 @@ void Item_func_match::init_search()
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
;
char
tmp1
[
FT_QUERY_MAXLEN
];
String
tmp2
(
tmp1
,
sizeof
(
tmp1
));
ft_tmp
=
key_item
()
->
val_str
(
&
tmp2
);
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
)
...
...
@@ -1917,6 +1911,8 @@ bool Item_func_match::fix_fields(THD *thd,struct st_table_list *tlist)
/* Why testing for const_item ? Monty */
/* I'll remove it later, but this should include modifications to
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
())
return
1
;
...
...
@@ -1996,7 +1992,6 @@ bool Item_func_match::fix_index()
}
this
->
key
=
max_key
;
first_call
=
1
;
maybe_null
=
1
;
join_key
=
0
;
...
...
sql/item_func.h
View file @
2cb2beb1
...
...
@@ -838,7 +838,7 @@ class Item_func_match :public Item_real_func
List
<
Item
>
fields
;
TABLE
*
table
;
uint
key
;
bool
first_call
,
join_key
;
bool
join_key
;
Item_func_match
*
master
;
FT_DOCLIST
*
ft_handler
;
...
...
sql/opt_ft.h
View file @
2cb2beb1
...
...
@@ -31,16 +31,7 @@ class FT_SELECT: public QUICK_SELECT {
FT_SELECT
(
TABLE
*
table
,
TABLE_REF
*
tref
)
:
QUICK_SELECT
(
table
,
tref
->
key
,
1
),
ref
(
tref
)
{}
int
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
init
()
{
return
error
=
file
->
ft_init
();
}
int
get_next
()
{
return
error
=
file
->
ft_read
(
record
);
}
};
...
...
sql/opt_range.h
View file @
2cb2beb1
...
...
@@ -71,7 +71,7 @@ class QUICK_SELECT {
double
read_time
;
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
();
}
virtual
int
init
()
{
return
0
;
}
virtual
int
get_next
();
...
...
sql/sql_select.cc
View file @
2cb2beb1
...
...
@@ -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.
*/
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
))
{
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,
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 */
if
(
need_tmp
)
{
...
...
@@ -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
return -1; // see also FT_SELECT::init()
#endif
if
((
error
=
table
->
file
->
ft_init
(
tab
->
ref
.
key
,
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
;
}
table
->
file
->
ft_init
();
error
=
table
->
file
->
ft_read
(
table
->
record
[
0
]);
if
(
error
)
{
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
);
table
->
file
->
print_error
(
error
,
MYF
(
0
));
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