config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/innodb_fts/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/innodb_fts/t/plugin_1.test

--source include/have_innodb.inc
--source include/have_simple_parser.inc
# Restart is not supported in embedded
--source include/not_embedded.inc
--source include/no_valgrind_without_big.inc

#-----------------------------------------------------------------------------
# wl6943 : Support external parser
# Adding FTS check with "simple_praser" (external parser plugin)
# - Table with external parser + default parser
# - FTS index with single and two columns
# - external parser index using alter table
# - check with transactional statement
# - Check utf8 charset table
# - alter table commands Add/drop fulltext index and column
# - NULL values in table
# - FTS query with join condition
# - Invalid query
#-----------------------------------------------------------------------------

# Install fts parser plugin
--replace_regex /\.dll/.so/
eval INSTALL PLUGIN simple_parser SONAME '$SIMPLE_PARSER';


-- echo # Test Part 2: Create Index Test(CREATE TABLE WITH FULLTEXT INDEX)
CREATE TABLE articles (
	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
	title VARCHAR(200),
	body TEXT,
	body1 TEXT,
	body2 TEXT,
	body3 TEXT,
	FULLTEXT (title, body) WITH PARSER simple_parser,
	FULLTEXT (title, body1) WITH PARSER simple_parser,
	FULLTEXT (body3)
	) ENGINE=InnoDB;

INSERT INTO articles (title, body,body1,body2,body3) VALUES
  ('MySQL Tutorial','DBMS stands for MySQL DataBase ...','row1col4','row1col5','row1col5'),
  ('How To Use MySQL Well','After you went through a ...','row2col4','row2col5','row2col5'),
  ('Optimizing MySQL','In this tutorial we will show ...','row3col4','row3col5','row3col5 for'),
  ('1001 MySQL Tricks','How to use full-text search engine','row4col4','row4col5','row4col5'),
  ('Go MySQL Tricks','How to use full text search engine','row5col4 this','row5col5','row5col5');

ALTER TABLE articles ADD FULLTEXT INDEX (body1,body2) WITH PARSER simple_parser;
ALTER TABLE articles ADD FULLTEXT INDEX (body2,body3);
ALTER TABLE articles ADD FULLTEXT INDEX (body) WITH PARSER simple_parser;

ANALYZE TABLE articles;

--replace_regex /\.dll/.so/
SELECT
  PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE,
  PLUGIN_LIBRARY
FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%simple_parser%';


INSERT INTO articles (title, body,body1,body2,body3) VALUES (NULL,NULL,NULL,NULL,NULL);

# Simple term search
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('mysql');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('dbms' WITH QUERY EXPANSION);
SELECT * FROM articles WHERE
	MATCH(title, body1) AGAINST('row1col4');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('row5col4' WITH QUERY EXPANSION);
SELECT * FROM articles WHERE
	MATCH(body1, body2) AGAINST('row3col4');
SELECT * FROM articles WHERE
	MATCH(body) AGAINST('well' WITH QUERY EXPANSION);

# Test stopword and word len less than fts_min_token_size
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('will go');
#stopword
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('this');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('for');
SELECT * FROM articles WHERE
	MATCH(body1, body2) AGAINST('this');
SELECT * FROM articles WHERE
	MATCH(body) AGAINST('this');


-- echo # Test plugin parser tokenizer difference
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('full-text');

SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('full text');

# No result here, we get '"mysql' 'database"' by simple parser
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('"mysql database"' IN BOOLEAN MODE);


# Phrase search
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('"mysql database"' IN BOOLEAN MODE);


# use transaction
START TRANSACTION;
INSERT INTO articles (title, body,body1,body2,body3) VALUES
  ('latest Tutorial','transactional properties tests ...','row6col4','row6col5','row6col5'),
  ('certification guide','all mysql exams tests ...','row7col4','row7col5','row7col5');
# FTS do not parse those uncommitted rows, only one row should show up
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('mysql');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('Tutorial');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('guide');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('tests');

