Bug #100279 CLIENT_DEPRECATE_EOF capability wrong design
Submitted: 21 Jul 2020 12:49 Modified: 21 Jul 2020 13:39
Reporter: diego dupin (OCA) Email Updates:
Status: Unsupported Impact on me:
None 
Category:MySQL Server Severity:S3 (Non-critical)
Version: OS:Any
Assigned to: CPU Architecture:Any
Tags: CLIENT_DEPRECATE_EOF

[21 Jul 2020 12:49] diego dupin
Description:
since 5.7, capability CLIENT_DEPRECATE_EOF is present on server, but design has some flows: connectors don't have intermediate EOF anymore on resultset. 
This intermediate did have some interesting pieces of information in status_flags like SERVER_MORE_RESULTS_EXIST, SERVER_PS_OUT_PARAMS.

When using binary protocol, calling a stored procedure, output parameters are sent as a resultset. This resultset was identified with intermediate EOF. This piece of information is now present on ending ok_packet only, AFTER having read the rows. 

CLIENT_DEPRECATE_EOF capability cannot be set by connector without creating lots of issues. This makes CLIENT_SESSION_TRACK capability truncated for  resultset. 

How to repeat:

example that works without CLIENT_DEPRECATE_EOF, but that cannot with CLIENT_DEPRECATE_EOF set: 

mysql_stmt_execute(stmt);
if (stmt->mysql->server_status & SERVER_PS_OUT_PARAMS)
  process_out_params(stmt);
else
  process_data_params(stmt);

Same with SERVER_MORE_RESULTS_EXIST:
mysql_stmt_execute(stmt);
if (mysql_stmt_more_results(stmt))
  printf("this line will never be printed with DEPRECATE_EOF\n");
[21 Jul 2020 13:39] MySQL Verification Team
Hi Mr. q,

Thank you for your bug report.

End-Of-File is truly not used any more. However, all the functionality is still present, but that requires rewriting your application.

Since this is a decision that can not be reverted back, we truly do not see what we can do regarding your report.