The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;

BEGIN
{
    require Test::More;
    if (! eval { require DBD::SQLite }) {
        Test::More->import(skipall => 'DBD::SQLite not available');
    } else {
        Test::More->import(tests => 6);
    }
}

package MyDATA;
use strict;
use base qw(Class::DBI);
use Class::DBI::Plugin::Senna
    index_filename => 't/test_index',
    index_column   => 'data'
;
__PACKAGE__->set_db(Main => 'dbi:SQLite:dbname=t/test.db', undef, undef, { AutoCommit => 1});
__PACKAGE__->table('MyDATA');
__PACKAGE__->columns(All => qw(id data));

1;

package main;
use strict;

MyDATA->db_Main->do(qq{
    CREATE TABLE MyDATA (
        id PRIMARY KEY,
        data TEXT
    );
});

my $id = 'a';
while (<DATA>) {
    chomp;
    MyDATA->create({ id => $id++, data => $_ });
}

my $iter = MyDATA->fulltext_search("¤·¤Þ¤Ã¤¿");
isa_ok($iter, 'Class::DBI::Plugin::Senna::Iterator');
is($iter->count, 2);
while (my $e = $iter->next) {
    ok($e);
}

my $obj = MyDATA->retrieve('b');
$obj->data("¤¤¤Å¤ì¤Î¸æ»þ¤Ë¤«¡¢½÷¸æ¡¢¹¹°á¤¢¤Þ¤¿¤µ¤Ö¤é¤Ò¤¿¤Þ¤Ò¤±¤ë¤Ê¤«¤Ë¡¢¤¤¤È¤ä¤à¤´¤È¤Ê¤­ºÝ¤Ë¤Ï¤¢¤é¤Ì¤¬¡¢¤¹¤°¤ì¤Æ»þ¤á¤­¤¿¤Þ¤Õ¤¢¤ê¤±¤ê¡£");
$obj->update;

my($rs) = MyDATA->fulltext_search("¤¹¤°¤ì¤Æ»þ¤á¤­¤¿¤Þ¤Õ¤¢¤ê¤±¤ê");
is($rs && $rs->id, 'b');

if ($rs) {
    $rs->delete;
    ($rs) = MyDATA->fulltext_search("¤¹¤°¤ì¤Æ»þ¤á¤­¤¿¤Þ¤Õ¤¢¤ê¤±¤ê");
    ok(!$rs);
} else {
    ok(0);
}

END {
    eval {MyDATA->senna_index->remove};
    eval {unlink("t/test.db")};
}
__DATA__
µÀ±àÀº¼Ë¤Î¾â¤ÎÀ¼¡¢½ô¹Ô̵¾ï¤Î¶Á¤­¤¢¤ê¡£Õ°ÍåÁмù¤Î²Ö¤Î¿§¡¢À¹¼Ôɬ¿ê¤ÎÍý¤ò¤¢¤é¤ï¤¹¡£¤ª¤´¤ì¤ë¿Í¤âµ×¤·¤«¤é¤º¡¢Í£½Õ¤ÎÌë¤ÎÌ´¤Î¤´¤È¤·¡£¤¿¤±¤­¼Ô¤â¿ë¤Ë¤Ï¤Û¤í¤Ó¤Ì¡¢ÊФËÉ÷¤ÎÁ°¤Î¿Ð¤ËƱ¤¸¡£
¿Á¤Îìä¹â¡Ê¤Á¤ç¤¦¤³¤¦¡Ë¡¢´Á¤Î²¦èϡʤª¤¦¤â¤¦¡Ë¡¢Î¤μþ°Ë¡Ê¤·¤å¤¤¡Ë¡¢Åâ¤ÎϽ»³¡Ê¤í¤¯¤µ¤ó¡Ý°ÂϽ»³¡Ë¤é¤âµì¼çÀè¹Ä¤ÎÀ¯¼£¤Ë½¾¤ï¤º¡¢³Ú¤·¤ß¤ò¤­¤ï¤áëݸÀ¤âʹ¤«¤º¡¢Å·²¼¤ÎÍð¤ì¤âÃΤ餺¡¢Ì±½°¤ÎÍ«¤¤¤â¸Ü¤ß¤Ê¤¤¤Î¤ÇË´¤Ó¤Æ¤·¤Þ¤Ã¤¿¡£
²æ¤¬¹ñ¤Ç¤â¡¢¾µÊ¿¤ÎÊ¿¾­Ì硢ŷ·Ä¤ÎÆ£¸¶½ãͧ¡Ê¤¹¤ß¤È¤â¡Ë¡¢¹¯Ï¤θ»µÁ¿Æ¡Ê¤è¤·¤Á¤«¡Ë¡¢Ê¿¼£¤ÎÆ£¸¶¿®Íê¡Ê¤Î¤Ö¤è¤ê¡Ë¡¢¤³¤ì¤é¤â¤Þ¤â¤Ê¤¯Ë´¤Ó¤Æ¤·¤Þ¤Ã¤¿¡£
ºÇ¶á¤Ç¤Ï¡¢Ï»ÇÈÍå¤ÎÆþÆ»Á°ÂÀÀ¯Âç¿ÃÊ¿Ä«¿ÃÀ¶À¹¸ø¤È¤¤¤¦¿Í¤ÎÍ­Íͤòʹ¤¯¤È¡¢¸ÀÍդˤǤ­¤Ê¤¤¤Û¤É¤À¡£
¤½¤ÎÀèÁĤϴ¼ÉðÅ·¹Ä¤ÎÂè¸Þ¤Î¹Ä»Ò¡£°ìÉʼ°Éô¶ª³ë¸¶¡Ê¤«¤º¤é¤Ï¤é¡Ë¿Æ²¦¤Î¶åÂå¤Î»Ò¹¤Ë¤¢¤¿¤ë»¾´ô¼éÀµÀ¹¡Ê¤µ¤Ì¤­¤Î¤«¤ß¤Þ¤µ¤â¤ê¡Ë¤Î»Ò¹¤Ç¤¢¤ê¡¢·ºÉô¶ªÃéÀ¹¡Ê¤¿¤À¤â¤ê¡ËÄ«¿Ã¤ÎÃäÃˤǤ¢¤ë¡£¤«¤Î¿Æ²¦¤Î»Ò¡¢¹â»ë²¦¡Ê¤¿¤«¤ß¤ª¤¦¡Ë¤Ï̵´±Ìµ°Ì¤Ç¤·¤¿¡£¤½¤Î»Ò¹â˾²¦¡Ê¤¿¤«¤â¤Á¤ª¤¦¡Ë¤Î¤È¤­½é¤á¤ÆÊ¿¤ÎÀ«¤ò»ò¤Ã¤Æ¾åÁí²ð¤Ë¤Ê¤ê¤Þ¤·¤¿¤¬¡¢¤¹¤°¹Ä²¤ò¤Ï¤Ê¤ì¤Æ¿Í¿Ã¤ËÏ¢¤Ê¤Ã¤¿¡£¤½¤Î»Ò¤ÎÄüéÉܾ­·³ÎÉ˾¡Ê¤è¤·¤â¤Á¡£¸å¤Ë¹ñ¹á¡Ê¤¯¤Ë¤«¡Ë¤È̾¤ò²þ¤á¤¿¡£¡Ë¤«¤éÀµÀ¹¤Þ¤Ç¤ÎÏ»Âå¤Î´Ö¤Ï¡¢½ô¹ñ¤Î¼õÎΤǤ¢¤Ã¤¿¤¬¡¢µÜÃæ¤Ë¾ºÅ¤òµö¤µ¤ì¤Ê¤«¤Ã¤¿¡£