SELECT * FROM articles WHERE
	MATCH(title, body1) AGAINST('row6col4');
SELECT * FROM articles WHERE
	MATCH(body1,body2) AGAINST('row7col5');
# uncommitted records can be seen with non fts queries
SELECT * FROM articles WHERE id > 5;

ROLLBACK;
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('mysql');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('Tutorial');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('guide');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('tests');

SELECT * FROM articles WHERE
	MATCH(title, body1) AGAINST('row6col4');
SELECT * FROM articles WHERE
	MATCH(body1,body2) AGAINST('row7col5');

START TRANSACTION;
INSERT INTO articles (title, body,body1,body2,body3) VALUES
  ('latest Tutorial','transactional properties tests ...','row6col4','row6col5','row6col5');
COMMIT;
# FTS only parse committed rows, now rows should show up
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('mysql');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('Tutorial');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('guide');
SELECT * FROM articles WHERE
	MATCH(title, body) AGAINST('tests');
SELECT * FROM articles WHERE
	MATCH(body) AGAINST('tests');

SELECT * FROM articles WHERE
	MATCH(title, body1) AGAINST('row6col4');
SELECT * FROM articles WHERE
	MATCH(body1,body2) AGAINST('row7col5');

# Alter table Add/drop column
SELECT COUNT(*) FROM articles;
ALTER TABLE articles ADD COLUMN col_test VARCHAR(100) DEFAULT 'check add drop column';
SELECT COUNT(*) FROM articles WHERE col_test = 'check add drop column';
ALTER TABLE articles ADD FULLTEXT INDEX `idx_add` (col_test) WITH PARSER simple_parser;
INSERT INTO articles (title, body,body1,body2,body3,col_test) VALUES
  ('value','value','value','value','value','value');
SELECT COUNT(*) AS score FROM articles WHERE
	MATCH(col_test) AGAINST('check');
SELECT COUNT(*) AS score FROM articles WHERE
	MATCH(col_test) AGAINST('value');

ALTER TABLE articles DROP COLUMN col_test;

SELECT * FROM articles WHERE
        MATCH(title, body1) AGAINST('row6col4');
SELECT * FROM articles WHERE
        MATCH(body1,body2) AGAINST('row7col5');

DROP TABLE articles;
# Get warning here


#set names utf8;
SET NAMES UTF8;


--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings

# Create FTS table
EVAL CREATE TABLE t1 (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        a VARCHAR(200),
        b TEXT,
        FULLTEXT (b) WITH PARSER simple_parser
        ) CHARACTER SET = UTF8,ENGINE = InnoDB;


# Insert rows
INSERT INTO t1 (a,b) VALUES
        ('MySQL from Tutorial','DBMS stands for DataBase ...')  ,
        ('when To Use MySQL Well','After that you went through a ...'),
        ('where will Optimizing MySQL','what In this tutorial we will show ...'),
        ('Я могу есть стекло', 'оно мне Mне вредит'),
        ('Μπορῶ νὰ φάω σπασμένα' ,'γυαλιὰ χωρὶς νὰ πάθω τίποτα'),
        ('Sævör grét', 'áðan því úlpan var ónýt');

CREATE FULLTEXT INDEX idx on t1 (a,b) WITH PARSER simple_parser;
INSERT INTO t1 (a,b) VALUES
        ('adding record using session 1','for verifying multiple concurrent transactions'),
        ('Мога да ям стъкло', 'то Mне ми вреди');

# no record expected - records not seen in boolean for simple_parser
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('+Mне' IN BOOLEAN MODE);
# 2 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('Mне');
# 1 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('могу');
SELECT * FROM t1 WHERE MATCH (b) AGAINST ('áðan');
# 3 record expected
SELECT * FROM t1 WHERE MATCH (b) AGAINST ('áðan') OR MATCH (a,b) AGAINST ('Mне могу');
# 1 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('стъкло');
# 1 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('"dbms stands"@05' IN BOOLEAN MODE);
# no records for stopword
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('for');

