/[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 82 by dpavlin, Sat Apr 12 10:28:38 2008 UTC revision 162 by dpavlin, Sun Jun 15 17:47:39 2008 UTC
# Line 3  package A3C::SQL; Line 3  package A3C::SQL;
3  use strict;  use strict;
4  use warnings;  use warnings;
5    
6    use base qw(Jifty::Object Class::Accessor::Fast);
7    __PACKAGE__->mk_accessors( qw(query arguments dbh encoding) );
8    
9    use Data::Dump qw/dump/;
10    
11  =head1 NAME  =head1 NAME
12    
13  A3C::SQL  A3C::SQL
# Line 17  Issue SQL queries Line 22  Issue SQL queries
22    
23    my $sql = A3C::SQL->new({ query => 'select now()' });    my $sql = A3C::SQL->new({ query => 'select now()' });
24    
25  =cut  As a alternative, if you don't want to use Jifty's database handle,
26    specify it like this:
27    
28  use base qw(Jifty::Object Class::Accessor::Fast);    my $sql = A3C::SQL->new({
29  __PACKAGE__->mk_accessors( qw(query arguments) );          query => 'select now()',
30            dbh => $my_dbh,
31  use Data::Dump qw/dump/;          encoding => 'UTF-8',
32      });
33    
34  =head2 sth  =head2 sth
35    
# Line 33  Execute query and return statement handl Line 40  Execute query and return statement handl
40  sub sth {  sub sth {
41          my $self = shift;          my $self = shift;
42          if ( ! $self->{_sth} ) {          if ( ! $self->{_sth} ) {
43                  my $dbh = Jifty->handle->dbh;                  my $dbh = $self->dbh || Jifty->handle->dbh;
44                  my $sth = $dbh->prepare( $self->query ) or $dbh->errstr;                  my $sth = $dbh->prepare( $self->query ) or $dbh->errstr;
45                  if ( $self->arguments ) {                  if ( $self->arguments ) {
46                          Jifty->log->debug( $self->sql . ' arguments: ' . dump( $self->arguments ) );                          Jifty->log->debug( $self->sql . ' arguments: ' . dump( $self->arguments ) );
47                          $sth->execute( $self->arguments ) or $dbh->errstr;                          $sth->execute( $self->arguments ) or die $dbh->errstr;
48                  } else {                  } else {
49                          $sth->execute or $dbh->errstr;                          $sth->execute or die $dbh->errstr;
50                  }                  }
51                  $self->{_sth} = $sth;                  $self->{_sth} = $sth;
52          }          }
# Line 59  sub next { Line 66  sub next {
66          my $self = shift;          my $self = shift;
67          my $row = $self->sth->fetchrow_hashref;          my $row = $self->sth->fetchrow_hashref;
68          return unless defined $row;          return unless defined $row;
69          return A3C::SQL::row->new( $row );          return A3C::SQL::row->new( $row, $self->encoding );
70  }  }
71    
72  =head2 count  =head2 count
# Line 73  sub count { Line 80  sub count {
80          return $self->sth->rows;          return $self->sth->rows;
81  }  }
82    
83    =head1 HELPERS
84    
85    This helpers are accessor to L<DBI>
86    
87    =head2 _column_names
88    
89      my @columns = $sql->_column_names;
90    
91    =cut
92    
93    sub _column_names {
94            my $self = shift;
95            return @{ $self->sth->{NAME} };
96    }
97    
98  package A3C::SQL::row;  package A3C::SQL::row;
99    
100  use Encode qw/decode/;  use Encode qw/decode/;
101  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
102    use base qw/Jifty::Object/;
103    
104  our $AUTOLOAD;  our $AUTOLOAD;
105    
# Line 85  sub new { Line 108  sub new {
108          my $class = ref($that) || $that;          my $class = ref($that) || $that;
109          my $self = shift;          my $self = shift;
110          bless $self, $class;          bless $self, $class;
111            $self->{__encoding} = shift || 'UTF-8';
112          return $self;          return $self;
113  }    }  
114    
# Line 93  sub AUTOLOAD { Line 117  sub AUTOLOAD {
117          my $type = ref($self) or die "$self is not an object";          my $type = ref($self) or die "$self is not an object";
118          my $name = $AUTOLOAD;          my $name = $AUTOLOAD;
119          $name =~ s/.*://;          $name =~ s/.*://;
120  #       warn "SQL: $name doesn't exist" unless defined($self->{$name});          Jifty->log->error("SQL: $name doesn't exist") unless defined($self->{$name});
121          return decode('UTF-8', $self->{$name});          return decode( $self->{__encoding}, $self->{$name} );
122  }  }
123    
124  sub DESTROY {}  sub DESTROY {}

Legend:
Removed from v.82  
changed lines
  Added in v.162

  ViewVC Help
Powered by ViewVC 1.1.26