Bug #31059 MySQL CLI parser bug 1

Submitted: 17 Sep 2007 14:44 Modified: 18 Sep 2007 7:49
Reporter: d di (Basic Quality Contributor) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Command-line Clients Severity:S2 (Serious)
Version:any OS:Any
Assigned to: CPU Architecture:Any
Tags: qc

[17 Sep 2007 14:44] d di
Description:
The MySQL CLI is a bit stupid.

Consider two remarks, where one contains a version-conditional MySQL statement:

A:
====================
/*Dinkey-doodle;*/
SELECT VERSION();
====================

vs
B:
====================
/*!30000 SELECT VERSION();*/
SELECT VERSION();
====================

Execute them via the CLI.

While executing A, the CLI disregards the semicolon inside the remark:

mysql> /*Dinkey-doodle;*/
mysql> SELECT VERSION();
+-------------------------+
| VERSION()               |
+-------------------------+
| 5.0.37-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)

While executing B on the other hand, the CLI, probably recognizing the conditional sql, stops at the semicolon and executes the sentence on the server.  Presumably it snips the /*! part before executing, at least it would seem so, since...
mysql> /*!40000 SELECT VERSION();*/
+-------------------------+
| VERSION()               |
+-------------------------+
| 5.0.37-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)
    -> SELECT VERSION();
ERROR 1064 (42000): You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version
 for the right syntax to use near '*/\nSELECT VERSION()' at line 1

...the server barfs at the */ part, thus the CLI must be pretending that it is a part of the next SQL sentence.

One effect of this is that standards-compliant (ANSI) SQL files generated by HeidiSQL cannot be imported by a MySQL Server in ANSI mode using the CLI.

How to repeat:
Execute a conditional comment with a semicolon inside; notice that the CLI stops parsing after the semicolon instead of after the end of the conditional comment.

Suggested fix:
Fix the CLI so it considers:
  /*!40000 SELECT VERSION();*/
as one SQL sentence, instead of considering:
  /*!40000 SELECT VERSION();
as one SQL sentence.
[17 Sep 2007 16:26] MySQL Verification Team
Thank you for the bug report.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.053 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.