/[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

Annotation of /trunk/lib/SQLSession/Action/DoSQL.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8 - (hide annotations)
Sat Dec 2 22:54:15 2006 UTC (17 years, 5 months ago) by dpavlin
File size: 2005 byte(s)
fix validate
1 dpavlin 5 use strict;
2     use warnings;
3    
4     =head1 NAME
5    
6     SQLSession::Action::DoSQL
7    
8     =cut
9    
10     package SQLSession::Action::DoSQL;
11     use base qw/SQLSession::Action Jifty::Action/;
12    
13     use SQLSession::Model::DatabaseCollection;
14 dpavlin 7 use DBI;
15    
16 dpavlin 5 use Data::Dump qw/dump/;
17    
18     use Jifty::Param::Schema;
19     use Jifty::Action schema {
20    
21     param sql_query =>
22     label is 'SQL',
23 dpavlin 7 render as 'textarea',
24     is mandatory,
25     ajax validates;
26 dpavlin 5
27     param database =>
28     label is 'Database',
29     render as 'Select',
30     # available are qw( test foo bar );
31     available are defer {
32     my $dbs = SQLSession::Model::DatabaseCollection->new;
33     $dbs->unlimit;
34 dpavlin 6 [{
35 dpavlin 5 display_from => 'name',
36     value_from => 'name',
37     collection => $dbs,
38     }];
39     };
40    
41     };
42    
43 dpavlin 7 sub sticky_on_success { 1 }
44     sub sticky_on_failure { 1 }
45    
46     =head2 validate_sql_query
47    
48     Can't be empty!
49    
50     =cut
51    
52 dpavlin 8 sub validate_sql_query {
53 dpavlin 7 my $self = shift;
54 dpavlin 8 my $value = shift;
55    
56     if ( $value =~ m/^\s+;*\s*$/s ) {
57     return $self->validation_error( sql_query => 'You need to type in SQL query' );
58     } else {
59     return $self->validation_ok('sql_query');
60     }
61 dpavlin 7 }
62    
63 dpavlin 5 =head2 take_action
64    
65 dpavlin 7 Execute SQL query on database
66    
67 dpavlin 5 =cut
68    
69     sub take_action {
70     my $self = shift;
71    
72     # Custom action code
73    
74 dpavlin 7 my $database = $self->argument_value('database');
75     warn "database: $database\n";
76 dpavlin 5
77 dpavlin 7 my $dbs = SQLSession::Model::DatabaseCollection->new;
78     $dbs->limit( column => 'name', value => $database );
79     my $db = $dbs->first || $self->result->error("Can't find database $database");
80 dpavlin 5
81 dpavlin 7 my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||
82     $self->result->error("can't connect to ", $db->dsn, " as ", $db->login, " ", $DBI::errstr);
83    
84     my $sql = $self->argument_value('sql_query');
85    
86     warn "SQL: $sql\n";
87    
88     my $sth = $dbh->prepare( $sql ) ||
89     $self->result->error( $dbh->errstr() );
90    
91     $sth->execute() ||
92     $self->result->error( $sth->errstr() );
93    
94     $self->result->message('Query produced ' . (
95     $sth->rows == 0 ? 'no results' :
96     $sth->rows == 1 ? 'single row' :
97     $sth->rows . ' rows'
98     )) if ($sth->rows >= 0);
99    
100     return 1;
101 dpavlin 5 }
102    
103     1;
104    

  ViewVC Help
Powered by ViewVC 1.1.26