2000-12-28 02:56:38 +01:00
|
|
|
|
#
|
|
|
|
|
# Test of fulltext index
|
|
|
|
|
#
|
|
|
|
|
|
2003-01-06 00:48:59 +01:00
|
|
|
|
--disable_warnings
|
2001-08-03 23:10:00 +02:00
|
|
|
|
drop table if exists t1,t2,t3;
|
2003-01-06 00:48:59 +01:00
|
|
|
|
--enable_warnings
|
2001-01-07 23:04:30 +01:00
|
|
|
|
|
2000-12-28 02:56:38 +01:00
|
|
|
|
CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b));
|
2001-10-09 14:53:54 +02:00
|
|
|
|
INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'),
|
|
|
|
|
('Full-text indexes', 'are called collections'),
|
|
|
|
|
('Only MyISAM tables','support collections'),
|
|
|
|
|
('Function MATCH ... AGAINST()','is used to do a search'),
|
|
|
|
|
('Full-text search in MySQL', 'implements vector space model');
|
2004-02-04 17:42:18 +01:00
|
|
|
|
SHOW INDEX FROM t1;
|
2001-11-28 17:55:45 +01:00
|
|
|
|
|
|
|
|
|
# nl search
|
2003-07-07 19:02:58 +02:00
|
|
|
|
|
2000-12-28 02:56:38 +01:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("collections");
|
2003-10-30 11:57:26 +01:00
|
|
|
|
explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
|
2000-12-28 02:56:38 +01:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("indexes collections");
|
2003-01-21 19:24:34 +01:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("only");
|
2001-11-28 17:55:45 +01:00
|
|
|
|
|
2003-10-23 15:21:06 +02:00
|
|
|
|
# query expansion
|
2002-03-15 13:11:11 +01:00
|
|
|
|
|
2003-10-23 15:21:06 +02:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("collections" WITH QUERY EXPANSION);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("indexes" WITH QUERY EXPANSION);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("indexes collections" WITH QUERY EXPANSION);
|
2003-07-07 19:02:58 +02:00
|
|
|
|
|
|
|
|
|
# add_ft_keys() tests
|
|
|
|
|
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections");
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections")>0;
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections")>1;
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections")>=0;
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections")>=1;
|
|
|
|
|
explain select * from t1 where 0<MATCH(a,b) AGAINST ("collections");
|
|
|
|
|
explain select * from t1 where 1<MATCH(a,b) AGAINST ("collections");
|
|
|
|
|
explain select * from t1 where 0<=MATCH(a,b) AGAINST ("collections");
|
|
|
|
|
explain select * from t1 where 1<=MATCH(a,b) AGAINST ("collections");
|
|
|
|
|
explain select * from t1 where MATCH(a,b) AGAINST ("collections")>0 and a like '%ll%';
|
2002-03-15 13:11:11 +01:00
|
|
|
|
|
2001-11-28 17:55:45 +01:00
|
|
|
|
# boolean search
|
|
|
|
|
|
2001-10-09 14:53:54 +02:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
|
2003-10-30 11:57:26 +01:00
|
|
|
|
explain extended select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
|
2001-10-09 14:53:54 +02:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("support +collections" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("sear*" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("+support +collections" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("+search" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("+search +(support vector)" IN BOOLEAN MODE);
|
2001-10-17 14:49:54 +02:00
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST("+search -(support vector)" IN BOOLEAN MODE);
|
2002-03-04 14:17:49 +01:00
|
|
|
|
select *, MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE) as x from t1;
|
|
|
|
|
select *, MATCH(a,b) AGAINST("collections support" IN BOOLEAN MODE) as x from t1;
|
2001-11-28 17:55:45 +01:00
|
|
|
|
|
2002-05-15 20:31:24 +02:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ("+call* +coll*" IN BOOLEAN MODE);
|
|
|
|
|
|
2002-06-28 15:18:45 +02:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"support now"' IN BOOLEAN MODE);
|
2002-04-18 16:12:29 +02:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"Now sUPPort"' IN BOOLEAN MODE);
|
2005-03-09 12:29:51 +01:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"now support"' IN BOOLEAN MODE);
|
2002-05-08 18:47:27 +02:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"text search" "now support"' IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE);
|
2002-11-20 15:17:17 +01:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
|
2004-05-10 12:39:01 +02:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
|
2002-04-18 16:12:29 +02:00
|
|
|
|
|
2004-02-22 00:19:36 +01:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE);
|
2005-01-18 11:27:38 +01:00
|
|
|
|
select * from t1 where MATCH a,b AGAINST ('+collections -supp* -foobar*' IN BOOLEAN MODE);
|
2002-04-18 16:12:29 +02:00
|
|
|
|
|
2004-05-27 21:14:59 +02:00
|
|
|
|
# bug#2708, bug#3870 crash
|
|
|
|
|
|
|
|
|
|
select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE);
|
|
|
|
|
|
2001-11-28 17:55:45 +01:00
|
|
|
|
# boolean w/o index:
|
|
|
|
|
|
2001-12-12 12:25:20 +01:00
|
|
|
|
select * from t1 where MATCH a AGAINST ("search" IN BOOLEAN MODE);
|
|
|
|
|
select * from t1 where MATCH b AGAINST ("sear*" IN BOOLEAN MODE);
|
2001-11-28 17:55:45 +01:00
|
|
|
|
|
2003-07-07 19:02:58 +02:00
|
|
|
|
# UNION of fulltext's
|
|
|
|
|
select * from t1 where MATCH(a,b) AGAINST ("collections") UNION ALL select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
|
|
|
|
|
2001-11-28 17:55:45 +01:00
|
|
|
|
#update/delete with fulltext index
|
|
|
|
|
|
2000-12-28 02:56:38 +01:00
|
|
|
|
delete from t1 where a like "MySQL%";
|
2001-11-21 18:25:44 +01:00
|
|
|
|
update t1 set a='some test foobar' where MATCH a,b AGAINST ('model');
|
|
|
|
|
delete from t1 where MATCH(a,b) AGAINST ("indexes");
|
|
|
|
|
select * from t1;
|
2000-12-28 02:56:38 +01:00
|
|
|
|
drop table t1;
|
2001-01-07 23:04:30 +01:00
|
|
|
|
|
2003-11-08 15:39:10 +01:00
|
|
|
|
#
|
|
|
|
|
# why to scan strings for trunc*
|
|
|
|
|
#
|
|
|
|
|
create table t1 (a varchar(200) not null, fulltext (a));
|
|
|
|
|
insert t1 values ("aaa10 bbb20"), ("aaa20 bbb15"), ("aaa30 bbb10");
|
|
|
|
|
select * from t1 where match a against ("+aaa* +bbb*" in boolean mode);
|
|
|
|
|
select * from t1 where match a against ("+aaa* +bbb1*" in boolean mode);
|
|
|
|
|
select * from t1 where match a against ("+aaa* +ccc*" in boolean mode);
|
2003-11-20 23:15:07 +01:00
|
|
|
|
select * from t1 where match a against ("+aaa10 +(bbb*)" in boolean mode);
|
2004-11-22 18:37:30 +01:00
|
|
|
|
select * from t1 where match a against ("+(+aaa* +bbb1*)" in boolean mode);
|
|
|
|
|
select * from t1 where match a against ("(+aaa* +bbb1*)" in boolean mode);
|
2003-11-08 15:39:10 +01:00
|
|
|
|
drop table t1;
|
|
|
|
|
|
2001-01-07 23:04:30 +01:00
|
|
|
|
#
|
|
|
|
|
# Check bug reported by Matthias Urlichs
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
|
id int(11),
|
|
|
|
|
ticket int(11),
|
|
|
|
|
KEY ti (id),
|
|
|
|
|
KEY tit (ticket)
|
2001-02-28 11:43:08 +01:00
|
|
|
|
);
|
2001-01-07 23:04:30 +01:00
|
|
|
|
INSERT INTO t1 VALUES (2,3),(1,2);
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
|
ticket int(11),
|
|
|
|
|
inhalt text,
|
|
|
|
|
KEY tig (ticket),
|
2001-02-28 11:43:08 +01:00
|
|
|
|
fulltext index tix (inhalt)
|
|
|
|
|
);
|
2001-01-07 23:04:30 +01:00
|
|
|
|
INSERT INTO t2 VALUES (1,'foo'),(2,'bar'),(3,'foobar');
|
|
|
|
|
|
2001-02-28 11:43:08 +01:00
|
|
|
|
select t1.id FROM t2 as ttxt,t1,t1 as ticket2
|
|
|
|
|
WHERE ticket2.id = ttxt.ticket AND t1.id = ticket2.ticket and
|
|
|
|
|
match(ttxt.inhalt) against ('foobar');
|
2001-01-07 23:04:30 +01:00
|
|
|
|
|
|
|
|
|
# In the following query MySQL didn't use the fulltext index
|
Implementation of WL#2486 -
"Process NATURAL and USING joins according to SQL:2003".
* Some of the main problems fixed by the patch:
- in "select *" queries the * expanded correctly according to
ANSI for arbitrary natural/using joins
- natural/using joins are correctly transformed into JOIN ... ON
for any number/nesting of the joins.
- column references are correctly resolved against natural joins
of any nesting and combined with arbitrary other joins.
* This patch also contains a fix for name resolution of items
inside the ON condition of JOIN ... ON - in this case items must
be resolved only against the JOIN operands. To support such
'local' name resolution, the patch introduces a stack of
name resolution contexts used at parse time.
NOTICE:
- This patch is not complete in the sense that
- there are 2 test cases that still do not pass -
one in join.test, one in select.test. Both are marked
with a comment "TODO: WL#2486".
- it does not include a new test specific for the task
mysql-test/include/ps_query.inc:
Adjusted according to standard NATURAL/USING join semantics.,
mysql-test/r/bdb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/derived.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/errors.result:
The column as a whole cannot be resolved, so different error message.
mysql-test/r/fulltext.result:
Adjusted according to standard JOIN ... ON semantics =>
the ON condition can refer only to the join operands.
mysql-test/r/fulltext_order_by.result:
More detailed error message.
mysql-test/r/innodb.result:
Adjusted according to standard NATURAL/USING join semantics.
This test doesn't pass completetly yet!
mysql-test/r/insert_select.result:
More detailed error message.
mysql-test/r/join.result:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/r/join_crash.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/join_nested.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/join_outer.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/multi_update.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/null_key.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/order_by.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_2myisam.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_3innodb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_4heap.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_5merge.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_6bdb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_7ndb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/select.result:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one failing test case which is commented with
WL#2486 in the test file.
mysql-test/r/subselect.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/type_ranges.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/union.result:
More detailed error message.
mysql-test/t/bdb.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/errors.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/fulltext.test:
Adjusted according to standard JOIN ... ON semantics =>
the ON condition can refer only to the join operands.
mysql-test/t/fulltext_order_by.test:
More detailed error message.
mysql-test/t/innodb.test:
Adjusted according to standard NATURAL/USING join semantics.
This test doesn't pass completetly yet!
mysql-test/t/insert_select.test:
More detailed error message.
mysql-test/t/join.test:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/t/join_crash.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/join_nested.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/join_outer.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/null_key.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/order_by.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/select.test:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/t/subselect.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/type_ranges.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/union.test:
More detailed error message.
sql/item.cc:
- extra parameter to find_field_in_tables
- find_field_in_real_table renamed to find_field_in_table
- fixed comments/typos
sql/item.h:
- added [first | last]_name_resolution_table to class
Name_resolution_context
- commented old code
- standardized formatting
sql/mysql_priv.h:
- refactored the find_field_in_XXX procedures,
- added a new procedure for natural join table references,
- renamed the find_field_in_XXX procedures to clearer names
sql/sp.cc:
- pass the top-most list of the FROM clause to setup_tables
- extra parameter to find_field_in_tables
sql/sql_acl.cc:
- renamed find_field_in_table => find_field_in_table_ref
- extra parameter to find_field_in_table_ref
- commented old code
sql/sql_base.cc:
This file contains the core of the implementation of the processing
of NATURAL/USING joins (WL#2486).
- added many comments to old code
- refactored the group of find_field_in_XXX procedures, and added a
new procedure for natural joins. There is one find_field_in_XXX procedure
per each type of table reference (stored table, merge view, or natural
join); one meta-procedure that selects the correct one depeneding on the
table reference; and one procedure that goes over a list of table
referenes.
- NATURAL/USING joins are processed through the procedures:
mark_common_columns, store_natural_using_join_columns,
store_top_level_join_columns, setup_natural_join_row_types.
The entry point to processing NATURAL/USING joins is the
procedure 'setup_natural_join_row_types'.
- Replaced the specialized Field_iterator_XXX iterators with one
generic iterator over the fields of a table reference.
- Simplified 'insert_fields' and 'setup_conds' due to encapsulation of
the processing of natural joins in a separate set of procedures.
sql/sql_class.h:
- Commented old code.
sql/sql_delete.cc:
- Pass the FROM clause to setup_tables.
sql/sql_help.cc:
- pass the end name resolution table to find_field_in_tables
- adjust the list of tables for name resolution
sql/sql_insert.cc:
- Changed the code that saves and restores the current context to
support the list of tables for name resolution -
context->first_name_resolution_table, and
table_list->next_name_resolution_table.
Needed to support an ugly trick to resolve inserted columns only in
the first table.
- Added Name_resolution_context::[first | last]_name_resolution_table.
- Commented old code
sql/sql_lex.cc:
- set select_lex.parent_lex correctly
- set correct state of the current name resolution context
sql/sql_lex.h:
- Added a stack of name resolution contexts to support local
contexts for JOIN ... ON conditions.
- Commented old code.
sql/sql_load.cc:
- Pass the FROM clause to setup_tables.
sql/sql_olap.cc:
- Pass the FROM clause to setup_tables.
sql/sql_parse.cc:
- correctly set SELECT_LEX::parent_lex
- set the first table of the current name resoltion context
- added support for NATURAL/USING joins
- commented old code
sql/sql_select.cc:
- Pass the FROM clause to setup_tables.
- Pass the end table to find_field_in_tables
- Improved comments
sql/sql_show.cc:
- Set SELECT_LEX::parent_lex.
sql/sql_update.cc:
- Pass the FROM clause to setup_tables.
sql/sql_yacc.yy:
- Added support for a stack of name resolution contexts needed to
implement name resolution for JOIN ... ON. A context is pushed
for each new JOIN ... ON, and popped afterwards.
- Added support for NATURAL/USING joins.
sql/table.cc:
- Added new class Natural_join_column to hide the heterogeneous
representation of column references for stored tables and for
views.
- Added a new list TABLE_LIST::next_name_resolution_table to
support name resolution with NATURAL/USING joins. Also added
other members to TABLE_LIST to support NATURAL/USING joins.
- Added a generic iterator over the fields of table references
of various types - class Field_iterator_table_ref
sql/table.h:
- Added new class Natural_join_column to hide the heterogeneous
representation of column references for stored tables and for
views.
- Added a new list TABLE_LIST::next_name_resolution_table to
support name resolution with NATURAL/USING joins. Also added
other members to TABLE_LIST to support NATURAL/USING joins.
- Added a generic iterator over the fields of table references
of various types - class Field_iterator_table_ref
tests/mysql_client_test.c:
Adjusted according to standard NATURAL JOIN syntax.
2005-08-12 16:57:19 +02:00
|
|
|
|
select ticket2.id FROM t2 as ttxt,t2 INNER JOIN t1 as ticket2 ON
|
|
|
|
|
ticket2.id = t2.ticket
|
|
|
|
|
WHERE ticket2.id = ticket2.ticket and match(ttxt.inhalt) against ('foobar');
|
2001-01-07 23:04:30 +01:00
|
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (3,3);
|
Implementation of WL#2486 -
"Process NATURAL and USING joins according to SQL:2003".
* Some of the main problems fixed by the patch:
- in "select *" queries the * expanded correctly according to
ANSI for arbitrary natural/using joins
- natural/using joins are correctly transformed into JOIN ... ON
for any number/nesting of the joins.
- column references are correctly resolved against natural joins
of any nesting and combined with arbitrary other joins.
* This patch also contains a fix for name resolution of items
inside the ON condition of JOIN ... ON - in this case items must
be resolved only against the JOIN operands. To support such
'local' name resolution, the patch introduces a stack of
name resolution contexts used at parse time.
NOTICE:
- This patch is not complete in the sense that
- there are 2 test cases that still do not pass -
one in join.test, one in select.test. Both are marked
with a comment "TODO: WL#2486".
- it does not include a new test specific for the task
mysql-test/include/ps_query.inc:
Adjusted according to standard NATURAL/USING join semantics.,
mysql-test/r/bdb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/derived.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/errors.result:
The column as a whole cannot be resolved, so different error message.
mysql-test/r/fulltext.result:
Adjusted according to standard JOIN ... ON semantics =>
the ON condition can refer only to the join operands.
mysql-test/r/fulltext_order_by.result:
More detailed error message.
mysql-test/r/innodb.result:
Adjusted according to standard NATURAL/USING join semantics.
This test doesn't pass completetly yet!
mysql-test/r/insert_select.result:
More detailed error message.
mysql-test/r/join.result:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/r/join_crash.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/join_nested.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/join_outer.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/multi_update.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/null_key.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/order_by.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_2myisam.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_3innodb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_4heap.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_5merge.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_6bdb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/ps_7ndb.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/select.result:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one failing test case which is commented with
WL#2486 in the test file.
mysql-test/r/subselect.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/type_ranges.result:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/r/union.result:
More detailed error message.
mysql-test/t/bdb.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/errors.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/fulltext.test:
Adjusted according to standard JOIN ... ON semantics =>
the ON condition can refer only to the join operands.
mysql-test/t/fulltext_order_by.test:
More detailed error message.
mysql-test/t/innodb.test:
Adjusted according to standard NATURAL/USING join semantics.
This test doesn't pass completetly yet!
mysql-test/t/insert_select.test:
More detailed error message.
mysql-test/t/join.test:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/t/join_crash.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/join_nested.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/join_outer.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/null_key.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/order_by.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/select.test:
Adjusted according to standard NATURAL/USING join semantics.
NOTICE: there is one test case that still fails, and it is
commeted out and marked with WL#2486 in the test file.
mysql-test/t/subselect.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/type_ranges.test:
Adjusted according to standard NATURAL/USING join semantics.
mysql-test/t/union.test:
More detailed error message.
sql/item.cc:
- extra parameter to find_field_in_tables
- find_field_in_real_table renamed to find_field_in_table
- fixed comments/typos
sql/item.h:
- added [first | last]_name_resolution_table to class
Name_resolution_context
- commented old code
- standardized formatting
sql/mysql_priv.h:
- refactored the find_field_in_XXX procedures,
- added a new procedure for natural join table references,
- renamed the find_field_in_XXX procedures to clearer names
sql/sp.cc:
- pass the top-most list of the FROM clause to setup_tables
- extra parameter to find_field_in_tables
sql/sql_acl.cc:
- renamed find_field_in_table => find_field_in_table_ref
- extra parameter to find_field_in_table_ref
- commented old code
sql/sql_base.cc:
This file contains the core of the implementation of the processing
of NATURAL/USING joins (WL#2486).
- added many comments to old code
- refactored the group of find_field_in_XXX procedures, and added a
new procedure for natural joins. There is one find_field_in_XXX procedure
per each type of table reference (stored table, merge view, or natural
join); one meta-procedure that selects the correct one depeneding on the
table reference; and one procedure that goes over a list of table
referenes.
- NATURAL/USING joins are processed through the procedures:
mark_common_columns, store_natural_using_join_columns,
store_top_level_join_columns, setup_natural_join_row_types.
The entry point to processing NATURAL/USING joins is the
procedure 'setup_natural_join_row_types'.
- Replaced the specialized Field_iterator_XXX iterators with one
generic iterator over the fields of a table reference.
- Simplified 'insert_fields' and 'setup_conds' due to encapsulation of
the processing of natural joins in a separate set of procedures.
sql/sql_class.h:
- Commented old code.
sql/sql_delete.cc:
- Pass the FROM clause to setup_tables.
sql/sql_help.cc:
- pass the end name resolution table to find_field_in_tables
- adjust the list of tables for name resolution
sql/sql_insert.cc:
- Changed the code that saves and restores the current context to
support the list of tables for name resolution -
context->first_name_resolution_table, and
table_list->next_name_resolution_table.
Needed to support an ugly trick to resolve inserted columns only in
the first table.
- Added Name_resolution_context::[first | last]_name_resolution_table.
- Commented old code
sql/sql_lex.cc:
- set select_lex.parent_lex correctly
- set correct state of the current name resolution context
sql/sql_lex.h:
- Added a stack of name resolution contexts to support local
contexts for JOIN ... ON conditions.
- Commented old code.
sql/sql_load.cc:
- Pass the FROM clause to setup_tables.
sql/sql_olap.cc:
- Pass the FROM clause to setup_tables.
sql/sql_parse.cc:
- correctly set SELECT_LEX::parent_lex
- set the first table of the current name resoltion context
- added support for NATURAL/USING joins
- commented old code
sql/sql_select.cc:
- Pass the FROM clause to setup_tables.
- Pass the end table to find_field_in_tables
- Improved comments
sql/sql_show.cc:
- Set SELECT_LEX::parent_lex.
sql/sql_update.cc:
- Pass the FROM clause to setup_tables.
sql/sql_yacc.yy:
- Added support for a stack of name resolution contexts needed to
implement name resolution for JOIN ... ON. A context is pushed
for each new JOIN ... ON, and popped afterwards.
- Added support for NATURAL/USING joins.
sql/table.cc:
- Added new class Natural_join_column to hide the heterogeneous
representation of column references for stored tables and for
views.
- Added a new list TABLE_LIST::next_name_resolution_table to
support name resolution with NATURAL/USING joins. Also added
other members to TABLE_LIST to support NATURAL/USING joins.
- Added a generic iterator over the fields of table references
of various types - class Field_iterator_table_ref
sql/table.h:
- Added new class Natural_join_column to hide the heterogeneous
representation of column references for stored tables and for
views.
- Added a new list TABLE_LIST::next_name_resolution_table to
support name resolution with NATURAL/USING joins. Also added
other members to TABLE_LIST to support NATURAL/USING joins.
- Added a generic iterator over the fields of table references
of various types - class Field_iterator_table_ref
tests/mysql_client_test.c:
Adjusted according to standard NATURAL JOIN syntax.
2005-08-12 16:57:19 +02:00
|
|
|
|
select ticket2.id FROM t2 as ttxt,t2
|
|
|
|
|
INNER JOIN t1 as ticket2 ON ticket2.id = t2.ticket
|
|
|
|
|
WHERE ticket2.id = ticket2.ticket and
|
2001-04-17 14:17:22 +02:00
|
|
|
|
match(ttxt.inhalt) against ('foobar');
|
2001-01-07 23:04:30 +01:00
|
|
|
|
|
|
|
|
|
# Check that we get 'fulltext' index in SHOW CREATE
|
|
|
|
|
|
|
|
|
|
show keys from t2;
|
|
|
|
|
show create table t2;
|
2001-02-28 02:32:40 +01:00
|
|
|
|
|
|
|
|
|
# check for bug reported by Stephan Skusa
|
|
|
|
|
|
2001-02-28 11:43:08 +01:00
|
|
|
|
select * from t2 where MATCH inhalt AGAINST (NULL);
|
|
|
|
|
|
2001-04-17 14:17:22 +02:00
|
|
|
|
# MATCH in HAVING (pretty useless, but still it should work)
|
|
|
|
|
|
|
|
|
|
select * from t2 where MATCH inhalt AGAINST ('foobar');
|
|
|
|
|
select * from t2 having MATCH inhalt AGAINST ('foobar');
|
|
|
|
|
|
2001-08-03 23:10:00 +02:00
|
|
|
|
#
|
|
|
|
|
# check of fulltext errors
|
|
|
|
|
#
|
|
|
|
|
|
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
|
|
|
|
--error 1283
|
2003-10-15 13:40:20 +02:00
|
|
|
|
CREATE TABLE t3 (t int(11),i text,fulltext tix (t,i));
|
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
|
|
|
|
--error 1283
|
2003-10-15 13:40:20 +02:00
|
|
|
|
CREATE TABLE t3 (t int(11),i text,
|
|
|
|
|
j varchar(200) CHARACTER SET latin2,
|
|
|
|
|
fulltext tix (i,j));
|
|
|
|
|
|
2001-08-03 23:10:00 +02:00
|
|
|
|
CREATE TABLE t3 (
|
|
|
|
|
ticket int(11),
|
|
|
|
|
inhalt text,
|
|
|
|
|
KEY tig (ticket),
|
|
|
|
|
fulltext index tix (inhalt)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
--error 1210
|
2001-08-13 14:24:29 +02:00
|
|
|
|
select * from t2 where MATCH inhalt AGAINST (t2.inhalt);
|
|
|
|
|
--error 1191
|
|
|
|
|
select * from t2 where MATCH ticket AGAINST ('foobar');
|
2001-08-03 23:10:00 +02:00
|
|
|
|
--error 1210
|
2001-08-13 14:24:29 +02:00
|
|
|
|
select * from t2,t3 where MATCH (t2.inhalt,t3.inhalt) AGAINST ('foobar');
|
2001-08-03 23:10:00 +02:00
|
|
|
|
|
|
|
|
|
drop table t1,t2,t3;
|
2001-10-20 16:37:26 +02:00
|
|
|
|
|
|
|
|
|
#
|
2002-04-18 20:44:18 +02:00
|
|
|
|
# three more bugtests
|
2001-10-20 16:37:26 +02:00
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
|
id int(11) auto_increment,
|
|
|
|
|
title varchar(100) default '',
|
|
|
|
|
PRIMARY KEY (id),
|
2003-06-16 00:13:23 +02:00
|
|
|
|
KEY ind5 (title)
|
2003-12-10 05:31:42 +01:00
|
|
|
|
) ENGINE=MyISAM;
|
2001-10-20 16:37:26 +02:00
|
|
|
|
|
2003-06-16 00:13:23 +02:00
|
|
|
|
CREATE FULLTEXT INDEX ft1 ON t1(title);
|
2001-10-20 16:37:26 +02:00
|
|
|
|
insert into t1 (title) values ('this is a test');
|
2002-04-18 20:44:18 +02:00
|
|
|
|
select * from t1 where match title against ('test' in boolean mode);
|
2001-10-20 16:37:26 +02:00
|
|
|
|
update t1 set title='this is A test' where id=1;
|
|
|
|
|
check table t1;
|
|
|
|
|
update t1 set title='this test once revealed a bug' where id=1;
|
|
|
|
|
select * from t1;
|
2002-01-13 16:35:12 +01:00
|
|
|
|
update t1 set title=NULL where id=1;
|
2002-03-01 17:57:08 +01:00
|
|
|
|
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
|
|
|
|
# one more bug - const_table related
|
|
|
|
|
|
2003-12-10 05:31:42 +01:00
|
|
|
|
CREATE TABLE t1 (a int(11), b text, FULLTEXT KEY (b)) ENGINE=MyISAM;
|
2002-03-01 17:57:08 +01:00
|
|
|
|
insert into t1 values (1,"I wonder why the fulltext index doesnt work?");
|
|
|
|
|
SELECT * from t1 where MATCH (b) AGAINST ('apples');
|
|
|
|
|
|
2002-05-07 20:27:39 +02:00
|
|
|
|
insert into t1 values (2,"fullaaa fullzzz");
|
|
|
|
|
select * from t1 where match b against ('full*' in boolean mode);
|
|
|
|
|
|
2002-03-01 17:57:08 +01:00
|
|
|
|
drop table t1;
|
2003-12-10 05:31:42 +01:00
|
|
|
|
CREATE TABLE t1 ( id int(11) NOT NULL auto_increment primary key, mytext text NOT NULL, FULLTEXT KEY mytext (mytext)) ENGINE=MyISAM;
|
2002-06-14 14:06:01 +02:00
|
|
|
|
INSERT INTO t1 VALUES (1,'my small mouse'),(2,'la-la-la'),(3,'It is so funny'),(4,'MySQL Tutorial');
|
|
|
|
|
select 8 from t1;
|
|
|
|
|
drop table t1;
|
2002-05-07 20:27:39 +02:00
|
|
|
|
|
2002-10-09 20:57:13 +02:00
|
|
|
|
#
|
|
|
|
|
# Check bug reported by Julian Ladisch
|
|
|
|
|
# ERROR 1030: Got error 127 from table handler
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 (a text, fulltext key (a));
|
|
|
|
|
insert into t1 values ('aaaa');
|
|
|
|
|
repair table t1;
|
|
|
|
|
select * from t1 where match (a) against ('aaaa');
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2003-04-23 13:44:39 +02:00
|
|
|
|
#
|
2003-07-31 13:45:35 +02:00
|
|
|
|
# bug #283 by jocelyn fournier <joc@presence-pc.com>
|
2003-04-23 13:44:39 +02:00
|
|
|
|
# FULLTEXT index on a TEXT filed converted to a CHAR field doesn't work anymore
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 ( ref_mag text not null, fulltext (ref_mag));
|
|
|
|
|
insert into t1 values ('test');
|
|
|
|
|
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
|
|
|
|
|
alter table t1 change ref_mag ref_mag char (255) not null;
|
|
|
|
|
select ref_mag from t1 where match ref_mag against ('+test' in boolean mode);
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2003-07-31 13:45:35 +02:00
|
|
|
|
#
|
|
|
|
|
# bug #942: JOIN
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 (t1_id int(11) primary key, name varchar(32));
|
|
|
|
|
insert into t1 values (1, 'data1');
|
|
|
|
|
insert into t1 values (2, 'data2');
|
|
|
|
|
create table t2 (t2_id int(11) primary key, t1_id int(11), name varchar(32));
|
|
|
|
|
insert into t2 values (1, 1, 'xxfoo');
|
|
|
|
|
insert into t2 values (2, 1, 'xxbar');
|
|
|
|
|
insert into t2 values (3, 1, 'xxbuz');
|
|
|
|
|
select * from t1 join t2 using(`t1_id`) where match (t1.name, t2.name) against('xxfoo' in boolean mode);
|
2003-11-03 23:18:55 +01:00
|
|
|
|
|
|
|
|
|
#
|
2005-06-17 21:44:17 +02:00
|
|
|
|
# Bug #7858: bug with many short (< ft_min_word_len) words in boolean search
|
2003-11-03 23:18:55 +01:00
|
|
|
|
#
|
2005-06-17 21:44:17 +02:00
|
|
|
|
select * from t2 where match name against ('*a*b*c*d*e*f*' in boolean mode);
|
2003-07-31 13:45:35 +02:00
|
|
|
|
drop table t1,t2;
|
2003-10-20 15:53:48 +02:00
|
|
|
|
|
2004-10-29 14:24:06 +02:00
|
|
|
|
#
|
|
|
|
|
# bug with repair-by-sort and incorrect records estimation
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 (a text, fulltext key (a));
|
|
|
|
|
insert into t1 select "xxxx yyyy zzzz";
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2003-10-20 15:53:48 +02:00
|
|
|
|
#
|
|
|
|
|
# UTF8
|
|
|
|
|
#
|
|
|
|
|
SET NAMES latin1;
|
|
|
|
|
CREATE TABLE t1 (t text character set utf8 not null, fulltext(t));
|
|
|
|
|
INSERT t1 VALUES ('Mit freundlichem Gr<47><72>'), ('aus Osnabr<62>ck');
|
|
|
|
|
SET NAMES koi8r;
|
|
|
|
|
INSERT t1 VALUES ("<22><><EFBFBD> <20><> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>!"),
|
|
|
|
|
("<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>!"),("<22> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!");
|
2003-11-08 15:41:24 +01:00
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
|
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('<27><><EFBFBD>*' IN BOOLEAN MODE);
|
2003-10-20 15:53:48 +02:00
|
|
|
|
SELECT * FROM t1 WHERE MATCH t AGAINST ('<27><><EFBFBD>' IN BOOLEAN MODE);
|
2003-11-08 15:41:24 +01:00
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabr<62>ck');
|
2003-10-20 15:53:48 +02:00
|
|
|
|
SET NAMES latin1;
|
2003-11-08 15:41:24 +01:00
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabr<62>ck');
|
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck');
|
2004-09-15 20:47:45 +02:00
|
|
|
|
SELECT t, collation(t),FORMAT(MATCH t AGAINST ('Osnabruck'),6) FROM t1 WHERE MATCH t AGAINST ('Osnabruck');
|
2003-11-08 15:41:24 +01:00
|
|
|
|
#alter table t1 modify t text character set latin1 collate latin1_german2_ci not null;
|
|
|
|
|
alter table t1 modify t varchar(200) collate latin1_german2_ci not null;
|
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabr<62>ck');
|
|
|
|
|
SELECT t, collation(t) FROM t1 WHERE MATCH t AGAINST ('Osnabrueck');
|
2003-10-20 15:53:48 +02:00
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2004-06-10 21:18:57 +02:00
|
|
|
|
#
|
|
|
|
|
# bug#3964
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t1 (s varchar(255), FULLTEXT (s)) DEFAULT CHARSET=utf8;
|
|
|
|
|
insert into t1 (s) values ('p<>ra para para'),('para para para');
|
|
|
|
|
select * from t1 where match(s) against('para' in boolean mode);
|
|
|
|
|
select * from t1 where match(s) against('par*' in boolean mode);
|
|
|
|
|
DROP TABLE t1;
|
2004-11-17 15:28:37 +01:00
|
|
|
|
|
2004-11-17 13:38:35 +01:00
|
|
|
|
#
|
|
|
|
|
# icc -ip bug (ip = interprocedural optimization)
|
|
|
|
|
# bug#5528
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (h text, FULLTEXT (h));
|
|
|
|
|
INSERT INTO t1 VALUES ('Jesses Hasse Ling and his syncopators of Swing');
|
|
|
|
|
REPAIR TABLE t1;
|
|
|
|
|
select count(*) from t1;
|
|
|
|
|
drop table t1;
|
|
|
|
|
|
2005-02-16 10:13:29 +01:00
|
|
|
|
#
|
|
|
|
|
# testing out of bounds memory access in ft_nlq_find_relevance()
|
|
|
|
|
# (bug#8522); visible in valgrind.
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 ( a TEXT, FULLTEXT (a) );
|
|
|
|
|
INSERT INTO t1 VALUES ('testing ft_nlq_find_relevance');
|
|
|
|
|
SELECT MATCH(a) AGAINST ('nosuchword') FROM t1;
|
|
|
|
|
DROP TABLE t1;
|
2004-11-24 23:16:16 +01:00
|
|
|
|
#
|
|
|
|
|
# bug#6784
|
|
|
|
|
# mi_flush_bulk_insert (on dup key error in mi_write)
|
|
|
|
|
# was mangling info->dupp_key_pos
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
create table t1 (a int primary key, b text, fulltext(b));
|
|
|
|
|
create table t2 (a int, b text);
|
|
|
|
|
insert t1 values (1, "aaaa"), (2, "bbbb");
|
|
|
|
|
insert t2 values (10, "aaaa"), (2, "cccc");
|
|
|
|
|
replace t1 select * from t2;
|
|
|
|
|
drop table t1, t2;
|
|
|
|
|
|
2005-02-14 15:54:12 +01:00
|
|
|
|
#
|
|
|
|
|
# bug#8351
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (t VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci, FULLTEXT (t));
|
|
|
|
|
SET NAMES latin1;
|
|
|
|
|
INSERT INTO t1 VALUES('Mit freundlichem Gr<47><72> aus Osnabr<62>ck');
|
|
|
|
|
SELECT COUNT(*) FROM t1 WHERE MATCH(t) AGAINST ('"osnabr<62>ck"' IN BOOLEAN MODE);
|
|
|
|
|
DROP TABLE t1;
|
2005-07-28 02:22:47 +02:00
|
|
|
|
|
2005-08-02 08:33:26 +02:00
|
|
|
|
#
|
|
|
|
|
# BUG#11684 - repair crashes mysql when table has fulltext index
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a VARCHAR(30), FULLTEXT(a));
|
|
|
|
|
INSERT INTO t1 VALUES('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
|
|
|
|
|
SET myisam_repair_threads=2;
|
|
|
|
|
REPAIR TABLE t1;
|
|
|
|
|
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
2005-11-12 08:25:14 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# BUG#5686 - #1034 - Incorrect key file for table - only utf8
|
|
|
|
|
#
|
|
|
|
|
INSERT INTO t1 VALUES('testword\'\'');
|
|
|
|
|
SELECT a FROM t1 WHERE MATCH a AGAINST('testword' IN BOOLEAN MODE);
|
2005-11-26 19:36:11 +01:00
|
|
|
|
SELECT a FROM t1 WHERE MATCH a AGAINST('testword\'\'' IN BOOLEAN MODE);
|
2005-08-02 08:33:26 +02:00
|
|
|
|
DROP TABLE t1;
|
2005-08-02 09:12:37 +02:00
|
|
|
|
|
2006-01-13 18:25:12 +01:00
|
|
|
|
#
|
|
|
|
|
# BUG#13835: max key length is 1000 bytes when trying to create
|
|
|
|
|
# a fulltext index
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (a VARCHAR(10000), FULLTEXT(a));
|
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2006-02-01 17:40:12 +01:00
|
|
|
|
#
|
|
|
|
|
# BUG#14496: Crash or strange results with prepared statement,
|
|
|
|
|
# MATCH and FULLTEXT
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (a TEXT, FULLTEXT KEY(a));
|
|
|
|
|
INSERT INTO t1 VALUES('test'),('test1'),('test');
|
2006-03-22 14:57:24 +01:00
|
|
|
|
PREPARE stmt from "SELECT a, FORMAT(MATCH(a) AGAINST('test1 test'),6) FROM t1 WHERE MATCH(a) AGAINST('test1 test')";
|
2006-02-01 17:40:12 +01:00
|
|
|
|
EXECUTE stmt;
|
|
|
|
|
EXECUTE stmt;
|
|
|
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2007-04-12 23:31:34 +02:00
|
|
|
|
#
|
|
|
|
|
# BUG#25951 - ignore/use index does not work with fulltext
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (a VARCHAR(255), FULLTEXT(a));
|
|
|
|
|
SELECT * FROM t1 IGNORE INDEX(a) WHERE MATCH(a) AGAINST('test');
|
|
|
|
|
ALTER TABLE t1 DISABLE KEYS;
|
|
|
|
|
--error 1191
|
|
|
|
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST('test');
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2007-10-30 11:46:43 +01:00
|
|
|
|
#
|
|
|
|
|
# BUG#11392 - fulltext search bug
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1(a TEXT);
|
|
|
|
|
INSERT INTO t1 VALUES(' aaaaa aaaa');
|
|
|
|
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST ('"aaaa"' IN BOOLEAN MODE);
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
2005-07-28 02:22:47 +02:00
|
|
|
|
# End of 4.1 tests
|
2008-11-11 10:10:51 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# BUG#38842 - Fix for 25951 seems incorrect
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1 (a VARCHAR(255), b INT, FULLTEXT(a), KEY(b));
|
|
|
|
|
INSERT INTO t1 VALUES('test', 1),('test', 1),('test', 1),('test', 1),
|
|
|
|
|
('test', 1),('test', 2),('test', 3),('test', 4);
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1 USE INDEX(a)
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1 FORCE INDEX(a)
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1 IGNORE INDEX(a)
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1 USE INDEX(b)
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
EXPLAIN SELECT * FROM t1 FORCE INDEX(b)
|
|
|
|
|
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
|
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
2008-11-28 15:17:13 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# BUG#37245 - Full text search problem
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1(a CHAR(10));
|
|
|
|
|
INSERT INTO t1 VALUES('aaa15');
|
|
|
|
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa16' IN BOOLEAN MODE) FROM t1;
|
|
|
|
|
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE) FROM t1;
|
|
|
|
|
DROP TABLE t1;
|
2009-02-12 10:49:44 +01:00
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
# BUG#36737 - having + full text operator crashes mysql
|
|
|
|
|
#
|
|
|
|
|
CREATE TABLE t1(a TEXT);
|
|
|
|
|
--error ER_WRONG_ARGUMENTS
|
|
|
|
|
SELECT GROUP_CONCAT(a) AS st FROM t1 HAVING MATCH(st) AGAINST('test' IN BOOLEAN MODE);
|
|
|
|
|
DROP TABLE t1;
|