From 9ff9d2303dc6ccb856a66664af625990efaf172b Mon Sep 17 00:00:00 2001 From: Takashi Sasaki Date: Sun, 28 Oct 2018 22:50:49 +0900 Subject: test framework manual is moved --- client/mysqltest.cc | 2 +- mysql-test/lib/v1/mysql-test-run.pl | 2 +- mysql-test/mysql-test-run.pl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 43dbff981d3..e41118d742d 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -20,7 +20,7 @@ Tool used for executing a .test file See the "MySQL Test framework manual" for more information - http://dev.mysql.com/doc/mysqltest/en/index.html + https://mariadb.com/kb/en/library/mysqltest/ Please keep the test framework tools identical in all versions! diff --git a/mysql-test/lib/v1/mysql-test-run.pl b/mysql-test/lib/v1/mysql-test-run.pl index 109e580a2b3..98328ad4e39 100755 --- a/mysql-test/lib/v1/mysql-test-run.pl +++ b/mysql-test/lib/v1/mysql-test-run.pl @@ -23,7 +23,7 @@ # Tool used for executing a suite of .test file # # See the "MySQL Test framework manual" for more information -# http://dev.mysql.com/doc/mysqltest/en/index.html +# https://mariadb.com/kb/en/library/mysqltest/ # # Please keep the test framework tools identical in all versions! # diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 8253af5fbbd..5587f918d92 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -25,7 +25,7 @@ # Tool used for executing a suite of .test files # # See the "MySQL Test framework manual" for more information -# http://dev.mysql.com/doc/mysqltest/en/index.html +# https://mariadb.com/kb/en/library/mysqltest/ # # ############################################################################## -- cgit v1.2.1 From c32f7ed235f12d4e63f3145d09d5a57fb948d947 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 31 Oct 2018 18:18:48 +0100 Subject: MDEV-17377 invalid gap in auto-increment values after LOAD DATA reset lex->many_values for LOAD DATA, as it's used for auto-inc range size estimation. --- mysql-test/r/auto_increment_ranges_innodb.result | 14 ++++++++++++++ mysql-test/t/auto_increment_ranges_innodb.test | 11 +++++++++++ sql/sql_yacc.yy | 1 + 3 files changed, 26 insertions(+) diff --git a/mysql-test/r/auto_increment_ranges_innodb.result b/mysql-test/r/auto_increment_ranges_innodb.result index fb936ddfd2b..961f8b870ec 100644 --- a/mysql-test/r/auto_increment_ranges_innodb.result +++ b/mysql-test/r/auto_increment_ranges_innodb.result @@ -264,3 +264,17 @@ delete from t1 where a=32767; insert into t1 values(NULL); ERROR 22003: Out of range value for column 'a' at row 1 drop table t1; +create table t1 (pk int auto_increment primary key, f varchar(20)); +insert t1 (f) values ('a'), ('b'), ('c'), ('d'); +select null, f into outfile 'load.data' from t1 limit 1; +load data infile 'load.data' into table t1; +insert t1 (f) values ('<==='); +select * from t1; +pk f +1 a +2 b +3 c +4 d +5 a +6 <=== +drop table t1; diff --git a/mysql-test/t/auto_increment_ranges_innodb.test b/mysql-test/t/auto_increment_ranges_innodb.test index c2afee7ac66..3317153c31a 100644 --- a/mysql-test/t/auto_increment_ranges_innodb.test +++ b/mysql-test/t/auto_increment_ranges_innodb.test @@ -5,3 +5,14 @@ --source include/have_innodb.inc set default_storage_engine=innodb; --source auto_increment_ranges.inc + +# +# MDEV-17377 invalid gap in auto-increment values after LOAD DATA +# +create table t1 (pk int auto_increment primary key, f varchar(20)); +insert t1 (f) values ('a'), ('b'), ('c'), ('d'); +select null, f into outfile 'load.data' from t1 limit 1; +load data infile 'load.data' into table t1; +insert t1 (f) values ('<==='); +select * from t1; +drop table t1; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index bf47153c0c1..34f7c6e3481 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -12073,6 +12073,7 @@ load: lex->field_list.empty(); lex->update_list.empty(); lex->value_list.empty(); + lex->many_values.empty(); } opt_load_data_charset { Lex->exchange->cs= $14; } -- cgit v1.2.1 From b7eca63620df2d4626faa54a171cf0a190cf6924 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 1 Nov 2018 18:47:53 +0100 Subject: fix the test to clean after itself followup for c32f7ed235f --- mysql-test/t/auto_increment_ranges_innodb.test | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mysql-test/t/auto_increment_ranges_innodb.test b/mysql-test/t/auto_increment_ranges_innodb.test index 3317153c31a..016ca16bd91 100644 --- a/mysql-test/t/auto_increment_ranges_innodb.test +++ b/mysql-test/t/auto_increment_ranges_innodb.test @@ -16,3 +16,5 @@ load data infile 'load.data' into table t1; insert t1 (f) values ('<==='); select * from t1; drop table t1; +--let $datadir=`select @@datadir` +--remove_file $datadir/test/load.data -- cgit v1.2.1 From b68d8a05d326bed43aefa73d717c0307278ca6bb Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Fri, 12 Oct 2018 09:07:05 +0200 Subject: MDEV-17401: LOAD DATA from very big file into MyISAM table results in EOF error and corrupt index my_read fixed as in higher versions. my_pread made as my_read aware of partial read of huge chunks of files MY_FULL_IO enabled for file operations --- mysys/mf_iocache.c | 4 ++++ mysys/my_pread.c | 26 +++++++++++++++++++------- mysys/my_read.c | 52 ++++++++++++++++++++++++++++------------------------ 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/mysys/mf_iocache.c b/mysys/mf_iocache.c index bd71e2ae527..9a051cf6a9e 100644 --- a/mysys/mf_iocache.c +++ b/mysys/mf_iocache.c @@ -282,6 +282,10 @@ int init_io_cache(IO_CACHE *info, File file, size_t cachesize, } info->inited=info->aio_result.pending=0; #endif + if (type == READ_CACHE || type == WRITE_CACHE || type == SEQ_READ_APPEND) + info->myflags|= MY_FULL_IO; + else + info->myflags&= ~MY_FULL_IO; DBUG_RETURN(0); } /* init_io_cache */ diff --git a/mysys/my_pread.c b/mysys/my_pread.c index 51b4c5f5599..52d5c382960 100644 --- a/mysys/my_pread.c +++ b/mysys/my_pread.c @@ -47,8 +47,7 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, myf MyFlags) { - size_t readbytes; - int error= 0; + size_t readbytes, save_count= 0; DBUG_ENTER("my_pread"); @@ -66,11 +65,10 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, #else readbytes= pread(Filedes, Buffer, Count, offset); #endif - error = (readbytes != Count); - if (error) + if (readbytes != Count) { - my_errno= errno ? errno : -1; + my_errno= errno; if (errno == 0 || (readbytes != (size_t) -1 && (MyFlags & (MY_NABP | MY_FNABP)))) my_errno= HA_ERR_FILE_TOO_SHORT; @@ -82,6 +80,18 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, (int) readbytes)); continue; /* Interrupted */ } + + /* Do a read retry if we didn't get enough data on first read */ + if (readbytes != (size_t) -1 && readbytes != 0 && + (MyFlags & MY_FULL_IO)) + { + Buffer+= readbytes; + Count-= readbytes; + save_count+= readbytes; + offset+= readbytes; + continue; + } + if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) { if (readbytes == (size_t) -1) @@ -97,8 +107,10 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ } if (MyFlags & (MY_NABP | MY_FNABP)) - DBUG_RETURN(0); /* Read went ok; Return 0 */ - DBUG_RETURN(readbytes); /* purecov: inspected */ + readbytes= 0; /* Read went ok; Return 0 */ + else + readbytes+= save_count; + DBUG_RETURN(readbytes); } } /* my_pread */ diff --git a/mysys/my_read.c b/mysys/my_read.c index 883a1c5fdc7..47f2d725f65 100644 --- a/mysys/my_read.c +++ b/mysys/my_read.c @@ -35,17 +35,16 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags) { - size_t readbytes, save_count; + size_t readbytes, save_count= 0; DBUG_ENTER("my_read"); - DBUG_PRINT("my",("fd: %d Buffer: %p Count: %lu MyFlags: %d", - Filedes, Buffer, (ulong) Count, MyFlags)); - save_count= Count; + DBUG_PRINT("my",("fd: %d Buffer: %p Count: %lu MyFlags: %lu", + Filedes, Buffer, (ulong) Count, (ulong) MyFlags)); if (!(MyFlags & (MY_WME | MY_FAE | MY_FNABP))) MyFlags|= my_global_flags; for (;;) { - errno= 0; /* Linux, Windows don't reset this on EOF/success */ + errno= 0; /* Linux, Windows don't reset this on EOF/success */ #ifdef _WIN32 readbytes= my_win_read(Filedes, Buffer, Count); #else @@ -61,47 +60,52 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags) if (readbytes != Count) { - my_errno= errno; - if (errno == 0 || (readbytes != (size_t) -1 && - (MyFlags & (MY_NABP | MY_FNABP)))) - my_errno= HA_ERR_FILE_TOO_SHORT; + int got_errno= my_errno= errno; DBUG_PRINT("warning",("Read only %d bytes off %lu from %d, errno: %d", (int) readbytes, (ulong) Count, Filedes, - my_errno)); + got_errno)); + + if (got_errno == 0 || (readbytes != (size_t) -1 && + (MyFlags & (MY_NABP | MY_FNABP)))) + my_errno= HA_ERR_FILE_TOO_SHORT; - if ((readbytes == 0 || (int) readbytes == -1) && errno == EINTR) - { + if ((readbytes == 0 || (int) readbytes == -1) && got_errno == EINTR) + { DBUG_PRINT("debug", ("my_read() was interrupted and returned %ld", (long) readbytes)); continue; /* Interrupted */ } + /* Do a read retry if we didn't get enough data on first read */ + if (readbytes != (size_t) -1 && readbytes != 0 && + (MyFlags & MY_FULL_IO)) + { + Buffer+= readbytes; + Count-= readbytes; + save_count+= readbytes; + continue; + } + if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) { if (readbytes == (size_t) -1) my_error(EE_READ, MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))), - my_filename(Filedes),my_errno); + my_filename(Filedes), got_errno); else if (MyFlags & (MY_NABP | MY_FNABP)) my_error(EE_EOFERR, MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))), - my_filename(Filedes),my_errno); + my_filename(Filedes), got_errno); } if (readbytes == (size_t) -1 || ((MyFlags & (MY_FNABP | MY_NABP)) && !(MyFlags & MY_FULL_IO))) - DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ - if (readbytes != (size_t) -1 && (MyFlags & MY_FULL_IO)) - { - Buffer+= readbytes; - Count-= readbytes; - continue; - } + DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ } if (MyFlags & (MY_NABP | MY_FNABP)) - readbytes= 0; /* Ok on read */ - else if (MyFlags & MY_FULL_IO) - readbytes= save_count; + readbytes= 0; /* Ok on read */ + else + readbytes+= save_count; break; } DBUG_RETURN(readbytes); -- cgit v1.2.1 From ef40018535b71f0a4387fa6c1cc22e9991dfc0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lindstr=C3=B6m?= Date: Wed, 10 Oct 2018 18:25:53 +0300 Subject: MDEV-17230: encryption_key_id from alter is ignored by encryption threads Background: Used encryption key_id is stored to encryption metadata i.e. crypt_data that is stored on page 0 of the tablespace of the table. crypt_data is created only if implicit encryption/not encryption is requested i.e. ENCRYPTED=[YES|NO] table option is used fil_create_new_single_table_tablespace on fil0fil.cc. Later if encryption is enabled all tables that use default encryption mode (i.e. no encryption table option is set) are encrypted with default encryption key_id that is 1. See fil_crypt_start_encrypting_space on fil0crypt.cc. ha_innobase::check_table_options() If default encryption is used and encryption is disabled, you may not use nondefault encryption_key_id as it is not stored anywhere. --- .../encryption/r/innodb-encryption-alter.result | 37 ++++++++++++++++++++++ .../encryption/t/innodb-encryption-alter.test | 24 ++++++++++++++ storage/innobase/handler/ha_innodb.cc | 25 +++++++-------- storage/xtradb/handler/ha_innodb.cc | 25 +++++++-------- 4 files changed, 83 insertions(+), 28 deletions(-) diff --git a/mysql-test/suite/encryption/r/innodb-encryption-alter.result b/mysql-test/suite/encryption/r/innodb-encryption-alter.result index 9ff0f492034..5245d1da7d0 100644 --- a/mysql-test/suite/encryption/r/innodb-encryption-alter.result +++ b/mysql-test/suite/encryption/r/innodb-encryption-alter.result @@ -50,3 +50,40 @@ Warning 140 InnoDB: ENCRYPTION_KEY_ID 99 not available Error 1478 Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' set innodb_default_encryption_key_id = 1; drop table t1,t2; +SET GLOBAL innodb_encrypt_tables=OFF; +CREATE TABLE t1 (a int not null primary key) engine=innodb; +ALTER TABLE t1 ENCRYPTION_KEY_ID=4; +ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' +SHOW WARNINGS; +Level Code Message +Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1 +Error 1478 Table storage engine 'InnoDB' does not support the create option 'ENCRYPTION_KEY_ID' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1; +CREATE TABLE t2 (a int not null primary key) engine=innodb; +ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY; +ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +SHOW WARNINGS; +Level Code Message +Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1 +Error 1005 Can't create table `test`.`#sql-temporary` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` int(11) NOT NULL, + PRIMARY KEY (`a`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t2; +CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4; +ERROR HY000: Can't create table `test`.`t3` (errno: 140 "Wrong create options") +SHOW WARNINGS; +Level Code Message +Warning 140 InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1 +Error 1005 Can't create table `test`.`t3` (errno: 140 "Wrong create options") +Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB diff --git a/mysql-test/suite/encryption/t/innodb-encryption-alter.test b/mysql-test/suite/encryption/t/innodb-encryption-alter.test index 9420fb74a4c..9465226dd96 100644 --- a/mysql-test/suite/encryption/t/innodb-encryption-alter.test +++ b/mysql-test/suite/encryption/t/innodb-encryption-alter.test @@ -87,6 +87,30 @@ connection default; drop table t1,t2; +# +# MDEV-17230: encryption_key_id from alter is ignored by encryption threads +# +SET GLOBAL innodb_encrypt_tables=OFF; +CREATE TABLE t1 (a int not null primary key) engine=innodb; +--error ER_ILLEGAL_HA_CREATE_OPTION +ALTER TABLE t1 ENCRYPTION_KEY_ID=4; +SHOW WARNINGS; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +CREATE TABLE t2 (a int not null primary key) engine=innodb; +--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ +--error ER_CANT_CREATE_TABLE +ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY; +--replace_regex /#sql-[0-9a-f_]*`/#sql-temporary`/ +SHOW WARNINGS; +SHOW CREATE TABLE t2; +DROP TABLE t2; + +--error ER_CANT_CREATE_TABLE +CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4; +SHOW WARNINGS; + # reset system --disable_query_log EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 8baee1d30fc..b3a830e47c3 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -11958,21 +11958,18 @@ ha_innobase::check_table_options( options->encryption_key_id = FIL_DEFAULT_ENCRYPTION_KEY; } - /* If default encryption is used make sure that used kay is found - from key file. */ - if (encrypt == FIL_ENCRYPTION_DEFAULT && - !srv_encrypt_tables && - options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) { - if (!encryption_key_id_exists((unsigned int)options->encryption_key_id)) { - push_warning_printf( - thd, Sql_condition::WARN_LEVEL_WARN, - HA_WRONG_CREATE_OPTION, - "InnoDB: ENCRYPTION_KEY_ID %u not available", - (uint)options->encryption_key_id + /* If default encryption is used and encryption is disabled, you may + not use nondefault encryption_key_id as it is not stored anywhere. */ + if (encrypt == FIL_ENCRYPTION_DEFAULT + && !srv_encrypt_tables + && options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) { + compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1); + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + HA_WRONG_CREATE_OPTION, + "InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1" ); - return "ENCRYPTION_KEY_ID"; - - } + return "ENCRYPTION_KEY_ID"; } /* Check atomic writes requirements */ diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index a4434cd0d77..05066512db9 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -12525,21 +12525,18 @@ ha_innobase::check_table_options( options->encryption_key_id = FIL_DEFAULT_ENCRYPTION_KEY; } - /* If default encryption is used make sure that used kay is found - from key file. */ - if (encrypt == FIL_ENCRYPTION_DEFAULT && - !srv_encrypt_tables && - options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) { - if (!encryption_key_id_exists((unsigned int)options->encryption_key_id)) { - push_warning_printf( - thd, Sql_condition::WARN_LEVEL_WARN, - HA_WRONG_CREATE_OPTION, - "InnoDB: ENCRYPTION_KEY_ID %u not available", - (uint)options->encryption_key_id + /* If default encryption is used and encryption is disabled, you may + not use nondefault encryption_key_id as it is not stored anywhere. */ + if (encrypt == FIL_ENCRYPTION_DEFAULT + && !srv_encrypt_tables + && options->encryption_key_id != FIL_DEFAULT_ENCRYPTION_KEY) { + compile_time_assert(FIL_DEFAULT_ENCRYPTION_KEY == 1); + push_warning_printf( + thd, Sql_condition::WARN_LEVEL_WARN, + HA_WRONG_CREATE_OPTION, + "InnoDB: innodb_encrypt_tables=OFF only allows ENCRYPTION_KEY_ID=1" ); - return "ENCRYPTION_KEY_ID"; - - } + return "ENCRYPTION_KEY_ID"; } /* Check atomic writes requirements */ -- cgit v1.2.1 From 9c026273a923f3433ad622124d7a008ce6b5c487 Mon Sep 17 00:00:00 2001 From: Anel Husakovic Date: Tue, 6 Nov 2018 10:58:02 +0000 Subject: Add implementation in .h and delete unneccessery printing --- storage/innobase/handler/ha_innodb.cc | 11 ----------- storage/innobase/handler/ha_innodb.h | 2 +- storage/xtradb/handler/ha_innodb.cc | 11 ----------- storage/xtradb/handler/ha_innodb.h | 2 +- 4 files changed, 2 insertions(+), 24 deletions(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 2092cd113a5..85c5529a096 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -9039,17 +9039,6 @@ next_record: return(HA_ERR_END_OF_FILE); } -/************************************************************************* -*/ - -void -ha_innobase::ft_end() -{ - fprintf(stderr, "ft_end()\n"); - - rnd_end(); -} - /*********************************************************************//** Stores a reference to the current row to 'ref' field of the handle. Note that in the case where we have generated the clustered index for the diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h index f9e98d5dfe6..e09d2d81e35 100644 --- a/storage/innobase/handler/ha_innodb.h +++ b/storage/innobase/handler/ha_innodb.h @@ -153,7 +153,7 @@ class ha_innobase: public handler int rnd_pos(uchar * buf, uchar *pos); int ft_init(); - void ft_end(); + void ft_end() { rnd_end(); } FT_INFO *ft_init_ext(uint flags, uint inx, String* key); int ft_read(uchar* buf); diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index 127309a6b65..52ef0b01534 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -9810,17 +9810,6 @@ next_record: return(HA_ERR_END_OF_FILE); } -/************************************************************************* -*/ - -void -ha_innobase::ft_end() -{ - fprintf(stderr, "ft_end()\n"); - - rnd_end(); -} - /*********************************************************************//** Stores a reference to the current row to 'ref' field of the handle. Note that in the case where we have generated the clustered index for the diff --git a/storage/xtradb/handler/ha_innodb.h b/storage/xtradb/handler/ha_innodb.h index e65e0964f9d..87267789ab3 100644 --- a/storage/xtradb/handler/ha_innodb.h +++ b/storage/xtradb/handler/ha_innodb.h @@ -156,7 +156,7 @@ class ha_innobase: public handler int rnd_pos(uchar * buf, uchar *pos); int ft_init(); - void ft_end(); + void ft_end() { rnd_end(); } FT_INFO *ft_init_ext(uint flags, uint inx, String* key); int ft_read(uchar* buf); -- cgit v1.2.1