Changeset 22663

Show
Ignore:
Timestamp:
11/04/08 11:23:11 (5 years ago)
Author:
kazuho
Message:

0.10 release (SELECT AS HASH)

Location:
lang/perl/Filter-SQL/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Filter-SQL/trunk/Changes

    r21488 r22663  
    11Revision history for Perl extension Filter::SQL. 
     2 
     30.10  Tue Nov 04 11:00:00 2008 
     4        - implement ``SELECT AS HASH'' directive 
    25 
    360.09  Fri Oct 17 15:55:00 2008 
  • lang/perl/Filter-SQL/trunk/lib/Filter/SQL.pm

    r21488 r22663  
    1616$EXPORT_TAGS{all} = [ uniq map { @$_ } values %EXPORT_TAGS ]; 
    1717our @EXPORT_OK = @{$EXPORT_TAGS{all}}; 
    18 our $VERSION = '0.09'; 
     18our $VERSION = '0.10'; 
    1919 
    2020FILTER_ONLY 
    2121    code => sub { 
    22         s{(EXEC\s+(?:\S+)|SELECT\s+ROW|SELECT|INSERT|UPDATE|DELETE|REPLACE) ([^;]*);}{'Filter::SQL->' . Filter::SQL::to_func($1) . quote_vars($2) . ")"}egm; 
     22        s{(EXEC\s+(?:\S+)|SELECT(?:\s+ROW|)(?:\s+AS\s+HASH|)|INSERT|UPDATE|DELETE|REPLACE)\s+([^;]*);}{'Filter::SQL->' . Filter::SQL::to_func($1) . quote_vars($2) . ")"}egm; 
    2323#        print STDERR $_; $_; 
    2424    }; 
     
    2929    if ($op =~ /^EXEC\s+/) { 
    3030        return "sql_prepare_exec('$' "; 
    31     } elsif ($op =~ /^SELECT\s+ROW/) { 
    32         return "sql_selectrow('SELECT "; 
    33     } elsif ($op eq 'SELECT') { 
    34         return "sql_selectall('SELECT "; 
     31    } elsif ($op =~ /^SELECT(\s+ROW|)(\s+AS\s+HASH|)/) { 
     32        my $as_hash = $2 ? '1' : 'undef'; 
     33        if ($1) { 
     34            return "sql_selectrow($as_hash, 'SELECT "; 
     35        } else { 
     36            return "sql_selectall($as_hash, 'SELECT "; 
     37        } 
    3538    } else { 
    3639        return "sql_prepare_exec('$op "; 
     
    124127 
    125128sub sql_selectall { 
    126     my ($klass, $sql, @params) = @_; 
     129    my ($klass, $as_hash, $sql, @params) = @_; 
    127130    my $pe = Filter::SQL->dbh->{PrintError}; 
    128131    local Filter::SQL->dbh->{PrintError} = undef; 
    129     my $rows = Filter::SQL->dbh->selectall_arrayref($sql, {}, @params); 
     132    my $rows = Filter::SQL->dbh->selectall_arrayref( 
     133        $sql, 
     134        $as_hash ? { Slice => {} } : {}, 
     135        @params, 
     136    ); 
    130137    unless ($rows) { 
    131138        carp Filter::SQL->dbh->errstr if $pe; 
     
    136143 
    137144sub sql_selectrow { 
    138     my ($klass, $sql, @params) = @_; 
     145    my ($klass, $as_hash, $sql, @params) = @_; 
    139146    my $pe = Filter::SQL->dbh->{PrintError}; 
    140147    local Filter::SQL->dbh->{PrintError} = undef; 
    141     my $rows = Filter::SQL->dbh->selectall_arrayref($sql, {}, @params); 
     148    my $rows = Filter::SQL->dbh->selectall_arrayref( 
     149        $sql, 
     150        $as_hash ? { Slice => {} } : {}, 
     151        @params, 
     152    ); 
    142153    unless ($rows) { 
    143154        carp Filter::SQL->dbh->errstr if $pe; 
    144155        return; 
    145156    } 
     157    return @$rows ? %{$rows->[0]} : () 
     158        if $as_hash; 
    146159    @$rows ? wantarray ? @{$rows->[0]} : $rows->[0][0] : (); 
    147160} 
     
    174187  $v = 12345; 
    175188  INSERT INTO t (v) VALUES ($v);; 
    176    
     189 
    177190  foreach my $row (SELECT * FROM t;) { 
    178191      print "v: $row[0]\n"; 
     
    181194  if (SELECT ROW COUNT(*) FROM t; == 1) { 
    182195      print "1 row in table\n"; 
     196  } 
     197 
     198  foreach my $row (SELECT AS HASH * FROM t;) { 
     199      print "---\n"; 
     200      foreach my $name (sort keys %$row) { 
     201          print "$name: $row->{$name}\n"; 
     202      } 
    183203  } 
    184204 
  • lang/perl/Filter-SQL/trunk/t/01-simple.t

    r21488 r22663  
    1010        plan skip_all => 'Set FILTER_SQL_DBI to run these tests'; 
    1111    } else { 
    12         plan tests => 32; 
     12        plan tests => 35; 
    1313    } 
    1414}; 
     
    4040    [], 
    4141); 
     42is_deeply( 
     43    { SELECT ROW AS HASH * FROM filter_sql_t; }, 
     44    {}, 
     45); 
    4246 
    4347is_deeply( 
     
    6064); 
    6165 
     66is_deeply( 
     67    { SELECT ROW AS HASH * FROM filter_sql_t; }, 
     68    { v => 0 }, 
     69); 
     70 
    6271my $sth = EXEC SELECT v FROM filter_sql_t;; 
    6372ok($sth); 
     
    7079    [ SELECT * FROM filter_sql_t; ], 
    7180    [ [ 0 ], [ 1 ], [ 2 ], ], 
     81); 
     82is_deeply( 
     83    [ SELECT AS HASH * FROM filter_sql_t; ], 
     84    [ { v => 0 }, { v => 1 }, { v => 2 }, ], 
    7285); 
    7386is(SELECT ROW COUNT(*) FROM filter_sql_t;, 3);