/[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 9 by dpavlin, Sat Dec 2 23:53:00 2006 UTC revision 29 by dpavlin, Thu Dec 7 22:13:56 2006 UTC
# Line 21  use Jifty::Action schema { Line 21  use Jifty::Action schema {
21          param sql_query =>          param sql_query =>
22                  label is 'SQL',                  label is 'SQL',
23                  render as 'textarea',                  render as 'textarea',
24                  is mandatory,  #               ajax validates,
25                  ajax validates;  #               ajax canonicalizes,
26                    is mandatory;
27                    
28          param database =>          param database =>
29                  label is 'Database',                  label is 'Database',
# Line 33  use Jifty::Action schema { Line 34  use Jifty::Action schema {
34                          $dbs->unlimit;                          $dbs->unlimit;
35                          [{                          [{
36                                  display_from => 'name',                                  display_from => 'name',
37                                  value_from => 'name',                                  value_from => 'id',
38                                  collection => $dbs,                                  collection => $dbs,
39                          }];                          }];
40                  };                  };
# 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 "original SQL:\t$sql";
75    
76            $sql =~ s/\b($w)\b/uc($1)/egis;
77    
78            warn "canonicalize SQL:\t$sql";
79    
80            return $sql;
81    }
82    
83  =head2 take_action  =head2 take_action
84    
85  Execute SQL query on database  Execute SQL query on database
# Line 71  sub take_action { Line 91  sub take_action {
91            
92      # Custom action code      # Custom action code
93    
94          my $database = $self->argument_value('database');          my $database = $self->argument_value('database') || $self->form_value('database');
95          warn "database: $database\n";          warn "database: $database\n";
96    
97          my $dbs = SQLSession::Model::DatabaseCollection->new;          my $db = SQLSession::Model::Database->new;
98          $dbs->limit( column => 'name', value => $database );          $db->load_by_cols( id => $database ) ||
99          my $db = $dbs->first || $self->result->error("Can't find database $database");                  $self->result->error("Can't find database $database");
100    
101          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||
102                  $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;
103    
104            $dbh->do("SET client_encoding = UTF8");
105    
106          my $sql = $self->argument_value('sql_query');          my $sql = $self->argument_value('sql_query');
107    
108          warn "SQL: $sql\n";          warn "SQL: $sql\n";
109    
110          my $sth = $dbh->prepare( $sql ) ||          my $sth = $dbh->prepare( $sql ) ||
111                  $self->result->error( $dbh->errstr() );                  $self->result->error( $dbh->errstr() ) && return 0;
112    
113          $sth->execute() ||          $sth->execute() ||
114                  $self->result->error( $sth->errstr() );                  $self->result->error( $sth->errstr() ) && return 0;
115                    
116      $self->result->message('Query produced ' . (      $self->result->message('Query produced ' . (
117                  $sth->rows == 0 ?       'no results' :                  $sth->rows == 0 ?       'no results' :

Legend:
Removed from v.9  
changed lines
  Added in v.29

  ViewVC Help
Powered by ViewVC 1.1.26