Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-744

LP:986731 - sql-bench/test-table-elimination fails with SQL syntax error in LOCK TABLES if executed with --lock-tables

    Details

      Description

      Initially reported in the KB as http://kb.askmonty.org/en/test-table-elimination-fails.

      If sql-bench/test-table-elimination is started with --lock-tables (or --fast), it attempts to execute the following command:

      LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE

      and reasonably fails with a syntax error, as it is not a valid statement: each table should be followed by a lock type separately.

      The following change fixes this particular problem

      95c95
      < do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE");

      > do_query($dbh,"LOCK TABLES elim_facts WRITE, elim_attr1 WRITE, elim_attr2 WRITE");
      207c207
      < do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE");

      > do_query($dbh,"LOCK TABLES elim_facts WRITE, elim_attr1 WRITE, elim_attr2 WRITE");

      but then another one reveals:

      testing full facts facts table
      Error occured with execute(select * from elim_current_facts where id=30246.3207346651)
      -> Table 'F' was not locked with LOCK TABLES

      This happens because the view elim_current_facts addresses the table elim_facts through its alias F, which is not locked explicitly. So, I also added the view itself into the LOCK statement:

      95c95
      < do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE");

      > do_query($dbh,"LOCK TABLES elim_current_facts WRITE, elim_facts WRITE, elim_attr1 WRITE, elim_attr2 WRITE");
      207c207
      < do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE");

      > do_query($dbh,"LOCK TABLES elim_current_facts WRITE, elim_facts WRITE, elim_attr1 WRITE, elim_attr2 WRITE");

      Now it passes.

      bzr version-info
      revision-id: <email address hidden>
      date: 2012-04-06 13:31:33 +0500
      build-date: 2012-04-22 04:12:58 +0400
      revno: 3146

      According to the script code, should also be reproducible on 5.2-5.5.

      To reproduce,

      • start MariaDB server;
      • run perl test-table-elimination --socket=<path to socket> --lock-tables

        Attachments

          Activity

            People

            • Assignee:
              psergey Sergei Petrunia
              Reporter:
              elenst Elena Stepanova
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: