#!/usr/bin/perl -w

use RDQL;

my $db = "dawgtest";

my $using = " USING rs FOR <http://jena.hpl.hp.com/2003/03/result-set#>";

#$cmd = "tstore_setup --database=$db";
#system($cmd) || die "Cant setup: $cmd";

my $rdql = new RDQL(database => $db);
$rdql->set("max_comp", 100000);

while ($file = shift) {
	$cmd = "tstore_import --database=$db -m test:res -f $file";
	$out = `$cmd 2>&1`;
	if ($out) {
		print "$cmd: $out";
		next;
	}
	$cmd = "tstore_rebuild_taxonomy --database=$db";
	system($cmd);
	my $rows = $rdql->query(<<EOQ
SELECT ?sol
WHERE (?sol, <rdf:type>, <rs:ResultSet>)
$using
EOQ
	);
	print "<p>$file</p>\n";
	for $row (@{$rows}) {
		%cols = %{$row};
		&printSet($cols{'?sol'});
	}
}

sub printSet {
	local($uri) = @_;

	my @resvar = ();

	my $rows = $rdql->query(<<EOQ
SELECT ?var
WHERE ($uri, <rs:resultVariable>, ?var)
$using
EOQ
);
	print "<table border>\n";
	print "<tr>";
	for $row (@{$rows}) {
		%cols = %{$row};
                $var = &valof($cols{'?var'});
		print "<th>".valof($var)."</th>";
		push @resvar, $var;
	}
	print "</tr>\n";

	my %resrow;

#	$rows = $rdql->query(<<EOQ
#SELECT ?sol, ?var, ?val
#WHERE (?sol, <rdf:type>, <rs:ResultSolution>)
#      (?sol, <rs:binding>, ?binding)
#      (?binding, <rdf:type>, <rs:ResultBinding>)
#      (?binding, <rs:variable>, ?var)
#      (?binding, <rs:value>, ?val)
#$using
#EOQ
#);
	$rows = $rdql->query(<<EOQ
SELECT ?sol, ?var, ?val
WHERE (?sol, <rs:binding>, ?binding)
      (?binding, <rs:variable>, ?var)
      (?binding, <rs:value>, ?val)
$using
EOQ
);
	my $rr;

	for $row (@{$rows}) {
		my %cols = %{$row};
		my $sol = $cols{'?sol'};
		my $var = $cols{'?var'};
		my $val = $cols{'?val'};
		if ($resrow{$sol}) {
			$rr = $resrow{$sol};
			$rr->{valof($var)} = $val;
		} else {
			$rr = {};
			$resrow{$sol} = $rr;
			$rr->{valof($var)} = $val;
		}
		
		#print "------- $sol $var $val\n";
	}
	for $k (sort keys %resrow) {
		print "<tr>";
		$rr = $resrow{$k};
		for $var (@resvar) {
			if ($rr->{$var}) {
				print "<td>".escape($rr->{$var})."</td>";
			} else {
				print "<td>NULL</td>";
			}
		}
		print "</tr>\n";
	}
		
	print "</table>\n";
}

sub valof {
	local ($v) = @_;

	$v =~ s/^<(.*)>$/$1/;
	$v =~ s/^"(.*)"$/$1/;

	return $v;
}

sub escape {
	local ($v) = @_;

	$v =~ s/&/\&amp;/g;
	$v =~ s/</\&lt;/g;
	$v =~ s/>/\&gt;/g;

	return $v;
}

