From svnnotify ¡÷ sourceforge.jp Fri Feb 1 19:02:08 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 01 Feb 2008 19:02:08 +0900 Subject: [Tritonn-commit 84] [svn] [95] tritonn-1.0.9-mysql-5.0.51a. Message-ID: <1201860128.222057.25711.nullmailer@users.sourceforge.jp> Revision: 95 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=95 Author: mir Date: 2008-02-01 19:02:08 +0900 (Fri, 01 Feb 2008) Log Message: ----------- tritonn-1.0.9-mysql-5.0.51a. Modified Paths: -------------- build/SPECS/mecab-ipadic.spec build/SPECS/mecab.spec build/SPECS/mysql.spec build/SPECS/senna.spec Modified: build/SPECS/mecab-ipadic.spec =================================================================== --- build/SPECS/mecab-ipadic.spec 2008-01-30 08:10:00 UTC (rev 94) +++ build/SPECS/mecab-ipadic.spec 2008-02-01 10:02:08 UTC (rev 95) @@ -2,7 +2,7 @@ %define prefix /usr %define config --with-charset=utf8 %define version 2.7.0.20070801 -%define release tritonn.1.0.8 +%define release tritonn.1.0.9 %define file_suffix 2.7.0-20070801 %define mecab-version 0.96 @@ -47,8 +47,16 @@ %{prefix}/lib/mecab/dic/ipadic/right-id.def %{prefix}/lib/mecab/dic/ipadic/sys.dic %{prefix}/lib/mecab/dic/ipadic/unk.dic +%{prefix}/lib/mecab/dic/ipadic/*.csv +%{prefix}/lib/mecab/dic/ipadic/unk.def +%{prefix}/lib/mecab/dic/ipadic/char.def +%{prefix}/lib/mecab/dic/ipadic/matrix.def %changelog +* Fri Feb 1 2008 Tetsuro IKEDA - 2.7.0.20070801-tritonn.1.0.8 +- Added *.csv files, a few *.def files into %files. +- Tritonn 1.0.9 + * Tue Dec 18 2007 Tetsuro IKEDA - 2.7.0.20070801-tritonn.1.0.8 - Tritonn 1.0.8 Modified: build/SPECS/mecab.spec =================================================================== --- build/SPECS/mecab.spec 2008-01-30 08:10:00 UTC (rev 94) +++ build/SPECS/mecab.spec 2008-02-01 10:02:08 UTC (rev 95) @@ -1,7 +1,7 @@ %define name mecab %define prefix /usr %define version 0.96 -%define release tritonn.1.0.8 +%define release tritonn.1.0.9 Name: %{name} Version: %{version} @@ -59,6 +59,9 @@ %{prefix}/bin/mecab %changelog +* Fri Feb 1 2008 Tetsuro IKEDA - 0.96-tritonn.1.0.9 +- Tritonn 1.0.9 + * Tue Dec 18 2007 Tetsuro IKEDA - 0.96-tritonn.1.0.8 - Tritonn 1.0.8 Modified: build/SPECS/mysql.spec =================================================================== --- build/SPECS/mysql.spec 2008-01-30 08:10:00 UTC (rev 94) +++ build/SPECS/mysql.spec 2008-02-01 10:02:08 UTC (rev 95) @@ -14,7 +14,8 @@ # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1301 USA. -%define mysql_version 5.0.51-tritonn-1.0.8 +%define mysql_version 5.0.51a-tritonn-1.0.9 +%define srcdir tritonn-1.0.9-mysql-5.0.51a # use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x) # to enable static linking (off by default) @@ -29,7 +30,7 @@ %if %{STATIC_BUILD} %define release 0 %else -%define release tritonn.1.0.8 +%define release tritonn.1.0.9 %endif %define license GPL %define mysqld_user mysql @@ -63,10 +64,10 @@ Name: MySQL Summary: MySQL with Senna (Tritonn Project) Group: Applications/Databases -Version: 5.0.51 +Version: 5.0.51a Release: %{release} License: %{license} -Source: mysql-%{mysql_version}.tar.gz +Source: %{srcdir}.tar.gz URL: http://www.mysql.com/ Packager: Tritonn Project (http://qwik.jp/tritonn/) Provides: msqlormysql MySQL-server mysql @@ -229,7 +230,7 @@ #%{see_base} %prep -%setup -n mysql-%{mysql_version} +%setup -n %{srcdir} %build @@ -238,12 +239,12 @@ # support assembler speedups. sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \ CC=\"${CC:-$MYSQL_BUILD_CC}\" \ - CXX=\"${CXX:-$MYSQL_BUILD_CXX}\" \ - CFLAGS=\"${MYSQL_BUILD_CFLAGS:-$RPM_OPT_FLAGS}\" \ - CXXFLAGS=\"${MYSQL_BUILD_CXXFLAGS:-$RPM_OPT_FLAGS \ - -felide-constructors -fno-exceptions -fno-rtti \ - }\" \ - LDFLAGS=\"$MYSQL_BUILD_LDFLAGS\" \ + CXX=\"${CXX:-$MYSQL_BUILD_CXX}\" \ + CFLAGS=\"${MYSQL_BUILD_CFLAGS:-$RPM_OPT_FLAGS} -O2\" \ + CXXFLAGS=\"${MYSQL_BUILD_CXXFLAGS:-$RPM_OPT_FLAGS \ + -felide-constructors -fno-exceptions -fno-rtti -O2\ + }\" \ + LDFLAGS=\"$MYSQL_BUILD_LDFLAGS\" \ ./configure \ $* \ --with-senna \ @@ -288,7 +289,7 @@ # Use the build root for temporary storage of the shared libraries. RBR=$RPM_BUILD_ROOT -MBD=$RPM_BUILD_DIR/mysql-%{mysql_version} +MBD=$RPM_BUILD_DIR/%{srcdir} # Clean up the BuildRoot first [ "$RBR" != "/" ] && [ -d $RBR ] && rm -rf $RBR; @@ -374,7 +375,7 @@ %install RBR=$RPM_BUILD_ROOT -MBD=$RPM_BUILD_DIR/mysql-%{mysql_version} +MBD=$RPM_BUILD_DIR/%{srcdir} # Ensure that needed directories exists install -d $RBR%{_sysconfdir}/{logrotate.d,init.d} @@ -726,6 +727,9 @@ # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Fri Feb 1 2008 Tetsuro IKEDA +- tritonn-1.0.9-mysql-5.0.51a + * Tue Dec 18 2007 Tetsuro IKEDA - Modified this spec file for Tritonn ver 1.0.8 and MySQL 5.0.51 Modified: build/SPECS/senna.spec =================================================================== --- build/SPECS/senna.spec 2008-01-30 08:10:00 UTC (rev 94) +++ build/SPECS/senna.spec 2008-02-01 10:02:08 UTC (rev 95) @@ -1,7 +1,7 @@ %define name senna %define prefix /usr -%define version 1.0.9 -%define release tritonn.1.0.8 +%define version 1.1.0 +%define release tritonn.1.0.9 Name: %{name} Version: %{version} @@ -51,6 +51,9 @@ %changelog +* Fri Feb 1 2008 Tetsuro IKEDA - 1.1.0-tritonn.1.0.9 +- Tritonn 1.0.9 + * Tue Dec 18 2007 Tetsuro IKEDA - 1.0.9-tritonn.1.0.8 - Tritonn 1.0.8 From svnnotify ¡÷ sourceforge.jp Tue Feb 5 09:56:52 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 05 Feb 2008 09:56:52 +0900 Subject: [Tritonn-commit 85] [svn] [97] tritonn-1.0.9a-mysql-5.0.51a. Message-ID: <1202173012.267227.27058.nullmailer@users.sourceforge.jp> Revision: 97 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=97 Author: mir Date: 2008-02-05 09:56:51 +0900 (Tue, 05 Feb 2008) Log Message: ----------- tritonn-1.0.9a-mysql-5.0.51a. this release is only for source package bugfix regarding to missing libmysqld patches. Modified Paths: -------------- build/SPECS/mysql.spec Modified: build/SPECS/mysql.spec =================================================================== --- build/SPECS/mysql.spec 2008-02-04 09:15:54 UTC (rev 96) +++ build/SPECS/mysql.spec 2008-02-05 00:56:51 UTC (rev 97) @@ -14,8 +14,8 @@ # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1301 USA. -%define mysql_version 5.0.51a-tritonn-1.0.9 -%define srcdir tritonn-1.0.9-mysql-5.0.51a +%define mysql_version 5.0.51a-tritonn-1.0.9a +%define srcdir tritonn-1.0.9a-mysql-5.0.51a # use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x) # to enable static linking (off by default) @@ -727,6 +727,10 @@ # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Tue Feb 5 2008 Tetsuro IKEDA +- tritonn-1.0.9a-mysql-5.0.51a +- this release is only for source package bugfix. + * Fri Feb 1 2008 Tetsuro IKEDA - tritonn-1.0.9-mysql-5.0.51a From svnnotify ¡÷ sourceforge.jp Tue Feb 5 10:06:58 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 05 Feb 2008 10:06:58 +0900 Subject: [Tritonn-commit 86] [svn] [98] changed release version to 1.0.9a. Message-ID: <1202173618.530173.2253.nullmailer@users.sourceforge.jp> Revision: 98 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=98 Author: mir Date: 2008-02-05 10:06:58 +0900 (Tue, 05 Feb 2008) Log Message: ----------- changed release version to 1.0.9a. Modified Paths: -------------- build/SPECS/mysql.spec Modified: build/SPECS/mysql.spec =================================================================== --- build/SPECS/mysql.spec 2008-02-05 00:56:51 UTC (rev 97) +++ build/SPECS/mysql.spec 2008-02-05 01:06:58 UTC (rev 98) @@ -30,7 +30,7 @@ %if %{STATIC_BUILD} %define release 0 %else -%define release tritonn.1.0.9 +%define release tritonn.1.0.9a %endif %define license GPL %define mysqld_user mysql From svnnotify ¡÷ sourceforge.jp Tue Feb 5 16:55:58 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 05 Feb 2008 16:55:58 +0900 Subject: [Tritonn-commit 87] [svn] [99] copy from tritonn-1.0.9-mysql-5.0.51a. Message-ID: <1202198158.052716.17311.nullmailer@users.sourceforge.jp> Revision: 99 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=99 Author: mir Date: 2008-02-05 16:55:57 +0900 (Tue, 05 Feb 2008) Log Message: ----------- copy from tritonn-1.0.9-mysql-5.0.51a. Added Paths: ----------- tags/tritonn-1.1.0-mysql-5.0.51a/ Copied: tags/tritonn-1.1.0-mysql-5.0.51a (from rev 96, tags/tritonn-1.0.9-mysql-5.0.51a) From svnnotify ¡÷ sourceforge.jp Tue Feb 5 17:39:57 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 05 Feb 2008 17:39:57 +0900 Subject: [Tritonn-commit 88] [svn] [100] copy from tritonn-1.0.9-mysql-5.0.51a. Message-ID: <1202200797.391376.16479.nullmailer@users.sourceforge.jp> Revision: 100 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=100 Author: mir Date: 2008-02-05 17:39:57 +0900 (Tue, 05 Feb 2008) Log Message: ----------- copy from tritonn-1.0.9-mysql-5.0.51a. Added Paths: ----------- tags/tritonn-1.0.10-mysql-5.0.51a/ Copied: tags/tritonn-1.0.10-mysql-5.0.51a (from rev 96, tags/tritonn-1.0.9-mysql-5.0.51a) From svnnotify ¡÷ sourceforge.jp Fri Feb 8 19:30:15 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 08 Feb 2008 19:30:15 +0900 Subject: [Tritonn-commit 89] [svn] [101] changed variable type of MI_KEYDEF to apply new signature of sen_index_info . Message-ID: <1202466615.538857.16860.nullmailer@users.sourceforge.jp> Revision: 101 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=101 Author: mir Date: 2008-02-08 19:30:15 +0900 (Fri, 08 Feb 2008) Log Message: ----------- changed variable type of MI_KEYDEF to apply new signature of sen_index_info. Note! this is incompatible change with senna-1.1.0 and prior. senna-1.1.1 or later must be used with. Modified Paths: -------------- tags/tritonn-1.0.9-mysql-5.0.51a/include/myisam.h Modified: tags/tritonn-1.0.9-mysql-5.0.51a/include/myisam.h =================================================================== --- tags/tritonn-1.0.9-mysql-5.0.51a/include/myisam.h 2008-02-05 08:39:57 UTC (rev 100) +++ tags/tritonn-1.0.9-mysql-5.0.51a/include/myisam.h 2008-02-08 10:30:15 UTC (rev 101) @@ -211,8 +211,8 @@ uint senna_keys_file_size; uint senna_lexicon_size; uint senna_lexicon_file_size; - uint senna_inv_seg_size; - uint senna_inv_chunk_size; + ulonglong senna_inv_seg_size; + ulonglong senna_inv_chunk_size; sen_index *senna; sen_encoding senna_encoding; #endif /* ENABLE_SENNA */ From svnnotify ¡÷ sourceforge.jp Fri Feb 8 19:30:39 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 08 Feb 2008 19:30:39 +0900 Subject: [Tritonn-commit 90] [svn] [102] changed variable type of MI_KEYDEF to apply new signature of sen_index_info . Message-ID: <1202466639.649424.16993.nullmailer@users.sourceforge.jp> Revision: 102 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=102 Author: mir Date: 2008-02-08 19:30:39 +0900 (Fri, 08 Feb 2008) Log Message: ----------- changed variable type of MI_KEYDEF to apply new signature of sen_index_info. Note! this is incompatible change with senna-1.1.0 and prior. senna-1.1.1 or later must be used with. Modified Paths: -------------- tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h Modified: tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h 2008-02-08 10:30:15 UTC (rev 101) +++ tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h 2008-02-08 10:30:39 UTC (rev 102) @@ -211,8 +211,8 @@ uint senna_keys_file_size; uint senna_lexicon_size; uint senna_lexicon_file_size; - uint senna_inv_seg_size; - uint senna_inv_chunk_size; + ulonglong senna_inv_seg_size; + ulonglong senna_inv_chunk_size; sen_index *senna; sen_encoding senna_encoding; #endif /* ENABLE_SENNA */ From svnnotify ¡÷ sourceforge.jp Tue Feb 12 10:43:16 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 12 Feb 2008 10:43:16 +0900 Subject: [Tritonn-commit 91] [svn] [103] Bugfix: show_senna_status caused crash by assertion failure Message-ID: <1202780596.381834.17370.nullmailer@users.sourceforge.jp> Revision: 103 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=103 Author: mir Date: 2008-02-12 10:43:16 +0900 (Tue, 12 Feb 2008) Log Message: ----------- Bugfix: show_senna_status caused crash by assertion failure if configured with --with-debug. (Thanks to Kazuho Oku.) Modified Paths: -------------- tags/tritonn-1.0.10-mysql-5.0.51a/sql/sql_show.cc Modified: tags/tritonn-1.0.10-mysql-5.0.51a/sql/sql_show.cc =================================================================== --- tags/tritonn-1.0.10-mysql-5.0.51a/sql/sql_show.cc 2008-02-08 10:30:39 UTC (rev 102) +++ tags/tritonn-1.0.10-mysql-5.0.51a/sql/sql_show.cc 2008-02-12 01:43:16 UTC (rev 103) @@ -4589,13 +4589,13 @@ protocol->store(key->senna_flags & SEN_INDEX_SPLIT_ALPHA ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_DIGIT ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_SYMBOL ? "ON" : "OFF", system_charset_info); - protocol->store((uint32) key->senna_initial_n_segments); - protocol->store((uint32) key->senna_keys_size); - protocol->store((uint32) key->senna_keys_file_size); - protocol->store((uint32) key->senna_lexicon_size); - protocol->store((uint32) key->senna_lexicon_file_size); - protocol->store((uint32) key->senna_inv_seg_size); - protocol->store((uint32) key->senna_inv_chunk_size); + protocol->store((longlong) key->senna_initial_n_segments); + protocol->store((longlong) key->senna_keys_size); + protocol->store((longlong) key->senna_keys_file_size); + protocol->store((longlong) key->senna_lexicon_size); + protocol->store((longlong) key->senna_lexicon_file_size); + protocol->store((longlong) key->senna_inv_seg_size); + protocol->store((longlong) key->senna_inv_chunk_size); if (protocol->write()) DBUG_RETURN(TRUE); } } From svnnotify ¡÷ sourceforge.jp Tue Feb 12 10:43:50 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 12 Feb 2008 10:43:50 +0900 Subject: [Tritonn-commit 92] [svn] [104] Bugfix: show_senna_status caused crash by assertion failure Message-ID: <1202780630.512136.17473.nullmailer@users.sourceforge.jp> Revision: 104 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=104 Author: mir Date: 2008-02-12 10:43:50 +0900 (Tue, 12 Feb 2008) Log Message: ----------- Bugfix: show_senna_status caused crash by assertion failure if configured with --with-debug. (Thanks to Kazuho Oku.) Modified Paths: -------------- tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_show.cc Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_show.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_show.cc 2008-02-12 01:43:16 UTC (rev 103) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_show.cc 2008-02-12 01:43:50 UTC (rev 104) @@ -4589,13 +4589,13 @@ protocol->store(key->senna_flags & SEN_INDEX_SPLIT_ALPHA ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_DIGIT ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_SYMBOL ? "ON" : "OFF", system_charset_info); - protocol->store((uint32) key->senna_initial_n_segments); - protocol->store((uint32) key->senna_keys_size); - protocol->store((uint32) key->senna_keys_file_size); - protocol->store((uint32) key->senna_lexicon_size); - protocol->store((uint32) key->senna_lexicon_file_size); - protocol->store((uint32) key->senna_inv_seg_size); - protocol->store((uint32) key->senna_inv_chunk_size); + protocol->store((longlong) key->senna_initial_n_segments); + protocol->store((longlong) key->senna_keys_size); + protocol->store((longlong) key->senna_keys_file_size); + protocol->store((longlong) key->senna_lexicon_size); + protocol->store((longlong) key->senna_lexicon_file_size); + protocol->store((longlong) key->senna_inv_seg_size); + protocol->store((longlong) key->senna_inv_chunk_size); if (protocol->write()) DBUG_RETURN(TRUE); } } From svnnotify ¡÷ sourceforge.jp Tue Feb 12 10:48:00 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 12 Feb 2008 10:48:00 +0900 Subject: [Tritonn-commit 93] [svn] [105] Bugfix: mi_rename caused crash because of illegal memory access . Message-ID: <1202780880.682219.19670.nullmailer@users.sourceforge.jp> Revision: 105 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=105 Author: mir Date: 2008-02-12 10:48:00 +0900 (Tue, 12 Feb 2008) Log Message: ----------- Bugfix: mi_rename caused crash because of illegal memory access. (Thanks to Kazuho Oku.) Modified Paths: -------------- tags/tritonn-1.0.10-mysql-5.0.51a/myisam/mi_rename.c Modified: tags/tritonn-1.0.10-mysql-5.0.51a/myisam/mi_rename.c =================================================================== --- tags/tritonn-1.0.10-mysql-5.0.51a/myisam/mi_rename.c 2008-02-12 01:43:50 UTC (rev 104) +++ tags/tritonn-1.0.10-mysql-5.0.51a/myisam/mi_rename.c 2008-02-12 01:48:00 UTC (rev 105) @@ -47,28 +47,25 @@ #ifdef ENABLE_SENNA /* nkjm modified 2007/06/04 SFID:10291 */ { - int i, keys; + int i, j; MI_INFO *mi_info; - MI_INFO cp_of_mi_info; - + int senna_indexes[MAX_INDEXES]; + if (!(mi_info = mi_open(old_name, O_RDONLY, 0))) { SEN_LOG(sen_log_warning, "mi_rename => cannot get MI_INFO"); DBUG_RETURN(my_errno); } - - cp_of_mi_info = *mi_info; + for (i = 0, j = 0; i < mi_info->s->base.keys; i++) + if (mi_info->s->keyinfo[i].senna) + senna_indexes[j++] = i; mi_close(mi_info); - keys = cp_of_mi_info.s->base.keys; - for (i = 0; i < keys; i++) + for (i = 0; i < j; i++) { - if (cp_of_mi_info.s->keyinfo[i].senna) - { - my_snprintf(from, FN_REFLEN, "%s.%03d", old_name, i); - my_snprintf(to, FN_REFLEN, "%s.%03d", new_name, i); - SEN_LOG(sen_log_notice, "mi_rename => sen_index_rename: from=%s, to=%s", from, to); - sen_index_rename(from, to); - } + my_snprintf(from, FN_REFLEN, "%s.%03d", old_name, senna_indexes[i]); + my_snprintf(to, FN_REFLEN, "%s.%03d", new_name, senna_indexes[i]); + SEN_LOG(sen_log_notice, "mi_rename => sen_index_rename: from=%s, to=%s", from, to); + sen_index_rename(from, to); } } #endif /* ENABLE_SENNA */ From svnnotify ¡÷ sourceforge.jp Tue Feb 12 10:48:14 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Tue, 12 Feb 2008 10:48:14 +0900 Subject: [Tritonn-commit 94] [svn] [106] Bugfix: mi_rename caused crash because of illegal memory access . Message-ID: <1202780894.460398.20470.nullmailer@users.sourceforge.jp> Revision: 106 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=106 Author: mir Date: 2008-02-12 10:48:14 +0900 (Tue, 12 Feb 2008) Log Message: ----------- Bugfix: mi_rename caused crash because of illegal memory access. (Thanks to Kazuho Oku.) Modified Paths: -------------- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c 2008-02-12 01:48:00 UTC (rev 105) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c 2008-02-12 01:48:14 UTC (rev 106) @@ -47,28 +47,25 @@ #ifdef ENABLE_SENNA /* nkjm modified 2007/06/04 SFID:10291 */ { - int i, keys; + int i, j; MI_INFO *mi_info; - MI_INFO cp_of_mi_info; - + int senna_indexes[MAX_INDEXES]; + if (!(mi_info = mi_open(old_name, O_RDONLY, 0))) { SEN_LOG(sen_log_warning, "mi_rename => cannot get MI_INFO"); DBUG_RETURN(my_errno); } - - cp_of_mi_info = *mi_info; + for (i = 0, j = 0; i < mi_info->s->base.keys; i++) + if (mi_info->s->keyinfo[i].senna) + senna_indexes[j++] = i; mi_close(mi_info); - keys = cp_of_mi_info.s->base.keys; - for (i = 0; i < keys; i++) + for (i = 0; i < j; i++) { - if (cp_of_mi_info.s->keyinfo[i].senna) - { - my_snprintf(from, FN_REFLEN, "%s.%03d", old_name, i); - my_snprintf(to, FN_REFLEN, "%s.%03d", new_name, i); - SEN_LOG(sen_log_notice, "mi_rename => sen_index_rename: from=%s, to=%s", from, to); - sen_index_rename(from, to); - } + my_snprintf(from, FN_REFLEN, "%s.%03d", old_name, senna_indexes[i]); + my_snprintf(to, FN_REFLEN, "%s.%03d", new_name, senna_indexes[i]); + SEN_LOG(sen_log_notice, "mi_rename => sen_index_rename: from=%s, to=%s", from, to); + sen_index_rename(from, to); } } #endif /* ENABLE_SENNA */ From svnnotify ¡÷ sourceforge.jp Fri Feb 15 15:42:09 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 15 Feb 2008 15:42:09 +0900 Subject: [Tritonn-commit 95] [svn] [107] merged from sql/sql_show.cc. Message-ID: <1203057729.955972.14784.nullmailer@users.sourceforge.jp> Revision: 107 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=107 Author: mir Date: 2008-02-15 15:42:09 +0900 (Fri, 15 Feb 2008) Log Message: ----------- merged from sql/sql_show.cc. Modified Paths: -------------- tags/tritonn-1.0.10-mysql-5.0.51a/libmysqld/sql_show.cc Modified: tags/tritonn-1.0.10-mysql-5.0.51a/libmysqld/sql_show.cc =================================================================== --- tags/tritonn-1.0.10-mysql-5.0.51a/libmysqld/sql_show.cc 2008-02-12 01:48:14 UTC (rev 106) +++ tags/tritonn-1.0.10-mysql-5.0.51a/libmysqld/sql_show.cc 2008-02-15 06:42:09 UTC (rev 107) @@ -29,6 +29,7 @@ #endif #ifdef ENABLE_SENNA +#define SECTIONALIZE 0x00080000 #ifdef HAVE_ISAM #include "ha_myisam.h" // For isam #endif @@ -1005,6 +1006,45 @@ !(key_info->flags & HA_SPATIAL)) packet->append(STRING_WITH_LEN(" USING RTREE")); +#ifdef ENABLE_SENNA + { + char ins[32]; + char *insp; + int inslen; + if (key_info->is_senna) + { + if (key_info->senna_flags & SEN_INDEX_NGRAM) + packet->append(STRING_WITH_LEN(" USING NGRAM")); + else if (key_info->senna_flags & SEN_INDEX_DELIMITED) + packet->append(STRING_WITH_LEN(" USING DELIMITED")); + else + packet->append(STRING_WITH_LEN(" USING MECAB")); + + if (key_info->senna_flags & SEN_INDEX_NORMALIZE) + packet->append(STRING_WITH_LEN(", NORMALIZE")); + else + packet->append(STRING_WITH_LEN(", NO NORMALIZE")); + + if (key_info->senna_flags & SECTIONALIZE) + packet->append(STRING_WITH_LEN(", SECTIONALIZE")); + + if (key_info->senna_flags & SEN_INDEX_SPLIT_ALPHA) + packet->append(STRING_WITH_LEN(", SPLIT_ALPHA")); + if (key_info->senna_flags & SEN_INDEX_SPLIT_DIGIT) + packet->append(STRING_WITH_LEN(", SPLIT_DIGIT")); + if (key_info->senna_flags & SEN_INDEX_SPLIT_SYMBOL) + packet->append(STRING_WITH_LEN(", SPLIT_SYMBOL")); + + /* TODO: initial_n_segments support */ + my_snprintf(ins, sizeof(ins), ", %d",key_info->senna_initial_n_segments); + inslen = strlen(ins); + insp = sql_alloc(inslen); + memcpy(insp, ins, inslen); + packet->append(insp, inslen); + } + } +#endif + // No need to send USING FULLTEXT, it is sent as FULLTEXT KEY } packet->append(STRING_WITH_LEN(" (")); @@ -4452,7 +4492,6 @@ #endif #ifdef ENABLE_SENNA -#define SECTIONALIZE 0x00080000 bool senna_show_status(THD *thd, LEX *lex) { List files; @@ -4498,7 +4537,15 @@ List_iterator_fast it(files); while (file_name = it++) { + TABLE tmp_table; TABLE_LIST table_list; + + /* to skip views */ + (void) my_snprintf(path, FN_LEN, "%s/%s", db, file_name); + openfrm(thd, path, "", 0, SENNA_CHECK_VIEW, 0, &tmp_table); + if(!(tmp_table.file)) continue; + closefrm(&tmp_table); + bzero((char*) &table_list, sizeof(table_list)); table_list.db = db; table_list.table_name = file_name; @@ -4542,13 +4589,13 @@ protocol->store(key->senna_flags & SEN_INDEX_SPLIT_ALPHA ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_DIGIT ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_SYMBOL ? "ON" : "OFF", system_charset_info); - protocol->store((uint32) key->senna_initial_n_segments); - protocol->store((uint32) key->senna_keys_size); - protocol->store((uint32) key->senna_keys_file_size); - protocol->store((uint32) key->senna_lexicon_size); - protocol->store((uint32) key->senna_lexicon_file_size); - protocol->store((uint32) key->senna_inv_seg_size); - protocol->store((uint32) key->senna_inv_chunk_size); + protocol->store((longlong) key->senna_initial_n_segments); + protocol->store((longlong) key->senna_keys_size); + protocol->store((longlong) key->senna_keys_file_size); + protocol->store((longlong) key->senna_lexicon_size); + protocol->store((longlong) key->senna_lexicon_file_size); + protocol->store((longlong) key->senna_inv_seg_size); + protocol->store((longlong) key->senna_inv_chunk_size); if (protocol->write()) DBUG_RETURN(TRUE); } } From svnnotify ¡÷ sourceforge.jp Fri Feb 15 15:43:05 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 15 Feb 2008 15:43:05 +0900 Subject: [Tritonn-commit 96] [svn] [108] merged from sql/sql_show.cc. Message-ID: <1203057785.619388.14946.nullmailer@users.sourceforge.jp> Revision: 108 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=108 Author: mir Date: 2008-02-15 15:43:05 +0900 (Fri, 15 Feb 2008) Log Message: ----------- merged from sql/sql_show.cc. Modified Paths: -------------- tags/tritonn-1.1.0-mysql-5.0.51a/libmysqld/sql_show.cc Modified: tags/tritonn-1.1.0-mysql-5.0.51a/libmysqld/sql_show.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/libmysqld/sql_show.cc 2008-02-15 06:42:09 UTC (rev 107) +++ tags/tritonn-1.1.0-mysql-5.0.51a/libmysqld/sql_show.cc 2008-02-15 06:43:05 UTC (rev 108) @@ -29,6 +29,7 @@ #endif #ifdef ENABLE_SENNA +#define SECTIONALIZE 0x00080000 #ifdef HAVE_ISAM #include "ha_myisam.h" // For isam #endif @@ -1005,6 +1006,45 @@ !(key_info->flags & HA_SPATIAL)) packet->append(STRING_WITH_LEN(" USING RTREE")); +#ifdef ENABLE_SENNA + { + char ins[32]; + char *insp; + int inslen; + if (key_info->is_senna) + { + if (key_info->senna_flags & SEN_INDEX_NGRAM) + packet->append(STRING_WITH_LEN(" USING NGRAM")); + else if (key_info->senna_flags & SEN_INDEX_DELIMITED) + packet->append(STRING_WITH_LEN(" USING DELIMITED")); + else + packet->append(STRING_WITH_LEN(" USING MECAB")); + + if (key_info->senna_flags & SEN_INDEX_NORMALIZE) + packet->append(STRING_WITH_LEN(", NORMALIZE")); + else + packet->append(STRING_WITH_LEN(", NO NORMALIZE")); + + if (key_info->senna_flags & SECTIONALIZE) + packet->append(STRING_WITH_LEN(", SECTIONALIZE")); + + if (key_info->senna_flags & SEN_INDEX_SPLIT_ALPHA) + packet->append(STRING_WITH_LEN(", SPLIT_ALPHA")); + if (key_info->senna_flags & SEN_INDEX_SPLIT_DIGIT) + packet->append(STRING_WITH_LEN(", SPLIT_DIGIT")); + if (key_info->senna_flags & SEN_INDEX_SPLIT_SYMBOL) + packet->append(STRING_WITH_LEN(", SPLIT_SYMBOL")); + + /* TODO: initial_n_segments support */ + my_snprintf(ins, sizeof(ins), ", %d",key_info->senna_initial_n_segments); + inslen = strlen(ins); + insp = sql_alloc(inslen); + memcpy(insp, ins, inslen); + packet->append(insp, inslen); + } + } +#endif + // No need to send USING FULLTEXT, it is sent as FULLTEXT KEY } packet->append(STRING_WITH_LEN(" (")); @@ -4452,7 +4492,6 @@ #endif #ifdef ENABLE_SENNA -#define SECTIONALIZE 0x00080000 bool senna_show_status(THD *thd, LEX *lex) { List files; @@ -4498,7 +4537,15 @@ List_iterator_fast it(files); while (file_name = it++) { + TABLE tmp_table; TABLE_LIST table_list; + + /* to skip views */ + (void) my_snprintf(path, FN_LEN, "%s/%s", db, file_name); + openfrm(thd, path, "", 0, SENNA_CHECK_VIEW, 0, &tmp_table); + if(!(tmp_table.file)) continue; + closefrm(&tmp_table); + bzero((char*) &table_list, sizeof(table_list)); table_list.db = db; table_list.table_name = file_name; @@ -4542,13 +4589,13 @@ protocol->store(key->senna_flags & SEN_INDEX_SPLIT_ALPHA ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_DIGIT ? "ON" : "OFF", system_charset_info); protocol->store(key->senna_flags & SEN_INDEX_SPLIT_SYMBOL ? "ON" : "OFF", system_charset_info); - protocol->store((uint32) key->senna_initial_n_segments); - protocol->store((uint32) key->senna_keys_size); - protocol->store((uint32) key->senna_keys_file_size); - protocol->store((uint32) key->senna_lexicon_size); - protocol->store((uint32) key->senna_lexicon_file_size); - protocol->store((uint32) key->senna_inv_seg_size); - protocol->store((uint32) key->senna_inv_chunk_size); + protocol->store((longlong) key->senna_initial_n_segments); + protocol->store((longlong) key->senna_keys_size); + protocol->store((longlong) key->senna_keys_file_size); + protocol->store((longlong) key->senna_lexicon_size); + protocol->store((longlong) key->senna_lexicon_file_size); + protocol->store((longlong) key->senna_inv_seg_size); + protocol->store((longlong) key->senna_inv_chunk_size); if (protocol->write()) DBUG_RETURN(TRUE); } } From svnnotify ¡÷ sourceforge.jp Fri Feb 15 17:16:35 2008 From: svnnotify ¡÷ sourceforge.jp (svnnotify ¡÷ sourceforge.jp) Date: Fri, 15 Feb 2008 17:16:35 +0900 Subject: [Tritonn-commit 97] [svn] [109] A contributed patch by Kazuho Oku, Cybozu labs. Message-ID: <1203063395.654598.7413.nullmailer@users.sourceforge.jp> Revision: 109 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=tritonn&view=rev&rev=109 Author: mir Date: 2008-02-15 17:16:35 +0900 (Fri, 15 Feb 2008) Log Message: ----------- A contributed patch by Kazuho Oku, Cybozu labs. This patch enable two new featrue. One enables tritonn to embed primary key value into "key" which is passed to senna, so this can dramatically reduce disk I/O if select statement use only fulltext index and primary key. The other feature enables tritonn to return TF score instead of simple "number of found keyword in a certain document" which is current implement and only implement. You can read full description about this patch at following URL: http://labs.cybozu.co.jp/blog/kazuho/archives/2008/02/triton-embed-primary-key.php Modified Paths: -------------- tags/tritonn-1.1.0-mysql-5.0.51a/include/my_base.h tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_boolean_search.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_nlq_search.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_update.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_create.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_all.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_table.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_extra.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_open.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c tags/tritonn-1.1.0-mysql-5.0.51a/myisam/myisamdef.h tags/tritonn-1.1.0-mysql-5.0.51a/sql/ha_myisam.cc tags/tritonn-1.1.0-mysql-5.0.51a/sql/item_func.cc tags/tritonn-1.1.0-mysql-5.0.51a/sql/mysqld.cc tags/tritonn-1.1.0-mysql-5.0.51a/sql/set_var.cc tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_select.cc Modified: tags/tritonn-1.1.0-mysql-5.0.51a/include/my_base.h =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/include/my_base.h 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/include/my_base.h 2008-02-15 08:16:35 UTC (rev 109) @@ -347,6 +347,7 @@ #define SENNA_IF_READ_RECORD (1 << 4) #define SENNA_DISTINCT (1 << 5) #define SENNA_FIRST_CALL (1 << 6) +#define SENNA_ONLY_READ_PRIMARY_KEY (1 << 7) #endif /* Modified: tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/include/myisam.h 2008-02-15 08:16:35 UTC (rev 109) @@ -36,6 +36,10 @@ #include #define SEN_DISABLE_SENNA 0x80000000 /* Don't use Senna fulltext search engine */ extern sen_logger_info senna_logger; +extern my_bool senna_use_embedded_pkey; +# ifdef ENABLE_SENNA_PSEUDO_TF +extern my_bool senna_use_pseudo_tf; +# endif #endif /* ENABLE_SENNA */ /* @@ -215,6 +219,10 @@ ulonglong senna_inv_chunk_size; sen_index *senna; sen_encoding senna_encoding; + int senna_embedded_pkey; +# ifdef ENABLE_SENNA_PSEUDO_TF + int senna_use_pseudo_tf; +# endif #endif /* ENABLE_SENNA */ int (*bin_search)(struct st_myisam_info *info,struct st_mi_keydef *keyinfo, uchar *page,uchar *key, @@ -291,6 +299,11 @@ extern int mi_delete(struct st_myisam_info *file,const byte *buff); extern struct st_myisam_info *mi_open(const char *name,int mode, uint wait_if_locked); +#ifdef ENABLE_SENNA +extern struct st_myisam_info *mi_open_senna(const char *name,int mode, + uint wait_if_locked, + int senna_embedded_pkey); +#endif extern int mi_panic(enum ha_panic_function function); extern int mi_rfirst(struct st_myisam_info *file,byte *buf,int inx); extern int mi_rkey(struct st_myisam_info *file,byte *buf,int inx, Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_boolean_search.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_boolean_search.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_boolean_search.c 2008-02-15 08:16:35 UTC (rev 109) @@ -606,22 +606,31 @@ #ifdef ENABLE_SENNA if ((ftb->keynr != NO_SUCH_KEY) && ftb->info->s->keyinfo[ftb->keynr].senna) { - my_off_t pos; + SENNA_EMBEDDED_KEY skey; + int skey_len; MI_INFO *info=ftb->info; - while (ftb->sir && sen_records_next(ftb->sir, &pos, sizeof(my_off_t), NULL)) { + while (ftb->sir && (skey_len = sen_records_next(ftb->sir, &skey, sizeof(skey), NULL))) { info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); - info->lastpos=pos; + info->lastpos=skey.pos; if (my_thread_var->sen_flags & SENNA_USE_2IND) { if (!(my_thread_var->sen_flags & (SENNA_IF_READ_RECORD | SENNA_FILESORT))) { SEN_LOG(sen_log_debug, "ft_boolean_read_next: 2ind return 0"); return 0; } } + if (skey_len == sizeof(SENNA_EMBEDDED_KEY) && + info->s->keyinfo[ftb->keynr].senna_embedded_pkey != MAX_INDEXES && + (my_thread_var->sen_flags & SENNA_ONLY_READ_PRIMARY_KEY)) { + HA_KEYSEG *keyseg = info->s->keyinfo[info->s->keyinfo[ftb->keynr].senna_embedded_pkey].seg; + memcpy(record + keyseg->start, &skey.pkey, keyseg->length); + info->update|= HA_STATE_AKTIV; /* Record is read */ + return 0; + } else if (!(*info->read_record)(info,info->lastpos,record)) { info->update|= HA_STATE_AKTIV; /* Record is read */ return 0; } - SEN_LOG(sen_log_error, "ft_boolean_read_next: my_errno=%d pos=%lld", my_errno, pos); + SEN_LOG(sen_log_error, "ft_boolean_read_next: my_errno=%d pos=%lld", my_errno, skey.pos); if (my_errno == 127) { continue; } return my_errno; } @@ -704,13 +713,21 @@ #ifdef ENABLE_SENNA if ((ftb->keynr != NO_SUCH_KEY) && ftb->info->s->keyinfo[ftb->keynr].senna) { - my_off_t docid=ftb->info->lastpos; + MYISAM_SHARE *share = ftb->info->s; + SENNA_EMBEDDED_KEY skey; + skey.pos=ftb->info->lastpos; if (!ftb->sir) { return 0.0; } - if (docid == HA_OFFSET_ERROR) + if (skey.pos == HA_OFFSET_ERROR) return -2.0; + skey.pkey=0; + if (share->keyinfo[ftb->keynr].senna_embedded_pkey != MAX_INDEXES) { + HA_KEYSEG *keyseg = + share->keyinfo[share->keyinfo[ftb->keynr].senna_embedded_pkey].seg; + memcpy(&skey.pkey, record + keyseg->start, keyseg->length); + } SEN_LOG(sen_log_dump, "ft_boolean_find_relevance => sen_records_find: records=%p, key=%p", - ftb->sir, &docid); - return 1.0 * sen_records_find(ftb->sir, &docid); + ftb->sir, &skey.pos); + return 1.0 * sen_records_find(ftb->sir, &skey); } else #endif /* ENABLE_SENNA */ Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_nlq_search.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_nlq_search.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_nlq_search.c 2008-02-15 08:16:35 UTC (rev 109) @@ -34,6 +34,7 @@ int curdoc; #ifdef ENABLE_SENNA sen_records *sir; + int senna_embedded_pkey; #endif /* ENABLE_SENNA */ FT_DOC doc[1]; }; @@ -296,6 +297,7 @@ #ifdef ENABLE_SENNA dlist->sir = sir; + dlist->senna_embedded_pkey = info->s->keyinfo[keynr].senna_embedded_pkey; #endif /* ENABLE_SENNA */ tree_walk(&aio.dtree, (tree_walk_action) &walk_and_copy, &dptr, left_root_right); @@ -317,24 +319,34 @@ #ifdef ENABLE_SENNA if (handler->sir) { - my_off_t pos; + SENNA_EMBEDDED_KEY skey; + int skey_len; info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); SEN_LOG(sen_log_dump, "ft_nlq_read_next => sen_records_next in while loop"); - while (sen_records_next(handler->sir, &pos, sizeof(my_off_t), NULL)) + while ((skey_len = sen_records_next(handler->sir, &skey, sizeof(skey), NULL)) != 0) { - info->lastpos=pos; + info->lastpos=skey.pos; if (my_thread_var->sen_flags & SENNA_USE_2IND) { if (!(my_thread_var->sen_flags & (SENNA_IF_READ_RECORD | SENNA_FILESORT))) { SEN_LOG(sen_log_debug, "ft_nlq_read_next => 2ind return 0"); return 0; } } + if (skey_len == sizeof(SENNA_EMBEDDED_KEY) && + handler->senna_embedded_pkey != MAX_INDEXES && + (my_thread_var->sen_flags & SENNA_ONLY_READ_PRIMARY_KEY)) { + HA_KEYSEG *keyseg = info->s->keyinfo[handler->senna_embedded_pkey].seg; + memcpy(record + keyseg->start, &skey.pkey, keyseg->length); + info->update|= HA_STATE_AKTIV; /* Record is read */ + return 0; + } + else if (!(*info->read_record)(info,info->lastpos,record)) { info->update|= HA_STATE_AKTIV; /* Record is read */ return 0; } - SEN_LOG(sen_log_error, "ft_nlq_read_next => my_errno=%d pos=%lld", my_errno, pos); + SEN_LOG(sen_log_error, "ft_nlq_read_next => my_errno=%d pos=%lld", my_errno, skey.pos); if (my_errno == 127) { continue; } return my_errno; } @@ -373,9 +385,17 @@ #ifdef ENABLE_SENNA if (handler->sir) { + MYISAM_SHARE *share = handler->info->s; + SENNA_EMBEDDED_KEY skey; + skey.pos = docid; + skey.pkey = 0; + if (handler->senna_embedded_pkey != MAX_INDEXES) { + HA_KEYSEG *keyseg = share->keyinfo[handler->senna_embedded_pkey].seg; + memcpy(&skey.pkey, record + keyseg->start, keyseg->length); + } SEN_LOG(sen_log_dump, "ft_nlq_find_relevance => sen_records_find: records=%p, key=%p", handler->sir, &docid); - return 1.0 * sen_records_find(handler->sir, &docid); + return 1.0 * sen_records_find(handler->sir, &skey); } #endif /* ENABLE_SENNA */ Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_update.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_update.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/ft_update.c 2008-02-15 08:16:35 UTC (rev 109) @@ -202,9 +202,20 @@ #ifdef ENABLE_SENNA #define SECTIONALIZE 0x00080000 +# ifdef ENABLE_SENNA_PSEUDO_TF +#define TF_WEIGHT(len) ((len) != 0 ? 0x40000000 / (len) : (len)) +# endif int ft_sen_index_add(MI_INFO *info, uint keynr, const byte *record, my_off_t pos) { + SENNA_EMBEDDED_KEY skey; DBUG_ENTER("ft_sen_index_add"); + skey.pos = pos; + skey.pkey = 0; + if (info->s->keyinfo[keynr].senna_embedded_pkey != MAX_INDEXES) { + HA_KEYSEG *keyseg = + info->s->keyinfo[info->s->keyinfo[keynr].senna_embedded_pkey].seg; + memcpy(&skey.pkey, record + keyseg->start, keyseg->length); + } if (info->s->keyinfo[keynr].senna_flags & SECTIONALIZE) { FT_SEG_ITERATOR ftsi; unsigned int section; @@ -223,10 +234,16 @@ values = sen_values_open(); SEN_LOG(sen_log_debug, "ft_sen_index_add => sen_values_add: values=%p, str=%s, str_len=%d, weight=%d", values, ftsi.pos, ftsi.len, 0); - sen_values_add(values, ftsi.pos, ftsi.len, 0); + sen_values_add(values, ftsi.pos, ftsi.len, +# ifdef ENABLE_SENNA_PSEUDO_TF + info->s->keyinfo[keynr].senna_use_pseudo_tf ? TF_WEIGHT(ftsi.len) : 0 +# else + 0 +# endif + ); SEN_LOG(sen_log_info, "ft_sen_index_add => sen_index_update: index=%p, key=%p (pos=%d), section=%d, oldvalue=%p, newvalue=%p", info->s->keyinfo[keynr].senna, &pos, (uint) pos, section, NULL, values); - sen_index_update(info->s->keyinfo[keynr].senna, &pos, ftsi.num+1, NULL, values); + sen_index_update(info->s->keyinfo[keynr].senna, &skey, ftsi.num+1, NULL, values); SEN_LOG(sen_log_debug, "ft_sen_index_add => sen_values_close: values=%p", values); sen_values_close(values); } @@ -257,7 +274,15 @@ SEN_LOG(sen_log_info, "ft_sen_index_add => sen_index_upd: index=%p, key=%p (pos=%d), oldvalue=%s," "oldvalue_len=%d, newvalue=%s, newvalue_len=%d", info->s->keyinfo[keynr].senna, &pos, (uint) pos, NULL, 0, buf, (p - buf)); - sen_index_upd(info->s->keyinfo[keynr].senna, &pos, NULL, 0, buf, (p - buf)); +# ifdef ENABLE_SENNA_PSEUDO_TF + if (info->s->keyinfo[keynr].senna_use_pseudo_tf) { + sen_values *values = sen_values_open(); + sen_values_add(values, buf, p - buf, TF_WEIGHT(p - buf)); + sen_index_update(info->s->keyinfo[keynr].senna, &skey, 2, NULL, values); + sen_values_close(values); + } else +# endif + sen_index_upd(info->s->keyinfo[keynr].senna, &skey, NULL, 0, buf, (p - buf)); free(buf); DBUG_RETURN(0); } @@ -265,6 +290,14 @@ int ft_sen_index_del(MI_INFO *info, uint keynr, const byte *record, my_off_t pos) { + SENNA_EMBEDDED_KEY skey; + skey.pos = pos; + skey.pkey = 0; + if (info->s->keyinfo[keynr].senna_embedded_pkey != MAX_INDEXES) { + HA_KEYSEG *keyseg = + info->s->keyinfo[info->s->keyinfo[keynr].senna_embedded_pkey].seg; + memcpy(&skey.pkey, record + keyseg->start, keyseg->length); + } if (info->s->keyinfo[keynr].senna_flags & SECTIONALIZE) { FT_SEG_ITERATOR ftsi; unsigned int section; @@ -286,7 +319,7 @@ sen_values_add(values, ftsi.pos, ftsi.len, 0); SEN_LOG(sen_log_info, "ft_sen_index_del => sen_index_update: index=%p, key=%p (pos=%d), section=%d, oldvalue=%p, newvalue=%p", info->s->keyinfo[keynr].senna, &pos, (uint) pos, section, values, NULL); - sen_index_update(info->s->keyinfo[keynr].senna, &pos, section, values, NULL); + sen_index_update(info->s->keyinfo[keynr].senna, &skey, section, values, NULL); SEN_LOG(sen_log_debug, "ft_sen_index_del => sen_values_close: values=%p", values); sen_values_close(values); } @@ -317,7 +350,7 @@ SEN_LOG(sen_log_info, "ft_sen_index_add => sen_index_upd: index=%p, key=%p (pos=%d), oldvalue=%p," "oldvalue_len=%d, newvalue=%p, newvalue_len=%d", info->s->keyinfo[keynr].senna, &pos, (uint) pos, buf, (p - buf), NULL, 0); - sen_index_upd(info->s->keyinfo[keynr].senna, &pos, buf, (p - buf), NULL, 0); + sen_index_upd(info->s->keyinfo[keynr].senna, &skey, buf, (p - buf), NULL, 0); free(buf); return 0; } @@ -532,7 +565,8 @@ share->keyinfo[i].senna = NULL; DBUG_VOID_RETURN; } else { - share->keyinfo[i].senna = sen_index_create(buf, sizeof(my_off_t), + share->keyinfo[i].senna = sen_index_create(buf, + share->keyinfo[i].senna_embedded_pkey != MAX_INDEXES ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), share->keyinfo[i].senna_flags, share->keyinfo[i].senna_initial_n_segments, share->keyinfo[i].senna_encoding); Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_create.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_create.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_create.c 2008-02-15 08:16:35 UTC (rev 109) @@ -295,18 +295,31 @@ /* make index files */ SEN_LOG(sen_log_notice, "mi_create => sen_index_create: path=%s, key_size=%d, flags=%x, ins=%d", buf, - sizeof(my_off_t), keydef->senna_flags, keydef->senna_initial_n_segments); + senna_use_embedded_pkey ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), + keydef->senna_flags, keydef->senna_initial_n_segments); if (!(keydef->senna_encoding >= 0 && keydef->senna_encoding <= 6)) { my_errno= HA_WRONG_CREATE_OPTION; goto err; } - senna = sen_index_create(buf, sizeof(my_off_t), + senna = sen_index_create(buf, + senna_use_embedded_pkey ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), keydef->senna_flags, keydef->senna_initial_n_segments, keydef->senna_encoding); SEN_LOG(sen_log_notice, "mi_create => sen_index_close: index=%p", senna); sen_index_close(senna); +# ifdef ENABLE_SENNA_PSEUDO_TF + if (senna_use_pseudo_tf) { + strcat(buf, ".tf"); + int fd = open(buf, O_WRONLY | O_CREAT, 0666); + if (fd == -1) { + my_errno = HA_ERR_CRASHED; + goto err; + } + close(fd); + } +# endif } else { SEN_LOG(sen_log_notice, "mi_create => sen_index_open: path=%s", buf); senna = sen_index_open(buf); @@ -322,13 +335,15 @@ sen_index_remove(buf); SEN_LOG(sen_log_notice, "mi_create => sen_index_create: path=%s, key_size=%d, flags=%x ins=%d)", buf, - sizeof(my_off_t), senna_flags, senna_initial_n_segments); + senna_use_embedded_pkey ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), + senna_flags, senna_initial_n_segments); if (!(senna_encoding >= 0 && senna_encoding <= 6)) { my_errno= HA_WRONG_CREATE_OPTION; goto err; } - senna = sen_index_create(buf, sizeof(my_off_t), + senna = sen_index_create(buf, + senna_use_embedded_pkey ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), senna_flags, senna_initial_n_segments, senna_encoding); Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_all.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_all.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_all.c 2008-02-15 08:16:35 UTC (rev 109) @@ -53,7 +53,8 @@ sen_index_remove(buf); SEN_LOG(sen_log_notice, "mi_delete_all_rows => sen_index_create: path=%s, flags=%x, ins=%d", buf, share->keyinfo[i].senna_flags, share->keyinfo[i].senna_initial_n_segments); - senna = sen_index_create(buf, sizeof(my_off_t), + senna = sen_index_create(buf, + share->keyinfo[i].senna_embedded_pkey != MAX_INDEXES ? sizeof(SENNA_EMBEDDED_KEY) : sizeof(my_off_t), share->keyinfo[i].senna_flags, share->keyinfo[i].senna_initial_n_segments, share->keyinfo[i].senna_encoding); Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_table.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_table.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_delete_table.c 2008-02-15 08:16:35 UTC (rev 109) @@ -21,7 +21,11 @@ int mi_delete_table(const char *name) { +#ifdef ENABLE_SENNA_PSEUDO_TF + char from[FN_REFLEN + 3]; +#else char from[FN_REFLEN]; +#endif #ifdef USE_RAID uint raid_type=0,raid_chunks=0; #endif @@ -80,6 +84,10 @@ my_snprintf(from, FN_REFLEN, "%s.%03d", name, should_be_deleted[i]); SEN_LOG(sen_log_notice, "mi_delete_table => sen_index_remove: path=%s", from); sen_index_remove(from); +# ifdef ENABLE_SENNA_PSEUDO_TF + strcat(from, ".tf"); + unlink(from); +# endif } } #endif /* ENABLE_SENNA */ Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_extra.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_extra.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_extra.c 2008-02-15 08:16:35 UTC (rev 109) @@ -199,6 +199,11 @@ break; case HA_EXTRA_KEYREAD: /* Read only keys to record */ case HA_EXTRA_REMEMBER_POS: +#ifdef ENABLE_SENNA + if (info->s->senna_has_embedded_pkey && + (my_thread_var->sen_flags & SENNA_MATCH)) + break; +#endif info->opt_flag |= REMEMBER_OLD_POS; bmove((byte*) info->lastkey+share->base.max_key_length*2, (byte*) info->lastkey,info->lastkey_length); @@ -210,6 +215,11 @@ break; /* fall through */ case HA_EXTRA_KEYREAD_CHANGE_POS: +#ifdef ENABLE_SENNA + if (info->s->senna_has_embedded_pkey && + (my_thread_var->sen_flags & SENNA_MATCH)) + break; +#endif info->opt_flag |= KEY_READ_USED; info->read_record=_mi_read_key_record; break; Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_open.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_open.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_open.c 2008-02-15 08:16:35 UTC (rev 109) @@ -31,6 +31,13 @@ #include "static.c" #endif +#ifdef ENABLE_SENNA +my_bool senna_use_embedded_pkey; +# ifdef ENABLE_SENNA_PSEUDO_TF +my_bool senna_use_pseudo_tf; +# endif +#endif + static void setup_key_functions(MI_KEYDEF *keyinfo); #define get_next_element(to,pos,size) { memcpy((char*) to,pos,(size_t) size); \ pos+=size;} @@ -73,7 +80,14 @@ ******************************************************************************/ MI_INFO *mi_open(const char *name, int mode, uint open_flags) +#ifdef ENABLE_SENNA { + return mi_open_senna(name, mode, open_flags, MAX_INDEXES); +} + +MI_INFO *mi_open_senna(const char *name, int mode, uint open_flags, int senna_embedded_pkey) +#endif +{ int lock_error,kfile,open_mode,save_errno,have_rtree=0; uint i,j,len,errpos,head_length,base_pos,offset,info_length,keys, key_parts,unique_key_parts,fulltext_keys,uniques; @@ -348,6 +362,7 @@ share->keyinfo[i].senna = NULL; share->keyinfo[i].senna_flags = 0; share->keyinfo[i].senna_initial_n_segments = 0; + share->keyinfo[i].senna_embedded_pkey = MAX_INDEXES; #endif /* ENABLE_SENNA */ if (share->keyinfo[i].flag & HA_SPATIAL) { @@ -366,7 +381,13 @@ if (!(share->keyinfo[i].senna_flags & SEN_DISABLE_SENNA)) { { +# ifdef ENABLE_SENNA_PSEUDO_TF + char buf[FN_REFLEN + 3]; + struct stat st; +# else char buf[FN_REFLEN]; +# endif + int key_size; strncpy(buf, share->unique_file_name, FN_REFLEN - 1); buf[FN_REFLEN - 1] = '\0'; sprintf(buf + strlen(buf) - 3, "%03d", i); @@ -377,11 +398,18 @@ share->index_file_name, i, pos-FT_SEGS); share->keyinfo[i].senna = sen_index_open(buf); SEN_LOG(sen_log_info, "mi_open => sen_index_info: index=%p", share->keyinfo[i].senna); - sen_index_info(share->keyinfo[i].senna, NULL, + sen_index_info(share->keyinfo[i].senna, &key_size, &share->keyinfo[i].senna_flags, &share->keyinfo[i].senna_initial_n_segments, &share->keyinfo[i].senna_encoding, NULL, NULL, NULL, NULL, NULL, NULL); + /* adjusted later on */ + if (key_size == sizeof(SENNA_EMBEDDED_KEY)) + share->keyinfo[i].senna_embedded_pkey = senna_embedded_pkey; +# ifdef ENABLE_SENNA_PSEUDO_TF + strcat(buf, ".tf"); + share->keyinfo[i].senna_use_pseudo_tf = stat(buf, &st) == 0; +# endif } } #endif /* ENABLE_SENNA */ @@ -427,6 +455,29 @@ pos->flag=0; /* For purify */ pos++; } +#ifdef ENABLE_SENNA + /* reset embedded pkey to MAX_KEY unless it fits in SENNA_EMBEDDED_KEY */ + share->senna_has_embedded_pkey = 0; + if (senna_embedded_pkey != MAX_INDEXES) { + switch (share->keyinfo[senna_embedded_pkey].seg[0].type) { + case HA_KEYTYPE_SHORT_INT: + case HA_KEYTYPE_LONG_INT: + case HA_KEYTYPE_FLOAT: + case HA_KEYTYPE_DOUBLE: + case HA_KEYTYPE_USHORT_INT: + case HA_KEYTYPE_ULONG_INT: + /* supported types, ok */ + for (i = 0; i < keys; i++) + if (share->keyinfo[i].senna_embedded_pkey != MAX_INDEXES) + share->senna_has_embedded_pkey = 1; + break; + default: + for (i = 0; i < keys; i++) + share->keyinfo[i].senna_embedded_pkey = MAX_INDEXES; + break; + } + } +#endif for (i=0 ; i < uniques ; i++) { disk_pos=mi_uniquedef_read(disk_pos, &share->uniqueinfo[i]); Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/mi_rename.c 2008-02-15 08:16:35 UTC (rev 109) @@ -21,7 +21,11 @@ int mi_rename(const char *old_name, const char *new_name) { +#ifdef ENABLE_SENNA_PSEUDO_TF + char from[FN_REFLEN + 3],to[FN_REFLEN + 3]; +#else char from[FN_REFLEN],to[FN_REFLEN]; +#endif #ifdef USE_RAID uint raid_type=0,raid_chunks=0; #endif @@ -66,6 +70,11 @@ my_snprintf(to, FN_REFLEN, "%s.%03d", new_name, senna_indexes[i]); SEN_LOG(sen_log_notice, "mi_rename => sen_index_rename: from=%s, to=%s", from, to); sen_index_rename(from, to); +# ifdef ENABLE_SENNA_PSEUDO_TF + strcat(from, ".tf"); + strcat(to, ".tf"); + rename(from, to); +# endif } } #endif /* ENABLE_SENNA */ Modified: tags/tritonn-1.1.0-mysql-5.0.51a/myisam/myisamdef.h =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/myisam/myisamdef.h 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/myisam/myisamdef.h 2008-02-15 08:16:35 UTC (rev 109) @@ -208,6 +208,9 @@ pthread_mutex_t intern_lock; /* Locking for use with _locking */ rw_lock_t *key_root_lock; #endif +#ifdef ENABLE_SENNA + int senna_has_embedded_pkey; +#endif } MYISAM_SHARE; @@ -365,6 +368,15 @@ #define READING_NEXT 1 #define READING_HEADER 2 +#ifdef ENABLE_SENNA + +typedef struct st_senna_embedded_key { + my_off_t pos; + my_off_t pkey; /* used to store primary key if length<8 bytes */ +} SENNA_EMBEDDED_KEY; + +#endif + #define mi_getint(x) ((uint) mi_uint2korr(x) & 32767) #define mi_putint(x,y,nod) { uint16 boh=(nod ? (uint16) 32768 : 0) + (uint16) (y);\ mi_int2store(x,boh); } Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/ha_myisam.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/ha_myisam.cc 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/ha_myisam.cc 2008-02-15 08:16:35 UTC (rev 109) @@ -683,8 +683,18 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked) { +#ifdef ENABLE_SENNA + int embedded_pkey = MAX_KEY; + if (table->key_info && /* seems to be NULL w. pkey set to 0 on temp tbl */ + table->key_info[table->s->primary_key].key_parts == 1) { + embedded_pkey = table->s->primary_key; + } + if (!(file=mi_open_senna(name, mode, test_if_locked, embedded_pkey))) + return (my_errno ? my_errno : -1); +#else if (!(file=mi_open(name, mode, test_if_locked))) return (my_errno ? my_errno : -1); +#endif if (test_if_locked & (HA_OPEN_IGNORE_IF_LOCKED | HA_OPEN_TMP_TABLE)) VOID(mi_extra(file, HA_EXTRA_NO_WAIT_LOCK, 0)); Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/item_func.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/item_func.cc 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/item_func.cc 2008-02-15 08:16:35 UTC (rev 109) @@ -4909,12 +4909,22 @@ modifications to find_best and auto_close as complement to auto_init code above. */ +#ifdef ENABLE_SENNA + bool save_set_query_id = thd->set_query_id; + thd->set_query_id = 0; +#endif if (Item_func::fix_fields(thd, ref) || !args[0]->const_during_execution()) { my_error(ER_WRONG_ARGUMENTS,MYF(0),"AGAINST"); +#ifdef ENABLE_SENNA + thd->set_query_id = save_set_query_id; +#endif return TRUE; } +#ifdef ENABLE_SENNA + thd->set_query_id = save_set_query_id; +#endif const_item_cache=0; for (uint i=1 ; i < arg_count ; i++) Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/mysqld.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/mysqld.cc 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/mysqld.cc 2008-02-15 08:16:35 UTC (rev 109) @@ -4894,6 +4894,10 @@ OPT_SENNA_LOG_LEVEL, OPT_SENNA_2IND, OPT_SENNA_INDEX_TYPE, + OPT_SENNA_EMBEDDED_PKEY, +# ifdef ENABLE_SENNA_PSEUDO_TF + OPT_SENNA_PSEUDO_TF, +# endif #endif OPT_PROFILING, OPT_INNODB_ROLLBACK_ON_TIMEOUT, @@ -5573,6 +5577,16 @@ {"senna-log-level", OPT_SENNA_LOG_LEVEL, "Senna log level.", (gptr*) &opt_senna_log_level, (gptr*) &opt_senna_log_level, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"senna-embedded-pkey", OPT_SENNA_EMBEDDED_PKEY, "Embed primary key value to senna index.", + (gptr*) &senna_use_embedded_pkey, + (gptr*) &senna_use_embedded_pkey, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, +# ifdef ENABLE_SENNA_PSEUDO_TF + {"senna-pseudo-tf", OPT_SENNA_EMBEDDED_PKEY, "Use TF-like algorithm for calculationg relevance.", + (gptr*) &senna_use_pseudo_tf, + (gptr*) &senna_use_pseudo_tf, + 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, +# endif #endif {"secure-file-priv", OPT_SECURE_FILE_PRIV, "Limit LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE() to files within specified directory", @@ -6847,6 +6861,10 @@ opt_senna_log = 0; senna_log_level_options = senna_logger.max_level; global_system_variables.senna_2ind = 0; + senna_use_embedded_pkey = 0; +# ifdef ENABLE_SENNA_PSEUDO_TF + senna_use_pseudo_tf = 0; +# endif #endif #if defined(__WIN__) || defined(__NETWARE__) @@ -7485,6 +7503,14 @@ case OPT_SENNA_2IND: global_system_variables.senna_2ind = 1; break; + case OPT_SENNA_EMBEDDED_PKEY: + senna_use_embedded_pkey = 1; + break; +# ifdef ENABLE_SENNA_PSEUDO_TF + case OPT_SENNA_PSEUDO_TF: + senna_use_pseudo_tf = 1; + break; +# endif #endif } return 0; Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/set_var.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/set_var.cc 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/set_var.cc 2008-02-15 08:16:35 UTC (rev 109) @@ -483,6 +483,10 @@ sys_var_enum sys_senna_log_level("senna_log_level",&senna_log_level_options, &senna_log_level_typelib, fix_senna_log_level); sys_var_thd_bool sys_senna_2ind("senna_2ind", &SV::senna_2ind, fix_senna_2ind); +sys_var_bool_ptr sys_senna_embedded_pkey("senna_embedded_pkey", &senna_use_embedded_pkey); +# ifdef ENABLE_SENNA_PSEUDO_TF +sys_var_bool_ptr sys_senna_pseudo_tf("senna_pseudo_tf", &senna_use_pseudo_tf); +# endif #endif /* Condition pushdown to storage engine */ @@ -774,6 +778,10 @@ &sys_senna_2ind, &sys_senna_index_type, &sys_senna_log_level, + &sys_senna_embedded_pkey, +# ifdef ENABLE_SENNA_PSEUDO_TF + &sys_senna_pseudo_tf, +# endif #endif &sys_server_id, #ifdef HAVE_REPLICATION @@ -1095,9 +1103,13 @@ {"secure_file_priv", (char*) &sys_secure_file_priv, SHOW_SYS}, #ifdef ENABLE_SENNA {"senna_2ind", (char*) &sys_senna_2ind, SHOW_SYS}, + {"senna_embedded_pkey", (char*) &sys_senna_embedded_pkey, SHOW_SYS}, {"senna_index_type", (char*) &sys_senna_index_type, SHOW_SYS}, {"senna_log", (char*) &opt_senna_log, SHOW_MY_BOOL}, {"senna_log_level", (char*) &sys_senna_log_level, SHOW_SYS}, +# ifdef ENABLE_SENNA_PSEUDO_TF + {"senna_pseudo_tf", (char*) &sys_senna_pseudo_tf, SHOW_SYS}, +# endif #endif #ifdef HAVE_SMEM {"shared_memory", (char*) &opt_enable_shared_memory, SHOW_MY_BOOL}, Modified: tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_select.cc =================================================================== --- tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_select.cc 2008-02-15 06:43:05 UTC (rev 108) +++ tags/tritonn-1.1.0-mysql-5.0.51a/sql/sql_select.cc 2008-02-15 08:16:35 UTC (rev 109) @@ -2290,8 +2290,8 @@ } } #ifdef ENABLE_SENNA + if (select_lex->ftfunc_list->elements) {my_thread_var->sen_flags |= SENNA_MATCH; } /* the flag is used to prevent the use of keyread in mi_extra.c */ if (my_thread_var->sen_flags & SENNA_USE_2IND) { - if (select_lex->ftfunc_list->elements) {my_thread_var->sen_flags |= SENNA_MATCH; } if (join->select_distinct) { my_thread_var->sen_flags |= SENNA_DISTINCT; } } #endif /* ENABLE_SENNA */ @@ -6187,6 +6187,18 @@ #ifdef ENABLE_SENNA if (my_thread_var->sen_flags & SENNA_USE_2IND) my_thread_var->sen_flags |= SENNA_DO_READ_RECORD; + if (!table->no_keyread && table->s->primary_key != MAX_KEY) { + KEY *pkey = table->key_info + table->s->primary_key; + if (pkey->key_parts == 1) { + for (Field **field = table->field; *field != NULL; field++) + if ((*field)->query_id == join->thd->query_id && + *field != pkey->key_part[0].field) + goto SENNA_END_PRIMARY_KEY_OPTIMIZATION; + my_thread_var->sen_flags |= SENNA_ONLY_READ_PRIMARY_KEY; + SENNA_END_PRIMARY_KEY_OPTIMIZATION: + ; + } + } #endif /* ENABLE_SENNA */ break; case JT_ALL: