Hi, Alexey! On Mar 27, Alexey Botchkov wrote:
Hi, Sergei.
Why does embedded fail while a normal client-server protocol is ok with that?
The difference is that the client checks the server status twice during execution - after the metadata reading and after the actual data. That SERVER_STATUS_CURSOR_EXISTS is returned on the 'reading data' stage and the usual client just skips it. But for the embedded server that status is same in both cases. And the 'reading metadata' part crashes when it sees that server status. It's in the prepare_to_fetch_result() called from mysql_stmt_execute().
Yes, I see that prepare_to_fetch_result() checks for SERVER_STATUS_CURSOR_EXISTS. Why is it not returned for 'reading metadata'? Where does the client skip it?
I see no reason to store both statuses for the embedded server just to imitate the usual client's behaviour. It's better not to return the misleading status in this case.
I agree about not returning the misleading status, but I'd still like to understand why the regular client works. Regards, Sergei