
interchange-cvs at icdevgroup
Apr 19, 2008, 7:38 AM
Post #1 of 1
(130 views)
Permalink
|
|
interchange - jon modified lib/Vend/Table/GDBM.pm
|
|
User: jon Date: 2008-04-19 14:38:14 GMT Modified: lib/Vend/Table GDBM.pm Log: Add UTF-8 support for GDBM. This was missed from the initial commit of Sonny Cook's UTF-8 patches. Revision Changes Path 2.19 interchange/lib/Vend/Table/GDBM.pm rev 2.19, prev_rev 2.18 Index: GDBM.pm =================================================================== RCS file: /var/cvs/interchange/lib/Vend/Table/GDBM.pm,v retrieving revision 2.18 retrieving revision 2.19 diff -u -u -r2.18 -r2.19 --- GDBM.pm 25 Mar 2008 17:13:21 -0000 2.18 +++ GDBM.pm 19 Apr 2008 14:38:14 -0000 2.19 @@ -1,6 +1,6 @@ # Vend::Table::GDBM - Access an Interchange table stored in a GDBM file # -# $Id: GDBM.pm,v 2.18 2008-03-25 17:13:21 jon Exp $ +# $Id: GDBM.pm,v 2.19 2008-04-19 14:38:14 jon Exp $ # # Copyright (C) 2002-2008 Interchange Development Group # Copyright (C) 1996-2002 Red Hat, Inc. @@ -28,9 +28,10 @@ use vars qw($VERSION @ISA); use GDBM_File; use Vend::Table::Common; +use Encode qw(encode decode); @ISA = qw(Vend::Table::Common); -$VERSION = substr(q$Revision: 2.18 $, 10); +$VERSION = substr(q$Revision: 2.19 $, 10); sub new { my ($class, $obj) = @_; @@ -57,6 +58,8 @@ my $dbm = tie(%$tie, 'GDBM_File', $filename, $flags, $File_permission_mode) or die ::errmsg("%s %s: %s\n", ::errmsg("create"), $filename, $!); + apply_utf8_filters($dbm) if $config->{GDBM_ENABLE_UTF8}; + $tie->{'c'} = join("\t", @$columns); my $s = [. @@ -113,6 +116,8 @@ die ::errmsg("%s could not tie to '%s': %s", 'GDBM', $filename, $!) unless $dbm; + apply_utf8_filters($dbm) if $config->{GDBM_ENABLE_UTF8}; + my $columns = [split(/\t/, $tie->{'c'})]; $config->{VERBATIM_FIELDS} = 1 unless defined $config->{VERBATIM_FIELDS}; @@ -131,6 +136,22 @@ bless $s, $class; } +sub apply_utf8_filters { + my ($handle) = shift; + +#::logDebug("applying UTF-8 filters to GDBM handle"); + + my $out_filter = sub { $_ = encode('utf-8', $_) }; + my $in_filter = sub { $_ = decode('utf-8', $_) }; + + $handle->filter_store_key($out_filter); + $handle->filter_store_value($out_filter); + $handle->filter_fetch_key($in_filter); + $handle->filter_fetch_value($in_filter); + + return $handle; +} + # Unfortunate hack need for Safe searches *column_index = \&Vend::Table::Common::column_index; *column_exists = \&Vend::Table::Common::column_exists; _______________________________________________ interchange-cvs mailing list interchange-cvs[at]icdevgroup.org http://www.icdevgroup.org/mailman/listinfo/interchange-cvs
|