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
f42a28e2
Commit
f42a28e2
authored
Sep 18, 2002
by
monty@mashka.mysql.fi
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
7f55d926
aabcc1f6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
54 additions
and
6 deletions
+54
-6
Docs/manual.texi
Docs/manual.texi
+3
-0
myisam/ft_boolean_search.c
myisam/ft_boolean_search.c
+20
-2
mysql-test/r/fulltext_order_by.result
mysql-test/r/fulltext_order_by.result
+15
-0
mysql-test/t/fulltext_order_by.test
mysql-test/t/fulltext_order_by.test
+14
-0
mysys/queues.c
mysys/queues.c
+2
-4
No files found.
Docs/manual.texi
View file @
f42a28e2
...
...
@@ -50448,6 +50448,9 @@ Fixed overrun bug when calling @code{AES_DECRYPT()} with wrong arguments
even if one is using other ssl options in a options file or previously
on the command line.
@item
Fixed bug in @code{MATCH ... AGAINST( ... IN BOOLEAN MODE)}
used with @code{ORDER BY}.
@item
Added @code{LOCK TABLES} and @code{CREATE TEMPORARY TABLES} privilege on
the database level. One must run the @code{ mysql_fix_privilege_tables}
script on old installations to activate these.
myisam/ft_boolean_search.c
View file @
f42a28e2
...
...
@@ -93,6 +93,7 @@ typedef struct st_ft_info
CHARSET_INFO
*
charset
;
enum
{
UNINITIALIZED
,
READY
,
INDEX_SEARCH
,
INDEX_DONE
/*, SCAN*/
}
state
;
uint
with_scan
;
my_off_t
lastpos
;
FTB_EXPR
*
root
;
QUEUE
queue
;
TREE
no_dupes
;
...
...
@@ -297,6 +298,7 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query,
default_charset_info
:
info
->
s
->
keyinfo
[
keynr
].
seg
->
charset
);
ftb
->
with_scan
=
0
;
ftb
->
lastpos
=
0
;
bzero
(
&
ftb
->
no_dupes
,
sizeof
(
TREE
));
init_alloc_root
(
&
ftb
->
mem_root
,
1024
,
1024
);
...
...
@@ -540,6 +542,21 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
if
(
!
ftb
->
queue
.
elements
)
return
0
;
if
(
ftb
->
state
!=
INDEX_SEARCH
&&
docid
<
ftb
->
lastpos
)
{
FTB_EXPR
*
x
;
uint
i
;
for
(
i
=
0
;
i
<
ftb
->
queue
.
elements
;
i
++
)
{
ftb
->
list
[
i
]
->
docid
[
1
]
=
HA_POS_ERROR
;
for
(
x
=
ftb
->
list
[
i
]
->
up
;
x
;
x
=
x
->
up
)
x
->
docid
[
1
]
=
HA_POS_ERROR
;
}
}
ftb
->
lastpos
=
docid
;
if
(
ftb
->
keynr
==
NO_SUCH_KEY
)
_mi_ft_segiterator_dummy_init
(
record
,
length
,
&
ftsi
);
else
...
...
@@ -557,7 +574,7 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
int
a
,
b
,
c
;
for
(
a
=
0
,
b
=
ftb
->
queue
.
elements
,
c
=
(
a
+
b
)
/
2
;
b
-
a
>
1
;
c
=
(
a
+
b
)
/
2
)
{
ftbw
=
(
FTB_WORD
*
)(
ftb
->
list
[
c
])
;
ftbw
=
ftb
->
list
[
c
]
;
if
(
_mi_compare_text
(
ftb
->
charset
,
word
.
pos
,
word
.
len
,
(
uchar
*
)
ftbw
->
word
+
1
,
ftbw
->
len
-
1
,
(
my_bool
)
(
ftbw
->
flags
&
FTB_FLAG_TRUNC
))
>
0
)
...
...
@@ -567,7 +584,7 @@ float ft_boolean_find_relevance(FT_INFO *ftb, byte *record, uint length)
}
for
(;
c
>=
0
;
c
--
)
{
ftbw
=
(
FTB_WORD
*
)(
ftb
->
list
[
c
])
;
ftbw
=
ftb
->
list
[
c
]
;
if
(
_mi_compare_text
(
ftb
->
charset
,
word
.
pos
,
word
.
len
,
(
uchar
*
)
ftbw
->
word
+
1
,
ftbw
->
len
-
1
,
(
my_bool
)
(
ftbw
->
flags
&
FTB_FLAG_TRUNC
)))
...
...
@@ -614,3 +631,4 @@ void ft_boolean_reinit_search(FT_INFO *ftb)
{
_ftb_init_index_search
(
ftb
);
}
mysql-test/r/fulltext_order_by.result
View file @
f42a28e2
...
...
@@ -64,3 +64,18 @@ a rel
4 1
7 1
drop table t1;
CREATE TABLE t1 (
a INT AUTO_INCREMENT PRIMARY KEY,
message CHAR(20),
FULLTEXT(message)
);
INSERT INTO t1 (message) VALUES ("testbug"),("testbug foobar");
SELECT a, MATCH (message) AGAINST ('t* f*' IN BOOLEAN MODE) as rel FROM t1;
a rel
1 1
2 2
SELECT a, MATCH (message) AGAINST ('t* f*' IN BOOLEAN MODE) as rel FROM t1 ORDER BY rel,a;
a rel
1 1
2 2
drop table t1;
mysql-test/t/fulltext_order_by.test
View file @
f42a28e2
...
...
@@ -30,3 +30,17 @@ SELECT a, MATCH (message) AGAINST ('steve') as rel FROM t1 ORDER BY rel;
SELECT
a
,
MATCH
(
message
)
AGAINST
(
'steve'
IN
BOOLEAN
MODE
)
as
rel
FROM
t1
ORDER
BY
rel
;
drop
table
t1
;
#
# reused boolean scan bug
#
CREATE
TABLE
t1
(
a
INT
AUTO_INCREMENT
PRIMARY
KEY
,
message
CHAR
(
20
),
FULLTEXT
(
message
)
);
INSERT
INTO
t1
(
message
)
VALUES
(
"testbug"
),(
"testbug foobar"
);
SELECT
a
,
MATCH
(
message
)
AGAINST
(
't* f*'
IN
BOOLEAN
MODE
)
as
rel
FROM
t1
;
SELECT
a
,
MATCH
(
message
)
AGAINST
(
't* f*'
IN
BOOLEAN
MODE
)
as
rel
FROM
t1
ORDER
BY
rel
,
a
;
drop
table
t1
;
mysys/queues.c
View file @
f42a28e2
...
...
@@ -174,10 +174,8 @@ static int queue_fix_cmp(QUEUE *queue, void **a, void **b)
}
/*
Fix heap when every element was changed
actually, it can be done in linear time,
not in n*log(n), but some code (myisam/ft_boolean_search.c)
requires a strict order here, not just a queue property
Fix heap when every element was changed,
actually, it can be done better, in linear time, not in n*log(n)
*/
void
queue_fix
(
QUEUE
*
queue
)
...
...
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