/[A3C]/lib/A3C/SQL.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/A3C/SQL.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 160 by dpavlin, Sun Jun 15 16:10:13 2008 UTC revision 218 by dpavlin, Sat Jun 21 11:01:35 2008 UTC
# Line 4  use strict; Line 4  use strict;
4  use warnings;  use warnings;
5    
6  use base qw(Jifty::Object Class::Accessor::Fast);  use base qw(Jifty::Object Class::Accessor::Fast);
7  __PACKAGE__->mk_accessors( qw(query arguments dbh) );  __PACKAGE__->mk_accessors( qw(query arguments dbh encoding) );
8    
9  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
10    
# Line 28  specify it like this: Line 28  specify it like this:
28    my $sql = A3C::SQL->new({    my $sql = A3C::SQL->new({
29          query => 'select now()',          query => 'select now()',
30          dbh => $my_dbh,          dbh => $my_dbh,
31            encoding => 'UTF-8',
32    });    });
33    
34    Mungling with C<encoding> is rearly needed, especially if using recent C<DBD::Pg> as driver.
35    
36  =head2 sth  =head2 sth
37    
38  Execute query and return statement handle. Ususally you don't have to call this manually.  Execute query and return statement handle. Ususally you don't have to call this manually.
# Line 65  sub next { Line 68  sub next {
68          my $self = shift;          my $self = shift;
69          my $row = $self->sth->fetchrow_hashref;          my $row = $self->sth->fetchrow_hashref;
70          return unless defined $row;          return unless defined $row;
71          return A3C::SQL::row->new( $row );          return A3C::SQL::row->new( $row, $self->encoding );
72  }  }
73    
74  =head2 count  =head2 count
# Line 107  sub new { Line 110  sub new {
110          my $class = ref($that) || $that;          my $class = ref($that) || $that;
111          my $self = shift;          my $self = shift;
112          bless $self, $class;          bless $self, $class;
113            $self->{__encoding} = shift || 'UTF-8';
114          return $self;          return $self;
115  }    }  
116    
# Line 115  sub AUTOLOAD { Line 119  sub AUTOLOAD {
119          my $type = ref($self) or die "$self is not an object";          my $type = ref($self) or die "$self is not an object";
120          my $name = $AUTOLOAD;          my $name = $AUTOLOAD;
121          $name =~ s/.*://;          $name =~ s/.*://;
122          Jifty->log->error("SQL: $name doesn't exist") unless defined($self->{$name});          my $v = $self->{$name};
123          return decode('UTF-8', $self->{$name});          Jifty->log->error("SQL: $name doesn't exist") unless defined $v;
124            if ( ! Encode::is_utf8( $v ) ) {
125                    eval { $v = decode( $self->{__encoding}, $self->{$name} ) };
126                    if ( $@ ) {
127                            warn "## column $name can't decode ",dump( $self->{$name} );
128                            $v = $self->{$name};
129                    }
130            }
131            return $v;
132  }  }
133    
134  sub DESTROY {}  sub DESTROY {}

Legend:
Removed from v.160  
changed lines
  Added in v.218

  ViewVC Help
Powered by ViewVC 1.1.26