7.2.5. Using isql as a General Purpose Test Driver
isql can be used to automatically run SQL scripts which execute statements, perform simple tests on the results and generate a report. This can be used to automate tests of stored procedures or to benchmark them.
Also note the use of & at the end of a command to spawn multiple isql instances on the background. This is useful for automatically creating concurrency situations for testing.
Consider the script:
drop table tt;
create table tt (id int identity not null primary key, ctr int);
create procedure tt_fill (in n int)
{
declare ctr int;
ctr := 0;
while (ctr < n){
insert into tt (ctr) values (ctr);
ctr := ctr + 1;
}
}
tt_fill (10000) &
tt_fill (10000) &
tt_fill (10000) &
tt_fill (10000) &
wait_for_children;
select count (*), count (distinct ctr) from tt;
echo both $if $equ $last[1] 40000 "PASSED" "***FAILED";
echo both " Inserted " $last[1] " rows\n";
echo both $if $equ $last[2] 10000 "PASSED" "***FAILED";
echo both " Inserted " $last[2] " distinct ctr values\n";
Now suppose the above text were in the file test.sql. The command
isql 1111 errors=stdout <test.sql >test.out
would print the diagnostics to the standard error and the full trace to test.out. Note the errors=stdout would direct the error message for no table in the initial drop table to the text.out file, so the console would just print:
PASSED Inserted 40000 rows PASSED Inserted 10000 distinct ctr values