+my $mssql_user;
+my $mssql_pass;
+my $mssql_bin;
+use File::Find qw/find/;
+sub find_mssql
+{
+ if ($_ =~ /sqlcmd.exe/i) {
+ $mssql_bin = $File::Find::name;
+ }
+}
+
+sub check_mssql
+{
+ my ($r) = shift;
+ my $ret = "ERR";
+ if ($r->url !~ m!^/check_mssql\?user=(\w+);pass=(.+)$!) {
+ return "ERR\nIncorrect url\n";
+ }
+ ($mssql_user, $mssql_pass) = ($1, $2);
+
+ unless ($mssql_bin) {
+ find(\&find_mssql, 'c:/program files/microsoft sql server/');
+ }
+
+ if (!$mssql_bin) {
+ return "ERR\n";
+ }
+
+ print $mssql_bin, "\n";
+
+ my $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -Q "SELECT 'OK';"`;
+ if ($res !~ /OK/) {
+ print "Can't run sql\n";
+ return "ERR\n";
+ }
+ return "OK\n";
+}
+
+sub setup_mssql_db
+{
+ my ($r) = shift;
+ my $ret = "ERR";
+ if ($r->url !~ m!^/setup_mssql_db\?db=([\w\d]+)$!) {
+ return "ERR\nIncorrect url\n";
+ }
+ my $db = $1;
+
+ unless ($mssql_bin) {
+ print "Can't find mssql bin\n";
+ return "ERR\n";
+ }
+
+ my $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -Q "CREATE DATABASE $db;"`;
+ $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "CREATE TABLE table1 (a int, b int);"`;
+ $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "INSERT INTO table1 (a, b) VALUES (1,1);"`;
+ $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "SELECT 'OK' FROM table1;"`;
+
+ if ($res !~ /OK/) {
+ print "Can't run sql\n";
+ return "ERR\n";
+ }
+ return "OK\n";
+}
+
+sub cleanup_mssql_db
+{
+ my ($r) = shift;
+ my $ret = "ERR";
+ if ($r->url !~ m!^/cleanup_mssql_db\?db=([\w\d]+)$!) {
+ return "ERR\nIncorrect url\n";
+ }
+ my $db = $1;
+
+ unless ($mssql_bin) {
+ print "Can't find mssql bin\n";
+ return "ERR\n";
+ }
+
+ my $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -Q "DROP DATABASE $db;"`;
+
+ return "OK\n";
+}
+
+sub truncate_mssql_table
+{
+ my ($r) = shift;
+ my $ret = "ERR";
+ if ($r->url !~ m!^/truncate_mssql_table\?db=([\w\d]+)$!) {
+ return "ERR\nIncorrect url\n";
+ }
+ my $db = $1;
+
+ unless ($mssql_bin) {
+ print "Can't find mssql bin\n";
+ return "ERR\n";
+ }
+
+ my $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "TRUNCATE TABLE table1;"`;
+ $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "SELECT 'OK' FROM table1;"`;
+
+ if ($res =~ /OK/) {
+ print "Can't truncate\n";
+ return "ERR\n";
+ }
+ return "OK\n";
+}
+
+sub test_mssql_content
+{
+ my ($r) = shift;
+ my $ret = "ERR";
+ if ($r->url !~ m!^/test_mssql_content\?db=([\w\d]+)$!) {
+ return "ERR\nIncorrect url\n";
+ }
+ my $db = $1;
+
+ unless ($mssql_bin) {
+ print "Can't find mssql bin\n";
+ return "ERR\n";
+ }
+
+ my $res = `"$mssql_bin" -U $mssql_user -P $mssql_pass -d $db -Q "SELECT 'OK' FROM table1;"`;
+
+ if ($res !~ /OK/) {
+ print "no content\n";
+ return "ERR\n";
+ }
+ return "OK\n";
+}
+
+