Bug #114815 Prepared statement in stored procedure - error on util.checkForServerUpgrade
| Submitted: | 29 Apr 2024 12:15 | Modified: | 11 Dec 2024 19:15 |
|---|---|---|---|
| Reporter: | Przemyslaw Malkowski | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | Shell Upgrade Checker | Severity: | S3 (Non-critical) |
| Version: | 8.0.36 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | upgrade | ||
[7 May 2024 7:30]
MySQL Verification Team
Thanks for the report.
[11 Dec 2024 19:15]
Marek Mlynarski
Posted by developer: Fixed in new syntax check in 9.2.0
[10 Jan 2025 11:43]
Edward Gilmore
Posted by developer: Added the following note to the MySQL Shell 9.2.0 release notes: The util.checkForServerUpgrade check, routineSyntax is renamed to syntax and now uses the SQL version of the target server for the syntax checks. See Utility Checks.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.051 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.
Description: For some reason, the presence of a prepared statement triggers an error "unexpected token" when checking with Upgrade Checker Utility. The very same SP can be created in MySQL 8.0 without any warnings, so I don't see any reason for upgrade check critical event! How to repeat: CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `code` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO t1 values (1,44), (2,30), (3, 50); delimiter // CREATE PROCEDURE sptest2 (IN c1 CHAR(3)) BEGIN PREPARE STMT1 FROM "SELECT COUNT(*) FROM test.t1 WHERE code = ?"; SET @a = c1; EXECUTE STMT1 USING @a; END// delimiter ; call sptest2(44); -- to confirm the SP works as expected MySQL localhost:5754 ssl JS > util.checkForServerUpgrade('root:msandbox@localhost:5754',{"outputFormat":"JSON"}) { "serverAddress": "localhost:5754", "serverVersion": "5.7.44 - MySQL Community Server (GPL)", "targetVersion": "8.0.36", "errorCount": 1, "warningCount": 27, "noticeCount": 2, "summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues.", "checksPerformed": [ { "id": "oldTemporalCheck", "title": "Usage of old temporal type", "status": "OK", "detectedProblems": [] }, { "id": "routinesSyntaxCheck", "title": "MySQL 8.0 syntax check for routine-like objects", "status": "OK", "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.", "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html", "detectedProblems": [ { "level": "Error", "dbObject": "test.sptest2", "description": "at line 2,28: unexpected token '\"SELECT COUNT(*) FROM test.t1 WHERE code = ?\"'" } ] }, (...) Suggested fix: The upgrade checker util needs to be corrected to not print this false positive.