--- /dev/null
+#!/usr/bin/env perl
+
+use strict;
+use CGI;
+use CGI::Carp;
+use File::Basename;
+use DBI;
+use lib (dirname($0).'/lib');
+use DBD::sqlite;
+use JSON::PP;
+
+my $cgi = new CGI();
+
+my $p = ();
+my @params = $cgi->param();
+foreach my $pe (@params){
+ $p->{$pe} = $cgi->param($pe);
+}
+print $cgi->header(-type=>"application/json", -charset => "utf-8");
+my $html = ();
+if (exists($p->{db}) && (-e dirname($0).'/db/'.$p->{db}.'.sqlite')){
+ if (exists($p->{type}) && exists($p->{sql})){
+
+ if (($p->{type} eq "query") && (exists($p->{key}))){
+ $html->{sqldata} = &dbquery($p->{key},$p->{sql});
+ } elsif ($p->{type} eq "querysorted"){
+ $html->{sqldata} = &dbquerysorted($p->{sql});
+ } elsif ($p->{type} eq "queryarray"){
+ $html->{sqldata} = &dbqueryarray($p->{sql});
+ } elsif ($p->{type} eq "exec"){
+ $html->{sqldata} = &dbexec($p->{sql});
+ }
+ print JSON::PP::encode_json($html);
+ }
+}
+
+# sub strreplace(){
+# my $self = shift;
+# my $text = shift;
+# $text =~ s/'/''/g;
+# return $text;
+# }
+
+sub dbquery(){
+ my $key = shift;
+ my $stat = shift;
+ my $retdata =();
+ my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return ();
+ #$stat = encode("utf8", $stat);
+
+ #open FILE,">>/tmp/sql.log";
+ # print FILE "key:".$key.";$stat\n";
+ # close FILE;
+ my $sth = $dbh->prepare($stat);
+ $sth->execute() or return (); #or print "dbquery: ".$sth->errstr;
+ while(my $data = $sth->fetchrow_hashref())
+ {
+ if (exists $data->{$key}){
+ foreach my $k (keys %{$data}){
+ $retdata->{$data->{$key}}{$k} = decode( "utf8", $data->{$k});
+ }
+ }
+ }
+ if (keys(%{$retdata}) == 0){
+ $retdata =();
+ }
+ $sth->finish();
+ $dbh->disconnect();
+ return $retdata;
+}
+
+sub dbquerysorted(){
+ my $stat = shift;
+ my $retdata = ();
+ my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return (); #or die "dbquery Connection Error!".$!;
+ #$stat = encode("utf8", $stat);
+ #open FILE,">>/tmp/sql.log";
+ #print "$stat\n";
+ # close FILE;
+ my $sth = $dbh->prepare($stat);
+
+ $sth->execute() or return (); #print "dbquery: ".$sth->errstr;
+ my $count = 0;
+ while(my $data = $sth->fetchrow_hashref())
+ {
+ foreach my $k (keys %{$data}){
+ $retdata->{$count}->{$k} = decode( "utf8", $data->{$k});
+ }
+ $count++;
+ }
+
+ $sth->finish();
+ $dbh->disconnect();
+ #%retdata = sort {$a <=> $b} keys %retdata;
+ return $retdata;
+}
+
+sub dbqueryarray(){
+ my $stat = shift;
+ my @retdata = ();
+ my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return (); #or die "dbquery Connection Error!".$!;
+ #$stat = encode("utf8", $stat);
+ #open FILE,">>/tmp/sql.log";
+ #print "$stat\n";
+ # close FILE;
+ my $sth = $dbh->prepare($stat);
+
+ $sth->execute() or return (); #print "dbquery: ".$sth->errstr;
+ my $count = 0;
+
+ while(my $valdata = $sth->fetchrow_arrayref())
+ {
+ if ($valdata == undef){ last;}
+ my @rdata = ();
+ foreach my $k (@{$valdata}){
+ push @rdata,decode( "utf8", $k);
+ }
+ push @retdata,\@rdata;
+ }
+
+ $sth->finish();
+ $dbh->disconnect();
+ #%retdata = sort {$a <=> $b} keys %retdata;
+ return \@retdata;
+}
+
+sub dbexec(){
+ my $stat = shift;
+ my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,AutoCommit=>1}) or return (); #or die "dbexec Connection Error!".$!;
+ #$stat = encode("utf8", $stat);
+ #print $stat."\n";
+ #open FILE,">>/Users/kilian/sql.log";
+ #print FILE "$stat\n";
+ #close FILE;
+ my $sth = $dbh->prepare($stat);
+ my $rv =$dbh->do($stat) or return (); #or print "Failed dbexec:\n'".$stat. "'\n\n";
+ $dbh->disconnect();
+ return $rv;
+}
\ No newline at end of file