summaryrefslogtreecommitdiff
path: root/fml/lib/Mail/ThreadTrack/DB.pm
diff options
context:
space:
mode:
Diffstat (limited to 'fml/lib/Mail/ThreadTrack/DB.pm')
-rw-r--r--fml/lib/Mail/ThreadTrack/DB.pm122
1 files changed, 122 insertions, 0 deletions
diff --git a/fml/lib/Mail/ThreadTrack/DB.pm b/fml/lib/Mail/ThreadTrack/DB.pm
new file mode 100644
index 00000000..87d4ba02
--- /dev/null
+++ b/fml/lib/Mail/ThreadTrack/DB.pm
@@ -0,0 +1,122 @@
+#-*- perl -*-
+#
+# Copyright (C) 2001 Ken'ichi Fukamachi
+# All rights reserved. This program is free software; you can
+# redistribute it and/or modify it under the same terms as Perl itself.
+#
+# $FML: @template.pm,v 1.1 2001/08/07 12:23:48 fukachan Exp $
+#
+
+package Mail::ThreadTrack::DB;
+use strict;
+use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD);
+use Carp;
+
+=head1 NAME
+
+Mail::ThreadTrack::DB - what is this
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+=cut
+
+=head2 C<db_open()>
+
+open DB.
+It uses tie() to bind a hash to a DB file.
+Our minimal_states uses several DB files for
+C<%ticket_id>,
+C<%date>,
+C<%status>,
+C<%sender>,
+C<%articles>,
+C<%message_id>
+and
+C<%index>.
+
+=head2 C<db_close()>
+
+untie() corresponding hashes opened by C<db_open()>.
+
+=cut
+
+
+my @kind_of_databases = qw(ticket_id
+ info
+ date
+ status
+ sender
+ articles
+ message_id
+ index);
+
+
+sub db_open
+{
+ my ($self) = @_;
+ my $db_type = $self->{ config }->{ ticket_db_type } || 'AnyDBM_File';
+ my $db_dir = $self->{ _db_dir };
+
+ my $index_file = $self->{ _index_db };
+
+ eval qq{ use $db_type; use Fcntl;};
+ unless ($@) {
+ for my $db (@kind_of_databases) {
+ my $file = "$db_dir/${db}";
+ my $str = qq{
+ my \%$db = ();
+ tie \%$db, \$db_type, \$file, O_RDWR|O_CREAT, 0644;
+ \$self->{ _hash_table }->{ _$db } = \\\%$db;
+ };
+ eval $str;
+ croak($@) if $@;
+ }
+ }
+ else {
+ croak("cannot use $db_type");
+ }
+
+ 1;
+}
+
+
+sub db_close
+{
+ my ($self) = @_;
+
+ for my $db (@kind_of_databases) {
+ my $str = qq{
+ my \$${db} = \$self->{ _hash_table }->{ _$db };
+ untie \%\$${db};
+ };
+ eval $str;
+ croak($@) if $@;
+ }
+}
+
+
+
+=head1 AUTHOR
+
+Ken'ichi Fukamachi
+
+=head1 COPYRIGHT
+
+Copyright (C) 2001 Ken'ichi Fukamachi
+
+All rights reserved. This program is free software; you can
+redistribute it and/or modify it under the same terms as Perl itself.
+
+=head1 HISTORY
+
+Mail::ThreadTrack::DB appeared in fml5 mailing list driver package.
+See C<http://www.fml.org/> for more details.
+
+=cut
+
+
+1;