Subject: | fail.t - the "Missing table" test is failing when run on MS SQL |
fail.t is failing the "Missing table" test that executes the following:
select * from sysusers
select * from no_such_table
select * from master..sysdatabases
The idea of the test is that the execute() should fail due to the middle SELECT from a non-existent table. However, it doesn't fail because execute() only goes as far as checking the result from the "sysusers" SELECT and never notices that the next SELECT actually failed.
More specifically,
* syb_st_execute() calls cmd_execute() and then st_next_result() to look at the first result
* st_next_result() calls ct_results() in a loop, but exits the loop after one iteration; in that first iteration it determines the column types of the first result set; it then breaks out of the loop with "goto Done"
* we never get to see the result from the second SELECT statement (which contains the error "Invalid object name 'no_such_table'"
I wonder if this works differently with Sybase, but with MS SQL and FreeTDS (which I'm using) it seems impossible for DBD-Sybase to catch the error for the above.
Maybe the test should omit the first select statement? (Then it passes.)
select * from no_such_table
select * from master..sysdatabases
Sam