null+****@clear*****
null+****@clear*****
2011年 4月 2日 (土) 18:22:24 JST
Kentoku SHIBA 2011-04-02 09:22:24 +0000 (Sat, 02 Apr 2011) New Revision: 814ab951a2c3bb46b1b11eb8b8661c2934fa2c37 Log: add auto_increment feature #670 Added files: test/sql/r/auto_increment.result test/sql/t/auto_increment.test Modified files: doc/ja/source/news.rst ha_mroonga.cc Modified: doc/ja/source/news.rst (+5 -0) =================================================================== --- doc/ja/source/news.rst 2011-04-02 07:03:31 +0000 (563b8b9) +++ doc/ja/source/news.rst 2011-04-02 09:22:24 +0000 (b173d58) @@ -8,6 +8,11 @@ 0.6 リリース - ------------------------- +改良 +++++ + +* auto_increment機能の追加。#670 + 修正 ++++ Modified: ha_mroonga.cc (+8 -1) =================================================================== --- ha_mroonga.cc 2011-04-02 07:03:31 +0000 (54c819a) +++ ha_mroonga.cc 2011-04-02 09:22:24 +0000 (a47cd02) @@ -872,7 +872,6 @@ ulonglong ha_mroonga_table_flags = HA_STATS_RECORDS_IS_EXACT | HA_NO_PREFIX_CHAR_KEYS | HA_CAN_FULLTEXT | - HA_NO_AUTO_INCREMENT | HA_CAN_INSERT_DELAYED | HA_BINLOG_FLAGS | HA_CAN_BIT_FIELD | @@ -1432,6 +1431,14 @@ int ha_mroonga::write_row(uchar *buf) THD *thd = ha_thd(); int i, col_size; int n_columns = table->s->fields; + int error; + + if (table->next_number_field && buf == table->record[0]) + { + if ((error = update_auto_increment())) + DBUG_RETURN(error); + } + #ifndef DBUG_OFF my_bitmap_map *tmp_map = dbug_tmp_use_all_columns(table, table->read_set); #endif Added: test/sql/r/auto_increment.result (+53 -0) 100644 =================================================================== --- /dev/null +++ test/sql/r/auto_increment.result 2011-04-02 09:22:24 +0000 (6a5729a) @@ -0,0 +1,53 @@ +drop table if exists t1; +create table t1 (c1 int auto_increment, primary key(c1)); +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +c1 +1 +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +c1 +2 +insert into t1 values(10); +select c1 from t1 order by c1 desc limit 1; +c1 +10 +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +c1 +11 +insert into t1 values(6); +select c1 from t1 order by c1 desc limit 1; +c1 +11 +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +c1 +12 +drop table t1; +create table t1 (c1 int, c2 int auto_increment, primary key(c1), key idx1(c2)); +insert into t1 values(1, null); +select * from t1 order by c2 desc limit 1; +c1 c2 +1 1 +insert into t1 values(2, null); +select * from t1 order by c2 desc limit 1; +c1 c2 +2 2 +insert into t1 values(3, 10); +select * from t1 order by c2 desc limit 1; +c1 c2 +3 10 +insert into t1 values(4, null); +select * from t1 order by c2 desc limit 1; +c1 c2 +4 11 +insert into t1 values(5, 6); +select * from t1 order by c2 desc limit 1; +c1 c2 +4 11 +insert into t1 values(6, null); +select * from t1 order by c2 desc limit 1; +c1 c2 +6 12 +drop table t1; Added: test/sql/t/auto_increment.test (+53 -0) 100644 =================================================================== --- /dev/null +++ test/sql/t/auto_increment.test 2011-04-02 09:22:24 +0000 (7f51381) @@ -0,0 +1,53 @@ +# Copyright(C) 2011 Kentoku SHIBA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +--source suite/groonga/include/groonga.inc + +--disable_warnings +drop table if exists t1; +--enable_warnings + +create table t1 (c1 int auto_increment, primary key(c1)); +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +insert into t1 values(10); +select c1 from t1 order by c1 desc limit 1; +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +insert into t1 values(6); +select c1 from t1 order by c1 desc limit 1; +insert into t1 values(null); +select c1 from t1 order by c1 desc limit 1; +drop table t1; + +create table t1 (c1 int, c2 int auto_increment, primary key(c1), key idx1(c2)); +insert into t1 values(1, null); +select * from t1 order by c2 desc limit 1; +insert into t1 values(2, null); +select * from t1 order by c2 desc limit 1; +insert into t1 values(3, 10); +select * from t1 order by c2 desc limit 1; +insert into t1 values(4, null); +select * from t1 order by c2 desc limit 1; +insert into t1 values(5, 6); +select * from t1 order by c2 desc limit 1; +insert into t1 values(6, null); +select * from t1 order by c2 desc limit 1; +drop table t1; + +--source suite/groonga/include/groonga_deinit.inc