/[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 7 by dpavlin, Sat Dec 2 22:30:43 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 49  Can't be empty! Line 50  Can't be empty!
50    
51  =cut  =cut
52    
53  sub valdate_sql_query {  sub validate_sql_query {
54          my $self = shift;          my $self = shift;
55          my $value = shift || return $self->validation_error( sql_query => 'You need to type in SQL query' );          my $value = shift;
56          return $self->validation_ok('sql_query');  
57            if ( $value =~ m/^\s+;*\s*$/s ) {
58                    return $self->validation_error( sql_query => 'You need to type in SQL query' );
59            } else {
60                    return $self->validation_ok('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
# Line 66  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' :
# Line 92  sub take_action { Line 119  sub take_action {
119                                                          $sth->rows . ' rows'                                                          $sth->rows . ' rows'
120          )) if ($sth->rows >= 0);          )) if ($sth->rows >= 0);
121    
122            $self->result->content( sth => $sth );
123    
124      return 1;      return 1;
125  }  }
126    

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

  ViewVC Help
Powered by ViewVC 1.1.26