
|
If you were logged in you would be able to see more operations.
|
|
|
| Planning Status: |
Unspecified
|
|
When "lazy port" feature is active (i.e. both client and server version is 2.1 or higher) "invalid SQLDA" error could be raised.
It could happen if one transport-level packet contain both op_execute and op_fetch logical packets.
|
|
Description
|
When "lazy port" feature is active (i.e. both client and server version is 2.1 or higher) "invalid SQLDA" error could be raised.
It could happen if one transport-level packet contain both op_execute and op_fetch logical packets. |
Show » |
|
1. SRVR_multy_thread :
port->receive() // op_execute received
xdr_sql_blr
statement->rsr_format = statement->rsr_bind_format
2. SRVR_multy_thread :
port->receive() // op_fetch received
xdr_sql_blr
statement->rsr_format = statement->rsr_select_format
3. loopThread :
process_packet // op_execite processed
rem_port::execute_statement
in_msg_length = statement->rsr_format->fmt_length; // here statement->rsr_format == statement->rsr_select_format
DSQL_execute (... in_msg_length... )
map_in_out
parse_blr
and error raised here :
if (*blr++ != (UCHAR) blr_end || offset != msg_length)
{
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-804) <<
Arg::Gds(isc_dsql_sqlda_err));
}
Make server to not call port->receive() if port already have packet recieved but not processed.
So, order of execution will be as follows :
1. SRVR_multy_thread :
port->receive() // op_execute received
xdr_sql_blr
statement->rsr_format = statement->rsr_bind_format
2. loopThread :
process_packet // op_execute processed
3. loopThread :
port->receive() // op_fetch received
xdr_sql_blr
statement->rsr_format = statement->rsr_select_format