/[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 35 by dpavlin, Wed Jan 17 17:24:32 2007 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            $w .= '|limit|offset';  # fixup
75    
76            warn "original SQL:\t$sql";
77    
78            $sql =~ s/\b($w)\b/uc($1)/egis;
79    
80            warn "canonicalize SQL:\t$sql";
81    
82            return $sql;
83    }
84    
85  =head2 take_action  =head2 take_action
86    
87  Execute SQL query on database  Execute SQL query on database
# Line 71  sub take_action { Line 93  sub take_action {
93            
94      # Custom action code      # Custom action code
95    
96          my $database = $self->argument_value('database');          my $database = $self->argument_value('database') || $self->form_value('database');
97          warn "database: $database\n";          warn "database: $database\n";
98    
99          my $dbs = SQLSession::Model::DatabaseCollection->new;          my $db = SQLSession::Model::Database->new;
100          $dbs->limit( column => 'name', value => $database );          $db->load_by_cols( id => $database ) ||
101          my $db = $dbs->first || $self->result->error("Can't find database $database");                  $self->result->error("Can't find database $database");
102    
103          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||          my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||
104                  $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;
105    
106            $dbh->do("SET client_encoding = UTF8") if ($db->dsn =~ /Pg/);
107    
108          my $sql = $self->argument_value('sql_query');          my $sql = $self->argument_value('sql_query');
109    
110          warn "SQL: $sql\n";          warn "SQL: $sql\n";
111    
112          my $sth = $dbh->prepare( $sql ) ||          my $sth = $dbh->prepare( $sql ) ||
113                  $self->result->error( $dbh->errstr() );                  $self->result->error( $dbh->errstr() ) && return 0;
114    
115          $sth->execute() ||          $sth->execute() ||
116                  $self->result->error( $sth->errstr() );                  $self->result->error( $sth->errstr() ) && return 0;
117                    
118      $self->result->message('Query produced ' . (      $self->result->message('Query produced ' . (
119                  $sth->rows == 0 ?       'no results' :                  $sth->rows == 0 ?       'no results' :

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

  ViewVC Help
Powered by ViewVC 1.1.26