DROP TABLE t1;

# Set fts_min_token_size, max_token_size values
# Write file to make mysql-test-run.pl start up the server again
SELECT @@innodb_ft_min_token_size,@@innodb_ft_max_token_size;

EVAL CREATE TABLE t1 (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        a VARCHAR(200),
        b TEXT,
        FULLTEXT (b) WITH PARSER simple_parser
        ) CHARACTER SET = UTF8,ENGINE = InnoDB;


INSERT INTO t1 (a,b) VALUES
        ('MySQL from Tutorial','DBMS stands for DataBase ...')  ,
        ('when To Use MySQL Well','After that you went through a ...'),
        ('where will Optimizing MySQL','what In this tutorial we will show ...'),
        ('Я могу есть стекло', 'оно мне Mне вредит'),
        ('Μπορῶ νὰ φάω σπασμένα' ,'γυαλιὰ χωρὶς νὰ πάθω τίποτα'),
        ('Sævör grét', 'áðan því úlpan var ónýt');

CREATE FULLTEXT INDEX idx on t1 (a,b) WITH PARSER simple_parser;
INSERT INTO t1 (a,b) VALUES
        ('adding record using session 1','for verifying multiple concurrent transactions'),
        ('Мога да ям стъкло', 'то Mне ми вреди'),(NULL,NULL);

let $restart_parameters = restart:--innodb_ft_min_token_size=5 --innodb_ft_max_token_size=10;
--source include/restart_mysqld.inc

SELECT @@innodb_ft_min_token_size,@@innodb_ft_max_token_size;

ALTER TABLE t1 DROP INDEX idx;

# invalid query
--error 1191
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('+MySQL' IN BOOLEAN MODE);

CREATE FULLTEXT INDEX idx on t1 (a,b) WITH PARSER simple_parser;


ALTER TABLE t1 DROP INDEX idx;
CREATE FULLTEXT INDEX idx on t1 (a,b);

# no record expected - records not seen in boolean for simple_parser
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('+MySQL' IN BOOLEAN MODE);
#  # # 2 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('MySQL');
# no record expected as length < 5
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('dbms');
# 1 record expected as index on b built with min size 3
SELECT * FROM t1 WHERE MATCH (b) AGAINST ('show');
 # 1 record expected
SELECT * FROM t1 WHERE MATCH (b) AGAINST ('dbms') AND MATCH (a,b) AGAINST ('transactions');
#      # # 1 record expected
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('transactions');
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('"dbms stands"@05' IN BOOLEAN MODE);
# No result expected for query with null
SELECT * FROM t1 WHERE MATCH (a,b) AGAINST ('NULL' IN BOOLEAN MODE);
SELECT * FROM t1 WHERE b IS NULL or a IS NULL;


# join tables
CREATE TABLE t1_join AS SELECT * FROM t1;
CREATE FULLTEXT INDEX idx on t1_join (a,b) WITH PARSER simple_parser;
SELECT t1.id,t1_join.id FROM t1,t1_join WHERE MATCH (t1.a,t1.b) AGAINST ('Tutorial') AND t1.id = t1_join.id ;

--error ER_FT_MATCHING_KEY_NOT_FOUND
SELECT * FROM t1 WHERE MATCH (a) AGAINST ('NULL');

DROP TABLE t1;
DROP TABLE t1_join;

#
# BUG#21638891 NGRAM PARSER: FAILING ASSERTION: STATE->DEPTH > 0
#

EVAL CREATE TABLE t1 (
        a VARCHAR(200),
        FULLTEXT (a) WITH PARSER ngram
        )ENGINE = InnoDB;

SELECT * FROM t1 WHERE MATCH(a) AGAINST("')'@7" IN BOOLEAN MODE);

DROP TABLE t1;

UNINSTALL PLUGIN simple_parser;

Man Man