SAL-LSQL
From GTALUG
Sitemap > Culture > Psema4 > SAL > SAL-LSQL
[edit]
LSQL - A lite SQLite Database Shell
[edit]
Sample Session
LSQL - Lite SQLite Shell
This program is licensed under the Free Documentation License v1.2
(http://www.gnu.org/copyleft/fdl.html)
[lsql] > create table test (name varchar(20), comments varchar(20));
[lsql] > go
Executing: create table test (name varchar(20), comments varchar(20));
(0E0 rows affected)
[lsql] > insert into test values ('dl33t','this is a test!');
[lsql] > go
Executing: insert into test values ('dl33t','this is a test!');
(1 rows affected)
[lsql] > select * from test;
[lsql] > go
Executing: select * from test;
dl33t, this is a test!
(1 rows affected)
[lsql] > quit
[edit]
Source
#!/usr/bin/perl
# Lite SQLite Database Shell
# This script is licensed under the FDL (Free Documentataion License)
# The complete license text can be found at http://www.gnu.org/copyleft/fdl.html
#
# A really quick and dirty sqlite shell using SAL
use strict;
use CGI;
use SAL::DBI;
# Set up the CGI object, get any parameters, and initialize some vars
my $q = new CGI;
my $db = $q->param('db') || ':memory:';
# Set up the database
my $dbo_factory = new SAL::DBI;
my $dbo_data = $dbo_factory->spawn_sqlite($db);
print "\nLSQL - Lite SQLite Shell\n\nThis program is licensed under the Free Documentation License v1.2\n(http://www.gnu.org/copyleft/fdl.html)\n\n";
my $query;
my @params = ();
while (1) {
print "[lsql] > ";
my $line = <STDIN>;
chomp($line);
$line =~ s/^\s+//;
$line =~ s/\s+$//;
if ($line !~ /^quit$/i) {
if ($line =~ /^go$/i) {
print "\nExecuting: $query\n";
my $num_rows = 0;
my $num_cols = 0;
my $query_type;
$query_type = dbGetQueryType($query);
if ($query_type =~ /^select$/i) {
($num_rows, $num_cols) = dbEXECUTE($query);
displayTable($num_rows, $num_cols);
} elsif ($query_type =~ /^insert$/i) {
$num_rows = dbDO($query);
} elsif ($query_type =~ /^update$/i) {
$num_rows = dbDO($query);
} elsif ($query_type =~ /^create table$/i) {
$num_rows = dbDO($query);
} elsif ($query_type =~ /^pragma$/i) {
($num_rows, $num_cols) = dbEXECUTE($query);
displayTable($num_rows, $num_cols);
} elsif ($query_type =~ /^cmdversion$/i) {
my $eng_ver = $dbo_data->{connection}{dbh}->sqlite_version();
print "SQLite Engine Version: $eng_ver\n";
} elsif ($query_type =~ /^cmdhelp$/i) {
print "Help\n";
print "----\n";
} else {
print "Syntax Error.\n\n";
}
print "($num_rows rows affected)\n\n";
$query = '';
} else {
$query .= $line . ' ';
}
} else {
last;
}
}
print "\n";
sub dbGetQueryType {
my $query = shift;
$query =~ s/^\s+//;
$query =~ s/\s+$//;
if ($query =~ /^select /i) {
return 'SELECT';
} elsif ($query =~ /^insert /) {
return 'INSERT';
} elsif ($query =~ /^update /) {
return 'UPDATE';
} elsif ($query =~ /^create table /) {
return 'CREATE TABLE';
} elsif ($query =~ /^pragma /) {
return 'PRAGMA';
} elsif ($query =~ /^version/) {
return 'CMDVersion';
} elsif ($query =~ /^help/) {
return 'CMDHelp';
} else {
return 'UNKNOWN';
}
}
sub dbEXECUTE {
my $query = shift;
my ($w, $h) = $dbo_data->execute($query);
return ($h, $w);
}
sub dbDO {
my $query = shift;
my ($h) = $dbo_data->do($query);
return $h;
}
sub displayTable {
my $rows = shift;
my $cols = shift;
for (my $r=0; $r < $rows; $r++) {
print "\n";
my $record;
for (my $c=0; $c <= $cols; $c++) {
my $v = $dbo_data->{data}->[$r][$c];
$record .= "$v, ";
}
$record =~ s/,\s+$//;
print $record;
}
print "\n\n";
}

