[MDEV-3295] LP:995501 - mysqltest attempts to parse Perl code inside a block with false condition, gets confused and throws wrong errors Created: 2012-05-06  Updated: 2015-02-02  Resolved: 2012-10-04

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Trivial
Reporter: Elena Stepanova Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: Launchpad

Attachments: XML File LPexportBug995501.xml    

 Description   

The following test case

let $run = 0;
if ($run)
{
  --perl
  foreach (1)
  

{     print "In perl\n";   }
  EOF
  SELECT 1;
}
--echo # Done

fails with

mysqltest: At line 9: query 'EOF
SELECT 1' failed: 1064: 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 'EOF
SELECT 1' at line 1

Reproducible on MariaDB 5.1-5.5, MySQL 5.1-5.6.


The problem, how I understand it from a quick look, is that mysqltest attempts to parse the code even inside --perl / EOF block; but it fails because it doesn't expect any 'foreach'es or other ways to start a block except for 'if' or 'while'; so it does not notice a start of the inner block, and the rest of parsing goes all wrong.

It only happens when the outer block is not to be executed. For example, this works all right:

let $run = 1;
if ($run)
{
  --perl
  foreach (1)
  {    print "In perln";  }

  EOF
  SELECT 1;
}
--echo # Done

The right approach seems to be totally ignore everything from the beginning of a perl block and till its eof string. Sorry for not providing a patch so far, during the brief investigation I didn't notice an obvious way to fix it, it would require deeper digging from
my side, while maybe somebody else would know right away.

The problem is a bit of pain for writing reasonably complicated test cases, but so far it seems I can work around it, so I'm setting importance to 'Low' for now.



 Comments   
Comment by Elena Stepanova [ 2012-05-06 ]

Re: mysqltest attempts to parse Perl code inside a block with false condition, gets confused and throws wrong errors
Also filed in JIRA as https://mariadb.atlassian.net/browse/MDEV-256

Comment by Rasmus Johansson (Inactive) [ 2012-06-02 ]

Launchpad bug id: 995501

Generated at Thu Feb 08 06:47:38 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.