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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (show annotations)
Sat Dec 2 22:30:43 2006 UTC (17 years, 5 months ago) by dpavlin
File size: 1954 byte(s)
trivial implementation of action which use DBI to execute SQL query on database
1 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 use DBI;
15
16 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 render as 'textarea',
24 is mandatory,
25 ajax validates;
26
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 [{
35 display_from => 'name',
36 value_from => 'name',
37 collection => $dbs,
38 }];
39 };
40
41 };
42
43 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 sub valdate_sql_query {
53 my $self = shift;
54 my $value = shift || return $self->validation_error( sql_query => 'You need to type in SQL query' );
55 return $self->validation_ok('sql_query');
56 }
57
58 =head2 take_action
59
60 Execute SQL query on database
61
62 =cut
63
64 sub take_action {
65 my $self = shift;
66
67 # Custom action code
68
69 my $database = $self->argument_value('database');
70 warn "database: $database\n";
71
72 my $dbs = SQLSession::Model::DatabaseCollection->new;
73 $dbs->limit( column => 'name', value => $database );
74 my $db = $dbs->first || $self->result->error("Can't find database $database");
75
76 my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) ||
77 $self->result->error("can't connect to ", $db->dsn, " as ", $db->login, " ", $DBI::errstr);
78
79 my $sql = $self->argument_value('sql_query');
80
81 warn "SQL: $sql\n";
82
83 my $sth = $dbh->prepare( $sql ) ||
84 $self->result->error( $dbh->errstr() );
85
86 $sth->execute() ||
87 $self->result->error( $sth->errstr() );
88
89 $self->result->message('Query produced ' . (
90 $sth->rows == 0 ? 'no results' :
91 $sth->rows == 1 ? 'single row' :
92 $sth->rows . ' rows'
93 )) if ($sth->rows >= 0);
94
95 return 1;
96 }
97
98 1;
99

  ViewVC Help
Powered by ViewVC 1.1.26