/[SQLSession]/trunk/lib/SQLSession/Action/DoSQL.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 /trunk/lib/SQLSession/Action/DoSQL.pm

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

revision 8 by dpavlin, Sat Dec 2 22:54:15 2006 UTC revision 13 by dpavlin, Sun Dec 3 13:28:48 2006 UTC
# Line 22  use Jifty::Action schema { Line 22  use Jifty::Action schema {
22                  label is 'SQL',                  label is 'SQL',
23                  render as 'textarea',                  render as 'textarea',
24                  is mandatory,                  is mandatory,
25                  ajax validates;                  ajax validates,
26                    ajax canonicalizes;
27                    
28          param database =>          param database =>
29                  label is 'Database',                  label is 'Database',
# Line 60  sub validate_sql_query { Line 61  sub validate_sql_query {
61          }          }
62  }  }
63    
64    use SQL::ReservedWords;
65    
66    sub canonicalize_sql_query {
67            my $self = shift;
68            my $sql = shift;
69    
70            my @words = SQL::ReservedWords->words;
71    
72            my $w = join('|', @words);
73    
74            warn "canonicalize SQL: $sql";
75    
76            $sql =~ s/\b($w)\b/uc($1)/egis;
77    
78            return $sql;
79    }
80    
81  =head2 take_action  =head2 take_action
82    
83  Execute SQL query on database  Execute SQL query on database
# Line 79  sub take_action { Line 97  sub take_action {
97          my $db = $dbs->first || $self->result->error("Can't find database $database");          my $db = $dbs->first || $self->result->error("Can't find database $database");
98    
99          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||
100                  $self->result->error("can't connect to ", $db->dsn, " as ", $db->login, " ", $DBI::errstr);                  $self->result->error("Can't connect to " . $db->dsn . " as " . $db->login . "<br/>" . $DBI::errstr) && return 0;
101    
102          my $sql = $self->argument_value('sql_query');          my $sql = $self->argument_value('sql_query');
103    
104          warn "SQL: $sql\n";          warn "SQL: $sql\n";
105    
106          my $sth = $dbh->prepare( $sql ) ||          my $sth = $dbh->prepare( $sql ) ||
107                  $self->result->error( $dbh->errstr() );                  $self->result->error( $dbh->errstr() ) && return 0;
108    
109          $sth->execute() ||          $sth->execute() ||
110                  $self->result->error( $sth->errstr() );                  $self->result->error( $sth->errstr() ) && return 0;
111                    
112      $self->result->message('Query produced ' . (      $self->result->message('Query produced ' . (
113                  $sth->rows == 0 ?       'no results' :                  $sth->rows == 0 ?       'no results' :
# Line 97  sub take_action { Line 115  sub take_action {
115                                                          $sth->rows . ' rows'                                                          $sth->rows . ' rows'
116          )) if ($sth->rows >= 0);          )) if ($sth->rows >= 0);
117    
118            $self->result->content( sth => $sth );
119    
120      return 1;      return 1;
121  }  }
122    

Legend:
Removed from v.8  
changed lines
  Added in v.13

  ViewVC Help
Powered by ViewVC 1.1.26