/[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 159 by dpavlin, Sun Jun 15 14:40:50 2008 UTC revision 220 by dpavlin, Sun Jun 22 14:55:55 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 duration) );
8    
9  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
10    use Time::HiRes qw/time/;
11    
12  =head1 NAME  =head1 NAME
13    
# Line 28  specify it like this: Line 29  specify it like this:
29    my $sql = A3C::SQL->new({    my $sql = A3C::SQL->new({
30          query => 'select now()',          query => 'select now()',
31          dbh => $my_dbh,          dbh => $my_dbh,
32            encoding => 'UTF-8',
33    });    });
34    
35    Mungling with C<encoding> is rearly needed, especially if using recent C<DBD::Pg> as driver.
36    
37  =head2 sth  =head2 sth
38    
39  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 41  sub sth { Line 45  sub sth {
45          if ( ! $self->{_sth} ) {          if ( ! $self->{_sth} ) {
46                  my $dbh = $self->dbh || Jifty->handle->dbh;                  my $dbh = $self->dbh || Jifty->handle->dbh;
47                  my $sth = $dbh->prepare( $self->query ) or $dbh->errstr;                  my $sth = $dbh->prepare( $self->query ) or $dbh->errstr;
48                    my $t = time();
49                  if ( $self->arguments ) {                  if ( $self->arguments ) {
50                          Jifty->log->debug( $self->sql . ' arguments: ' . dump( $self->arguments ) );                          Jifty->log->debug( $self->sql . ' arguments: ' . dump( $self->arguments ) );
51                          $sth->execute( $self->arguments ) or $dbh->errstr;                          $sth->execute( $self->arguments ) or die $dbh->errstr;
52                  } else {                  } else {
53                          $sth->execute or $dbh->errstr;                          $sth->execute or die $dbh->errstr;
54                  }                  }
55                    $self->duration( time() - $t );
56                  $self->{_sth} = $sth;                  $self->{_sth} = $sth;
57          }          }
58    
# Line 65  sub next { Line 71  sub next {
71          my $self = shift;          my $self = shift;
72          my $row = $self->sth->fetchrow_hashref;          my $row = $self->sth->fetchrow_hashref;
73          return unless defined $row;          return unless defined $row;
74          return A3C::SQL::row->new( $row );          return A3C::SQL::row->new( $row, $self->encoding );
75  }  }
76    
77  =head2 count  =head2 count
# Line 107  sub new { Line 113  sub new {
113          my $class = ref($that) || $that;          my $class = ref($that) || $that;
114          my $self = shift;          my $self = shift;
115          bless $self, $class;          bless $self, $class;
116            $self->{__encoding} = shift || 'UTF-8';
117          return $self;          return $self;
118  }    }  
119    
# Line 115  sub AUTOLOAD { Line 122  sub AUTOLOAD {
122          my $type = ref($self) or die "$self is not an object";          my $type = ref($self) or die "$self is not an object";
123          my $name = $AUTOLOAD;          my $name = $AUTOLOAD;
124          $name =~ s/.*://;          $name =~ s/.*://;
125          Jifty->log->error("SQL: $name doesn't exist") unless defined($self->{$name});          my $v = $self->{$name};
126          return decode('UTF-8', $self->{$name});          Jifty->log->error("SQL: $name doesn't exist") unless defined $v;
127            if ( ! Encode::is_utf8( $v ) ) {
128                    eval { $v = decode( $self->{__encoding}, $self->{$name} ) };
129                    if ( $@ ) {
130                            warn "## column $name can't decode ",dump( $self->{$name} );
131                            $v = $self->{$name};
132                    }
133            }
134            return $v;
135  }  }
136    
137  sub DESTROY {}  sub DESTROY {}

Legend:
Removed from v.159  
changed lines
  Added in v.220

  ViewVC Help
Powered by ViewVC 1.1.26