Bug #111833 couldn't distinguish a normal resultset from an OUT parameter set
Submitted: 20 Jul 2023 22:09 Modified: 21 Jul 2023 13:06
Reporter: Mark Simonyi Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version:all OS:Any
Assigned to: CPU Architecture:Any

[20 Jul 2023 22:09] Mark Simonyi
Description:
Client couldn't distinguish a normal resultset from an OUT parameter set , when 

CLIENT_DEPRECATE_EOF capability flag is set , because "a EOF_Packet will be transmitted, provided that CLIENT_DEPRECATE_EOF is not set." of COM_STMT_PREPARE_OK 

How to repeat:
bind out parameter.

Suggested fix:
If CLIENT_DEPRECATE_EOF capability flag is set, then send Ok_packet, or send EOF_packet . Ok_packet/ EOF_packet following Column Definition packets.
[20 Jul 2023 22:19] Mark Simonyi
because of  this bug, MySQL Connector/J  have to use session variable get out parameter.  it's stupid , Client must know how to distinguish a normal resultset from an OUT parameter set .
[20 Jul 2023 22:24] Mark Simonyi
now : 
num_params * Column Definition
if (not capabilities & CLIENT_DEPRECATE_EOF) {
EOF_Packet
} –CLIENT_DEPRECATE_EOF

Suggested fix : 

num_params * Column Definition
if (not capabilities & CLIENT_DEPRECATE_EOF) {
EOF_Packet
}else{
  OK_PACKET
}

please, fastly ,God bless you
[20 Jul 2023 22:27] Mark Simonyi
sorry , not num_params * Column Definition , it's num_columns * Column Definition.
[20 Jul 2023 22:38] Mark Simonyi
https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_com_stmt_prepare.html#sect...

now : 
num_columns * Column Definition
if (not capabilities & CLIENT_DEPRECATE_EOF) {
EOF_Packet
} –CLIENT_DEPRECATE_EOF

Suggested fix : 

num_columns * Column Definition
if (not capabilities & CLIENT_DEPRECATE_EOF) {
EOF_Packet
}else{
  OK_PACKET
}

please, fastly ,God bless you,all driver developer of the world love you.
[21 Jul 2023 13:06] MySQL Verification Team
HI Mr. Simonyi,

Thank you for your bug report.

However, let us inform you that this is a forum for the bug reports with fully repeatable test cases. We do not see such a test case in your report, at all. 

Next, your description of the problem is very vague and imprecise. Repeatable test case is, however, much more important. Provided that it is followed with a detailed explanation on why is that wrong.

Also, you have set a category at "Server", which does not correspond with your unclear description of the problem.

Also one last bit of information:
------------------------------------------------------------------------------------

Client no longer needs EOF_Packet and will use OK_Packet instead.

See also
net_send_ok()
Server

Can send OK after a Text Resultset.

Client

Expects an OK_Packet (instead of EOF_Packet) after the resultset rows of a Text Resultset.

Background

To support CLIENT_SESSION_TRACK, additional information must be sent after all successful commands. Although the OK_Packet is extensible, the EOF_Packet is not due to the overlap of its bytes with the content of the Text Resultset Row.

Therefore, the EOF_Packet in the Text Resultset is replaced with an OK_Packet. EOF_Packet is deprecated as of MySQL 5.7.5.

-------------------------------------------------------------------------------

Hence, EOF packet is deprecated as of MySQL 5.7.5.

Can't repeat.