--- trunk/lib/SQLSession/Action/DoSQL.pm 2006/12/03 00:10:31 11 +++ trunk/lib/SQLSession/Action/DoSQL.pm 2006/12/07 19:56:41 28 @@ -21,8 +21,9 @@ param sql_query => label is 'SQL', render as 'textarea', - is mandatory, - ajax validates; + ajax validates, + ajax canonicalizes, + is mandatory; param database => label is 'Database', @@ -33,7 +34,7 @@ $dbs->unlimit; [{ display_from => 'name', - value_from => 'name', + value_from => 'id', collection => $dbs, }]; }; @@ -60,6 +61,25 @@ } } +use SQL::ReservedWords; + +sub canonicalize_sql_query { + my $self = shift; + my $sql = shift; + + my @words = SQL::ReservedWords->words; + + my $w = join('|', @words); + + warn "original SQL:\t$sql"; + + $sql =~ s/\b($w)\b/uc($1)/egis; + + warn "canonicalize SQL:\t$sql"; + + return $sql; +} + =head2 take_action Execute SQL query on database @@ -74,13 +94,15 @@ my $database = $self->argument_value('database'); warn "database: $database\n"; - my $dbs = SQLSession::Model::DatabaseCollection->new; - $dbs->limit( column => 'name', value => $database ); - my $db = $dbs->first || $self->result->error("Can't find database $database"); + my $db = SQLSession::Model::Database->new; + $db->load_by_cols( id => $database ) || + $self->result->error("Can't find database $database"); my $dbh = DBI->connect( $db->dsn, $db->login, $db->passwd ) || $self->result->error("Can't connect to " . $db->dsn . " as " . $db->login . "
" . $DBI::errstr) && return 0; + $dbh->do("SET client_encoding = UTF8"); + my $sql = $self->argument_value('sql_query'); warn "SQL: $sql\n";