1. 12 May, 2007 1 commit
    • unknown's avatar
      Fixed bug #28375: a query with an NOT IN subquery predicate may cause · d886ea8f
      unknown authored
      a crash when the left operand of the predicate is evaluated to NULL.
      It happens when the rows from the inner tables (tables from the subquery)
      are accessed by index methods with key values obtained by evaluation of
      the left operand of the subquery predicate. When this predicate is
      evaluated to NULL an alternative access with full table scan is used
      to check whether the result set returned by the subquery is empty or not.
      The crash was due to the fact the info about the access methods used for
      regular key values was not properly restored after a switch back from the
      full scan access method had occurred.
      The patch restores this info properly.
      The same problem existed for queries with IN subquery predicates if they
      were used not at the top level of the queries.
      
      
      mysql-test/r/subselect3.result:
        Added a test case for bug #28375.
      mysql-test/t/subselect3.test:
        Added a test case for bug #28375.
      sql/item_subselect.cc:
        Fixed bug #28375: a query with an NOT IN subquery predicate may cause
        a crash when the left operand of the predicate is evaluated to NULL.
        It happens when the rows from the inner tables (tables from the subquery)
        are accessed by index methods with key values obtained by evaluation of
        the left operand of the subquery predicate. When this predicate is
        evaluated to NULL an alternative access with full table scan is used
        to check whether the result set returned by the subquery is empty or not.
        The crash was due to the fact the info about the access methods used for
        regular key values was not properly restored after a switch back from the
        full scan access method had occurred.
        The patch restores this info properly.
      sql/sql_select.h:
        Fixed bug #28375: a query with an NOT IN subquery predicate may cause
        a crash when the left operand of the predicate is evaluated to NULL.
        In the JOIN_TAB structure two fields have been added to save info about
        index methods used to access the subquery rows. The saved info is used
        after a switch back from the alternative full scan access method has 
        occurred. The full scan is used when the left operand of the subquery
        predicate is evaluated to NULL.
      d886ea8f
  2. 11 May, 2007 8 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 50c5b549
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/27878-bug-5.0-opt-mysql
      
      
      50c5b549
    • unknown's avatar
      grant.result, grant.test: · f0ddabc5
      unknown authored
        Corrected test case for the bug#27878.
      
      
      mysql-test/t/grant.test:
        Corrected test case for the bug#27878.
      mysql-test/r/grant.result:
        Corrected test case for the bug#27878.
      f0ddabc5
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0-opt · bd311c0c
      unknown authored
      into  mysql.com:/home/hf/work/27957/my50-27957
      
      
      bd311c0c
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 86dccd92
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/27878-bug-5.0-opt-mysql
      
      
      86dccd92
    • unknown's avatar
      Bug#27878: Unchecked privileges on a view referring to a table from another · 04efdb15
      unknown authored
      database.
      
      If a user has a right to update anything in the current database then the 
      access was granted and further checks of access rights for underlying tables
      wasn't done correctly. The check is done before a view is opened and thus no
      check of access rights for underlying tables can be carried out.
      This allows a user to update through a view a table from another database for
      which he hasn't enough rights.
      
      Now the mysql_update() and the mysql_test_update() functions are forces
      re-checking of access rights after a view is opened.
      
      
      mysql-test/t/grant.test:
        Added a test case for the bug#27878: Unchecked privileges on a view referring to a table from another database.
      mysql-test/r/grant.result:
        Added a test case for the bug#27878: Unchecked privileges on a view referring to a table from another database.
      sql/sql_update.cc:
        Bug#27878: Unchecked privileges on a view referring to a table from another 
        database.
        Now the mysql_update() function forces re-checking of access rights after 
        the view is opened.
      sql/sql_prepare.cc:
        Bug#27878: Unchecked privileges on a view referring to a table from another 
        database.
        Now the mysql_test_update() function forces re-checking of access rights after
        the view is opened.
      04efdb15
    • unknown's avatar
      merging fixes · 8bbe6f23
      unknown authored
      
      mysql-test/r/type_datetime.result:
        result fixed
      mysql-test/t/type_datetime.test:
        testcase fixed
      sql/item_func.cc:
        my_decimal_length_to_precision used
      sql/my_decimal.h:
        merging fix
      8bbe6f23
    • unknown's avatar
      Merge mysql.com:/home/hf/work/27921/my50-27921 · 78ed69c3
      unknown authored
      into  mysql.com:/home/hf/work/27957/my50-27957
      
      
      mysql-test/r/cast.result:
        Auto merged
      sql/item_func.cc:
        Auto merged
      sql/item_func.h:
        Auto merged
      sql/my_decimal.h:
        merging
      78ed69c3
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0-opt · 563b1297
      unknown authored
      into  mysql.com:/home/hf/work/27957/my50-27957
      
      
      sql/item_func.cc:
        Auto merged
      563b1297
  3. 10 May, 2007 3 commits
    • unknown's avatar
      Fixed bug #28000. · 36190568
      unknown authored
      Bug occurs in INSERT IGNORE ... SELECT ... ON DUPLICATE KEY UPDATE
      statements, when SELECT returns duplicated values and UPDATE clause
      tries to assign NULL values to NOT NULL fields.
      NOTE: By current design MySQL server treats INSERT IGNORE ... ON
      DUPLICATE statements as INSERT ... ON DUPLICATE with update of
      duplicated records, but MySQL manual lacks this information.
      After this fix such behaviour becomes legalized.
      
      The write_record() function was returning error values even within
      INSERT IGNORE, because ignore_errors parameter of
      the fill_record_n_invoke_before_triggers() function call was
      always set to FALSE. FALSE is replaced by info->ignore.
      
      
      sql/sql_insert.cc:
        Fixed bug #28000:
        The write_record() function was returning error values even within
        INSERT IGNORE, because ignore_errors parameter of
        the fill_record_n_invoke_before_triggers() function call was
        always set to FALSE. FALSE is replaced by info->ignore.
      mysql-test/t/insert_update.test:
        Added test case for bug #28000.
      mysql-test/r/insert_update.result:
        Added test case for bug #28000.
      36190568
    • unknown's avatar
      Fixed bug #28189: in some rare cases optimizer preferred a more expensive · 184cc3b5
      unknown authored
      ref access to a less expensive range access. 
      This occurred only with InnoDB tables.
      
      
      mysql-test/r/innodb_mysql.result:
        Added a test case for bug #28189.
      mysql-test/t/innodb_mysql.test:
        Added a test case for bug #28189.
      184cc3b5
    • unknown's avatar
      bug 27921 (Views ignore precision for CAST) · a6da564a
      unknown authored
      test result fixed
      
      
      a6da564a
  4. 09 May, 2007 3 commits
    • unknown's avatar
      Bug #27921 View ignores precision for CAST() · f2a52dd0
      unknown authored
      Item_decimal_typecast::print properly implemented
      
      
      mysql-test/r/view.result:
        Bug #27921 View ignores precision for CAST()
        test result
      mysql-test/t/view.test:
        Bug #27921 View ignores precision for CAST()
        test case
      sql/field.cc:
        zero decimals handling unified
      sql/item_create.cc:
        Bug #27921 View ignores precision for CAST()
        create_func_cast parameters changed, zero precision handling unified
      sql/item_create.h:
        Bug #27921 View ignores precision for CAST()
        create_func_cast parameters changed
      sql/item_func.cc:
        Bug #27921 View ignores precision for CAST() 
        Item_decimal_typecast::print properly implemented
      sql/item_func.h:
        Bug #27921 View ignores precision for CAST()
        max_length counting fixed
      sql/my_decimal.h:
        Bug #27921 View ignores precision for CAST()
        my_decimal_trim() implemented to unify zero precision handling
      sql/sql_yacc.yy:
        Bug #27921 View ignores precision for CAST()
        create_func_cast calls simplified
      f2a52dd0
    • unknown's avatar
      Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect · 82b7c543
      unknown authored
      Missing check for overflow added to the Item_decimal_typecast::val_decimal
      
      
      include/decimal.h:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        decimal_intg() declaration
      mysql-test/r/cast.result:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        result fixed
      mysql-test/r/type_newdecimal.result:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        test result
      mysql-test/t/type_newdecimal.test:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        test case added
      sql/item_func.cc:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        now we check for possible ovreflow in Item_decimal_typecast::val_decimal
      sql/my_decimal.h:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        my_decimal_intg() implemented
      strings/decimal.c:
        Bug #27957 cast as decimal does not check overflow, also inconsistent with group, subselect
        decimal_intg() implemented
      82b7c543
    • unknown's avatar
      loaddata.result, loaddata.test: · ba9657bc
      unknown authored
        A test case is corrected.
      
      
      mysql-test/t/loaddata.test:
        A test case is corrected.
      mysql-test/r/loaddata.result:
        A test case is corrected.
      ba9657bc
  5. 08 May, 2007 2 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c863f1ee
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/27670-bug-5.0-opt-mysql
      
      
      c863f1ee
    • unknown's avatar
      Bug#27670: LOAD DATA does not set CURRENT_TIMESTAMP default value for a · 80788a34
      unknown authored
      TIMESTAMP field when no value has been provided.
      
      The LOAD DATA sets the current time in the TIMESTAMP field with
      CURRENT_TIMESTAMP default value when the field is detected as a null.
      But when the LOAD DATA command loads data from a file that doesn't contain
      enough data for all fields then the rest of fields are simply set to null
      without any check. This leads to no value being inserted to such TIMESTAMP
      field.
      
      Now the read_sep_field() and the read_fixed_length() functions set current
      time to the TIMESTAMP field with CURRENT_TIMESTAMP default value in all cases
      when a NULL value is loaded to the field.
      
      
      mysql-test/t/loaddata.test:
        Added a test case for the bug#27670: LOAD DATA does not set CURRENT_TIMESTAMP
        default value for a TIMESTAMP field when no value has been provided.
      mysql-test/r/loaddata.result:
        Added a test case for the bug#27670: LOAD DATA does not set CURRENT_TIMESTAMP
        default value for a TIMESTAMP field when no value has been provided.
      sql/sql_load.cc:
        Bug#27670: LOAD DATA does not set CURRENT_TIMESTAMP default value for a
        TIMESTAMP field when no value has been provided.
        Now the read_sep_field() and the read_fixed_length() functions set current
        time to the TIMESTAMP field with CURRENT_TIMESTAMP default value in all cases
        when a NULL value is loaded to the field.
      80788a34
  6. 07 May, 2007 12 commits
    • unknown's avatar
      be5ff3e2
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 2626d024
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/27759-bug-5.0-opt-mysql
      
      
      2626d024
    • unknown's avatar
      Additional fix for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions. · dd3f1be8
      unknown authored
      
      mysql-test/t/type_datetime.test:
        Additional test case for the bug#27759.
      sql/item_func.h:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        Now the Item_func_min_max::result_as_longlong() returns TRUE when LEAST()
        compares DATE/DATETIME values. This allows caller to obtain correct integer
        values through the val_int() function.
      dd3f1be8
    • unknown's avatar
      Merge gleb.loc:/home/uchum/work/bk/mysql-5.0-opt · fabad719
      unknown authored
      into  gleb.loc:/home/uchum/work/bk/mysql-5.0-opt-27954
      
      
      fabad719
    • unknown's avatar
      Fixed bug #27954. · 35659a28
      unknown authored
      This bug affects multi-row INSERT ... ON DUPLICATE into table
      with PRIMARY KEY of AUTO_INCREMENT field and some additional UNIQUE indices.
      If the first row in multi-row INSERT contains duplicated values of UNIQUE
      indices, then following rows of multi-row INSERT (with either duplicated or
      unique key field values) may me applied to _arbitrary_ records of table as
      updates.
      This bug was introduced in 5.0. Related code was widely rewritten in 5.1, and
      5.1 is already free of this problem. 4.1 was not affected too.
      
      When updating the row during INSERT ON DUPLICATE KEY UPDATE, we called
      restore_auto_increment(), which set next_insert_id back to 0, but we
      forgot to set clear_next_insert_id back to 0.
      restore_auto_increment() function has been fixed.
      
      
      sql/sql_class.h:
        Fixed bug #27954.
        Added commentary for THD::clear_next_insert_id variable.
      sql/handler.cc:
        Fixed bug #27954.
        When updating the row during INSERT ON DUPLICATE KEY UPDATE, we called
        restore_auto_increment(), which set next_insert_id back to 0, but we
        forgot to set clear_next_insert_id back to 0.
        restore_auto_increment() function has been fixed.
      mysql-test/t/insert_update.test:
        Added test case for bug #27954.
      mysql-test/r/insert_update.result:
        Added test case for bug #27954.
      35659a28
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 44e54a30
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/28133-bug-5.0-opt-mysql
      
      
      sql/item_cmpfunc.cc:
        Auto merged
      mysql-test/r/type_datetime.result:
        SCCS merged
      mysql-test/t/type_datetime.test:
        SCCS merged
      44e54a30
    • unknown's avatar
      Bug#28133: Wrong DATE/DATETIME comparison in IN() function. · 0fd2b3dd
      unknown authored
      The IN function was comparing DATE/DATETIME values either as ints or as
      strings. Both methods have their disadvantages and may lead to a wrong
      result.
      
      Now IN function checks whether all of its arguments has the STRING result
      types and at least one of them is a DATE/DATETIME item. If so it uses either
      an object of the in_datetime class or an object of the cmp_item_datetime
      class to perform its work. If the IN() function arguments are rows then
      row columns are checked whether the DATE/DATETIME comparator should be used
      to compare them.
      The in_datetime class is used to find occurence of the item to be checked
      in the vector of the constant DATE/DATETIME values. The cmp_item_datetime
      class is used to compare items one by one in the DATE/DATETIME context.
      Both classes obtain values from items with help of the get_datetime_value()
      function and cache the left item if it is a constant one.
      
      
      
      mysql-test/t/type_datetime.test:
        Added a test case for the bug#28133: Wrong DATE/DATETIME comparison in IN() function.
      mysql-test/r/type_datetime.result:
        Added a test case for the bug#28133: Wrong DATE/DATETIME comparison in IN() function.
      mysql-test/r/func_in.result:
        A test case result is corrected after the fix for the bug#28133.
      sql/item_cmpfunc.h:
        Bug#28133: Wrong DATE/DATETIME comparison in IN() function.
        Two DATE/DATETIME comparison classes are added.
        The in_datetime class is used to find occurence of the item to be checked
        in the vector of the constant DATE/DATETIME values. The cmp_item_datetime
        class is used to compare items one by one in the DATE/DATETIME context.
        Both classes obtain values from items with help of the get_datetime_value()
        function and cache the left item if it is a constant one.
      sql/item_cmpfunc.cc:
        Bug#28133: Wrong DATE/DATETIME comparison in IN() function.
        Now IN function checks whether all of its arguments has the STRING result
        types and at least one of them is a DATE/DATETIME item. If so it uses either
        an object of the in_datetime class or an object of the cmp_item_datetime
        class to perform its work. If the IN() function arguments are rows then
        row columns are checked whether the DATE/DATETIME comparator should be used
        to compare them.
      0fd2b3dd
    • unknown's avatar
      item_func.cc: · cc33cf29
      unknown authored
        Fixed compiler warnings.
      
      
      sql/item_func.cc:
        Fixed compiler warnings.
      cc33cf29
    • unknown's avatar
      Merge mysql.com:/d2/hf/mrg/mysql-4.1-opt · 187ccf4b
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-5.0-opt
      
      
      187ccf4b
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0 · 3a04df06
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-5.0-opt
      
      
      sql/item_func.cc:
        Auto merged
      sql/item_func.h:
        Auto merged
      sql/mysql_priv.h:
        Auto merged
      3a04df06
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-4.1 · 30b4f5d0
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-4.1-opt
      
      
      30b4f5d0
    • unknown's avatar
      Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0 · 632e03f8
      unknown authored
      into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
      
      
      632e03f8
  7. 04 May, 2007 11 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · e63cc253
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/27759-bug-5.0-opt-mysql
      
      
      sql/item_func.cc:
        Auto merged
      e63cc253
    • unknown's avatar
      bug #27531: · 359b0e59
      unknown authored
       fixed coverage of out-of-mem errors
      
      
      359b0e59
    • unknown's avatar
      Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions. · 99bde6d9
      unknown authored
      The LEAST/GREATEST functions compared DATE/DATETIME values as
      strings which in some cases could lead to a wrong result.
      
      A new member function called cmp_datetimes() is added to the
      Item_func_min_max class. It compares arguments in DATETIME context
      and returns index of the least/greatest argument.
      The Item_func_min_max::fix_length_and_dec() function now detects when
      arguments should be compared in DATETIME context and sets the newly
      added flag compare_as_dates. It indicates that the cmp_datetimes() function
      should be called to get a correct result.
      Item_func_min_max::val_xxx() methods are corrected to call the
      cmp_datetimes() function when needed.
      Objects of the Item_splocal class now stores and reports correct original
      field type.
      
      
      mysql-test/t/type_datetime.test:
        Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      mysql-test/r/type_datetime.result:
        Added a test case for the bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
      mysql-test/r/sp-vars.result:
        A test case result corrected after the fix for the bug#27759.
      sql/mysql_priv.h:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        Added the prototype of the get_datetime_value() function.
      sql/item_func.h:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        A new member function called cmp_datetimes() is added to the
        Item_func_min_max class.
      sql/item_func.cc:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        A new member function called cmp_datetimes() is added to the
        Item_func_min_max class. It compares arguments in DATETIME context
        and returns index of the least/greatest argument.
        The Item_func_min_max::fix_length_and_dec() function now detects when
        arguments should be compared in DATETIME context and sets the newly
        added flag compare_as_dates. It indicates that the cmp_datetimes() function
        should be called to get a correct result.
        Item_func_min_max::val_xxx() methods are corrected to call the
        cmp_datetimes() function when needed.
      sql/item_cmpfunc.cc:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        The get_datetime_value() function is no longer static.
      sql/item.h:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        Objects of the Item_splocal class now stores and reports correct original
        field type.
      sql/item.cc:
        Bug#27759: Wrong DATE/DATETIME comparison in LEAST()/GREATEST() functions.
        Objects of the Item_splocal class now stores and reports correct original
        field type.
      99bde6d9
    • unknown's avatar
      Merge magare.gmz:/home/kgeorge/mysql/work/B27531-4.1-opt · 7539cb43
      unknown authored
      into  magare.gmz:/home/kgeorge/mysql/work/B27531-5.0-opt
      
      
      mysql-test/t/join.test:
        Auto merged
      sql/sql_select.cc:
        Auto merged
      mysql-test/r/join.result:
        SCCS merged
      7539cb43
    • unknown's avatar
      Bug #27531: the 4.1 fix. · 353b6f26
      unknown authored
      When checking for applicability of join cache
      we must disable its usage only if there is no
      temp table in use.
      When a temp table is used we can use join
      cache (and it will not make the result-set 
      unordered) to fill the temp table. The filesort() 
      operation is then applied to the data in the temp 
      table and hence is not affected by join cache
      usage.
      Fixed by narrowing the condition for disabling 
      join cache to exclude the case where temp table
      is used.
      
      
      mysql-test/r/join.result:
        Bug #27531: test case
      mysql-test/t/join.test:
        Bug #27531: test case
      sql/sql_select.cc:
        Bug #27531: 
        Disable join cache only if not using temp table
      353b6f26
    • unknown's avatar
      Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 1084f2d6
      unknown authored
      into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
      
      
      1084f2d6
    • unknown's avatar
      Bug#28181 Access denied to 'information_schema when select into out file (regression) · 13cfc477
      unknown authored
      allow select into out file from I_S if user has FILE privilege
      otherwise issue an error
      
      
      mysql-test/r/outfile.result:
        test result
      mysql-test/t/outfile.test:
        test case
      sql/sql_parse.cc:
        allow select into out file from I_S if user has FILE privilege
        otherwise issue an error
      13cfc477
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 3ebd2e55
      unknown authored
      into  magare.gmz:/home/kgeorge/mysql/autopush/B27807-5.0-opt
      
      
      3ebd2e55
    • unknown's avatar
      Merge moonbone.local:/mnt/gentoo64/work/23656-bug-4.1-opt-mysql · 74c794d0
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/23656-bug-5.0-opt-mysql
      
      
      mysql-test/r/cast.result:
        Auto merged
      mysql-test/t/cast.test:
        Auto merged
      sql/item_func.cc:
        Manual merge
      74c794d0
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · ad06c4c0
      unknown authored
      into  magare.gmz:/home/kgeorge/mysql/autopush/B27807-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      mysql-test/r/subselect.result:
        merge to 5.0-opt
      mysql-test/t/subselect.test:
        merge to 5.0-opt
      ad06c4c0
    • unknown's avatar
      Bug #27807. · 0ad4e1b2
      unknown authored
      Non-correlated scalar subqueries may get executed
      in EXPLAIN at the optimization phase if they are
      part of a right hand sargable expression.
      If the scalar subquery uses a temp table to 
      materialize its results it will replace the 
      subquery structure from the parser with a simple
      select from the materialization table.
      As a result the EXPLAIN will crash as the 
      temporary materialization table is not to be shown
      in EXPLAIN at all.
      Fixed by preserving the original query structure
      right after calling optimize() for scalar subqueries
      with temp tables executed during EXPLAIN.
      
      
      mysql-test/r/subselect.result:
        Bug #27807: test case
      mysql-test/t/subselect.test:
        Bug #27807: test case
      sql/item_subselect.cc:
        Bug #27807: preserve the join structure
      sql/sql_select.cc:
        Bug #27807: introduce initialization function for tmp_join
      sql/sql_select.h:
        Bug #27807: introduce initialization function for tmp_join
      0ad4e1b2