Bug #49878 delimiter under false 'if' makes mysqltest test fail with 'Missing end of block'
Submitted: 22 Dec 2009 14:26 Modified: 17 Jun 2010 19:39
Reporter: Elena Stepanova Email Updates:
Status: Closed Impact on me:
None 
Category:Tools: MTR / mysql-test-run Severity:S3 (Non-critical)
Version: OS:Any
Assigned to: Bjørn Munch CPU Architecture:Any

[22 Dec 2009 14:26] Elena Stepanova
Description:
If I put delimiter commands under 'if' condition, and the condition has false value, the entire test fails with 'Missing end of block' error. The same test with true 'if' condition works all right (can be checked by changing '0' to '1' in 'How to repeat' section).

How to repeat:
# t/test2.test

if (0)
{
        delimiter //;
        SELECT @@version //
        delimiter ;//
}
--echo # Outside

# perl ./mysql-test-run.pl test2

Suggested fix:
Apparently, delimiter commands are (partially?) executed even if the condition is false, which should not happen.
[22 Dec 2009 20:38] Elena Stepanova
# Partial workaround (note the commented line after the 2nd delimiter). 
# Not sure about the exact scope of the workaround -- a line ending with ';'
# helps here and in some real-life situations, but not always.

if (0)
{
        delimiter //;
        SELECT @@version //
        delimiter ;//
        #;
}
--echo # Outside
[22 Dec 2009 22:26] Elena Stepanova
# Another workaround, seems to be more reliable

if (0)
{
        --delimiter //
        SELECT @@version //
        --delimiter ;
}
--echo # Outside
[12 Jan 2010 12:42] Bjørn Munch
Actually, this happens because the delimiter commands are *not* executed in the false if, and so mysqltest does not recognize the last command ending in // and thus the end of the block.

A workaround will be to make sure the last line in the if() is a command that ends with the "old" delimiter which was in use before the block. "sleep 0;" could be used as a noop.

However, there are some cases where commands within the block have to be (partly) executed even if the condition is false, at least if the if() is inside a while(). This means it has to interpret also the delimiter commands. I'll see if I can find a way to do that...
[12 Jan 2010 14:26] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/96617

2876 Bjorn Munch	2010-01-12
      Bug #49878 delimiter under false 'if' makes mysqltest test fail with 'Missing end of block'
      delimiter not executed so does not recognize end of block
      Always execute delimiter command, revert after false if() block.
[19 Jan 2010 17:31] Magnus Blåudd
Ok
[20 Jan 2010 13:19] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/97557

2879 Bjorn Munch	2010-01-20
      Bug #49878 delimiter under false 'if' makes mysqltest test fail with 'Missing end of block'
      delimiter not executed so does not recognize end of block
      Always execute delimiter command, revert after false if() block.
[20 Jan 2010 15:53] Bjørn Munch
Pushed to 5.1-mtr, trunk-mtr, next-mr-mtr, 6.0-codebase-mtr
[20 Feb 2010 9:31] Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20100220092844-jh07ayojyxn8uh9p) (version source revid:bjorn.munch@sun.com-20100120153513-b70e3bs7e06jfvf3) (merge vers: 6.0.14-alpha) (pib:16)
[20 Feb 2010 9:33] Bugs System
Pushed into 5.5.3-m2 (revid:alik@sun.com-20100220092622-wvhh1vfy5tjq4mhu) (version source revid:bjorn.munch@sun.com-20100120133748-0aiuazzbcqje8my0) (merge vers: 5.5.1-m2) (pib:16)
[20 Feb 2010 9:36] Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100220092730-paoo5t9gcajs5dq8) (version source revid:bjorn.munch@sun.com-20100120154314-icr9oiinm588c3sk) (pib:16)
[23 Feb 2010 2:14] Paul DuBois
Changes to test suite. No changelog entry needed.

Setting report to Need Merge pending push to 5.1.x, Celosia.
[1 Mar 2010 8:45] Bugs System
Pushed into 5.1.45 (revid:joro@sun.com-20100301083827-xnimmrjg6bh33o1o) (version source revid:azundris@mysql.com-20100222175719-viuh0f3gdsrkgv0r) (merge vers: 5.1.45) (pib:16)
[1 Mar 2010 16:34] Paul DuBois
No changelog entry needed.
[17 Jun 2010 11:57] Bugs System
Pushed into 5.1.47-ndb-7.0.16 (revid:martin.skold@mysql.com-20100617114014-bva0dy24yyd67697) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[17 Jun 2010 12:36] Bugs System
Pushed into 5.1.47-ndb-6.2.19 (revid:martin.skold@mysql.com-20100617115448-idrbic6gbki37h1c) (version source revid:martin.skold@mysql.com-20100609140708-52rvuyq4q500sxkq) (merge vers: 5.1.45-ndb-6.2.19) (pib:16)
[17 Jun 2010 13:23] Bugs System
Pushed into 5.1.47-ndb-6.3.35 (revid:martin.skold@mysql.com-20100617114611-61aqbb52j752y116) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)