mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.3 into 10.4
This commit is contained in:
4
.gitmodules
vendored
4
.gitmodules
vendored
@ -1,13 +1,17 @@
|
|||||||
[submodule "libmariadb"]
|
[submodule "libmariadb"]
|
||||||
path = libmariadb
|
path = libmariadb
|
||||||
url = https://github.com/MariaDB/mariadb-connector-c.git
|
url = https://github.com/MariaDB/mariadb-connector-c.git
|
||||||
|
ignore = all
|
||||||
[submodule "storage/rocksdb/rocksdb"]
|
[submodule "storage/rocksdb/rocksdb"]
|
||||||
path = storage/rocksdb/rocksdb
|
path = storage/rocksdb/rocksdb
|
||||||
url = https://github.com/facebook/rocksdb.git
|
url = https://github.com/facebook/rocksdb.git
|
||||||
|
ignore = all
|
||||||
[submodule "wsrep-lib"]
|
[submodule "wsrep-lib"]
|
||||||
path = wsrep-lib
|
path = wsrep-lib
|
||||||
url = https://github.com/codership/wsrep-lib.git
|
url = https://github.com/codership/wsrep-lib.git
|
||||||
branch = master
|
branch = master
|
||||||
|
ignore = all
|
||||||
[submodule "extra/wolfssl/wolfssl"]
|
[submodule "extra/wolfssl/wolfssl"]
|
||||||
path = extra/wolfssl/wolfssl
|
path = extra/wolfssl/wolfssl
|
||||||
url = https://github.com/wolfSSL/wolfssl.git
|
url = https://github.com/wolfSSL/wolfssl.git
|
||||||
|
ignore = all
|
||||||
|
2
debian/additions/innotop/innotop
vendored
2
debian/additions/innotop/innotop
vendored
@ -4937,7 +4937,7 @@ sub noecho_password {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if ( $EVAL_ERROR ) {
|
if ( $EVAL_ERROR ) {
|
||||||
die "Cannot read respose; is Term::ReadKey installed? $EVAL_ERROR";
|
die "Cannot read response; is Term::ReadKey installed? $EVAL_ERROR";
|
||||||
}
|
}
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
4
debian/additions/mysqlreport
vendored
4
debian/additions/mysqlreport
vendored
@ -705,7 +705,7 @@ sub set_myisam_vals
|
|||||||
{
|
{
|
||||||
print "set_myisam_vals\n" if $op{debug};
|
print "set_myisam_vals\n" if $op{debug};
|
||||||
|
|
||||||
# should be moved elsewere
|
# should be moved elsewhere
|
||||||
$questions = $stats{'Questions'};
|
$questions = $stats{'Questions'};
|
||||||
|
|
||||||
$key_read_ratio = sprintf "%.2f",
|
$key_read_ratio = sprintf "%.2f",
|
||||||
@ -1366,7 +1366,7 @@ format QCACHE =
|
|||||||
__ Query Cache _________________________________________________________
|
__ Query Cache _________________________________________________________
|
||||||
Memory usage @>>>>>> of @>>>>>> %Usage: @>>>>>
|
Memory usage @>>>>>> of @>>>>>> %Usage: @>>>>>
|
||||||
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
|
make_short($qc_mem_used, 1), make_short($vars{'query_cache_size'}, 1), perc($qc_mem_used, $vars{'query_cache_size'})
|
||||||
Block Fragmnt @>>>>>%
|
Block Fragment @>>>>>%
|
||||||
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
|
perc($stats{'Qcache_free_blocks'}, $stats{'Qcache_total_blocks'})
|
||||||
Hits @>>>>>> @>>>>>/s
|
Hits @>>>>>> @>>>>>/s
|
||||||
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
|
make_short($stats{'Qcache_hits'}), t($stats{'Qcache_hits'})
|
||||||
|
2
debian/mariadb-server-10.4.postinst
vendored
2
debian/mariadb-server-10.4.postinst
vendored
@ -99,7 +99,7 @@ EOF
|
|||||||
|
|
||||||
# This is important to avoid dataloss when there is a removed
|
# This is important to avoid dataloss when there is a removed
|
||||||
# mysql-server version from Woody lying around which used the same
|
# mysql-server version from Woody lying around which used the same
|
||||||
# data directory and then somewhen gets purged by the admin.
|
# data directory and then somehow gets purged by the admin.
|
||||||
db_set mariadb-server/postrm_remove_database false || true
|
db_set mariadb-server/postrm_remove_database false || true
|
||||||
|
|
||||||
# Clean up old flags before setting new one
|
# Clean up old flags before setting new one
|
||||||
|
@ -1540,8 +1540,6 @@ bool backup_start(CorruptedPages &corrupted_pages)
|
|||||||
if (!write_galera_info(mysql_connection)) {
|
if (!write_galera_info(mysql_connection)) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
// copied from xtrabackup. what is it needed for here?
|
|
||||||
write_current_binlog_file(mysql_connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt_binlog_info == BINLOG_INFO_ON) {
|
if (opt_binlog_info == BINLOG_INFO_ON) {
|
||||||
|
@ -1448,14 +1448,18 @@ write_galera_info(MYSQL *connection)
|
|||||||
|
|
||||||
if ((state_uuid == NULL && state_uuid55 == NULL)
|
if ((state_uuid == NULL && state_uuid55 == NULL)
|
||||||
|| (last_committed == NULL && last_committed55 == NULL)) {
|
|| (last_committed == NULL && last_committed55 == NULL)) {
|
||||||
msg("Failed to get master wsrep state from SHOW STATUS.");
|
msg("Warning: failed to get master wsrep state from SHOW STATUS.");
|
||||||
result = false;
|
result = true;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = backup_file_printf(XTRABACKUP_GALERA_INFO,
|
result = backup_file_printf(XTRABACKUP_GALERA_INFO,
|
||||||
"%s:%s\n", state_uuid ? state_uuid : state_uuid55,
|
"%s:%s\n", state_uuid ? state_uuid : state_uuid55,
|
||||||
last_committed ? last_committed : last_committed55);
|
last_committed ? last_committed : last_committed55);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
write_current_binlog_file(connection);
|
||||||
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
free_mysql_variables(status);
|
free_mysql_variables(status);
|
||||||
|
@ -25,6 +25,7 @@ SET(HEADERS
|
|||||||
mysql.h
|
mysql.h
|
||||||
mysql_com.h
|
mysql_com.h
|
||||||
mysql_com_server.h
|
mysql_com_server.h
|
||||||
|
mariadb_capi_rename.h
|
||||||
pack.h
|
pack.h
|
||||||
my_byteorder.h
|
my_byteorder.h
|
||||||
byte_order_generic.h
|
byte_order_generic.h
|
||||||
|
@ -33,12 +33,12 @@ extern "C" {
|
|||||||
#include "my_compare.h"
|
#include "my_compare.h"
|
||||||
#include "my_tree.h"
|
#include "my_tree.h"
|
||||||
|
|
||||||
/* defines used by heap-funktions */
|
/* defines used by heap-functions */
|
||||||
|
|
||||||
#define HP_MAX_LEVELS 4 /* 128^5 records is enough */
|
#define HP_MAX_LEVELS 4 /* 128^5 records is enough */
|
||||||
#define HP_PTRS_IN_NOD 128
|
#define HP_PTRS_IN_NOD 128
|
||||||
|
|
||||||
/* struct used with heap_funktions */
|
/* struct used with heap_functions */
|
||||||
|
|
||||||
typedef struct st_heapinfo /* Struct from heap_info */
|
typedef struct st_heapinfo /* Struct from heap_info */
|
||||||
{
|
{
|
||||||
@ -107,7 +107,7 @@ typedef struct st_heap_block
|
|||||||
ulong last_allocated; /* number of records there is allocated space for */
|
ulong last_allocated; /* number of records there is allocated space for */
|
||||||
} HP_BLOCK;
|
} HP_BLOCK;
|
||||||
|
|
||||||
struct st_heap_info; /* For referense */
|
struct st_heap_info; /* For reference */
|
||||||
|
|
||||||
typedef struct st_hp_keydef /* Key definition with open */
|
typedef struct st_hp_keydef /* Key definition with open */
|
||||||
{
|
{
|
||||||
|
@ -372,7 +372,7 @@ int json_find_paths_next(json_engine_t *je, json_find_paths_t *state);
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Converst JSON string constant into ordinary string constant
|
Convert JSON string constant into ordinary string constant
|
||||||
which can involve unpacking json escapes and changing character set.
|
which can involve unpacking json escapes and changing character set.
|
||||||
Returns negative integer in the case of an error,
|
Returns negative integer in the case of an error,
|
||||||
the length of the result otherwise.
|
the length of the result otherwise.
|
||||||
@ -383,7 +383,7 @@ int json_unescape(CHARSET_INFO *json_cs,
|
|||||||
uchar *res, uchar *res_end);
|
uchar *res, uchar *res_end);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Converst ordinary string constant into JSON string constant.
|
Convert ordinary string constant into JSON string constant.
|
||||||
which can involve appropriate escaping and changing character set.
|
which can involve appropriate escaping and changing character set.
|
||||||
Returns negative integer in the case of an error,
|
Returns negative integer in the case of an error,
|
||||||
the length of the result otherwise.
|
the length of the result otherwise.
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A better inplementation of the UNIX ctype(3) library.
|
A better implementation of the UNIX ctype(3) library.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _m_ctype_h
|
#ifndef _m_ctype_h
|
||||||
@ -123,7 +123,7 @@ uint16 *my_uca_contraction2_weight(const MY_CONTRACTIONS *c,
|
|||||||
my_wc_t wc1, my_wc_t wc2);
|
my_wc_t wc1, my_wc_t wc2);
|
||||||
|
|
||||||
|
|
||||||
/* Collation weights on a single level (e.g. primary, secondary, tertiarty) */
|
/* Collation weights on a single level (e.g. primary, secondary, tertiary) */
|
||||||
typedef struct my_uca_level_info_st
|
typedef struct my_uca_level_info_st
|
||||||
{
|
{
|
||||||
my_wc_t maxchar;
|
my_wc_t maxchar;
|
||||||
@ -998,7 +998,7 @@ uint32 my_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
|
|||||||
An extended version of my_convert(), to pass non-default mb_wc() and wc_mb().
|
An extended version of my_convert(), to pass non-default mb_wc() and wc_mb().
|
||||||
For example, String::copy_printable() which is used in
|
For example, String::copy_printable() which is used in
|
||||||
Protocol::store_warning() uses this to escape control
|
Protocol::store_warning() uses this to escape control
|
||||||
and non-convertable characters.
|
and non-convertible characters.
|
||||||
*/
|
*/
|
||||||
uint32 my_convert_using_func(char *to, size_t to_length, CHARSET_INFO *to_cs,
|
uint32 my_convert_using_func(char *to, size_t to_length, CHARSET_INFO *to_cs,
|
||||||
my_charset_conv_wc_mb mb_wc,
|
my_charset_conv_wc_mb mb_wc,
|
||||||
@ -1086,7 +1086,7 @@ size_t my_convert_fix(CHARSET_INFO *dstcs, char *dst, size_t dst_length,
|
|||||||
@param str - the beginning of the string
|
@param str - the beginning of the string
|
||||||
@param end - the string end (the next byte after the string)
|
@param end - the string end (the next byte after the string)
|
||||||
@return >0, for a multi-byte character
|
@return >0, for a multi-byte character
|
||||||
@rerurn 0, for a single byte character, broken sequence, empty string.
|
@return 0, for a single byte character, broken sequence, empty string.
|
||||||
*/
|
*/
|
||||||
static inline
|
static inline
|
||||||
uint my_ismbchar(CHARSET_INFO *cs, const char *str, const char *end)
|
uint my_ismbchar(CHARSET_INFO *cs, const char *str, const char *end)
|
||||||
|
@ -78,7 +78,7 @@ enum enum_dyncol_func_result
|
|||||||
ER_DYNCOL_YES= 1, /* For functions returning 0/1 */
|
ER_DYNCOL_YES= 1, /* For functions returning 0/1 */
|
||||||
ER_DYNCOL_FORMAT= -1, /* Wrong format of the encoded string */
|
ER_DYNCOL_FORMAT= -1, /* Wrong format of the encoded string */
|
||||||
ER_DYNCOL_LIMIT= -2, /* Some limit reached */
|
ER_DYNCOL_LIMIT= -2, /* Some limit reached */
|
||||||
ER_DYNCOL_RESOURCE= -3, /* Out of resourses */
|
ER_DYNCOL_RESOURCE= -3, /* Out of resources */
|
||||||
ER_DYNCOL_DATA= -4, /* Incorrect input data */
|
ER_DYNCOL_DATA= -4, /* Incorrect input data */
|
||||||
ER_DYNCOL_UNKNOWN_CHARSET= -5, /* Unknown character set */
|
ER_DYNCOL_UNKNOWN_CHARSET= -5, /* Unknown character set */
|
||||||
ER_DYNCOL_TRUNCATED= 2 /* OK, but data was truncated */
|
ER_DYNCOL_TRUNCATED= 2 /* OK, but data was truncated */
|
||||||
|
@ -126,7 +126,7 @@ enum ha_extra_function {
|
|||||||
HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */
|
HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */
|
||||||
HA_EXTRA_KEY_CACHE=10,
|
HA_EXTRA_KEY_CACHE=10,
|
||||||
HA_EXTRA_NO_KEY_CACHE=11,
|
HA_EXTRA_NO_KEY_CACHE=11,
|
||||||
HA_EXTRA_WAIT_LOCK=12, /* Wait until file is avalably (def) */
|
HA_EXTRA_WAIT_LOCK=12, /* Wait until file is available (def) */
|
||||||
HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */
|
HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */
|
||||||
HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */
|
HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */
|
||||||
HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */
|
HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */
|
||||||
@ -287,7 +287,7 @@ enum ha_base_keytype {
|
|||||||
This flag can be calculated -- it's based on key lengths comparison.
|
This flag can be calculated -- it's based on key lengths comparison.
|
||||||
*/
|
*/
|
||||||
#define HA_KEY_HAS_PART_KEY_SEG 65536
|
#define HA_KEY_HAS_PART_KEY_SEG 65536
|
||||||
/* Internal Flag Can be calcaluted */
|
/* Internal Flag Can be calculated */
|
||||||
#define HA_INVISIBLE_KEY 2<<18
|
#define HA_INVISIBLE_KEY 2<<18
|
||||||
/* Automatic bits in key-flag */
|
/* Automatic bits in key-flag */
|
||||||
|
|
||||||
@ -434,9 +434,9 @@ enum ha_base_keytype {
|
|||||||
#define HA_ERR_FIRST 120 /* Copy of first error nr.*/
|
#define HA_ERR_FIRST 120 /* Copy of first error nr.*/
|
||||||
|
|
||||||
#define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */
|
#define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */
|
||||||
#define HA_ERR_FOUND_DUPP_KEY 121 /* Dupplicate key on write */
|
#define HA_ERR_FOUND_DUPP_KEY 121 /* Duplicate key on write */
|
||||||
#define HA_ERR_INTERNAL_ERROR 122 /* Internal error */
|
#define HA_ERR_INTERNAL_ERROR 122 /* Internal error */
|
||||||
#define HA_ERR_RECORD_CHANGED 123 /* Uppdate with is recoverable */
|
#define HA_ERR_RECORD_CHANGED 123 /* Update with is recoverable */
|
||||||
#define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */
|
#define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */
|
||||||
#define HA_ERR_CRASHED 126 /* Indexfile is crashed */
|
#define HA_ERR_CRASHED 126 /* Indexfile is crashed */
|
||||||
#define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */
|
#define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */
|
||||||
@ -452,7 +452,7 @@ enum ha_base_keytype {
|
|||||||
#define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */
|
#define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */
|
||||||
#define HA_ERR_TO_BIG_ROW 139 /* Too big row */
|
#define HA_ERR_TO_BIG_ROW 139 /* Too big row */
|
||||||
#define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */
|
#define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */
|
||||||
#define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Dupplicate unique on write */
|
#define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Duplicate unique on write */
|
||||||
#define HA_ERR_UNKNOWN_CHARSET 142 /* Can't open charset */
|
#define HA_ERR_UNKNOWN_CHARSET 142 /* Can't open charset */
|
||||||
#define HA_ERR_WRONG_MRG_TABLE_DEF 143 /* conflicting tables in MERGE */
|
#define HA_ERR_WRONG_MRG_TABLE_DEF 143 /* conflicting tables in MERGE */
|
||||||
#define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */
|
#define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */
|
||||||
@ -496,7 +496,7 @@ enum ha_base_keytype {
|
|||||||
illegal data being read */
|
illegal data being read */
|
||||||
#define HA_ERR_NEW_FILE 172 /* New file format */
|
#define HA_ERR_NEW_FILE 172 /* New file format */
|
||||||
#define HA_ERR_ROWS_EVENT_APPLY 173 /* The event could not be processed
|
#define HA_ERR_ROWS_EVENT_APPLY 173 /* The event could not be processed
|
||||||
no other hanlder error happened */
|
no other handler error happened */
|
||||||
#define HA_ERR_INITIALIZATION 174 /* Error during initialization */
|
#define HA_ERR_INITIALIZATION 174 /* Error during initialization */
|
||||||
#define HA_ERR_FILE_TOO_SHORT 175 /* File too short */
|
#define HA_ERR_FILE_TOO_SHORT 175 /* File too short */
|
||||||
#define HA_ERR_WRONG_CRC 176 /* Wrong CRC on page */
|
#define HA_ERR_WRONG_CRC 176 /* Wrong CRC on page */
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
digits in one our big digit decreased by 1 (because we always put decimal
|
digits in one our big digit decreased by 1 (because we always put decimal
|
||||||
point on the border of our big digits))
|
point on the border of our big digits))
|
||||||
|
|
||||||
With normal precession we can handle 65 digits. MariaDB can store in
|
With normal precision we can handle 65 digits. MariaDB can store in
|
||||||
the .frm up to 63 digits. By default we use DECIMAL_NOT_SPECIFIED digits
|
the .frm up to 63 digits. By default we use DECIMAL_NOT_SPECIFIED digits
|
||||||
when converting strings to decimal, so we don't want to set this too high.
|
when converting strings to decimal, so we don't want to set this too high.
|
||||||
To not use up all digits for the scale we limit the number of decimals to
|
To not use up all digits for the scale we limit the number of decimals to
|
||||||
|
@ -70,7 +70,7 @@ typedef struct my_stat
|
|||||||
dev_t st_rdev; /* more major & minor device numbers (???) */
|
dev_t st_rdev; /* more major & minor device numbers (???) */
|
||||||
off_t st_size; /* size of file */
|
off_t st_size; /* size of file */
|
||||||
time_t st_atime; /* time for last read */
|
time_t st_atime; /* time for last read */
|
||||||
time_t st_mtime; /* time for last contens modify */
|
time_t st_mtime; /* time for last contents modify */
|
||||||
time_t st_ctime; /* time for last inode or contents modify */
|
time_t st_ctime; /* time for last inode or contents modify */
|
||||||
} MY_STAT;
|
} MY_STAT;
|
||||||
|
|
||||||
|
@ -670,7 +670,7 @@ typedef SOCKET_SIZE_TYPE size_socket;
|
|||||||
the mismatch of CRT and mysys file IO usage on Windows at runtime.
|
the mismatch of CRT and mysys file IO usage on Windows at runtime.
|
||||||
CRT file descriptors can be in the range 0-2047, whereas descriptors returned
|
CRT file descriptors can be in the range 0-2047, whereas descriptors returned
|
||||||
by my_open() will start with 2048. If a file descriptor with value less then
|
by my_open() will start with 2048. If a file descriptor with value less then
|
||||||
MY_FILE_MIN is passed to mysys IO function, chances are it stemms from
|
MY_FILE_MIN is passed to mysys IO function, chances are it stems from
|
||||||
open()/fileno() and not my_open()/my_fileno.
|
open()/fileno() and not my_open()/my_fileno.
|
||||||
|
|
||||||
For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN
|
For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN
|
||||||
@ -891,7 +891,7 @@ typedef long long my_ptrdiff_t;
|
|||||||
#define STDCALL
|
#define STDCALL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Typdefs for easyier portability */
|
/* Typdefs for easier portability */
|
||||||
|
|
||||||
#ifndef HAVE_UCHAR
|
#ifndef HAVE_UCHAR
|
||||||
typedef unsigned char uchar; /* Short for unsigned char */
|
typedef unsigned char uchar; /* Short for unsigned char */
|
||||||
|
@ -443,7 +443,7 @@ typedef struct st_io_cache /* Used when caching files */
|
|||||||
/*
|
/*
|
||||||
A caller will use my_b_read() macro to read from the cache
|
A caller will use my_b_read() macro to read from the cache
|
||||||
if the data is already in cache, it will be simply copied with
|
if the data is already in cache, it will be simply copied with
|
||||||
memcpy() and internal variables will be accordinging updated with
|
memcpy() and internal variables will be accordingly updated with
|
||||||
no functions invoked. However, if the data is not fully in the cache,
|
no functions invoked. However, if the data is not fully in the cache,
|
||||||
my_b_read() will call read_function to fetch the data. read_function
|
my_b_read() will call read_function to fetch the data. read_function
|
||||||
must never be invoked directly.
|
must never be invoked directly.
|
||||||
@ -487,7 +487,7 @@ typedef struct st_io_cache /* Used when caching files */
|
|||||||
myf myflags; /* Flags used to my_read/my_write */
|
myf myflags; /* Flags used to my_read/my_write */
|
||||||
/*
|
/*
|
||||||
alloced_buffer is set to the size of the buffer allocated for the IO_CACHE.
|
alloced_buffer is set to the size of the buffer allocated for the IO_CACHE.
|
||||||
Includes the overhead(storing key to ecnrypt and decrypt) for encryption.
|
Includes the overhead(storing key to encrypt and decrypt) for encryption.
|
||||||
Set to 0 if nothing is allocated.
|
Set to 0 if nothing is allocated.
|
||||||
Currently READ_NET is the only one that will use a buffer allocated
|
Currently READ_NET is the only one that will use a buffer allocated
|
||||||
somewhere else
|
somewhere else
|
||||||
@ -997,7 +997,7 @@ static inline my_hrtime_t make_hr_time(my_time_t time, ulong time_sec_part)
|
|||||||
#define my_munmap(a,b) munmap((a),(b))
|
#define my_munmap(a,b) munmap((a),(b))
|
||||||
|
|
||||||
#else
|
#else
|
||||||
/* not a complete set of mmap() flags, but only those that nesessary */
|
/* not a complete set of mmap() flags, but only those that necessary */
|
||||||
#define PROT_READ 1
|
#define PROT_READ 1
|
||||||
#define PROT_WRITE 2
|
#define PROT_WRITE 2
|
||||||
#define MAP_NORESERVE 0
|
#define MAP_NORESERVE 0
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
/* This file should be included when using myisam_funktions */
|
/* This file should be included when using myisam_functions */
|
||||||
|
|
||||||
#ifndef _myisam_h
|
#ifndef _myisam_h
|
||||||
#define _myisam_h
|
#define _myisam_h
|
||||||
@ -159,7 +159,7 @@ typedef struct st_mi_create_info
|
|||||||
my_bool with_auto_increment;
|
my_bool with_auto_increment;
|
||||||
} MI_CREATE_INFO;
|
} MI_CREATE_INFO;
|
||||||
|
|
||||||
struct st_myisam_info; /* For referense */
|
struct st_myisam_info; /* For reference */
|
||||||
struct st_mi_isam_share;
|
struct st_mi_isam_share;
|
||||||
typedef struct st_myisam_info MI_INFO;
|
typedef struct st_myisam_info MI_INFO;
|
||||||
struct st_mi_s_param;
|
struct st_mi_s_param;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
/* This file should be included when using merge_isam_funktions */
|
/* This file should be included when using merge_isam_functions */
|
||||||
|
|
||||||
#ifndef _myisammrg_h
|
#ifndef _myisammrg_h
|
||||||
#define _myisammrg_h
|
#define _myisammrg_h
|
||||||
@ -51,7 +51,7 @@ typedef struct st_mymerge_info /* Struct from h_info */
|
|||||||
ulonglong data_file_length;
|
ulonglong data_file_length;
|
||||||
ulonglong dupp_key_pos; /* Offset of the Duplicate key in the merge table */
|
ulonglong dupp_key_pos; /* Offset of the Duplicate key in the merge table */
|
||||||
uint reclength; /* Recordlength */
|
uint reclength; /* Recordlength */
|
||||||
int errkey; /* With key was dupplicated on err */
|
int errkey; /* With key was duplicated on err */
|
||||||
uint options; /* HA_OPTION_... used */
|
uint options; /* HA_OPTION_... used */
|
||||||
ulong *rec_per_key; /* for sql optimizing */
|
ulong *rec_per_key; /* for sql optimizing */
|
||||||
} MYMERGE_INFO;
|
} MYMERGE_INFO;
|
||||||
|
@ -655,7 +655,7 @@ enum enum_mysql_stmt_state
|
|||||||
|
|
||||||
length - On input: in case when lengths of input values
|
length - On input: in case when lengths of input values
|
||||||
are different for each execute, you can set this to
|
are different for each execute, you can set this to
|
||||||
point at a variable containining value length. This
|
point at a variable containing value length. This
|
||||||
way the value length can be different in each execute.
|
way the value length can be different in each execute.
|
||||||
If length is not NULL, buffer_length is not used.
|
If length is not NULL, buffer_length is not used.
|
||||||
Note, length can even point at buffer_length if
|
Note, length can even point at buffer_length if
|
||||||
|
@ -101,7 +101,7 @@ enum enum_ft_token_type
|
|||||||
<0 Must not be present
|
<0 Must not be present
|
||||||
0 Neither; the word is optional but its presence increases the relevance
|
0 Neither; the word is optional but its presence increases the relevance
|
||||||
With the default settings of the ft_boolean_syntax system variable,
|
With the default settings of the ft_boolean_syntax system variable,
|
||||||
>0 corresponds to the '+' operator, <0 corrresponds to the '-' operator,
|
>0 corresponds to the '+' operator, <0 corresponds to the '-' operator,
|
||||||
and 0 means neither operator was used.
|
and 0 means neither operator was used.
|
||||||
|
|
||||||
weight_adjust: A weighting factor that determines how much a match
|
weight_adjust: A weighting factor that determines how much a match
|
||||||
|
@ -588,7 +588,7 @@ typedef struct st_mysql_cond mysql_cond_t;
|
|||||||
This function creates both the thread instrumentation and a thread.
|
This function creates both the thread instrumentation and a thread.
|
||||||
@c mysql_thread_create is a replacement for @c pthread_create.
|
@c mysql_thread_create is a replacement for @c pthread_create.
|
||||||
The parameter P4 (or, if it is NULL, P1) will be used as the
|
The parameter P4 (or, if it is NULL, P1) will be used as the
|
||||||
instrumented thread "indentity".
|
instrumented thread "identity".
|
||||||
Providing a P1 / P4 parameter with a different value for each call
|
Providing a P1 / P4 parameter with a different value for each call
|
||||||
will on average improve performances, since this thread identity value
|
will on average improve performances, since this thread identity value
|
||||||
is used internally to randomize access to data and prevent contention.
|
is used internally to randomize access to data and prevent contention.
|
||||||
|
@ -29,7 +29,7 @@ extern "C" {
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Allow multuple chunks 'AAA= AA== AA==', binlog uses this */
|
/* Allow multiple chunks 'AAA= AA== AA==', binlog uses this */
|
||||||
#define MY_BASE64_DECODE_ALLOW_MULTIPLE_CHUNKS 1
|
#define MY_BASE64_DECODE_ALLOW_MULTIPLE_CHUNKS 1
|
||||||
|
|
||||||
extern struct base64_service_st {
|
extern struct base64_service_st {
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
@post
|
@post
|
||||||
The syntax of a format string is generally the same:
|
The syntax of a format string is generally the same:
|
||||||
% <flag> <width> <precision> <length modifier> <format>
|
% <flag> <width> <precision> <length modifier> <format>
|
||||||
where everithing but the format is optional.
|
where everything but the format is optional.
|
||||||
|
|
||||||
Three one-character flags are recognized:
|
Three one-character flags are recognized:
|
||||||
'0' has the standard zero-padding semantics;
|
'0' has the standard zero-padding semantics;
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
This service provdes functions to convert between my_time_t and
|
This service provides functions to convert between my_time_t and
|
||||||
MYSQL_TIME taking into account the current value of the time_zone
|
MYSQL_TIME taking into account the current value of the time_zone
|
||||||
session variable.
|
session variable.
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Code for generell handling of priority Queues.
|
Code for general handling of priority Queues.
|
||||||
Implementation of queues from "Algorithms in C" by Robert Sedgewick.
|
Implementation of queues from "Algorithms in C" by Robert Sedgewick.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ typedef struct st_wt_thd {
|
|||||||
1. Latest
|
1. Latest
|
||||||
Keep all weights equal.
|
Keep all weights equal.
|
||||||
2. Random
|
2. Random
|
||||||
Assight weights at random.
|
Assign weights at random.
|
||||||
(variant: modify a weight randomly before every lock request)
|
(variant: modify a weight randomly before every lock request)
|
||||||
3. Youngest
|
3. Youngest
|
||||||
Set weight to -NOW()
|
Set weight to -NOW()
|
||||||
|
6
mysql-test/include/have_gzip.inc
Normal file
6
mysql-test/include/have_gzip.inc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
--error 0,1,127
|
||||||
|
--exec gzip --version > /dev/null 2> /dev/null
|
||||||
|
if ($sys_errno)
|
||||||
|
{
|
||||||
|
--skip Requires gzip executable
|
||||||
|
}
|
7
mysql-test/include/maybe_versioning.combinations
Normal file
7
mysql-test/include/maybe_versioning.combinations
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[orig]
|
||||||
|
|
||||||
|
[vers]
|
||||||
|
system_versioning_alter_history=keep
|
||||||
|
|
||||||
|
[vers_trx]
|
||||||
|
system_versioning_alter_history=keep
|
47
mysql-test/include/maybe_versioning.inc
Normal file
47
mysql-test/include/maybe_versioning.inc
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# include file for test files that can be run with and without debug
|
||||||
|
# having debug and non-debug tests.
|
||||||
|
|
||||||
|
# If $modify_create_table is true CREATE statement must be evaluated with
|
||||||
|
# $create_options that adds WITH SYSTEM VERSIONING to the statement. Otherwise
|
||||||
|
# system versioning is added implicitly via debug options. The second variant
|
||||||
|
# can easily be added to any test but works only for debug builds.
|
||||||
|
|
||||||
|
if ($modify_create_table)
|
||||||
|
{
|
||||||
|
if ($MTR_COMBINATION_VERS)
|
||||||
|
{
|
||||||
|
let $create_options= `select ' WITH SYSTEM VERSIONING'`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($MTR_COMBINATION_VERS_TRX)
|
||||||
|
{
|
||||||
|
--skip Not tested
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$modify_create_table)
|
||||||
|
{
|
||||||
|
let $have_debug=`select version() like '%debug%'`;
|
||||||
|
|
||||||
|
if ($MTR_COMBINATION_VERS)
|
||||||
|
{
|
||||||
|
if (!$have_debug)
|
||||||
|
{
|
||||||
|
--skip Requires debug
|
||||||
|
}
|
||||||
|
--disable_query_log
|
||||||
|
set debug_dbug="d,sysvers_force_trx,sysvers_hide";
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($MTR_COMBINATION_VERS_TRX)
|
||||||
|
{
|
||||||
|
if (!$have_debug)
|
||||||
|
{
|
||||||
|
--skip Requires debug
|
||||||
|
}
|
||||||
|
--disable_query_log
|
||||||
|
set debug_dbug="d,sysvers_force,sysvers_hide";
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
}
|
@ -12,25 +12,32 @@ if (!$restart_noprint)
|
|||||||
--let $restart_noprint=0
|
--let $restart_noprint=0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
--let $restart_cmd= restart
|
||||||
|
|
||||||
|
if ($restart_bindir)
|
||||||
|
{
|
||||||
|
--let $restart_cmd= restart_bindir $restart_bindir
|
||||||
|
}
|
||||||
|
|
||||||
if ($restart_parameters)
|
if ($restart_parameters)
|
||||||
{
|
{
|
||||||
--exec echo "restart: $restart_parameters" > $_expect_file_name
|
--exec echo "$restart_cmd: $restart_parameters" > $_expect_file_name
|
||||||
if (!$restart_noprint)
|
if (!$restart_noprint)
|
||||||
{
|
{
|
||||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
--exec echo "# restart: $restart_parameters"
|
--exec echo "# $restart_cmd: $restart_parameters"
|
||||||
}
|
}
|
||||||
if ($restart_noprint == 1)
|
if ($restart_noprint == 1)
|
||||||
{
|
{
|
||||||
--exec echo "# restart: with restart_parameters"
|
--exec echo "# $restart_cmd: with restart_parameters"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$restart_parameters)
|
if (!$restart_parameters)
|
||||||
{
|
{
|
||||||
--exec echo "restart" > $_expect_file_name
|
--exec echo "$restart_cmd" > $_expect_file_name
|
||||||
if ($restart_noprint < 2)
|
if ($restart_noprint < 2)
|
||||||
{
|
{
|
||||||
--exec echo "# restart"
|
--exec echo "# $restart_cmd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ for my $f (keys %print_formats)
|
|||||||
|
|
||||||
register_opt('print-core|C', ':s',
|
register_opt('print-core|C', ':s',
|
||||||
"Print core dump format: ". $print_formats. " (for not printing cores). ".
|
"Print core dump format: ". $print_formats. " (for not printing cores). ".
|
||||||
"Defaults to value of MTR_PRINT_CORE or 'short'");
|
"Defaults to value of MTR_PRINT_CORE or 'medium'");
|
||||||
if (!IS_WINDOWS)
|
if (!IS_WINDOWS)
|
||||||
{
|
{
|
||||||
register_opt('print-method', '=s',
|
register_opt('print-method', '=s',
|
||||||
@ -134,7 +134,7 @@ sub env_or_default($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub pre_setup() {
|
sub pre_setup() {
|
||||||
$config{print_core}= env_or_default('short', 'MTR_PRINT_CORE')
|
$config{print_core}= env_or_default('medium', 'MTR_PRINT_CORE')
|
||||||
if not defined $config{print_core};
|
if not defined $config{print_core};
|
||||||
$config{print_method}= (IS_WINDOWS) ? 'cdb' : 'auto'
|
$config{print_method}= (IS_WINDOWS) ? 'cdb' : 'auto'
|
||||||
if not defined $config{print_method};
|
if not defined $config{print_method};
|
||||||
|
@ -4235,7 +4235,9 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# MDEV-24019: query with recursive CTE when no default database is set
|
# MDEV-24019: query with recursive CTE when no default database is set
|
||||||
#
|
#
|
||||||
drop database test;
|
create database dummy;
|
||||||
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
with recursive a as
|
with recursive a as
|
||||||
(select 1 from dual union select * from a as r)
|
(select 1 from dual union select * from a as r)
|
||||||
select * from a;
|
select * from a;
|
||||||
@ -4274,7 +4276,6 @@ a
|
|||||||
1
|
1
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop database db1;
|
drop database db1;
|
||||||
create database test;
|
|
||||||
use test;
|
use test;
|
||||||
#
|
#
|
||||||
# MDEV-23406: query with mutually recursive CTEs when big_tables=1
|
# MDEV-23406: query with mutually recursive CTEs when big_tables=1
|
||||||
|
@ -2729,7 +2729,9 @@ drop table t1;
|
|||||||
--echo # MDEV-24019: query with recursive CTE when no default database is set
|
--echo # MDEV-24019: query with recursive CTE when no default database is set
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
drop database test;
|
create database dummy;
|
||||||
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
|
|
||||||
let $q=
|
let $q=
|
||||||
with recursive a as
|
with recursive a as
|
||||||
@ -2757,7 +2759,6 @@ deallocate prepare stmt;
|
|||||||
|
|
||||||
drop database db1;
|
drop database db1;
|
||||||
|
|
||||||
create database test;
|
|
||||||
use test;
|
use test;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -2553,5 +2553,19 @@ DROP TABLE t1;
|
|||||||
#
|
#
|
||||||
SET STATEMENT sql_mode=ONLY_FULL_GROUP_BY FOR EXECUTE IMMEDIATE 'ALTER TABLE mysql.time_zone_transition ORDER BY Time_zone_id, Transition_time';
|
SET STATEMENT sql_mode=ONLY_FULL_GROUP_BY FOR EXECUTE IMMEDIATE 'ALTER TABLE mysql.time_zone_transition ORDER BY Time_zone_id, Transition_time';
|
||||||
#
|
#
|
||||||
|
# MDEV-19071 Wrong results when using STDDEV_SAMP() and view
|
||||||
|
#
|
||||||
|
create table t1(i int);
|
||||||
|
insert into t1 values (1),(2),(3),(4),(5);
|
||||||
|
create view v1 as select stddev_samp(i),stddev_pop(i),stddev(i),std(i) from t1;
|
||||||
|
show create view v1;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select stddev_samp(`t1`.`i`) AS `stddev_samp(i)`,std(`t1`.`i`) AS `stddev_pop(i)`,std(`t1`.`i`) AS `stddev(i)`,std(`t1`.`i`) AS `std(i)` from `t1` latin1 latin1_swedish_ci
|
||||||
|
select * from v1;
|
||||||
|
stddev_samp(i) stddev_pop(i) stddev(i) std(i)
|
||||||
|
1.5811 1.4142 1.4142 1.4142
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
@ -1790,6 +1790,17 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
SET STATEMENT sql_mode=ONLY_FULL_GROUP_BY FOR EXECUTE IMMEDIATE 'ALTER TABLE mysql.time_zone_transition ORDER BY Time_zone_id, Transition_time';
|
SET STATEMENT sql_mode=ONLY_FULL_GROUP_BY FOR EXECUTE IMMEDIATE 'ALTER TABLE mysql.time_zone_transition ORDER BY Time_zone_id, Transition_time';
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19071 Wrong results when using STDDEV_SAMP() and view
|
||||||
|
--echo #
|
||||||
|
create table t1(i int);
|
||||||
|
insert into t1 values (1),(2),(3),(4),(5);
|
||||||
|
create view v1 as select stddev_samp(i),stddev_pop(i),stddev(i),std(i) from t1;
|
||||||
|
show create view v1;
|
||||||
|
select * from v1;
|
||||||
|
drop view v1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -3092,12 +3092,15 @@ SELECT IS_USED_LOCK(POINT(1,1));
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-26161 crash in Gis_point::calculate_haversine
|
--echo # MDEV-26161 crash in Gis_point::calculate_haversine
|
||||||
--echo #
|
--echo #
|
||||||
|
#enable after fix MDEV-30229
|
||||||
|
--disable_view_protocol
|
||||||
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
select st_distance_sphere(x'01030000000400000004000000000000', multipoint(point(124,204)), 10);
|
select st_distance_sphere(x'01030000000400000004000000000000', multipoint(point(124,204)), 10);
|
||||||
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
select st_distance_sphere(x'010300000004000000040000', multipoint(point(124,204)), 10);
|
select st_distance_sphere(x'010300000004000000040000', multipoint(point(124,204)), 10);
|
||||||
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
--error ER_CANT_CREATE_GEOMETRY_OBJECT
|
||||||
select st_distance_sphere(x'010300000001000000040000', multipoint(point(124,204)), 10);
|
select st_distance_sphere(x'010300000001000000040000', multipoint(point(124,204)), 10);
|
||||||
|
--enable_view_protocol
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
|
@ -2234,8 +2234,9 @@ Warning 1931 Query execution was interrupted. The query examined at least ### ro
|
|||||||
# m_status == DA_OK_BULK' failed in Diagnostics_area::message()
|
# m_status == DA_OK_BULK' failed in Diagnostics_area::message()
|
||||||
#
|
#
|
||||||
call mtr.add_suppression("Sort aborted.*");
|
call mtr.add_suppression("Sort aborted.*");
|
||||||
DROP DATABASE test;
|
create database dummy;
|
||||||
CREATE DATABASE test;
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
USE test;
|
USE test;
|
||||||
CREATE VIEW v AS SELECT table_schema AS object_schema, table_name AS object_name, table_type AS object_type FROM information_schema.tables ORDER BY object_schema;
|
CREATE VIEW v AS SELECT table_schema AS object_schema, table_name AS object_name, table_type AS object_type FROM information_schema.tables ORDER BY object_schema;
|
||||||
SELECT * FROM v LIMIT ROWS EXAMINED 9;
|
SELECT * FROM v LIMIT ROWS EXAMINED 9;
|
||||||
|
@ -1941,8 +1941,9 @@ SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10;
|
|||||||
|
|
||||||
call mtr.add_suppression("Sort aborted.*");
|
call mtr.add_suppression("Sort aborted.*");
|
||||||
|
|
||||||
DROP DATABASE test;
|
create database dummy;
|
||||||
CREATE DATABASE test;
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
USE test;
|
USE test;
|
||||||
CREATE VIEW v AS SELECT table_schema AS object_schema, table_name AS object_name, table_type AS object_type FROM information_schema.tables ORDER BY object_schema;
|
CREATE VIEW v AS SELECT table_schema AS object_schema, table_name AS object_name, table_type AS object_type FROM information_schema.tables ORDER BY object_schema;
|
||||||
|
|
||||||
|
@ -4471,6 +4471,7 @@ Db Name Definer Time zone Type Execute at Interval value Interval field Starts E
|
|||||||
# MDEV-13336: add ignore-database option
|
# MDEV-13336: add ignore-database option
|
||||||
# with --all-databases
|
# with --all-databases
|
||||||
#
|
#
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
DROP DATABASE test;
|
DROP DATABASE test;
|
||||||
SHOW DATABASES LIKE 'test';
|
SHOW DATABASES LIKE 'test';
|
||||||
Database (test)
|
Database (test)
|
||||||
|
@ -1922,6 +1922,8 @@ SHOW EVENTS;
|
|||||||
--echo # with --all-databases
|
--echo # with --all-databases
|
||||||
--echo #
|
--echo #
|
||||||
--exec $MYSQL_DUMP --default-character-set=utf8mb4 --ignore-database test --all-databases > $MYSQLTEST_VARDIR/tmp/mysqldump-MDEV-13336.sql
|
--exec $MYSQL_DUMP --default-character-set=utf8mb4 --ignore-database test --all-databases > $MYSQLTEST_VARDIR/tmp/mysqldump-MDEV-13336.sql
|
||||||
|
# Starting with MariaDB 10.6, ensure that DDL recovery will have completed.
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
DROP DATABASE test;
|
DROP DATABASE test;
|
||||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/mysqldump-MDEV-13336.sql
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/mysqldump-MDEV-13336.sql
|
||||||
SHOW DATABASES LIKE 'test';
|
SHOW DATABASES LIKE 'test';
|
||||||
|
@ -1870,8 +1870,19 @@ ERROR 42000: You have an error in your SQL syntax; check the manual that corresp
|
|||||||
EXECUTE IMMEDIATE 'CREATE PROCEDURE p() UPDATE t SET c=\'\'"abc';
|
EXECUTE IMMEDIATE 'CREATE PROCEDURE p() UPDATE t SET c=\'\'"abc';
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"abc' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '"abc' at line 1
|
||||||
SET @@sql_mode=@save_sql_mode;
|
SET @@sql_mode=@save_sql_mode;
|
||||||
|
#
|
||||||
|
# MDEV-30151 parse error 1=2 not between/in
|
||||||
|
#
|
||||||
|
select 1=2 not in (3,4);
|
||||||
|
1=2 not in (3,4)
|
||||||
|
1
|
||||||
|
select 1=2 not between 3 and 4;
|
||||||
|
1=2 not between 3 and 4
|
||||||
|
1
|
||||||
|
#
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
#
|
#
|
||||||
|
#
|
||||||
# MDEV-19540: 10.4 allow lock options with SELECT in brackets
|
# MDEV-19540: 10.4 allow lock options with SELECT in brackets
|
||||||
# which previous version do not
|
# which previous version do not
|
||||||
#
|
#
|
||||||
|
@ -1678,7 +1678,15 @@ EXECUTE IMMEDIATE 'CREATE PROCEDURE p() UPDATE t SET c=\'\'"abc';
|
|||||||
|
|
||||||
SET @@sql_mode=@save_sql_mode;
|
SET @@sql_mode=@save_sql_mode;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-30151 parse error 1=2 not between/in
|
||||||
|
--echo #
|
||||||
|
select 1=2 not in (3,4);
|
||||||
|
select 1=2 not between 3 and 4;
|
||||||
|
|
||||||
|
--echo #
|
||||||
--echo # End of 10.3 tests
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-19540: 10.4 allow lock options with SELECT in brackets
|
--echo # MDEV-19540: 10.4 allow lock options with SELECT in brackets
|
||||||
|
@ -6735,7 +6735,9 @@ DROP TABLE t1;
|
|||||||
#
|
#
|
||||||
# MDEV-24314: create view with derived table without default database
|
# MDEV-24314: create view with derived table without default database
|
||||||
#
|
#
|
||||||
drop database test;
|
create database dummy;
|
||||||
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
create database db1;
|
create database db1;
|
||||||
create table db1.t1 (a int);
|
create table db1.t1 (a int);
|
||||||
insert into db1.t1 values (3),(7),(1);
|
insert into db1.t1 values (3),(7),(1);
|
||||||
@ -6765,7 +6767,6 @@ a
|
|||||||
drop view db1.v1;
|
drop view db1.v1;
|
||||||
drop table db1.t1;
|
drop table db1.t1;
|
||||||
drop database db1;
|
drop database db1;
|
||||||
create database test;
|
|
||||||
use test;
|
use test;
|
||||||
#
|
#
|
||||||
# MDEV-16940: update of multi-table view returning error used in SP
|
# MDEV-16940: update of multi-table view returning error used in SP
|
||||||
|
@ -6438,7 +6438,9 @@ DROP TABLE t1;
|
|||||||
--echo # MDEV-24314: create view with derived table without default database
|
--echo # MDEV-24314: create view with derived table without default database
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
drop database test;
|
create database dummy;
|
||||||
|
use dummy;
|
||||||
|
drop database dummy;
|
||||||
|
|
||||||
create database db1;
|
create database db1;
|
||||||
create table db1.t1 (a int);
|
create table db1.t1 (a int);
|
||||||
@ -6461,7 +6463,6 @@ drop view db1.v1;
|
|||||||
drop table db1.t1;
|
drop table db1.t1;
|
||||||
drop database db1;
|
drop database db1;
|
||||||
|
|
||||||
create database test;
|
|
||||||
use test;
|
use test;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1795,7 +1795,7 @@ sub collect_mysqld_features_from_running_server ()
|
|||||||
|
|
||||||
sub find_mysqld {
|
sub find_mysqld {
|
||||||
|
|
||||||
my ($mysqld_basedir)= $ENV{MTR_BINDIR}|| @_;
|
my ($mysqld_basedir)= $ENV{MTR_BINDIR_FORCED} || $ENV{MTR_BINDIR} || @_;
|
||||||
|
|
||||||
my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max",
|
my @mysqld_names= ("mysqld", "mysqld-max-nt", "mysqld-max",
|
||||||
"mysqld-nt");
|
"mysqld-nt");
|
||||||
@ -1806,7 +1806,7 @@ sub find_mysqld {
|
|||||||
unshift(@mysqld_names, "mysqld-debug");
|
unshift(@mysqld_names, "mysqld-debug");
|
||||||
}
|
}
|
||||||
|
|
||||||
return my_find_bin($bindir,
|
return my_find_bin($mysqld_basedir,
|
||||||
["sql", "libexec", "sbin", "bin"],
|
["sql", "libexec", "sbin", "bin"],
|
||||||
[@mysqld_names]);
|
[@mysqld_names]);
|
||||||
}
|
}
|
||||||
@ -4659,6 +4659,7 @@ sub check_expected_crash_and_restart {
|
|||||||
mtr_verbose("Test says wait before restart") if $waits == 0;
|
mtr_verbose("Test says wait before restart") if $waits == 0;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
delete $ENV{MTR_BINDIR_FORCED};
|
||||||
|
|
||||||
# Ignore any partial or unknown command
|
# Ignore any partial or unknown command
|
||||||
next unless $last_line =~ /^restart/;
|
next unless $last_line =~ /^restart/;
|
||||||
@ -4666,7 +4667,13 @@ sub check_expected_crash_and_restart {
|
|||||||
# extra command line options to add to the restarted mysqld.
|
# extra command line options to add to the restarted mysqld.
|
||||||
# Anything other than 'wait' or 'restart:' (with a colon) will
|
# Anything other than 'wait' or 'restart:' (with a colon) will
|
||||||
# result in a restart with original mysqld options.
|
# result in a restart with original mysqld options.
|
||||||
if ($last_line =~ /restart:(.+)/) {
|
if ($last_line =~ /restart_bindir\s+(\S+)(:.+)?/) {
|
||||||
|
$ENV{MTR_BINDIR_FORCED}= $1;
|
||||||
|
if ($2) {
|
||||||
|
my @rest_opt= split(' ', $2);
|
||||||
|
$mysqld->{'restart_opts'}= \@rest_opt;
|
||||||
|
}
|
||||||
|
} elsif ($last_line =~ /restart:(.+)/) {
|
||||||
my @rest_opt= split(' ', $1);
|
my @rest_opt= split(' ', $1);
|
||||||
$mysqld->{'restart_opts'}= \@rest_opt;
|
$mysqld->{'restart_opts'}= \@rest_opt;
|
||||||
} else {
|
} else {
|
||||||
|
BIN
mysql-test/std_data/versioning/articles.frm.gz
Normal file
BIN
mysql-test/std_data/versioning/articles.frm.gz
Normal file
Binary file not shown.
BIN
mysql-test/std_data/versioning/articles2.frm.gz
Normal file
BIN
mysql-test/std_data/versioning/articles2.frm.gz
Normal file
Binary file not shown.
BIN
mysql-test/std_data/versioning/ibdata1.gz
Normal file
BIN
mysql-test/std_data/versioning/ibdata1.gz
Normal file
Binary file not shown.
BIN
mysql-test/std_data/versioning/user_stopword.frm.gz
Normal file
BIN
mysql-test/std_data/versioning/user_stopword.frm.gz
Normal file
Binary file not shown.
@ -1,3 +1,4 @@
|
|||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
set @save_character_set_database= @@character_set_database;
|
set @save_character_set_database= @@character_set_database;
|
||||||
DROP TABLE IF EXISTS test.t1;
|
DROP TABLE IF EXISTS test.t1;
|
||||||
SET NAMES armscii8;
|
SET NAMES armscii8;
|
||||||
|
@ -9,6 +9,10 @@
|
|||||||
--source include/no_valgrind_without_big.inc
|
--source include/no_valgrind_without_big.inc
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
# Starting with MariaDB 10.6, ensure that DDL recovery will have completed
|
||||||
|
# before DROP DATABASE test.
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
|
|
||||||
let $engine_type= InnoDB;
|
let $engine_type= InnoDB;
|
||||||
--source suite/funcs_2/charset/charset_master.test
|
--source suite/funcs_2/charset/charset_master.test
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ create table t1 (a int, b int generated always as (stddev_pop(a)) virtual);
|
|||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
# STDDEV_SAMP()
|
# STDDEV_SAMP()
|
||||||
create table t1 (a int, b int generated always as (stddev_samp(a)) virtual);
|
create table t1 (a int, b int generated always as (stddev_samp(a)) virtual);
|
||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'stddev_samp()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
# STDDEV()
|
# STDDEV()
|
||||||
create table t1 (a int, b int generated always as (stddev(a)) virtual);
|
create table t1 (a int, b int generated always as (stddev(a)) virtual);
|
||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
|
@ -131,7 +131,7 @@ create table t1 (a int, b int generated always as (stddev_pop(a)) virtual);
|
|||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
# STDDEV_SAMP()
|
# STDDEV_SAMP()
|
||||||
create table t1 (a int, b int generated always as (stddev_samp(a)) virtual);
|
create table t1 (a int, b int generated always as (stddev_samp(a)) virtual);
|
||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'stddev_samp()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
# STDDEV()
|
# STDDEV()
|
||||||
create table t1 (a int, b int generated always as (stddev(a)) virtual);
|
create table t1 (a int, b int generated always as (stddev(a)) virtual);
|
||||||
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
ERROR HY000: Function or expression 'std()' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||||
|
@ -11,6 +11,7 @@ SET DEBUG_SYNC = 'lock_wait_suspend_thread_enter SIGNAL first_ins_locked';
|
|||||||
SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL first_ins_row_inserted WAIT_FOR first_ins_cont';
|
SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL first_ins_row_inserted WAIT_FOR first_ins_cont';
|
||||||
INSERT INTO t VALUES(10, 20);
|
INSERT INTO t VALUES(10, 20);
|
||||||
connect con_del_2,localhost,root,,;
|
connect con_del_2,localhost,root,,;
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
SET DEBUG_SYNC = 'now WAIT_FOR first_ins_locked';
|
SET DEBUG_SYNC = 'now WAIT_FOR first_ins_locked';
|
||||||
SET DEBUG_SYNC = 'lock_wait_suspend_thread_enter SIGNAL second_del_locked';
|
SET DEBUG_SYNC = 'lock_wait_suspend_thread_enter SIGNAL second_del_locked';
|
||||||
DELETE FROM t WHERE b = 20;
|
DELETE FROM t WHERE b = 20;
|
||||||
|
@ -299,6 +299,7 @@ select count(*) > -1 from d_trx;
|
|||||||
count(*) > -1
|
count(*) > -1
|
||||||
1
|
1
|
||||||
connection default;
|
connection default;
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
drop database test;
|
drop database test;
|
||||||
create database test;
|
create database test;
|
||||||
drop user select_only@localhost;
|
drop user select_only@localhost;
|
||||||
|
35
mysql-test/suite/innodb/r/insert-before-delete.result
Normal file
35
mysql-test/suite/innodb/r/insert-before-delete.result
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
connect pause_purge,localhost,root;
|
||||||
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
|
connection default;
|
||||||
|
CREATE TABLE t (pk int PRIMARY KEY, sk INT UNIQUE) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t VALUES (10, 100);
|
||||||
|
connect con1,localhost,root;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t WHERE sk = 100 FOR UPDATE;
|
||||||
|
pk sk
|
||||||
|
10 100
|
||||||
|
connect con2,localhost,root;
|
||||||
|
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL insert_wait_started";
|
||||||
|
INSERT INTO t VALUES (5, 100) # trx 1;
|
||||||
|
connect con3,localhost,root;
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR insert_wait_started";
|
||||||
|
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL delete_started_waiting";
|
||||||
|
DELETE FROM t WHERE sk = 100 # trx 2;
|
||||||
|
connection con1;
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR delete_started_waiting";
|
||||||
|
DELETE FROM t WHERE sk=100;
|
||||||
|
COMMIT;
|
||||||
|
disconnect con1;
|
||||||
|
connection con2;
|
||||||
|
disconnect con2;
|
||||||
|
connection con3;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
disconnect con3;
|
||||||
|
connection default;
|
||||||
|
SELECT * FROM t;
|
||||||
|
pk sk
|
||||||
|
5 100
|
||||||
|
disconnect pause_purge;
|
||||||
|
SET DEBUG_SYNC="RESET";
|
||||||
|
DROP TABLE t;
|
@ -671,7 +671,7 @@ SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
|||||||
= 'lock_rec_lock_created');
|
= 'lock_rec_lock_created');
|
||||||
SELECT @end - @start;
|
SELECT @end - @start;
|
||||||
@end - @start
|
@end - @start
|
||||||
0
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET GLOBAL innodb_monitor_enable=default;
|
SET GLOBAL innodb_monitor_enable=default;
|
||||||
SET GLOBAL innodb_monitor_disable=default;
|
SET GLOBAL innodb_monitor_disable=default;
|
||||||
|
@ -27,6 +27,10 @@ SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL first_ins_row_inserted WAIT_FOR fir
|
|||||||
--send INSERT INTO t VALUES(10, 20)
|
--send INSERT INTO t VALUES(10, 20)
|
||||||
|
|
||||||
--connect(con_del_2,localhost,root,,)
|
--connect(con_del_2,localhost,root,,)
|
||||||
|
# After MDEV-30225 is fixed, the following DELETE creates next-key lock for
|
||||||
|
# unqique search for RR, and the above INSERT kills it as deadlock victim.
|
||||||
|
# But it still requests not-gap lock for RC.
|
||||||
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||||
SET DEBUG_SYNC = 'now WAIT_FOR first_ins_locked';
|
SET DEBUG_SYNC = 'now WAIT_FOR first_ins_locked';
|
||||||
SET DEBUG_SYNC = 'lock_wait_suspend_thread_enter SIGNAL second_del_locked';
|
SET DEBUG_SYNC = 'lock_wait_suspend_thread_enter SIGNAL second_del_locked';
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -306,6 +306,8 @@ select count(*) > -1 from i_trx;
|
|||||||
select count(*) > -1 from d_trx;
|
select count(*) > -1 from d_trx;
|
||||||
|
|
||||||
connection default;
|
connection default;
|
||||||
|
# Starting with MariaDB 10.6, ensure that DDL recovery will have completed.
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
drop database test;
|
drop database test;
|
||||||
create database test;
|
create database test;
|
||||||
drop user select_only@localhost;
|
drop user select_only@localhost;
|
||||||
|
@ -31,6 +31,8 @@ RENAME TABLE t1 TO `t2_new..............................................end`;
|
|||||||
show warnings;
|
show warnings;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
# Starting with MariaDB 10.6, ensure that DDL recovery will have completed.
|
||||||
|
SET GLOBAL innodb_max_purge_lag_wait=0;
|
||||||
drop database test;
|
drop database test;
|
||||||
create database test;
|
create database test;
|
||||||
use test;
|
use test;
|
||||||
|
72
mysql-test/suite/innodb/t/insert-before-delete.test
Normal file
72
mysql-test/suite/innodb/t/insert-before-delete.test
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_debug_sync.inc
|
||||||
|
--source include/count_sessions.inc
|
||||||
|
|
||||||
|
--connect (pause_purge,localhost,root)
|
||||||
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
CREATE TABLE t (pk int PRIMARY KEY, sk INT UNIQUE) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t VALUES (10, 100);
|
||||||
|
|
||||||
|
--connect (con1,localhost,root)
|
||||||
|
BEGIN; # trx 0
|
||||||
|
SELECT * FROM t WHERE sk = 100 FOR UPDATE;
|
||||||
|
|
||||||
|
--connect (con2,localhost,root)
|
||||||
|
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL insert_wait_started";
|
||||||
|
# trx 1 is locked on try to read the record in secondary index during duplicates
|
||||||
|
# check. It's the first in waiting queue, that's why it will be woken up firstly
|
||||||
|
# when trx 0 commits.
|
||||||
|
--send INSERT INTO t VALUES (5, 100) # trx 1
|
||||||
|
|
||||||
|
--connect (con3,localhost,root)
|
||||||
|
# MDEV-30225 is fixed only for RR
|
||||||
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR insert_wait_started";
|
||||||
|
SET DEBUG_SYNC="lock_wait_suspend_thread_enter SIGNAL delete_started_waiting";
|
||||||
|
# trx 2 can delete (5, 100) on master, but not on slave, as on slave trx 1
|
||||||
|
# can insert (5, 100) after trx 2 positioned it's cursor. Trx 2 lock is placed
|
||||||
|
# in waiting queue after trx 1 lock, but its persistent cursor position was
|
||||||
|
# stored on (100, 10) record in secondary index before suspending. After trx 1
|
||||||
|
# is committed, trx 2 will restore persistent cursor position on (100, 10). As
|
||||||
|
# (100, 5) secondary index record was inserted before (100, 10) in logical
|
||||||
|
# order, and (100, 10) record is delete-marked, trx 2 just continues scanning.
|
||||||
|
#
|
||||||
|
# Note. There can be several records with the same key in unique secondary
|
||||||
|
# index, but only one of them must be non-delete-marked. That's why when we do
|
||||||
|
# point query, cursor position is set in the first record in logical order, and
|
||||||
|
# then records are iterated until either non-delete-marked record is found or
|
||||||
|
# all records with the same unique fields are iterated.
|
||||||
|
--send DELETE FROM t WHERE sk = 100 # trx 2
|
||||||
|
|
||||||
|
--connection con1
|
||||||
|
SET DEBUG_SYNC="now WAIT_FOR delete_started_waiting";
|
||||||
|
DELETE FROM t WHERE sk=100; # trx 0
|
||||||
|
COMMIT;
|
||||||
|
--disconnect con1
|
||||||
|
|
||||||
|
--connection con2
|
||||||
|
--reap
|
||||||
|
--disconnect con2
|
||||||
|
|
||||||
|
--connection con3
|
||||||
|
# If the bug is fixed, deadlock error will be there, as trx 2 owns
|
||||||
|
# next-key lock waiting for trx 1, and trx 1 requests
|
||||||
|
# insert-intention lock, conflicting with trx 2 next-key lock.
|
||||||
|
--error ER_LOCK_DEADLOCK
|
||||||
|
--reap
|
||||||
|
--disconnect con3
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
# If the bug is not fixed, we will see the row inserted by trx 1 here. This can
|
||||||
|
# cause duplicate key error on slave, when some other trx tries in insert row
|
||||||
|
# with the same secondary key, as was inserted by trx 1, and not deleted by trx
|
||||||
|
# 2.
|
||||||
|
SELECT * FROM t;
|
||||||
|
|
||||||
|
--disconnect pause_purge
|
||||||
|
SET DEBUG_SYNC="RESET";
|
||||||
|
DROP TABLE t;
|
||||||
|
--source include/wait_until_count_sessions.inc
|
@ -435,6 +435,9 @@ INSERT INTO t1 VALUES(1,1,'a'),(2,9999,'b'),(3,10000,'c'),(4,4,'d');
|
|||||||
DELETE FROM t1 WHERE a = 9999 AND b='b';
|
DELETE FROM t1 WHERE a = 9999 AND b='b';
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
# After MDEV-30225 is fixed, the above DELETE creates next-key lock during
|
||||||
|
# secondary index unique search. That's why the result of the following must
|
||||||
|
# be 1.
|
||||||
SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
SET @end = (SELECT COUNT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
||||||
= 'lock_rec_lock_created');
|
= 'lock_rec_lock_created');
|
||||||
SELECT @end - @start;
|
SELECT @end - @start;
|
||||||
|
@ -5,12 +5,6 @@ body TEXT,
|
|||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
ERROR HY000: Cannot create FULLTEXT index on temporary InnoDB table
|
ERROR HY000: Cannot create FULLTEXT index on temporary InnoDB table
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
INSERT INTO articles (title,body) VALUES
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
('How To Use MySQL Well','After you went through a ...'),
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
@ -1,761 +0,0 @@
|
|||||||
select * from information_schema.innodb_ft_default_stopword;
|
|
||||||
value
|
|
||||||
a
|
|
||||||
about
|
|
||||||
an
|
|
||||||
are
|
|
||||||
as
|
|
||||||
at
|
|
||||||
be
|
|
||||||
by
|
|
||||||
com
|
|
||||||
de
|
|
||||||
en
|
|
||||||
for
|
|
||||||
from
|
|
||||||
how
|
|
||||||
i
|
|
||||||
in
|
|
||||||
is
|
|
||||||
it
|
|
||||||
la
|
|
||||||
of
|
|
||||||
on
|
|
||||||
or
|
|
||||||
that
|
|
||||||
the
|
|
||||||
this
|
|
||||||
to
|
|
||||||
was
|
|
||||||
what
|
|
||||||
when
|
|
||||||
where
|
|
||||||
who
|
|
||||||
will
|
|
||||||
with
|
|
||||||
und
|
|
||||||
the
|
|
||||||
www
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('How To Use MySQL Well','After you went through a ...'),
|
|
||||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
NULL
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
1
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
@@innodb_ft_user_stopword_table
|
|
||||||
NULL
|
|
||||||
set global innodb_ft_server_stopword_table = "not_defined";
|
|
||||||
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
|
||||||
drop index title on articles;
|
|
||||||
create fulltext index idx on articles(title, body);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
5 MySQL vs. YourSQL In the following database comparison ...
|
|
||||||
CREATE TABLE articles_2 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles_2 (title, body)
|
|
||||||
VALUES ('test for stopwords','this is it...');
|
|
||||||
SELECT * FROM articles_2 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
1 test for stopwords this is it...
|
|
||||||
insert into user_stopword values("this");
|
|
||||||
CREATE TABLE articles_3 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles_3 (title, body)
|
|
||||||
VALUES ('test for stopwords','this is it...');
|
|
||||||
SELECT * FROM articles_3 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
|
||||||
insert into user_stopword_session values("session");
|
|
||||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
|
||||||
CREATE TABLE articles_4 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles_4 (title, body)
|
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
|
||||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
1 test for session stopwords this should also be excluded...
|
|
||||||
connect con1,localhost,root,,;
|
|
||||||
CREATE TABLE articles_5 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles_5 (title, body)
|
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
|
||||||
SELECT * FROM articles_5 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
|
||||||
id title body
|
|
||||||
1 test for session stopwords this should also be excluded...
|
|
||||||
connection default;
|
|
||||||
drop table articles;
|
|
||||||
drop table articles_2;
|
|
||||||
drop table articles_3;
|
|
||||||
drop table articles_4;
|
|
||||||
drop table articles_5;
|
|
||||||
drop table user_stopword;
|
|
||||||
drop table user_stopword_session;
|
|
||||||
SET GLOBAL innodb_ft_enable_stopword=1;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
Table Create Table
|
|
||||||
articles CREATE TABLE `articles` (
|
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`title` varchar(200) DEFAULT NULL,
|
|
||||||
`body` text DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FULLTEXT KEY `idx` (`title`,`body`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE id = 7;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 7;
|
|
||||||
id title body
|
|
||||||
7 update the record to see will is indexed or not
|
|
||||||
DELETE FROM articles WHERE id = 7;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
0
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE id = 8;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE id = 8;
|
|
||||||
id title body
|
|
||||||
8 update the record to see will is indexed or not
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 8;
|
|
||||||
id title body
|
|
||||||
8 update the record to see will is indexed or not
|
|
||||||
DELETE FROM articles WHERE id = 8;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
Table Create Table
|
|
||||||
articles CREATE TABLE `articles` (
|
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`title` varchar(200) DEFAULT NULL,
|
|
||||||
`body` text DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
ANALYZE TABLE articles;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
test.articles analyze status Engine-independent statistics collected
|
|
||||||
test.articles analyze Warning Engine-independent statistics are not collected for column 'body'
|
|
||||||
test.articles analyze status OK
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
5 MySQL vs. YourSQL In the following database comparison ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
9 the record will not index the , will words
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
9 the record will not index the , will words
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT COUNT(*),max(id) FROM articles;
|
|
||||||
COUNT(*) max(id)
|
|
||||||
7 9
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
9 update the record to see will is indexed or not
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
9 update the record to see will is indexed or not
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 9;
|
|
||||||
id title body
|
|
||||||
DROP TABLE articles;
|
|
||||||
SET SESSION innodb_ft_enable_stopword=1;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
NULL
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
1
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
@@innodb_ft_user_stopword_table
|
|
||||||
NULL
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
insert into server_stopword values("what"),("where");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
DELETE FROM user_stopword;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table = default;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
DROP TABLE articles,user_stopword,server_stopword;
|
|
||||||
SET SESSION innodb_ft_enable_stopword=1;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
NULL
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
1
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
@@innodb_ft_user_stopword_table
|
|
||||||
NULL
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
Table Create Table
|
|
||||||
articles CREATE TABLE `articles` (
|
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`title` varchar(200) DEFAULT NULL,
|
|
||||||
`body` text DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FULLTEXT KEY `idx` (`title`,`body`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
insert into user_stopword values("mysqld"),("DBMS");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
id title body
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
id title body
|
|
||||||
set session innodb_ft_user_stopword_table = default;
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
insert into server_stopword values("root"),("properly");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
id title body
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
id title body
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
DELETE FROM user_stopword;
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
DELETE FROM server_stopword;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
id title body
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
id title body
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
DROP TABLE articles,user_stopword,server_stopword;
|
|
||||||
SET SESSION innodb_ft_enable_stopword=1;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
Table Create Table
|
|
||||||
articles CREATE TABLE `articles` (
|
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`title` varchar(200) DEFAULT NULL,
|
|
||||||
`body` text DEFAULT NULL,
|
|
||||||
PRIMARY KEY (`id`),
|
|
||||||
FULLTEXT KEY `idx` (`title`,`body`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
0
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
connection con1;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
1
|
|
||||||
ANALYZE TABLE articles;
|
|
||||||
Table Op Msg_type Msg_text
|
|
||||||
test.articles analyze status Engine-independent statistics collected
|
|
||||||
test.articles analyze Warning Engine-independent statistics are not collected for column 'body'
|
|
||||||
test.articles analyze status OK
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
|
||||||
5 MySQL vs. YourSQL In the following database comparison ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
1 MySQL from Tutorial DBMS stands for DataBase ...
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
1
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
connection default;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
@@innodb_ft_enable_stopword
|
|
||||||
0
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
connection con1;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
connection default;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
id title body
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
@@innodb_ft_user_stopword_table
|
|
||||||
NULL
|
|
||||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
|
||||||
insert into user_stopword_1 values("when");
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
|
||||||
id title body
|
|
||||||
2 when To Use MySQL Well After that you went through a ...
|
|
||||||
6 MySQL Security When configured properly, MySQL ...
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
|
||||||
id title body
|
|
||||||
connection con1;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
@@innodb_ft_user_stopword_table
|
|
||||||
NULL
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
NULL
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
test/server_stopword
|
|
||||||
insert into server_stopword values("when"),("the");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
|
||||||
id title body
|
|
||||||
disconnect con1;
|
|
||||||
connection default;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
@@innodb_ft_server_stopword_table
|
|
||||||
test/server_stopword
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
insert into server_stopword values("where"),("will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
id title body
|
|
||||||
3 where will Optimizing MySQL In what tutorial we will show ...
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
id title body
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
id title body
|
|
||||||
DROP TABLE articles,user_stopword,user_stopword_1,server_stopword;
|
|
||||||
SET SESSION innodb_ft_enable_stopword=1;
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
@ -60,7 +60,7 @@ SET @save_dbug= @@debug_dbug;
|
|||||||
CREATE TABLE t1 (b CHAR(12), FULLTEXT KEY(b)) engine=InnoDB;
|
CREATE TABLE t1 (b CHAR(12), FULLTEXT KEY(b)) engine=InnoDB;
|
||||||
SET debug_dbug='+d,ib_create_table_fail_too_many_trx';
|
SET debug_dbug='+d,ib_create_table_fail_too_many_trx';
|
||||||
TRUNCATE t1;
|
TRUNCATE t1;
|
||||||
ERROR HY000: Got error -1 "Internal error < 0 (Not system error)" from storage engine InnoDB
|
Got one of the listed errors
|
||||||
SET debug_dbug=@save_dbug;
|
SET debug_dbug=@save_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# End of 10.3 tests
|
# End of 10.3 tests
|
||||||
|
192
mysql-test/suite/innodb_fts/r/stopword,vers.rdiff
Normal file
192
mysql-test/suite/innodb_fts/r/stopword,vers.rdiff
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
--- stopword.result
|
||||||
|
+++ stopword,vers.reject
|
||||||
|
@@ -46,7 +46,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
@@ -60,7 +60,7 @@
|
||||||
|
set global innodb_ft_server_stopword_table = "not_defined";
|
||||||
|
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
||||||
|
set global innodb_ft_server_stopword_table = NULL;
|
||||||
|
-create table user_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
||||||
|
drop index title on articles;
|
||||||
|
create fulltext index idx on articles(title, body);
|
||||||
|
@@ -73,7 +73,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles_2 (title, body)
|
||||||
|
VALUES ('test for stopwords','this is it...');
|
||||||
|
SELECT * FROM articles_2 WHERE MATCH (title,body)
|
||||||
|
@@ -88,13 +88,13 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles_3 (title, body)
|
||||||
|
VALUES ('test for stopwords','this is it...');
|
||||||
|
SELECT * FROM articles_3 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
-create table user_stopword_session(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword_session(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
insert into user_stopword values("this");
|
||||||
|
delete from user_stopword;
|
||||||
|
insert into user_stopword_session values("session");
|
||||||
|
@@ -104,7 +104,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles_4 (title, body)
|
||||||
|
VALUES ('test for session stopwords','this should also be excluded...');
|
||||||
|
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
||||||
|
@@ -120,7 +120,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles_5 (title, body)
|
||||||
|
VALUES ('test for session stopwords','this should also be excluded...');
|
||||||
|
SELECT * FROM articles_5 WHERE MATCH (title,body)
|
||||||
|
@@ -142,7 +142,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT `idx` (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
SHOW CREATE TABLE articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
@@ -151,7 +151,7 @@
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `idx` (`title`,`body`)
|
||||||
|
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('when To Use MySQL Well','After that you went through a ...'),
|
||||||
|
@@ -248,7 +248,7 @@
|
||||||
|
`title` varchar(200) DEFAULT NULL,
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
-) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
+) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||||
|
ANALYZE TABLE articles;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
@@ -320,7 +320,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT `idx` (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('when To Use MySQL Well','After that you went through a ...'),
|
||||||
|
@@ -332,9 +332,9 @@
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||||
|
id title body
|
||||||
|
-create table user_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
|
-create table server_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table server_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
|
insert into user_stopword values("when"),("where");
|
||||||
|
delete from user_stopword;
|
||||||
|
@@ -419,7 +419,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT `idx` (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
SHOW CREATE TABLE articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
@@ -428,7 +428,7 @@
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `idx` (`title`,`body`)
|
||||||
|
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('when To Use MySQL Well','After that you went through a ...'),
|
||||||
|
@@ -440,7 +440,7 @@
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||||
|
id title body
|
||||||
|
-create table user_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
|
insert into user_stopword values("mysqld"),("DBMS");
|
||||||
|
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
||||||
|
@@ -466,7 +466,7 @@
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
||||||
|
id title body
|
||||||
|
set session innodb_ft_user_stopword_table = default;
|
||||||
|
-create table server_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table server_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
|
insert into server_stopword values("root"),("properly");
|
||||||
|
ALTER TABLE articles DROP INDEX idx;
|
||||||
|
@@ -530,7 +530,7 @@
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT `idx` (title,body)
|
||||||
|
-) ENGINE=InnoDB;
|
||||||
|
+) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||||
|
SHOW CREATE TABLE articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
@@ -539,7 +539,7 @@
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `idx` (`title`,`body`)
|
||||||
|
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('when To Use MySQL Well','After that you went through a ...'),
|
||||||
|
@@ -656,7 +656,7 @@
|
||||||
|
"In connection 1"
|
||||||
|
connection con1;
|
||||||
|
SET SESSION innodb_ft_enable_stopword = 1;
|
||||||
|
-create table user_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
|
insert into user_stopword values("this"),("will"),("the");
|
||||||
|
ALTER TABLE articles DROP INDEX idx;
|
||||||
|
@@ -674,7 +674,7 @@
|
||||||
|
select @@innodb_ft_user_stopword_table;
|
||||||
|
@@innodb_ft_user_stopword_table
|
||||||
|
NULL
|
||||||
|
-create table user_stopword_1(value varchar(30)) engine = innodb;
|
||||||
|
+create table user_stopword_1(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
||||||
|
insert into user_stopword_1 values("when");
|
||||||
|
SET SESSION innodb_ft_enable_stopword = 1;
|
||||||
|
@@ -702,7 +702,7 @@
|
||||||
|
select @@innodb_ft_server_stopword_table;
|
||||||
|
@@innodb_ft_server_stopword_table
|
||||||
|
NULL
|
||||||
|
-create table server_stopword(value varchar(30)) engine = innodb;
|
||||||
|
+create table server_stopword(value varchar(30)) WITH SYSTEM VERSIONING engine = innodb;
|
||||||
|
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
|
select @@innodb_ft_server_stopword_table;
|
||||||
|
@@innodb_ft_server_stopword_table
|
@ -1,3 +1,6 @@
|
|||||||
|
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
||||||
|
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
||||||
|
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
||||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
||||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
||||||
select * from information_schema.innodb_ft_default_stopword;
|
select * from information_schema.innodb_ft_default_stopword;
|
||||||
@ -54,9 +57,6 @@ INSERT INTO articles (title,body) VALUES
|
|||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
id title body
|
id title body
|
||||||
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
|
||||||
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
|
||||||
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
|
||||||
set global innodb_ft_server_stopword_table = "not_defined";
|
set global innodb_ft_server_stopword_table = "not_defined";
|
||||||
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
||||||
set global innodb_ft_server_stopword_table = NULL;
|
set global innodb_ft_server_stopword_table = NULL;
|
||||||
@ -80,6 +80,8 @@ SELECT * FROM articles_2 WHERE MATCH (title,body)
|
|||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
id title body
|
id title body
|
||||||
1 test for stopwords this is it...
|
1 test for stopwords this is it...
|
||||||
|
insert into user_stopword values("the");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword values("this");
|
insert into user_stopword values("this");
|
||||||
CREATE TABLE articles_3 (
|
CREATE TABLE articles_3 (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
@ -93,6 +95,8 @@ SELECT * FROM articles_3 WHERE MATCH (title,body)
|
|||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
id title body
|
id title body
|
||||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
create table user_stopword_session(value varchar(30)) engine = innodb;
|
||||||
|
insert into user_stopword values("this");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword_session values("session");
|
insert into user_stopword_session values("session");
|
||||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
||||||
CREATE TABLE articles_4 (
|
CREATE TABLE articles_4 (
|
||||||
@ -334,6 +338,8 @@ create table user_stopword(value varchar(30)) engine = innodb;
|
|||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
create table server_stopword(value varchar(30)) engine = innodb;
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
|
insert into user_stopword values("when"),("where");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
insert into user_stopword values("this"),("will"),("the");
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
ALTER TABLE articles DROP INDEX idx;
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
||||||
|
695
mysql-test/suite/innodb_fts/r/versioning,prepare.result
Normal file
695
mysql-test/suite/innodb_fts/r/versioning,prepare.result
Normal file
@ -0,0 +1,695 @@
|
|||||||
|
# Upgrade test
|
||||||
|
CREATE TEMPORARY TABLE articles (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
ERROR HY000: Cannot create FULLTEXT index on temporary InnoDB table
|
||||||
|
CREATE TABLE articles (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
)with system versioning ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||||
|
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||||
|
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||||
|
('MySQL Security','When configured properly, MySQL ...');
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test query expansion','for database ...');
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test proximity search, test, proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test my proximity fts new search, test, proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test more of proximity fts search, test, more proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
||||||
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
||||||
|
select * from information_schema.innodb_ft_default_stopword;
|
||||||
|
value
|
||||||
|
a
|
||||||
|
about
|
||||||
|
an
|
||||||
|
are
|
||||||
|
as
|
||||||
|
at
|
||||||
|
be
|
||||||
|
by
|
||||||
|
com
|
||||||
|
de
|
||||||
|
en
|
||||||
|
for
|
||||||
|
from
|
||||||
|
how
|
||||||
|
i
|
||||||
|
in
|
||||||
|
is
|
||||||
|
it
|
||||||
|
la
|
||||||
|
of
|
||||||
|
on
|
||||||
|
or
|
||||||
|
that
|
||||||
|
the
|
||||||
|
this
|
||||||
|
to
|
||||||
|
was
|
||||||
|
what
|
||||||
|
when
|
||||||
|
where
|
||||||
|
who
|
||||||
|
will
|
||||||
|
with
|
||||||
|
und
|
||||||
|
the
|
||||||
|
www
|
||||||
|
CREATE TABLE articles2 (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
)with system versioning ENGINE=InnoDB;
|
||||||
|
INSERT INTO articles2 (title,body) VALUES
|
||||||
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||||
|
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||||
|
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||||
|
('MySQL Security','When configured properly, MySQL ...');
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
set global innodb_ft_server_stopword_table = "not_defined";
|
||||||
|
ERROR 42000: Variable 'innodb_ft_server_stopword_table' can't be set to the value of 'not_defined'
|
||||||
|
set global innodb_ft_server_stopword_table = NULL;
|
||||||
|
create table user_stopword(value varchar(30)) engine = innodb;
|
||||||
|
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
||||||
|
drop index title on articles2;
|
||||||
|
create fulltext index idx on articles2(title, body);
|
||||||
|
insert into articles2 (title, body)
|
||||||
|
values ('test for stopwords','this is it...');
|
||||||
|
insert into user_stopword values("the");
|
||||||
|
delete from user_stopword;
|
||||||
|
insert into user_stopword values("this");
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
ERROR HY000: Index articles is corrupted
|
||||||
|
call mtr.add_suppression("test/articles.? contains 3 indexes inside InnoDB");
|
||||||
|
alter table articles force;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles contains 3 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MariaDB
|
||||||
|
flush tables;
|
||||||
|
show create table articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(200) DEFAULT NULL,
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `title` (`title`,`body`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE);
|
||||||
|
COUNT(*)
|
||||||
|
3
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title, body)
|
||||||
|
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT COUNT(IF(MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE), 1, NULL))
|
||||||
|
AS count FROM articles;
|
||||||
|
count
|
||||||
|
3
|
||||||
|
SELECT id, body, MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE) AS score
|
||||||
|
FROM articles;
|
||||||
|
id body score
|
||||||
|
1 DBMS stands for DataBase ... 0.2734021842479706
|
||||||
|
2 After you went through a ... 0
|
||||||
|
3 In this tutorial we will show ... 0
|
||||||
|
4 1. Never run mysqld as root. 2. ... 0
|
||||||
|
5 In the following database comparison ... 0.2734021842479706
|
||||||
|
6 When configured properly, MySQL ... 0
|
||||||
|
7 for database ... 0.2734021842479706
|
||||||
|
8 search, with proximity innodb 0
|
||||||
|
9 search, with proximity innodb 0
|
||||||
|
10 search, with proximity innodb 0
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('DBMS Security' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL +YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL ~YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('t*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MY*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('ru*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL >Well < stands' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL - (Well stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR HY000: Table handler out of memory
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((vs))))))))))))))))))))))))))))))),(((to)))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL + (>Well < stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('YourSQL + (+MySQL - (Tricks Security))' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('(+MySQL - (Tricks Security)) - YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST (' - Security&DBMS + YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+YourSQL - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' WITH QUERY EXPANSION);
|
||||||
|
COUNT(*)
|
||||||
|
10
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('test' WITH QUERY EXPANSION);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
7 test query expansion for database ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following database"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@1' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
set global innodb_ft_server_stopword_table= "test/user_stopword";
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
drop index idx on articles2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles2 contains 3 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MariaDB
|
||||||
|
create fulltext index idx on articles2(title, body);
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
# Downgrade test
|
||||||
|
alter table articles force;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles contains 3 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MariaDB
|
||||||
|
Warning 1082 InnoDB: Table test/articles contains 3 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MariaDB
|
||||||
|
flush tables;
|
||||||
|
show create table articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(200) DEFAULT NULL,
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `title` (`title`,`body`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE);
|
||||||
|
COUNT(*)
|
||||||
|
3
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title, body)
|
||||||
|
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT COUNT(IF(MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE), 1, NULL))
|
||||||
|
AS count FROM articles;
|
||||||
|
count
|
||||||
|
3
|
||||||
|
SELECT id, body, MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE) AS score
|
||||||
|
FROM articles;
|
||||||
|
id body score
|
||||||
|
1 DBMS stands for DataBase ... 0.2734021842479706
|
||||||
|
2 After you went through a ... 0
|
||||||
|
3 In this tutorial we will show ... 0
|
||||||
|
4 1. Never run mysqld as root. 2. ... 0
|
||||||
|
5 In the following database comparison ... 0.2734021842479706
|
||||||
|
6 When configured properly, MySQL ... 0
|
||||||
|
7 for database ... 0.2734021842479706
|
||||||
|
8 search, with proximity innodb 0
|
||||||
|
9 search, with proximity innodb 0
|
||||||
|
10 search, with proximity innodb 0
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('DBMS Security' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL +YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL ~YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('t*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MY*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('ru*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL >Well < stands' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL - (Well stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR HY000: Table handler out of memory
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((vs))))))))))))))))))))))))))))))),(((to)))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL + (>Well < stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('YourSQL + (+MySQL - (Tricks Security))' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('(+MySQL - (Tricks Security)) - YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST (' - Security&DBMS + YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+YourSQL - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' WITH QUERY EXPANSION);
|
||||||
|
COUNT(*)
|
||||||
|
10
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('test' WITH QUERY EXPANSION);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
7 test query expansion for database ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following database"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@1' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
set global innodb_ft_server_stopword_table= "test/user_stopword";
|
||||||
|
drop index idx on articles2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles2 contains 3 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MariaDB
|
||||||
|
Warning 1082 InnoDB: Table test/articles2 contains 3 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MariaDB
|
||||||
|
create fulltext index idx on articles2(title, body);
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
# Cleanup
|
||||||
|
drop tables articles, articles2, user_stopword;
|
||||||
|
set global innodb_ft_server_stopword_table= default;
|
303
mysql-test/suite/innodb_fts/r/versioning.result
Normal file
303
mysql-test/suite/innodb_fts/r/versioning.result
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
# Upgrade test
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
ERROR HY000: Index articles is corrupted
|
||||||
|
call mtr.add_suppression("test/articles.? contains 3 indexes inside InnoDB");
|
||||||
|
alter table articles force;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles contains 3 indexes inside InnoDB, which is different from the number of indexes 2 defined in the MariaDB
|
||||||
|
flush tables;
|
||||||
|
show create table articles;
|
||||||
|
Table Create Table
|
||||||
|
articles CREATE TABLE `articles` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(200) DEFAULT NULL,
|
||||||
|
`body` text DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
FULLTEXT KEY `title` (`title`,`body`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE);
|
||||||
|
COUNT(*)
|
||||||
|
3
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title, body)
|
||||||
|
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT COUNT(IF(MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE), 1, NULL))
|
||||||
|
AS count FROM articles;
|
||||||
|
count
|
||||||
|
3
|
||||||
|
SELECT id, body, MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE) AS score
|
||||||
|
FROM articles;
|
||||||
|
id body score
|
||||||
|
1 DBMS stands for DataBase ... 0.2734021842479706
|
||||||
|
2 After you went through a ... 0
|
||||||
|
3 In this tutorial we will show ... 0
|
||||||
|
4 1. Never run mysqld as root. 2. ... 0
|
||||||
|
5 In the following database comparison ... 0.2734021842479706
|
||||||
|
6 When configured properly, MySQL ... 0
|
||||||
|
7 for database ... 0.2734021842479706
|
||||||
|
8 search, with proximity innodb 0
|
||||||
|
9 search, with proximity innodb 0
|
||||||
|
10 search, with proximity innodb 0
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('DBMS Security' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL +YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL ~YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('t*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
7 test query expansion for database ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MY*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('ru*' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL >Well < stands' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL - (Well stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR HY000: Table handler out of memory
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
6 MySQL Security When configured properly, MySQL ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((vs))))))))))))))))))))))))))))))),(((to)))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
ERROR 42000: syntax error, unexpected $end
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL + (>Well < stands)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('YourSQL + (+MySQL - (Tricks Security))' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('(+MySQL - (Tricks Security)) - YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
2 How To Use MySQL Well After you went through a ...
|
||||||
|
3 Optimizing MySQL In this tutorial we will show ...
|
||||||
|
4 1001 MySQL Tricks 1. Never run mysqld as root. 2. ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST (' - Security&DBMS + YourSQL' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+YourSQL - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' WITH QUERY EXPANSION);
|
||||||
|
COUNT(*)
|
||||||
|
10
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('test' WITH QUERY EXPANSION);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
7 test query expansion for database ...
|
||||||
|
1 MySQL Tutorial DBMS stands for DataBase ...
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following database"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@5' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@1' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
8 test proximity search, test, proximity and phrase search, with proximity innodb
|
||||||
|
9 test my proximity fts new search, test, proximity and phrase search, with proximity innodb
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
10 test more of proximity fts search, test, more proximity and phrase search, with proximity innodb
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"' IN BOOLEAN MODE);
|
||||||
|
id title body
|
||||||
|
set global innodb_ft_server_stopword_table= "test/user_stopword";
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
drop index idx on articles2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1082 InnoDB: Table test/articles2 contains 3 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MariaDB
|
||||||
|
create fulltext index idx on articles2(title, body);
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
5 MySQL vs. YourSQL In the following database comparison ...
|
||||||
|
SELECT * FROM articles2 WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
id title body
|
||||||
|
# Cleanup
|
||||||
|
drop tables articles, articles2, user_stopword;
|
||||||
|
set global innodb_ft_server_stopword_table= default;
|
264
mysql-test/suite/innodb_fts/t/basic.inc
Normal file
264
mysql-test/suite/innodb_fts/t/basic.inc
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
if ($basic_stage == create_table)
|
||||||
|
{
|
||||||
|
# Create FTS table
|
||||||
|
--error ER_INNODB_NO_FT_TEMP_TABLE
|
||||||
|
CREATE TEMPORARY TABLE articles (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
eval CREATE TABLE articles (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
)$create_options ENGINE=InnoDB;
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == insert_1)
|
||||||
|
{
|
||||||
|
# Insert six rows
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||||
|
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||||
|
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||||
|
('MySQL Security','When configured properly, MySQL ...');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == select_1)
|
||||||
|
{
|
||||||
|
# Look for 'Database' in table article
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title, body)
|
||||||
|
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
|
||||||
|
SELECT COUNT(IF(MATCH (title,body)
|
||||||
|
AGAINST ('database' IN NATURAL LANGUAGE MODE), 1, NULL))
|
||||||
|
AS count FROM articles;
|
||||||
|
|
||||||
|
# Select Relevance Ranking
|
||||||
|
SELECT id, body, MATCH (title,body)
|
||||||
|
AGAINST ('Database' IN NATURAL LANGUAGE MODE) AS score
|
||||||
|
FROM articles;
|
||||||
|
|
||||||
|
# 'MySQL' treated as stopword (stopword functionality not yet supported)
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
# Boolean search
|
||||||
|
# Select rows contain "MySQL" but not "YourSQL"
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Select rows contain at least one of the two words
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('DBMS Security' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Select rows contain both "MySQL" and "YourSQL"
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL +YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Select rows contain "MySQL" but rank rows with "YourSQL" higher
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test negation operator. Select rows contain MySQL,
|
||||||
|
# if the row contains "YourSQL", rank it lower
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+MySQL ~YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test wild card search operator
|
||||||
|
# Notice row with "the" will not get fetched due to
|
||||||
|
# stopword filtering
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('t*' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test wild card search, notice row 6 with 2 "MySQL" rank first
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('MY*' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Another wild card search
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('ru*' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test ">" and "<" Operator, the ">" operator increases
|
||||||
|
# the word relevance rank and the "<" operator decreases it
|
||||||
|
# Following test puts rows with "Well" on top and rows
|
||||||
|
# with "stands" at the bottom
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL >Well < stands' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test sub-expression boolean search. Find rows contain
|
||||||
|
# "MySQL" but not "Well" or "stands".
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL - (Well stands)' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
--error 128
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((vs))))))))))))))))))))))))))))))),(((to)))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
--error ER_PARSE_ERROR
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
||||||
|
('(((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
||||||
|
IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test sub-expression boolean search. Find rows contain
|
||||||
|
# "MySQL" and "Well" or "MySQL" and "stands". But rank the
|
||||||
|
# doc with "Well" higher, and doc with "stands" lower.
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('+ MySQL + (>Well < stands)' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test nested sub-expression.
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('YourSQL + (+MySQL - (Tricks Security))' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Find rows with "MySQL" but not "Tricks", "Security" nor "YourSQL"
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
|
AGAINST ('(+MySQL - (Tricks Security)) - YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test non-word delimiter combined with negate "-" operator
|
||||||
|
# This should return the same result as 'mysql - (Security DBMS)'
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Again, the operator sequence should not matter
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST (' - Security&DBMS + YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+YourSQL - Security&DBMS' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test query expansion
|
||||||
|
SELECT COUNT(*) FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('database' WITH QUERY EXPANSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == insert_2)
|
||||||
|
{
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test query expansion','for database ...');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == select_2)
|
||||||
|
{
|
||||||
|
# This query will return result containing word "database" as
|
||||||
|
# the query expand from "test" to words in document just
|
||||||
|
# inserted above
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('test' WITH QUERY EXPANSION);
|
||||||
|
|
||||||
|
# This is to test the proximity search, search two word
|
||||||
|
# "following" and "comparison" within 19 character space
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@3' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# This is to test the proximity search, search two word
|
||||||
|
# "following" and "comparison" within 19 character space
|
||||||
|
# This search should come with no return result
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following comparison"@2' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# This is to test the phrase search, searching phrase
|
||||||
|
# "following database"
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"following database"' IN BOOLEAN MODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == insert_3)
|
||||||
|
{
|
||||||
|
# Insert into table with similar word of different distances
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test proximity search, test, proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test my proximity fts new search, test, proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('test more of proximity fts search, test, more proximity and phrase',
|
||||||
|
'search, with proximity innodb');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($basic_stage == select_3)
|
||||||
|
{
|
||||||
|
# This should only return the first document
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@3' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# This would return no document
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# This give you all three documents
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"proximity search"@5' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Similar boundary testing for the words
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@5' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# No document will be returned
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@1' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# All three documents will be returned
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Only two document will be returned.
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# Test with more word The last document will return, please notice there
|
||||||
|
# is no ordering requirement for proximity search.
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@4' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
||||||
|
|
||||||
|
# The phrase search will not require exact word ordering
|
||||||
|
SELECT * FROM articles
|
||||||
|
WHERE MATCH (title,body)
|
||||||
|
AGAINST ('"more test proximity"' IN BOOLEAN MODE);
|
||||||
|
}
|
@ -1,252 +1,33 @@
|
|||||||
# This is the basic function tests for innodb FTS
|
# This is the basic function tests for innodb FTS
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
|
--let $modify_create_table= 1
|
||||||
|
-- source include/maybe_versioning.inc
|
||||||
|
|
||||||
# Create FTS table
|
let $basic_stage= create_table;
|
||||||
--error ER_INNODB_NO_FT_TEMP_TABLE
|
--source basic.inc
|
||||||
CREATE TEMPORARY TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
CREATE TABLE articles (
|
let $basic_stage= insert_1;
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
--source basic.inc
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('How To Use MySQL Well','After you went through a ...'),
|
|
||||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
-- disable_result_log
|
-- disable_result_log
|
||||||
ANALYZE TABLE articles;
|
ANALYZE TABLE articles;
|
||||||
-- enable_result_log
|
-- enable_result_log
|
||||||
|
|
||||||
# Look for 'Database' in table article
|
let $basic_stage= select_1;
|
||||||
SELECT * FROM articles
|
--source basic.inc
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('Database' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
SELECT COUNT(*) FROM articles
|
let $basic_stage= insert_2;
|
||||||
WHERE MATCH (title,body)
|
--source basic.inc
|
||||||
AGAINST ('database' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
SELECT * FROM articles
|
let $basic_stage= select_2;
|
||||||
WHERE MATCH (title, body)
|
--source basic.inc
|
||||||
AGAINST ('Tutorial' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
|
let $basic_stage= insert_3;
|
||||||
|
--source basic.inc
|
||||||
|
|
||||||
SELECT COUNT(IF(MATCH (title,body)
|
let $basic_stage= select_3;
|
||||||
AGAINST ('database' IN NATURAL LANGUAGE MODE), 1, NULL))
|
--source basic.inc
|
||||||
AS count FROM articles;
|
|
||||||
|
|
||||||
# Select Relevance Ranking
|
|
||||||
SELECT id, body, MATCH (title,body)
|
|
||||||
AGAINST ('Database' IN NATURAL LANGUAGE MODE) AS score
|
|
||||||
FROM articles;
|
|
||||||
|
|
||||||
# 'MySQL' treated as stopword (stopword functionality not yet supported)
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
# Boolean search
|
|
||||||
# Select rows contain "MySQL" but not "YourSQL"
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Select rows contain at least one of the two words
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('DBMS Security' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Select rows contain both "MySQL" and "YourSQL"
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+MySQL +YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Select rows contain "MySQL" but rank rows with "YourSQL" higher
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+MySQL YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test negation operator. Select rows contain MySQL,
|
|
||||||
# if the row contains "YourSQL", rank it lower
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+MySQL ~YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test wild card search operator
|
|
||||||
# Notice row with "the" will not get fetched due to
|
|
||||||
# stopword filtering
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('t*' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test wild card search, notice row 6 with 2 "MySQL" rank first
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('MY*' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Another wild card search
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('ru*' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test ">" and "<" Operator, the ">" operator increases
|
|
||||||
# the word relevance rank and the "<" operator decreases it
|
|
||||||
# Following test puts rows with "Well" on top and rows
|
|
||||||
# with "stands" at the bottom
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+ MySQL >Well < stands' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test sub-expression boolean search. Find rows contain
|
|
||||||
# "MySQL" but not "Well" or "stands".
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+ MySQL - (Well stands)' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
--error 128
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
|
||||||
('(((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))))'
|
|
||||||
IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
|
||||||
('((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
|
||||||
IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
|
||||||
('(((((((((((((((((((((((((((((((vs))))))))))))))))))))))))))))))),(((to)))'
|
|
||||||
IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
--error ER_PARSE_ERROR
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
|
||||||
('((((((((((((((((((((((((((((((((Security)))))))))))))))))))))))))))))))'
|
|
||||||
IN BOOLEAN MODE);
|
|
||||||
--error ER_PARSE_ERROR
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST
|
|
||||||
('(((((((((((((((((((((((((((((((((Security))))))))))))))))))))))))))))))))'
|
|
||||||
IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test sub-expression boolean search. Find rows contain
|
|
||||||
# "MySQL" and "Well" or "MySQL" and "stands". But rank the
|
|
||||||
# doc with "Well" higher, and doc with "stands" lower.
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('+ MySQL + (>Well < stands)' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test nested sub-expression.
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('YourSQL + (+MySQL - (Tricks Security))' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Find rows with "MySQL" but not "Tricks", "Security" nor "YourSQL"
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('(+MySQL - (Tricks Security)) - YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test non-word delimiter combined with negate "-" operator
|
|
||||||
# This should return the same result as 'mysql - (Security DBMS)'
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - Security&DBMS' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysql - (Security DBMS)' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Again, the operator sequence should not matter
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST (' - Security&DBMS + YourSQL' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+YourSQL - Security&DBMS' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test query expansion
|
|
||||||
SELECT COUNT(*) FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('database' WITH QUERY EXPANSION);
|
|
||||||
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('test query expansion','for database ...');
|
|
||||||
|
|
||||||
# This query will return result containing word "database" as
|
|
||||||
# the query expand from "test" to words in document just
|
|
||||||
# inserted above
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('test' WITH QUERY EXPANSION);
|
|
||||||
|
|
||||||
# This is to test the proximity search, search two word
|
|
||||||
# "following" and "comparison" within 19 character space
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"following comparison"@3' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# This is to test the proximity search, search two word
|
|
||||||
# "following" and "comparison" within 19 character space
|
|
||||||
# This search should come with no return result
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"following comparison"@2' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# This is to test the phrase search, searching phrase
|
|
||||||
# "following database"
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"following database"' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Insert into table with similar word of different distances
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('test proximity search, test, proximity and phrase',
|
|
||||||
'search, with proximity innodb');
|
|
||||||
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('test my proximity fts new search, test, proximity and phrase',
|
|
||||||
'search, with proximity innodb');
|
|
||||||
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('test more of proximity fts search, test, more proximity and phrase',
|
|
||||||
'search, with proximity innodb');
|
|
||||||
|
|
||||||
# This should only return the first document
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"proximity search"@3' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# This would return no document
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"proximity search"@2' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# This give you all three documents
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"proximity search"@5' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Similar boundary testing for the words
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"test proximity"@5' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# No document will be returned
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"test proximity"@1' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# All three documents will be returned
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"test proximity"@4' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Only two document will be returned.
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"test proximity"@3' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# Test with more word The last document will return, please notice there
|
|
||||||
# is no ordering requirement for proximity search.
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"more test proximity"@4' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"more test proximity"@3' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
# The phrase search will not require exact word ordering
|
|
||||||
SELECT * FROM articles
|
|
||||||
WHERE MATCH (title,body)
|
|
||||||
AGAINST ('"more test proximity"' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
drop table articles;
|
drop table articles;
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
# The embedded server tests do not support restarting.
|
# The embedded server tests do not support restarting.
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
--source include/maybe_debug.inc
|
--source include/maybe_debug.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
# Following are test for crash recovery on FTS index, the first scenario
|
# Following are test for crash recovery on FTS index, the first scenario
|
||||||
@ -22,6 +23,16 @@ CREATE TABLE articles (
|
|||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
let $vers= $MTR_COMBINATION_VERS + $MTR_COMBINATION_VERS_TRX;
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
INSERT INTO articles (title,body) VALUES
|
||||||
|
('history','Deleted row ...');
|
||||||
|
DELETE FROM articles;
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
# Drop the FTS index before more insertion. The FTS_DOC_ID should
|
# Drop the FTS index before more insertion. The FTS_DOC_ID should
|
||||||
# be kept
|
# be kept
|
||||||
DROP INDEX title ON articles;
|
DROP INDEX title ON articles;
|
||||||
@ -59,6 +70,13 @@ INSERT INTO articles (title,body) VALUES
|
|||||||
# Recreate fulltext index to see if everything is OK
|
# Recreate fulltext index to see if everything is OK
|
||||||
CREATE FULLTEXT INDEX idx ON articles (title,body);
|
CREATE FULLTEXT INDEX idx ON articles (title,body);
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
UPDATE articles SET id= id - 1;
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
# Should return 3 rows
|
# Should return 3 rows
|
||||||
SELECT * FROM articles
|
SELECT * FROM articles
|
||||||
WHERE MATCH (title,body)
|
WHERE MATCH (title,body)
|
||||||
@ -98,6 +116,13 @@ disconnect dml;
|
|||||||
INSERT INTO articles (title,body) VALUES
|
INSERT INTO articles (title,body) VALUES
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...');
|
('MySQL Tutorial','DBMS stands for DataBase ...');
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
UPDATE articles SET id= id - 1 WHERE id > 8;
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
# Should return 6 rows
|
# Should return 6 rows
|
||||||
SELECT * FROM articles
|
SELECT * FROM articles
|
||||||
WHERE MATCH (title,body)
|
WHERE MATCH (title,body)
|
||||||
@ -134,6 +159,15 @@ BEGIN;
|
|||||||
INSERT INTO articles VALUES
|
INSERT INTO articles VALUES
|
||||||
(100, 200, 'MySQL Tutorial','DBMS stands for DataBase ...');
|
(100, 200, 'MySQL Tutorial','DBMS stands for DataBase ...');
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
DELETE FROM articles WHERE id = 100;
|
||||||
|
INSERT INTO articles VALUES
|
||||||
|
(100, 200, 'MySQL Tutorial','DBMS stands for DataBase ...');
|
||||||
|
--enable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
connect(dml2, localhost, root,,);
|
connect(dml2, localhost, root,,);
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
i int(10) unsigned not null auto_increment primary key,
|
i int(10) unsigned not null auto_increment primary key,
|
||||||
@ -212,7 +213,17 @@ delete from t1 limit 1;
|
|||||||
#
|
#
|
||||||
# BUG#16489: utf8 + fulltext leads to corrupt index file.
|
# BUG#16489: utf8 + fulltext leads to corrupt index file.
|
||||||
#
|
#
|
||||||
|
if ($MTR_COMBINATION_ORIG)
|
||||||
|
{
|
||||||
truncate table t1;
|
truncate table t1;
|
||||||
|
}
|
||||||
|
if (!$MTR_COMBINATION_ORIG)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
delete from t1;
|
||||||
|
--enable_query_log
|
||||||
|
--echo truncate table t1;
|
||||||
|
}
|
||||||
insert into t1 values('ab c d');
|
insert into t1 values('ab c d');
|
||||||
update t1 set a='ab c d';
|
update t1 set a='ab c d';
|
||||||
select * from t1 where match a against('ab c' in boolean mode);
|
select * from t1 where match a against('ab c' in boolean mode);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# test of new fulltext search features
|
# test of new fulltext search features
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Bugreport due to Roy Nasser <roy@vem.ca>
|
# Bugreport due to Roy Nasser <roy@vem.ca>
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# bug reported by Tibor Simko <tibor.simko@cern.ch>
|
# bug reported by Tibor Simko <tibor.simko@cern.ch>
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1, t2;
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Test for bug from Jean-C<>dric COSTA <jean-cedric.costa@ensmp.fr>
|
# Test for bug from Jean-C<>dric COSTA <jean-cedric.costa@ensmp.fr>
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
# several FULLTEXT indexes in one table test
|
# several FULLTEXT indexes in one table test
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1,t2,t3;
|
DROP TABLE IF EXISTS t1,t2,t3;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Test for bug by voi@ims.at
|
# Test for bug by voi@ims.at
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists test;
|
drop table if exists test;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Fulltext configurable parameters
|
# Fulltext configurable parameters
|
||||||
#
|
#
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
# Save ft_boolean_syntax variable
|
# Save ft_boolean_syntax variable
|
||||||
let $saved_ft_boolean_syntax=`select @@global.ft_boolean_syntax`;
|
let $saved_ft_boolean_syntax=`select @@global.ft_boolean_syntax`;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# This is the DDL function tests for innodb FTS
|
# This is the DDL function tests for innodb FTS
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
|
-- source include/maybe_versioning.inc
|
||||||
|
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE fts_test (
|
CREATE TABLE fts_test (
|
||||||
@ -54,7 +55,21 @@ SELECT * FROM fts_test WHERE MATCH (title,body)
|
|||||||
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
|
||||||
|
|
||||||
# Truncate table
|
# Truncate table
|
||||||
|
let $vers=$MTR_COMBINATION_VERS+$MTR_COMBINATION_VERS_TRX;
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
CREATE TABLE fts_test2 LIKE fts_test;
|
||||||
|
DROP TABLE fts_test;
|
||||||
|
RENAME TABLE fts_test2 TO fts_test;
|
||||||
|
--enable_query_log
|
||||||
|
--echo TRUNCATE TABLE fts_test;
|
||||||
|
}
|
||||||
|
if (!$vers)
|
||||||
|
{
|
||||||
TRUNCATE TABLE fts_test;
|
TRUNCATE TABLE fts_test;
|
||||||
|
}
|
||||||
|
|
||||||
DROP INDEX idx ON fts_test;
|
DROP INDEX idx ON fts_test;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# This is the basic function tests for innodb FTS
|
# This is the basic function tests for innodb FTS
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
|
-- source include/maybe_versioning.inc
|
||||||
|
|
||||||
call mtr.add_suppression("\\[Warning\\] InnoDB: A new Doc ID must be supplied while updating FTS indexed columns.");
|
call mtr.add_suppression("\\[Warning\\] InnoDB: A new Doc ID must be supplied while updating FTS indexed columns.");
|
||||||
call mtr.add_suppression("\\[Warning\\] InnoDB: FTS Doc ID must be larger than [0-9]+ for table `test`.`articles`");
|
call mtr.add_suppression("\\[Warning\\] InnoDB: FTS Doc ID must be larger than [0-9]+ for table `test`.`articles`");
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--loose-innodb-ft-default-stopword
|
|
@ -1,664 +0,0 @@
|
|||||||
# This is the basic function tests for innodb FTS
|
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
|
||||||
|
|
||||||
|
|
||||||
select * from information_schema.innodb_ft_default_stopword;
|
|
||||||
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('How To Use MySQL Well','After you went through a ...'),
|
|
||||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# "the" is in the default stopword, it would not be selected
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
let $innodb_ft_server_stopword_table_orig=`select @@innodb_ft_server_stopword_table`;
|
|
||||||
let $innodb_ft_enable_stopword_orig=`select @@innodb_ft_enable_stopword`;
|
|
||||||
let $innodb_ft_user_stopword_table_orig=`select @@innodb_ft_user_stopword_table`;
|
|
||||||
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
|
|
||||||
# Provide user defined stopword table, if not (correctly) defined,
|
|
||||||
# it will be rejected
|
|
||||||
--error 1231
|
|
||||||
set global innodb_ft_server_stopword_table = "not_defined";
|
|
||||||
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
|
||||||
|
|
||||||
drop index title on articles;
|
|
||||||
|
|
||||||
create fulltext index idx on articles(title, body);
|
|
||||||
|
|
||||||
# Now we should be able to find "the"
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
# Nothing inserted into the default stopword, so essentially
|
|
||||||
# nothing get screened. The new stopword could only be
|
|
||||||
# effective for table created thereafter
|
|
||||||
CREATE TABLE articles_2 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
INSERT INTO articles_2 (title, body)
|
|
||||||
VALUES ('test for stopwords','this is it...');
|
|
||||||
|
|
||||||
# Now we can find record with "this"
|
|
||||||
SELECT * FROM articles_2 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
# Ok, let's instantiate some value into user supplied stop word
|
|
||||||
# table
|
|
||||||
insert into user_stopword values("this");
|
|
||||||
|
|
||||||
# Ok, let's repeat with the new table again.
|
|
||||||
CREATE TABLE articles_3 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
INSERT INTO articles_3 (title, body)
|
|
||||||
VALUES ('test for stopwords','this is it...');
|
|
||||||
|
|
||||||
# Now we should NOT find record with "this"
|
|
||||||
SELECT * FROM articles_3 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
# Test session level stopword control "innodb_user_stopword_table"
|
|
||||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
|
||||||
|
|
||||||
insert into user_stopword_session values("session");
|
|
||||||
|
|
||||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
|
||||||
|
|
||||||
CREATE TABLE articles_4 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
INSERT INTO articles_4 (title, body)
|
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
|
||||||
|
|
||||||
# "session" is excluded
|
|
||||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
# But we can find record with "this"
|
|
||||||
SELECT * FROM articles_4 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
--connect (con1,localhost,root,,)
|
|
||||||
CREATE TABLE articles_5 (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
INSERT INTO articles_5 (title, body)
|
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
|
||||||
|
|
||||||
# "session" should be found since the stopword table is session specific
|
|
||||||
SELECT * FROM articles_5 WHERE MATCH (title,body)
|
|
||||||
AGAINST ('session' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
--connection default
|
|
||||||
drop table articles;
|
|
||||||
drop table articles_2;
|
|
||||||
drop table articles_3;
|
|
||||||
drop table articles_4;
|
|
||||||
drop table articles_5;
|
|
||||||
drop table user_stopword;
|
|
||||||
drop table user_stopword_session;
|
|
||||||
|
|
||||||
eval SET GLOBAL innodb_ft_enable_stopword=$innodb_ft_enable_stopword_orig;
|
|
||||||
eval SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
|
||||||
# Behavior :
|
|
||||||
# The stopword is loaded into memory at
|
|
||||||
# 1) create fulltext index time,
|
|
||||||
# 2) boot server,
|
|
||||||
# 3) first time FTs is used
|
|
||||||
# So if you already created a FTS index, and then turn off stopword
|
|
||||||
# or change stopword table content it won't affect the FTS
|
|
||||||
# that already created since the stopword list are already loaded.
|
|
||||||
# It will only affect the new FTS index created after you changed
|
|
||||||
# the settings.
|
|
||||||
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# Case : server_stopword=default
|
|
||||||
# Try to Search default stopword from innodb, "where", "will", "what"
|
|
||||||
# and "when" are all stopwords
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
# boolean No result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
# no result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
# no result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
# Not going to update as where condition can not find record
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
# Update the record
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE id = 7;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
# Delete will not work as where condition do not return
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 7;
|
|
||||||
DELETE FROM articles WHERE id = 7;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Case : Turn OFF stopword list variable and search stopword on OLD index.
|
|
||||||
# disable stopword list
|
|
||||||
#SET global innodb_ft_server_stopword_table = "";
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
#SET global innodb_ft_user_stopword_table = "";
|
|
||||||
|
|
||||||
# search default stopword with innodb_ft_enable_stopword is OFF.
|
|
||||||
# No records expected even though we turned OFF stopwod filtering
|
|
||||||
# (refer Behavior (at the top of the test) for explanation )
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
# Not going to update as where condition can not find record
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
# Update the record
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE id = 8;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
SELECT * FROM articles WHERE id = 8;
|
|
||||||
# Delete will not work as where condition do not return
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 8;
|
|
||||||
DELETE FROM articles WHERE id = 8;
|
|
||||||
|
|
||||||
# Case : Turn OFF stopword list variable and search stopword on NEW index.
|
|
||||||
# Drop index
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
|
|
||||||
# Create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
|
|
||||||
ANALYZE TABLE articles;
|
|
||||||
|
|
||||||
# search default stopword with innodb_ft_enable_stopword is OFF.
|
|
||||||
# All records expected as stopwod filtering is OFF and we created
|
|
||||||
# new FTS index.
|
|
||||||
# (refer Behavior (at the top of the test) for explanation )
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
# Update will succeed.
|
|
||||||
UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
SELECT COUNT(*),max(id) FROM articles;
|
|
||||||
# Update the record - uncommet on fix
|
|
||||||
#UPDATE articles SET title = "update the record" , body = 'to see will is indexed or not'
|
|
||||||
#WHERE id = 9;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
# Delete will succeed.
|
|
||||||
DELETE FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE id = 9;
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE articles;
|
|
||||||
|
|
||||||
eval SET SESSION innodb_ft_enable_stopword=$innodb_ft_enable_stopword_orig;
|
|
||||||
#eval SET GLOBAL innodb_ft_server_stopword_table=$innodb_ft_server_stopword_table_orig;
|
|
||||||
eval SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
#eval SET GLOBAL innodb_ft_user_stopword_table=$innodb_ft_user_stopword_table_orig;
|
|
||||||
eval SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# No records expeced for select
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
# Define a correct formated server stopword table
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
# Add values into user supplied stop word table
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
# Add values into server supplied stop word table
|
|
||||||
insert into server_stopword values("what"),("where");
|
|
||||||
# Follwoing should return result as server stopword list was empty at create index time
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
|
|
||||||
# Delete stopword from user list
|
|
||||||
DELETE FROM user_stopword;
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# Follwoing should return result even though to server stopword list
|
|
||||||
# conatin these words. Session level stopword list takes priority
|
|
||||||
# Here user_stopword is set using innodb_ft_user_stopword_table
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
|
|
||||||
# Follwoing should return result as user stopword list was empty at create index time
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
# Add values into user supplied stop word table
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
# Session level stopword list takes priority
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
# Make user stopword list deafult so as to server stopword list takes priority
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table = default;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE articles,user_stopword,server_stopword;
|
|
||||||
|
|
||||||
# Restore Defaults
|
|
||||||
eval SET SESSION innodb_ft_enable_stopword=$innodb_ft_enable_stopword_orig;
|
|
||||||
eval SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
eval SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# No records expeced for select
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
insert into user_stopword values("mysqld"),("DBMS");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
|
|
||||||
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
# user stopword list will take effect.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
|
|
||||||
# set user stopword list empty
|
|
||||||
set session innodb_ft_user_stopword_table = default;
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
insert into server_stopword values("root"),("properly");
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
|
|
||||||
|
|
||||||
# set user stopword list empty
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
# user stopword list take effect as its session level
|
|
||||||
# Result expected for select
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
|
|
||||||
# set user stopword list
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
DELETE FROM user_stopword;
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
DELETE FROM server_stopword;
|
|
||||||
# user stopword list take affect as its session level
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+wha* +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('what');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+root +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('properly');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+DBMS +mysql" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|
||||||
|
|
||||||
DROP TABLE articles,user_stopword,server_stopword;
|
|
||||||
|
|
||||||
# Restore Values
|
|
||||||
eval SET SESSION innodb_ft_enable_stopword=$innodb_ft_enable_stopword_orig;
|
|
||||||
eval SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
eval SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# FTS stopword list test - check varaibles across sessions
|
|
||||||
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT `idx` (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL from Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('when To Use MySQL Well','After that you went through a ...'),
|
|
||||||
('where will Optimizing MySQL','In what tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# session varaible innodb_ft_enable_stopword=0 will take effect for new FTS index
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 0;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
|
|
||||||
|
|
||||||
--connection con1
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
|
|
||||||
ANALYZE TABLE articles;
|
|
||||||
|
|
||||||
# result expected as index created before setting innodb_ft_enable_stopword varaible off
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# no result expected turned innodb_ft_enable_stopword is ON
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
|
|
||||||
--connection default
|
|
||||||
select @@innodb_ft_enable_stopword;
|
|
||||||
# no result expected as word not indexed from connection 1
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("where will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("when");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST ("what" WITH QUERY EXPANSION);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("whe*" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+what +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+from" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+where +(show what)" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@6' IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"where will"@9' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
INSERT INTO articles(title,body) values ('the record will' , 'not index the , will words');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+the +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOLEAN MODE);
|
|
||||||
|
|
||||||
|
|
||||||
--connection con1
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
|
||||||
# Add values into user supplied stop word table
|
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# no result expected as innodb_ft_user_stopword_table filter it
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
|
|
||||||
|
|
||||||
--connection default
|
|
||||||
# no result expected as innodb_ft_user_stopword_table filter it from connection1
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
|
||||||
insert into user_stopword_1 values("when");
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
# result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# no result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('when');
|
|
||||||
|
|
||||||
--connection con1
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_user_stopword_table;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
# Define a correct formated server stopword table
|
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
|
||||||
# The set operation should be successful
|
|
||||||
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
insert into server_stopword values("when"),("the");
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# no result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
|
||||||
|
|
||||||
disconnect con1;
|
|
||||||
--source include/wait_until_disconnected.inc
|
|
||||||
|
|
||||||
--connection default
|
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
|
||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
select @@innodb_ft_server_stopword_table;
|
|
||||||
# result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
insert into server_stopword values("where"),("will");
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
ALTER TABLE articles DROP INDEX idx;
|
|
||||||
ALTER TABLE articles ADD FULLTEXT INDEX idx (title,body);
|
|
||||||
# no result expected
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+when" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
|
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+will +where" IN BOOLEAN MODE);
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('where');
|
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE articles,user_stopword,user_stopword_1,server_stopword;
|
|
||||||
|
|
||||||
# Restore Values
|
|
||||||
eval SET SESSION innodb_ft_enable_stopword=$innodb_ft_enable_stopword_orig;
|
|
||||||
eval SET GLOBAL innodb_ft_server_stopword_table=default;
|
|
||||||
eval SET SESSION innodb_ft_user_stopword_table=default;
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (v VARCHAR(100), FULLTEXT INDEX (v)) ENGINE=InnoDB;
|
CREATE TABLE t1 (v VARCHAR(100), FULLTEXT INDEX (v)) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
# b) more words across records
|
# b) more words across records
|
||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t1;
|
DROP TABLE IF EXISTS t1;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Test With two FTS index on same table + alter/create/drop index + tnx
|
# Test With two FTS index on same table + alter/create/drop index + tnx
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
# This is the DDL function tests for innodb FTS
|
# This is the DDL function tests for innodb FTS
|
||||||
# Functional testing with FTS proximity search using '@'
|
# Functional testing with FTS proximity search using '@'
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
# Must have debug code to use SET SESSION debug
|
# Must have debug code to use SET SESSION debug
|
||||||
--source include/have_debug.inc
|
--source include/have_debug.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
# Embedded server tests do not support restarting
|
# Embedded server tests do not support restarting
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
SELECT @@innodb_ft_server_stopword_table;
|
SELECT @@innodb_ft_server_stopword_table;
|
||||||
SELECT @@innodb_ft_enable_stopword;
|
SELECT @@innodb_ft_enable_stopword;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
# 3) UNCOMMITTED RECORDS CAN BE SEEN WITH QURIES WHICH DO NOT USE FTS INDEX
|
# 3) UNCOMMITTED RECORDS CAN BE SEEN WITH QURIES WHICH DO NOT USE FTS INDEX
|
||||||
# this behavior do not break integratity of tables and "select" which do not use FTS still can view them.
|
# this behavior do not break integratity of tables and "select" which do not use FTS still can view them.
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
--source include/have_debug.inc
|
--source include/have_debug.inc
|
||||||
--source include/have_debug_sync.inc
|
--source include/have_debug_sync.inc
|
||||||
--source include/count_sessions.inc
|
--source include/count_sessions.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
# Following test is for Bug 14668777 - ASSERT ON IB_VECTOR_SIZE(
|
# Following test is for Bug 14668777 - ASSERT ON IB_VECTOR_SIZE(
|
||||||
# TABLE->FTS->INDEXES, ALTER TABLE
|
# TABLE->FTS->INDEXES, ALTER TABLE
|
||||||
@ -89,7 +90,7 @@ SET @save_dbug= @@debug_dbug;
|
|||||||
|
|
||||||
CREATE TABLE t1 (b CHAR(12), FULLTEXT KEY(b)) engine=InnoDB;
|
CREATE TABLE t1 (b CHAR(12), FULLTEXT KEY(b)) engine=InnoDB;
|
||||||
SET debug_dbug='+d,ib_create_table_fail_too_many_trx';
|
SET debug_dbug='+d,ib_create_table_fail_too_many_trx';
|
||||||
--error ER_GET_ERRNO
|
--error ER_GET_ERRNO,ER_VERS_NOT_SUPPORTED
|
||||||
TRUNCATE t1;
|
TRUNCATE t1;
|
||||||
SET debug_dbug=@save_dbug;
|
SET debug_dbug=@save_dbug;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
55
mysql-test/suite/innodb_fts/t/stopword.inc
Normal file
55
mysql-test/suite/innodb_fts/t/stopword.inc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
if ($stopword_stage == create_table)
|
||||||
|
{
|
||||||
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
||||||
|
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
||||||
|
|
||||||
|
select * from information_schema.innodb_ft_default_stopword;
|
||||||
|
|
||||||
|
# Create FTS table
|
||||||
|
eval CREATE TABLE $stopword_table (
|
||||||
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
title VARCHAR(200),
|
||||||
|
body TEXT,
|
||||||
|
FULLTEXT (title,body)
|
||||||
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
|
# Insert six rows
|
||||||
|
eval INSERT INTO $stopword_table (title,body) VALUES
|
||||||
|
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
||||||
|
('How To Use MySQL Well','After you went through a ...'),
|
||||||
|
('Optimizing MySQL','In this tutorial we will show ...'),
|
||||||
|
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
||||||
|
('MySQL vs. YourSQL','In the following database comparison ...'),
|
||||||
|
('MySQL Security','When configured properly, MySQL ...');
|
||||||
|
|
||||||
|
# "the" is in the default stopword, it would not be selected
|
||||||
|
eval SELECT * FROM $stopword_table WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
# Provide user defined stopword table, if not (correctly) defined,
|
||||||
|
# it will be rejected
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
set global innodb_ft_server_stopword_table = "not_defined";
|
||||||
|
set global innodb_ft_server_stopword_table = NULL;
|
||||||
|
|
||||||
|
# Define a correct formatted user stopword table
|
||||||
|
eval create table user_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
|
|
||||||
|
# The set operation should be successful
|
||||||
|
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
||||||
|
|
||||||
|
eval drop index title on $stopword_table;
|
||||||
|
|
||||||
|
eval create fulltext index idx on $stopword_table(title, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($stopword_stage == select_1)
|
||||||
|
{
|
||||||
|
--error 0, ER_INDEX_CORRUPT
|
||||||
|
eval SELECT * FROM $stopword_table WHERE MATCH (title,body)
|
||||||
|
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
||||||
|
--error 0, ER_INDEX_CORRUPT
|
||||||
|
eval SELECT * FROM $stopword_table WHERE MATCH (title,body)
|
||||||
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
|
}
|
@ -1,52 +1,16 @@
|
|||||||
# This is the basic function tests for innodb FTS
|
# This is the basic function tests for innodb FTS
|
||||||
|
|
||||||
-- source include/have_innodb.inc
|
-- source include/have_innodb.inc
|
||||||
|
-- let $modify_create_table= 1
|
||||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table not_defined does not exist.");
|
-- source include/maybe_versioning.inc
|
||||||
call mtr.add_suppression("\\[ERROR\\] InnoDB: user stopword table test/user_stopword_session does not exist.");
|
|
||||||
|
|
||||||
select * from information_schema.innodb_ft_default_stopword;
|
|
||||||
|
|
||||||
# Create FTS table
|
|
||||||
CREATE TABLE articles (
|
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
|
||||||
title VARCHAR(200),
|
|
||||||
body TEXT,
|
|
||||||
FULLTEXT (title,body)
|
|
||||||
) ENGINE=InnoDB;
|
|
||||||
|
|
||||||
# Insert six rows
|
|
||||||
INSERT INTO articles (title,body) VALUES
|
|
||||||
('MySQL Tutorial','DBMS stands for DataBase ...') ,
|
|
||||||
('How To Use MySQL Well','After you went through a ...'),
|
|
||||||
('Optimizing MySQL','In this tutorial we will show ...'),
|
|
||||||
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
|
|
||||||
('MySQL vs. YourSQL','In the following database comparison ...'),
|
|
||||||
('MySQL Security','When configured properly, MySQL ...');
|
|
||||||
|
|
||||||
# "the" is in the default stopword, it would not be selected
|
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
|
||||||
AGAINST ('the' IN NATURAL LANGUAGE MODE);
|
|
||||||
|
|
||||||
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
SET @innodb_ft_server_stopword_table_orig=@@innodb_ft_server_stopword_table;
|
||||||
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
SET @innodb_ft_enable_stopword_orig=@@innodb_ft_enable_stopword;
|
||||||
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
SET @innodb_ft_user_stopword_table_orig=@@innodb_ft_user_stopword_table;
|
||||||
|
|
||||||
# Provide user defined stopword table, if not (correctly) defined,
|
let $stopword_table= articles;
|
||||||
# it will be rejected
|
let $stopword_stage= create_table;
|
||||||
--error ER_WRONG_VALUE_FOR_VAR
|
--source stopword.inc
|
||||||
set global innodb_ft_server_stopword_table = "not_defined";
|
|
||||||
set global innodb_ft_server_stopword_table = NULL;
|
|
||||||
|
|
||||||
# Define a correct formated user stopword table
|
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
|
||||||
|
|
||||||
# The set operation should be successful
|
|
||||||
set global innodb_ft_server_stopword_table = "test/user_stopword";
|
|
||||||
|
|
||||||
drop index title on articles;
|
|
||||||
|
|
||||||
create fulltext index idx on articles(title, body);
|
|
||||||
|
|
||||||
# Now we should be able to find "the"
|
# Now we should be able to find "the"
|
||||||
SELECT * FROM articles WHERE MATCH (title,body)
|
SELECT * FROM articles WHERE MATCH (title,body)
|
||||||
@ -55,12 +19,12 @@ SELECT * FROM articles WHERE MATCH (title,body)
|
|||||||
# Nothing inserted into the default stopword, so essentially
|
# Nothing inserted into the default stopword, so essentially
|
||||||
# nothing get screened. The new stopword could only be
|
# nothing get screened. The new stopword could only be
|
||||||
# effective for table created thereafter
|
# effective for table created thereafter
|
||||||
CREATE TABLE articles_2 (
|
eval CREATE TABLE articles_2 (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
INSERT INTO articles_2 (title, body)
|
INSERT INTO articles_2 (title, body)
|
||||||
VALUES ('test for stopwords','this is it...');
|
VALUES ('test for stopwords','this is it...');
|
||||||
@ -71,15 +35,17 @@ SELECT * FROM articles_2 WHERE MATCH (title,body)
|
|||||||
|
|
||||||
# Ok, let's instantiate some value into user supplied stop word
|
# Ok, let's instantiate some value into user supplied stop word
|
||||||
# table
|
# table
|
||||||
|
insert into user_stopword values("the");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword values("this");
|
insert into user_stopword values("this");
|
||||||
|
|
||||||
# Ok, let's repeat with the new table again.
|
# Ok, let's repeat with the new table again.
|
||||||
CREATE TABLE articles_3 (
|
eval CREATE TABLE articles_3 (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
INSERT INTO articles_3 (title, body)
|
INSERT INTO articles_3 (title, body)
|
||||||
VALUES ('test for stopwords','this is it...');
|
VALUES ('test for stopwords','this is it...');
|
||||||
@ -89,18 +55,20 @@ SELECT * FROM articles_3 WHERE MATCH (title,body)
|
|||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
# Test session level stopword control "innodb_user_stopword_table"
|
# Test session level stopword control "innodb_user_stopword_table"
|
||||||
create table user_stopword_session(value varchar(30)) engine = innodb;
|
eval create table user_stopword_session(value varchar(30))$create_options engine = innodb;
|
||||||
|
|
||||||
|
insert into user_stopword values("this");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword_session values("session");
|
insert into user_stopword_session values("session");
|
||||||
|
|
||||||
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
set session innodb_ft_user_stopword_table="test/user_stopword_session";
|
||||||
|
|
||||||
CREATE TABLE articles_4 (
|
eval CREATE TABLE articles_4 (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
INSERT INTO articles_4 (title, body)
|
INSERT INTO articles_4 (title, body)
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
VALUES ('test for session stopwords','this should also be excluded...');
|
||||||
@ -114,12 +82,12 @@ SELECT * FROM articles_4 WHERE MATCH (title,body)
|
|||||||
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
AGAINST ('this' IN NATURAL LANGUAGE MODE);
|
||||||
|
|
||||||
--connect (con1,localhost,root,,)
|
--connect (con1,localhost,root,,)
|
||||||
CREATE TABLE articles_5 (
|
eval CREATE TABLE articles_5 (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT (title,body)
|
FULLTEXT (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
INSERT INTO articles_5 (title, body)
|
INSERT INTO articles_5 (title, body)
|
||||||
VALUES ('test for session stopwords','this should also be excluded...');
|
VALUES ('test for session stopwords','this should also be excluded...');
|
||||||
@ -153,12 +121,12 @@ SET GLOBAL innodb_ft_server_stopword_table=default;
|
|||||||
# the settings.
|
# the settings.
|
||||||
|
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE articles (
|
eval CREATE TABLE articles (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT `idx` (title,body)
|
FULLTEXT `idx` (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
SHOW CREATE TABLE articles;
|
||||||
|
|
||||||
@ -292,12 +260,12 @@ SET GLOBAL innodb_ft_user_stopword_table=@innodb_ft_user_stopword_table_orig;
|
|||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
SET SESSION innodb_ft_user_stopword_table=default;
|
||||||
|
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE articles (
|
eval CREATE TABLE articles (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT `idx` (title,body)
|
FULLTEXT `idx` (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
# Insert six rows
|
# Insert six rows
|
||||||
INSERT INTO articles (title,body) VALUES
|
INSERT INTO articles (title,body) VALUES
|
||||||
@ -311,15 +279,17 @@ INSERT INTO articles (title,body) VALUES
|
|||||||
# No records expeced for select
|
# No records expeced for select
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||||
# Define a correct formated user stopword table
|
# Define a correct formatted user stopword table
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
eval create table user_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
# Define a correct formated server stopword table
|
# Define a correct formatted server stopword table
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
eval create table server_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
# Add values into user supplied stop word table
|
# Add values into user supplied stop word table
|
||||||
|
insert into user_stopword values("when"),("where");
|
||||||
|
delete from user_stopword;
|
||||||
insert into user_stopword values("this"),("will"),("the");
|
insert into user_stopword values("this"),("will"),("the");
|
||||||
|
|
||||||
# Drop existing index and create the FTS index Using Alter Table.
|
# Drop existing index and create the FTS index Using Alter Table.
|
||||||
@ -390,12 +360,12 @@ SET SESSION innodb_ft_user_stopword_table=default;
|
|||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE articles (
|
eval CREATE TABLE articles (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT `idx` (title,body)
|
FULLTEXT `idx` (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
SHOW CREATE TABLE articles;
|
||||||
|
|
||||||
@ -411,8 +381,8 @@ INSERT INTO articles (title,body) VALUES
|
|||||||
# No records expeced for select
|
# No records expeced for select
|
||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||||
# Define a correct formated user stopword table
|
# Define a correct formatted user stopword table
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
eval create table user_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
insert into user_stopword values("mysqld"),("DBMS");
|
insert into user_stopword values("mysqld"),("DBMS");
|
||||||
@ -433,8 +403,8 @@ SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('mysqld');
|
|||||||
|
|
||||||
# set user stopword list empty
|
# set user stopword list empty
|
||||||
set session innodb_ft_user_stopword_table = default;
|
set session innodb_ft_user_stopword_table = default;
|
||||||
# Define a correct formated user stopword table
|
# Define a correct formatted user stopword table
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
eval create table server_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
set global innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
insert into server_stopword values("root"),("properly");
|
insert into server_stopword values("root"),("properly");
|
||||||
@ -487,12 +457,12 @@ SET SESSION innodb_ft_user_stopword_table=default;
|
|||||||
# FTS stopword list test - check varaibles across sessions
|
# FTS stopword list test - check varaibles across sessions
|
||||||
|
|
||||||
# Create FTS table
|
# Create FTS table
|
||||||
CREATE TABLE articles (
|
eval CREATE TABLE articles (
|
||||||
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
title VARCHAR(200),
|
title VARCHAR(200),
|
||||||
body TEXT,
|
body TEXT,
|
||||||
FULLTEXT `idx` (title,body)
|
FULLTEXT `idx` (title,body)
|
||||||
) ENGINE=InnoDB;
|
)$create_options ENGINE=InnoDB;
|
||||||
|
|
||||||
SHOW CREATE TABLE articles;
|
SHOW CREATE TABLE articles;
|
||||||
|
|
||||||
@ -572,8 +542,8 @@ SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('"the will"@11' IN BOOL
|
|||||||
--echo "In connection 1"
|
--echo "In connection 1"
|
||||||
--connection con1
|
--connection con1
|
||||||
SET SESSION innodb_ft_enable_stopword = 1;
|
SET SESSION innodb_ft_enable_stopword = 1;
|
||||||
# Define a correct formated user stopword table
|
# Define a correct formatted user stopword table
|
||||||
create table user_stopword(value varchar(30)) engine = innodb;
|
eval create table user_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
set session innodb_ft_user_stopword_table = "test/user_stopword";
|
||||||
# Add values into user supplied stop word table
|
# Add values into user supplied stop word table
|
||||||
@ -592,8 +562,8 @@ SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
|||||||
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
SELECT * FROM articles WHERE MATCH(title,body) AGAINST("+show +will" IN BOOLEAN MODE);
|
||||||
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('will');
|
||||||
select @@innodb_ft_user_stopword_table;
|
select @@innodb_ft_user_stopword_table;
|
||||||
# Define a correct formated user stopword table
|
# Define a correct formatted user stopword table
|
||||||
create table user_stopword_1(value varchar(30)) engine = innodb;
|
eval create table user_stopword_1(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
set session innodb_ft_user_stopword_table = "test/user_stopword_1";
|
||||||
insert into user_stopword_1 values("when");
|
insert into user_stopword_1 values("when");
|
||||||
@ -614,8 +584,8 @@ SET SESSION innodb_ft_enable_stopword = 1;
|
|||||||
SET SESSION innodb_ft_user_stopword_table=default;
|
SET SESSION innodb_ft_user_stopword_table=default;
|
||||||
select @@innodb_ft_user_stopword_table;
|
select @@innodb_ft_user_stopword_table;
|
||||||
select @@innodb_ft_server_stopword_table;
|
select @@innodb_ft_server_stopword_table;
|
||||||
# Define a correct formated server stopword table
|
# Define a correct formatted server stopword table
|
||||||
create table server_stopword(value varchar(30)) engine = innodb;
|
eval create table server_stopword(value varchar(30))$create_options engine = innodb;
|
||||||
# The set operation should be successful
|
# The set operation should be successful
|
||||||
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
SET GLOBAL innodb_ft_server_stopword_table = "test/server_stopword";
|
||||||
select @@innodb_ft_server_stopword_table;
|
select @@innodb_ft_server_stopword_table;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
--source include/not_valgrind.inc
|
--source include/not_valgrind.inc
|
||||||
--source include/not_embedded.inc
|
--source include/not_embedded.inc
|
||||||
--source include/not_crashrep.inc
|
--source include/not_crashrep.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
connect (con1,localhost,root,,);
|
connect (con1,localhost,root,,);
|
||||||
connection default;
|
connection default;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
--source include/have_debug_sync.inc
|
--source include/have_debug_sync.inc
|
||||||
--source include/have_log_bin.inc
|
--source include/have_log_bin.inc
|
||||||
--source include/count_sessions.inc
|
--source include/count_sessions.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
SET @old_log_output = @@global.log_output;
|
SET @old_log_output = @@global.log_output;
|
||||||
SET @old_slow_query_log = @@global.slow_query_log;
|
SET @old_slow_query_log = @@global.slow_query_log;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_debug.inc
|
--source include/have_debug.inc
|
||||||
|
--source include/maybe_versioning.inc
|
||||||
|
|
||||||
#--------------------------------------
|
#--------------------------------------
|
||||||
# Check FTS_sync vs TRUNCATE (1)
|
# Check FTS_sync vs TRUNCATE (1)
|
||||||
@ -23,7 +24,16 @@ INSERT INTO t1 (value) VALUES
|
|||||||
('By default or with the IN NATURAL LANGUAGE MODE modifier')
|
('By default or with the IN NATURAL LANGUAGE MODE modifier')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
let $vers=$MTR_COMBINATION_VERS+$MTR_COMBINATION_VERS_TRX;
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--echo TRUNCATE TABLE t1;
|
||||||
|
}
|
||||||
|
if (!$vers)
|
||||||
|
{
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
|
}
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
@ -54,7 +64,14 @@ INSERT INTO t1 (value) VALUES
|
|||||||
('collation of latin1_bin to make it case sensitive')
|
('collation of latin1_bin to make it case sensitive')
|
||||||
;
|
;
|
||||||
|
|
||||||
|
if ($vers)
|
||||||
|
{
|
||||||
|
--echo TRUNCATE TABLE t1;
|
||||||
|
}
|
||||||
|
if (!$vers)
|
||||||
|
{
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
|
}
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
2
mysql-test/suite/innodb_fts/t/versioning.combinations
Normal file
2
mysql-test/suite/innodb_fts/t/versioning.combinations
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[prepare]
|
||||||
|
[upgrade]
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user