An error occurred fetching the project authors.
  1. 18 Oct, 2013 1 commit
    • Sergei Golubchik's avatar
      Fixes for mysql-test failures · 72d8b533
      Sergei Golubchik authored
      mysql-test/r/acl_roles_show_grants.result:
        one can do SHOW GRANTS for himself
      mysql-test/t/acl_roles_set_role-table-column-priv.test:
        correct error message
      mysql-test/t/acl_roles_show_grants.test:
        one can SHOW GRANTS for himself
      sql/sql_acl.cc:
        bugfixing:
        * don't assign with && - it can shortcut and the second assignment won't be executed
        * correct the test in check_grant_all_columns() - want_access should not be modified
        *
      sql/sql_cmd.h.OTHER:
        add new commands at the end
      sql/sql_db.cc:
        don't call acl_get() if all privileges are already satisfied
        (crashes when run with --skip-grants, because acl data stuctures aren't initialized)
      sql/sql_parse.cc:
        * test for current_user in get_current_user()
        * map explicitly specified user@host to current_user
      72d8b533
  2. 29 May, 2012 1 commit
    • unknown's avatar
      Patch for mdev-287: CHEAP SQ: A query with subquery in SELECT list, EXISTS,... · 941018f8
      unknown authored
      Patch for mdev-287: CHEAP SQ: A query with subquery in SELECT list, EXISTS, inner joins takes hundreds times longer
      
      Analysis:
      
      The fix for lp:944706 introduces early subquery optimization.
      While a subquery is being optimized some of its predicates may be
      removed. In the test case, the EXISTS subquery is constant, and is
      evaluated to TRUE. As a result the whole OR is TRUE, and thus the
      correlated condition "b = alias1.b" is optimized away. The subquery
      becomes non-correlated.
      
      The subquery cache is designed to work only for correlated subqueries.
      If constant subquery optimization is disallowed, then the constant
      subquery is not evaluated, the subquery remains correlated, and its
      execution is cached. As a result execution is fast.
      
      However, when the constant subquery was optimized away, it was neither
      cached by the subquery cache, nor it was cached by the internal subquery
      caching. The latter was due to the fact that the subquery still appeared
      as correlated to the subselect_XYZ_engine::exec methods, and they
      re-executed the subquery on each call to Item_subselect::exec.
      
      Solution:
      
      The solution is to update the correlated status of the subquery after it has
      been optimized. This status consists of:
      - st_select_lex::is_correlated
      - Item_subselect::is_correlated
      - SELECT_LEX::uncacheable
      - SELECT_LEX_UNIT::uncacheable
      The status is updated by st_select_lex::update_correlated_cache(), and its
      caller st_select_lex::optimize_unflattened_subqueries. The solution relies
      on the fact that the optimizer already called
      st_select_lex::update_used_tables() for each subquery. This allows to
      efficiently update the correlated status of each subquery without walking
      the whole subquery tree.
      
      Notice that his patch is an improvement over MySQL 5.6 and older, where
      subqueries are not pre-optimized, and the above analysis is not possible.
      941018f8
  3. 25 May, 2012 1 commit
  4. 17 May, 2012 1 commit
  5. 18 Apr, 2012 1 commit
  6. 29 Mar, 2012 1 commit
    • Tor Didriksen's avatar
      Patch for Bug#13805127: Stored program cache produces wrong result in same THD. · ed418461
      Tor Didriksen authored
      Background:
      
        - as described in MySQL Internals Prepared Stored
          (http://forge.mysql.com/wiki/MySQL_Internals_Prepared_Stored),
          the Optimizer sometimes does destructive changes to the parsed
          LEX-object (Item-tree), which makes it impossible to re-use
          that tree for PS/SP re-execution.
      
        - in order to be able to re-use the Item-tree, the destructive
          changes are remembered and rolled back after the statement execution.
      
      The problem, discovered by this bug, was that the objects representing
      GROUP-BY clause did not restored after query execution. So, the GROUP-BY
      part of the statement could not be properly re-initialized for re-execution
      after destructive changes.
      
      Those objects do not take part in the Item-tree, so they can not be saved
      using the approach for Item-tree.
      
      The fix is as follows:
      
        - introduce a new array in st_select_lex to store the original
          ORDER pointers, representing the GROUP-BY clause;
      
        - Initialize this array in fix_prepare_information().
      
        - restore the list of GROUP-BY items in reinit_stmt_before_use().
      ed418461
  7. 09 Feb, 2012 1 commit
    • Rohit Kalhans's avatar
      BUG#11758263 50440: MARK UNORDERED UPDATE WITH AUTOINC UNSAFE · 31c990ca
      Rohit Kalhans authored
             
      Problem: Statements that write to tables with auto_increment columns
               based on the selection from another table, may lead to master
               and slave going out of sync, as the order in which the rows
               are retrieved from the table may differ on master and slave.
                  
      Solution: We mark writing to a table with auto_increment table
                based on the rows selected from another table as unsafe. This
                will cause the execution of such statements to throw a warning
                and forces the statement to be logged in ROW if the logging
                format is mixed. 
                  
      Changes:
             1. All the statements that writes to a table with auto_increment 
                column(s) based on the rows fetched from another table, will now
                be unsafe.
             2. CREATE TABLE with SELECT will now be unsafe.
      
      sql/share/errmsg-utf8.txt:
        Added new warning messages.
      sql/sql_base.cc:
        -Created function to check statements that write to 
         tables with auto_increment column and has select.
        -Marked all the statements that write to a table
         with auto_increment column based on rows fetched
         from other table(s) as unsafe.
      sql/sql_table.cc:
        mark CREATE TABLE[with auto_increment column] as unsafe.
      31c990ca
  8. 08 Feb, 2012 1 commit
  9. 07 Feb, 2012 1 commit
    • Rohit Kalhans's avatar
      BUG#11758263 50440: MARK UNORDERED UPDATE WITH AUTOINC UNSAFE · de85a600
      Rohit Kalhans authored
            
            Problem: Statements that write to tables with auto_increment columns
            based on the selection from another table, may lead to master
            and slave going out of sync, as the order in which the rows
            are retrived from the table may differ on master and slave.
            
            Solution: We mark writing to a table with auto_increment table
            as unsafe. This will cause the execution of such statements to
            throw a warning and forces the statement to be logged in ROW if
            the logging format is mixed. 
            
            Changes: 
            1. All the statements that writes to a table with auto_increment 
            column(s) based on the rows fetched from another table, will now
            be unsafe.
            2. CREATE TABLE with SELECT will now be unsafe.
      
      
      sql/share/errmsg-utf8.txt:
        Added new Warning messages
      sql/sql_base.cc:
        created a new function that checks for select + write on a autoinc table
        made all such statements to be unsafe.
      sql/sql_parse.cc:
        made create autoincremnet tabble + select unsafe
      de85a600
  10. 13 Jan, 2012 1 commit
  11. 15 Dec, 2011 1 commit
  12. 12 Dec, 2011 1 commit
    • Sergei Golubchik's avatar
      after merge changes: · 2ccf247e
      Sergei Golubchik authored
      * rename all debugging related command-line options
        and variables to start from "debug-", and made them all
        OFF by default.
      * replace "MySQL" with "MariaDB" in error messages
      * "Cast ... converted ... integer to it's ... complement"
        is now a note, not a warning
      * @@query_cache_strip_comments now has a session scope,
        not global.
      2ccf247e
  13. 26 Nov, 2011 1 commit
  14. 20 Nov, 2011 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #892725. · 3c496ea9
      Igor Babaev authored
      A non-first execution of a prepared statement missed a call of the
      TABLE_LIST::process_index_hints() method in the code of the function
      setup_tables().
      At some scenarios this could lead to the choice of a quite inefficient
      execution plan for the base query of the prepared statement.
      3c496ea9
  15. 21 Jul, 2011 1 commit
  16. 25 Apr, 2011 1 commit
  17. 22 Mar, 2011 1 commit
    • Alexander Nozdrin's avatar
      A patch for Bug#11763413 (56115: SELECT doesn't work in · 7117e063
      Alexander Nozdrin authored
      prepared statements with cursor protocol).
      
      The problem was a bug in Materialized-cursor implementation.
      Materialized_cursor::open() called send_result_metadata()
      with items pointing to already closed table.
      
      The fix is to send metadata when the table is still open.
      
      NOTE: this is a "partial" fix: metadata are different with
      and without --cursor-protocol, but that's a different large
      problem, one indication of which is reported as Bug 24176.
      7117e063
  18. 01 Mar, 2011 1 commit
    • Sergei Golubchik's avatar
      wl#173 - temporal types with sub-second resolution · a8a757c6
      Sergei Golubchik authored
               and collateral changes.
      
      * introduce my_hrtime_t, my_timediff_t, and conversion macros
      * inroduce TIME_RESULT, but it can only be returned from Item::cmp_type(),
        never from Item::result_type()
      * pack_time/unpack_time function for "packed" representation of
        MYSQL_TIME in a longlong that can be compared
      * ADDTIME()/SUBTIME()/+- INTERVAL now work with TIME values
      * numbers aren't quoted in EXPLAIN EXTENDED
      * new column I_S.COLUMNS.DATETIME_PRECISION
      * date/time values are compares to anything as date/time, not as strings or numbers.
      * old timestamp(X) is no longer supported
      * MYSQL_TIME to string conversion functions take precision as an argument
      * unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
      * Field_timestamp_hires, Field_datetime_hires, Field_time_hires
      * Field_temporal
      * Lazy_string class to pass a value (string, number, time) polymorphically down the stack
      * make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
      * removed Field::can_be_compared_as_longlong(). Use Field::cmp_type() == INT_RESULT instead
      * introduced Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
      * in many cases date/time types are treated like other types, not as special cases
      * greatly simplified Arg_comparator (regarding date/time/year code)
      * SEC_TO_TIME is real function, not integer.
      * microsecond precision in NOW, CURTIME, etc
      * Item_temporal. All items derived from it only provide get_date, but no val* methods
      * replication of NOW(6)
      * Protocol::store(time) now takes the precision as an argument
      * @@TIMESTAMP is a double
      
      client/mysqlbinlog.cc:
        remove unneded casts
      include/my_sys.h:
        introduce my_hrtime_t, my_timediff_t, and conversion macros
      include/my_time.h:
        pack_time/unpack_time, etc.
        convenience functions to work with MYSQL_TIME::second_part
      libmysql/libmysql.c:
        str_to_time() is gone. str_to_datetime() does it now.
        my_TIME_to_str() takes the precision as an argument
      mysql-test/include/ps_conv.inc:
        time is not equal to datetime anymore
      mysql-test/r/distinct.result:
        a test for an old MySQL bug
      mysql-test/r/explain.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/func_default.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/func_sapdb.result:
        when decimals=NOT_FIXED_DEC it means "not fixed" indeed
      mysql-test/r/func_test.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/func_time.result:
        ADDTIME()/SUBTIME()/+- INTERVAL now work with TIME values
      mysql-test/r/having.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/information_schema.result:
        new column I_S.COLUMNS.DATETIME_PRECISION
      mysql-test/r/join_outer.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/metadata.result:
        TIMESTAMP no longer has zerofill flag
      mysql-test/r/range.result:
        invalid datetime is not compared with as a string
      mysql-test/r/select.result:
        NO_ZERO_IN_DATE, etc only affect storage - according to the manual
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/subselect.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/sysdate_is_now.result:
        when decimals=NOT_FIXED_DEC it means "not fixed" indeed
      mysql-test/r/type_blob.result:
        TIMESTAMP(N) is not deprecated
      mysql-test/r/type_timestamp.result:
        old TIMESTAMP(X) semantics is not supported anymore
      mysql-test/r/union.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/r/varbinary.result:
        numbers aren't quoted in EXPLAIN EXTENDED
      mysql-test/t/distinct.test:
        test for an old MySQL bug
      mysql-test/t/func_time.test:
        +- INTERVAL now works with TIME values
      mysql-test/t/select.test:
        typo
      mysql-test/t/subselect.test:
        only one error per statement, please
      mysql-test/t/system_mysql_db_fix40123.test:
        old timestamp(X) is no longer supported
      mysql-test/t/system_mysql_db_fix50030.test:
        old timestamp(X) is no longer supported
      mysql-test/t/system_mysql_db_fix50117.test:
        old timestamp(X) is no longer supported
      mysql-test/t/type_blob.test:
        old timestamp(X) is no longer supported
      mysql-test/t/type_timestamp.test:
        old timestamp(X) is no longer supported
      mysys/my_getsystime.c:
        functions to get the time with microsecond precision
      mysys/my_init.c:
        move the my_getsystime.c initialization code to my_getsystime.c
      mysys/my_static.c:
        no need to make these variables extern
      mysys/my_static.h:
        no need to make these variables extern
      scripts/mysql_system_tables.sql:
        old timestamp(X) is no longer supported
      scripts/mysql_system_tables_fix.sql:
        old timestamp(X) is no longer supported
      scripts/mysqlhotcopy.sh:
        old timestamp(X) is no longer supported
      sql-common/my_time.c:
        * call str_to_time from str_to_datetime, as appropriate
        * date/time to string conversions take precision as an argument
        * number_to_time()
        * TIME_to_double()
        * pack_time() and unpack_time()
      sql/event_data_objects.cc:
        cast is not needed
        my_datetime_to_str() takes precision as an argument
      sql/event_db_repository.cc:
        avoid dangerous downcast (because the pointer is
        not always Field_timestamp, see events_1.test)
      sql/event_queue.cc:
        avoid silly double-work for cond_wait
        (having an endpoint of wait, subtract the current time to get the timeout,
        and use set_timespec() macro to fill in struct timespec, by adding the current
        time to the timeout)
      sql/field.cc:
        * remove virtual Field::get_time(), everyone should use only Field::get_date()
        * remove lots of #ifdef WORDS_BIGENDIAN
        * unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
        * Field_timestamp_hires, Field_datetime_hires, Field_time_hires
        * Field_temporal
        * make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
      sql/field.h:
        * remove virtual Field::get_time(), everyone should use only Field::get_date()
        * remove lots of #ifdef WORDS_BIGENDIAN
        * unified the warnings from Field_timestamp/datetime/time/date/newdate store methods
        * Field_timestamp_hires, Field_datetime_hires, Field_time_hires
        * Field_temporal
        * make_truncated_value_warning and Field::set_datetime_warning use Lazy_string as an argument, removed char*/int/double variants
        * removed Field::can_be_compared_as_longlong(). Use Field::cmp_type() == INT_RESULT instead
      sql/filesort.cc:
        TIME_RESULT, cmp_time()
      sql/item.cc:
        * numbers aren't quoted in EXPLAIN EXTENDED
        * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
        * virtual Item::get_time() is gone
        * Item_param::field_type() is set correctly
        * Item_datetime, for a datetime constant
        * time to anything is compared as a time
        * Item_cache::print() prints the value is available
        * bug fixed in Item_cache_int::val_str()
      sql/item.h:
        * Item::print_value(), to be used from Item_xxx::print() when needed
        * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
        * virtual Item::get_time() is gone
        * Item_datetime, for a datetime constant
        * better default for cast_to_int_type()
        * Item_cache objects now *always* have the field_type() set
      sql/item_cmpfunc.cc:
        * get_year_value, get_time_value are gone. get_datetime_value does it all
        * get_value_a_func, get_value_b_func are gone
        * can_compare_as_dates() is gone too, TIME_RESULT is used instead
        * cmp_type() instead or result_type() when doing a comparison
        * compare_datetime and compate_e_datetime in the comparator_matrix, is_nulls_eq is gone
        * Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
      sql/item_cmpfunc.h:
        greatly simplified Arg_comparator
      sql/item_create.cc:
        * fix a bug in error messages in CAST
      sql/item_func.cc:
        Item::cmp_result() instead of Item::is_datetime() and Item::result_as_longlong()
        mention all possibitiles in switch over Item_result values, or use default:
      sql/item_row.h:
        overwrite the default cmp_type() for Item_row,
        as no MYSQL_TYPE_xxx value corresponds to ROW_RESULT
      sql/item_timefunc.cc:
        rewrite make_datetime to support precision argument
        SEC_TO_TIME is real function, not integer.
        many functions that returned temporal values had duplicate code in val_* methods,
        some of them did not have get_date() which resulted in unnecessary date->str->date conversions. 
        Now they all are derived from Item_temporal_func and *only* provide get_date, not val* methods.
        many fixes to set decimals (datetime precision) correctly.
      sql/item_timefunc.h:
        SEC_TO_TIME is real function, not integer.
        many functions that returned temporal values had duplicate code in val_* methods,
        some of them did not have get_date() which resulted in unnecessary date->str->date conversions. 
        Now they all are derived from Item_temporal_func and *only* provide get_date, not val* methods.
        many fixes to set decimals (datetime precision) correctly.
      sql/log_event.cc:
        replication of NOW(6)
      sql/log_event.h:
        replication of NOW(6)
      sql/mysql_priv.h:
        Lazy_string class to pass a value (string, number, time) polymorphically down the stack.
        make_truncated_value_warning() that uses it.
      sql/mysqld.cc:
        datetime in Arg_comparator::comparator_matrix
      sql/opt_range.cc:
        cleanup: don't disable warnings before calling save_in_field_no_warnings()
      sql/protocol.cc:
        Protocol::store(time) now takes the precision as an argument
      sql/protocol.h:
        Protocol::store(time) now takes the precision as an argument
      sql/rpl_rli.cc:
        small cleanup
      sql/set_var.cc:
        SET TIMESTAMP=double
      sql/set_var.h:
        @@TIMESTAMP is a double
      sql/share/errmsg.txt:
        precision and scale are unsigned
      sql/slave.cc:
        replication of NOW(6)
      sql/sp_head.cc:
        cleanup
      sql/sql_class.cc:
        support for NOW(6)
      sql/sql_class.h:
        support for NOW(6)
      sql/sql_insert.cc:
        support for NOW(6)
      sql/sql_select.cc:
        use item->cmp_type().
        move a comment where it belongs
      sql/sql_show.cc:
        new column I_S.COLUMNS.DATETIME_PRECISION
      sql/sql_yacc.yy:
        TIME(X), DATETIME(X), cast, NOW(X), CURTIME(X), etc
      sql/time.cc:
        fix date_add_interval() to support MYSQL_TIMESTAMP_TIME argument
      storage/myisam/ha_myisam.cc:
        TIMESTAMP no longer carries ZEROFIELD flag, still we keep MYI file compatible.
      strings/my_vsnprintf.c:
        warnings
      tests/mysql_client_test.c:
        old timestamp(X) does not work anymore
        datetime is no longer equal to time
      a8a757c6
  19. 13 Nov, 2010 1 commit
    • Alexander Nozdrin's avatar
      Fix for Bug#56934 (mysql_stmt_fetch() incorrectly fills MYSQL_TIME · 3fa437cf
      Alexander Nozdrin authored
      structure buffer).
      
      This is a follow-up for WL#4435. The bug actually existed not only
      MYSQL_TYPE_DATETIME type. The problem was that Item_param::set_value()
      was written in an assumption that it's working with expressions, i.e.
      with basic data types.
      
      There are two different quick fixes here:
        a) Change Item_param::make_field() -- remove setting of
           Send_field::length, Send_field::charsetnr, Send_field::flags and
           Send_field::type.
      
           That would lead to marshalling all data using basic types to the client
           (MYSQL_TYPE_LONGLONG, MYSQL_TYPE_DOUBLE, MYSQL_TYPE_STRING and
           MYSQL_TYPE_NEWDECIMAL). In particular, that means, DATETIME would be
           sent as MYSQL_TYPE_STRING, TINYINT -- as MYSQL_TYPE_LONGLONG, etc.
      
           That could be Ok for the client, because the client library does
           reverse conversion automatically (the client program would see DATETIME
           as MYSQL_TIME object). However, there is a problem with metadata --
           the metadata would be wrong (misleading): it would say that DATETIME is
           marshaled as MYSQL_TYPE_DATETIME, not as MYSQL_TYPE_STRING.
      
        b) Set Item_param::param_type properly to actual underlying field type.
           That would lead to double conversion inside the server: for example,
           MYSQL_TIME-object would be converted into STRING-object
           (in Item_param::set_value()), and then converted back to MYSQL_TIME-object
           (in Item_param::send()).
      
           The data however would be marshalled more properly, and also metadata would
           be correct.
      
      This patch implements b).
      
      There is also a possibility to avoid double conversion either by clonning
      the data field, or by storing a reference to it and using it on Item::send()
      time. That requires more work and might be done later.
      3fa437cf
  20. 04 Oct, 2010 1 commit
  21. 01 Oct, 2010 1 commit
    • Sergey Glukhov's avatar
      Bug#54488 crash when using explain and prepared statements with subqueries · 233e4d80
      Sergey Glukhov authored
      The crash happens because original join table is replaced with temporary table
      at execution stage and later we attempt to use this temporary table in
      select_describe. It might happen that
      Item_subselect::update_used_tables() method which sets const_item flag
      is not called by some reasons (no where/having conditon in subquery for example).
      It prevents JOIN::join_tmp creation and breaks original join.
      The fix is to call ::update_used_tables() before ::const_item() check.
      
      
      mysql-test/r/ps.result:
        test case
      mysql-test/t/ps.test:
        test case
      sql/item_subselect.cc:
        call ::update_used_tables() before ::const_item() check.
      233e4d80
  22. 23 Sep, 2010 1 commit
    • Sergey Glukhov's avatar
      Bug#54494 crash with explain extended and prepared statements · b76277fc
      Sergey Glukhov authored
      In case of outer join and emtpy WHERE conditon
      'always true' condition is created for WHERE clasue.
      Later in mysql_select() original SELECT_LEX WHERE
      condition is overwritten with created cond.
      However SELECT_LEX condition is also used as inital
      condition in mysql_select()->JOIN::prepare().
      On second execution of PS modified SELECT_LEX condition
      is taken and it leads to crash.
      The fix is to restore original SELECT_LEX condition
      (set to NULL if original cond is NULL) in
       reinit_stmt_before_use().
      HAVING clause is fixed too for safety reason
      (no test case as I did not manage to think out
       appropriate example).
      
      
      mysql-test/r/ps.result:
        test case
      mysql-test/t/ps.test:
        test case
      sql/sql_prepare.cc:
        restore original SELECT_LEX condition
        (set to NULL if original cond is NULL) in
         reinit_stmt_before_use()
      b76277fc
  23. 09 Aug, 2010 1 commit
  24. 22 Jun, 2010 1 commit
    • MySQL Build Team's avatar
      Backport into build-201006221614-5.1.46sp1 · a0a85031
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 3351.41.1
      > revision-id: alexey.kopytov@sun.com-20100430111048-jdls6ofn4kkmpt09
      > parent: sergey.glukhov@sun.com-20100329134249-03wyhzp5k92dzhcb
      > committer: Alexey Kopytov <Alexey.Kopytov@Sun.com>
      > branch nick: my51-bug48419
      > timestamp: Fri 2010-04-30 15:10:48 +0400
      > message:
      >   Bug #48419: another explain crash..
      >   
      >   WHERE predicates containing references to empty tables in a
      >   subquery were handled incorrectly by the optimizer when
      >   executing EXPLAIN. As a result, the optimizer could try to
      >   evaluate such predicates rather than just stop with
      >   "Impossible WHERE noticed after reading const tables" as 
      >   it would do in a non-subquery case. This led to valgrind 
      >   errors and crashes.
      >   
      >   Fixed the code checking the above condition so that subqueries
      >   are not excluded and hence are handled in the same way as top
      >   level SELECTs.
      a0a85031
  25. 26 May, 2010 1 commit
  26. 07 May, 2010 1 commit
    • Konstantin Osipov's avatar
      Draft patch that fixes and a sketches test cases for: · 946fad35
      Konstantin Osipov authored
      Bug#20837 Apparent change of isolation level during transaction,
      Bug#46527 COMMIT AND CHAIN RELEASE does not make sense,
      Bug#53343 completion_type=1, COMMIT/ROLLBACK AND CHAIN don't 
      preserve the isolation level
      Bug#53346 completion_type has strange effect in a stored 
      procedure/prepared statement
      
      Make thd->tx_isolation mean strictly "current transaction 
      isolation level"
      Make thd->variables.tx_isolation mean "current session isolation
      level".
      The current transaction isolation level is now established
      at transaction start. If there was a SET TRANSACTION
      ISOLATION LEVEL statement, the value is taken from it.
      Otherwise, the session value is used.
      A change in a session value, made while a transaction is active,
      whereas still allowed, no longer has any effect on the
      current transaction isolation level. This is an incompatible
      change.
      A change in a session isolation level, made while there is
      no active transaction, overrides SET TRANSACTION statement,
      if there was any.
      Changed the impelmentation to not look at @@session.completion_type
      in the parser, and thus fixed Bug#53346.
      Changed the parser to not allow AND NO CHAIN RELEASE,
      and thus fixed Bug#46527.
      Changed the transaction API to take the current transaction
      isolation level into account:
      - BEGIN/COMMIT now do preserve the current transaction
      isolation level if chaining is on.
      - implicit commit, XA COMMIT or XA ROLLBACK or autocommit don't.
      946fad35
  27. 30 Apr, 2010 1 commit
    • Alexey Kopytov's avatar
      Bug #48419: another explain crash.. · 97374a11
      Alexey Kopytov authored
      WHERE predicates containing references to empty tables in a
      subquery were handled incorrectly by the optimizer when
      executing EXPLAIN. As a result, the optimizer could try to
      evaluate such predicates rather than just stop with
      "Impossible WHERE noticed after reading const tables" as 
      it would do in a non-subquery case. This led to valgrind 
      errors and crashes.
      
      Fixed the code checking the above condition so that subqueries
      are not excluded and hence are handled in the same way as top
      level SELECTs.
      
      mysql-test/r/explain.result:
        Added a test case for bug #48419.
      mysql-test/r/ps.result:
        Updated test results to take the new (and more correct)
        "Extra" comments in execution plans.
      mysql-test/t/explain.test:
        Added a test case for bug #48419.
      sql/sql_select.cc:
        There is no point in excluding subqueries from checking
        for identically false WHERE conditions.
      97374a11
  28. 16 Apr, 2010 1 commit
    • Sergey Glukhov's avatar
      Bug#52124 memory leaks like a sieve in datetime, timestamp, time, date fields + warnings · 649deaa8
      Sergey Glukhov authored
      Arg_comparator initializes 'comparators' array in case of
      ROW comparison and does not free this array on destruction.
      It leads to memory leaks.
      The fix:
      -added Arg_comparator::cleanup() method which frees
       'comparators' array.
      -added Item_bool_func2::cleanup() method which calls 
       Arg_comparator::cleanup() method
      
      
      mysql-test/r/ps.result:
        test case
      mysql-test/r/row.result:
        test case
      mysql-test/t/ps.test:
        test case
      mysql-test/t/row.test:
        test case
      sql/item_cmpfunc.h:
        -added Arg_comparator::cleanup() method which frees
         'comparators' array.
        -added Item_bool_func2::cleanup() method which calls 
         Arg_comparator::cleanup() method
      649deaa8
  29. 29 Mar, 2010 1 commit
    • Sergei Golubchik's avatar
      pluggable auth with plugin examples · 291fd969
      Sergei Golubchik authored
      Makefile.am:
        add new API files to the check_abi rule,
        remove duplicates
      client/CMakeLists.txt:
        now a client can use dlopen too
      client/Makefile.am:
        be csh-friendly
      include/my_global.h:
        add dummy plugs for dlopen and co.
        for the code that needs them to work in static builds
      mysys/Makefile.am:
        be csh-friendly
      plugin/auth/dialog.c:
        typo fixed
      291fd969
  30. 11 Mar, 2010 1 commit
    • unknown's avatar
      MWL#68 Subquery optimization: Efficient NOT IN execution with NULLs · 3d2a7460
      unknown authored
      This patch does three things:
      - It adds the possibility to force the execution of top-level [NOT] IN
        subquery predicates via the IN=>EXISTS transformation. This is done by
        setting both optimizer switches partial_match_rowid_merge and
        partial_match_table_scan to "off".
      - It adjusts all test cases where the complete optimizer_switch is
        selected because now we have two more switches.
      - For those test cases where the plan changes because of the new available
        strategies, we switch off both partial match strategies in order to
        force the "old" IN=>EXISTS strategy. This is done because most of these
        test cases specifically test bugs in this strategy.
      
      sql/opt_subselect.cc:
        Adds the possibility to force the execution of top-level [NOT] IN
        subquery predicates via the IN=>EXISTS transformation. This is done by
        setting both optimizer switches partial_match_rowid_merge and
        partial_match_table_scan to "off".
      3d2a7460
  31. 09 Mar, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#40277: SHOW CREATE VIEW returns invalid SQL · f502deac
      Davi Arnaut authored
      The problem is that not all column names retrieved from a SELECT
      statement can be used as view column names due to length and format
      restrictions. The server failed to properly check the conformity
      of those automatically generated column names before storing the
      final view definition on disk.
      
      Since columns retrieved from a SELECT statement can be anything
      ranging from functions to constants values of any format and length,
      the solution is to rewrite to a pre-defined format any names that
      are not acceptable as a view column name.
      
      The name is rewritten to "Name_exp_%u" where %u translates to the
      position of the column. To avoid this conversion scheme, define
      explict names for the view columns via the column_list clause.
      Also, aliases are now only generated for top level statements.
      
      mysql-test/include/view_alias.inc:
        Add test case for Bug#40277
      mysql-test/r/compare.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/group_by.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/ps.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/subselect.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/subselect3.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/type_datetime.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/union.result:
        Bug#40277: SHOW CREATE VIEW returns invalid SQL
      mysql-test/r/view.result:
        Add test case result for Bug#40277
      mysql-test/r/view_alias.result:
        Add test case result for Bug#40277
      mysql-test/t/view_alias.test:
        Add test case for Bug#40277
      sql/sql_view.cc:
        Check if auto generated column names are conforming. Also, the
        make_unique_view_field_name function is not used as it uses the
        original name to construct a new one, which does not work if the
        name is invalid.
      f502deac
  32. 03 Feb, 2010 2 commits
    • MySQL Build Team's avatar
      Backport into build-201002030816-5.0.87sp1 · 318e49ab
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 2818.1.41 [merge]
      > revision-id: epotemkin@mysql.com-20091203132153-k8xwk3nh02n8npg4
      > parent: epotemkin@mysql.com-20091202134712-4muwnr152xqkcwm7
      > parent: epotemkin@mysql.com-20091203131520-93uiop1a81o9z8mb
      > committer: Evgeny Potemkin <epotemkin@mysql.com>
      > branch nick: mysql-5.0-bugteam
      > timestamp: Thu 2009-12-03 16:21:53 +0300
      > message:
      >   Auto-merged.
      > ------------------------------------------------------------
      > Use --include-merges or -n0 to see merged revisions.
      318e49ab
    • MySQL Build Team's avatar
      Backport into build-201002030816-5.0.87sp1 · 5eebf7a9
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 2818.1.40 [merge]
      > revision-id: epotemkin@mysql.com-20091202134712-4muwnr152xqkcwm7
      > parent: gshchepa@mysql.com-20091201102444-yw166t3audrojo9s
      > parent: epotemkin@mysql.com-20091201182845-aw0uawt6c6gwi98c
      > committer: Evgeny Potemkin <epotemkin@mysql.com>
      > branch nick: mysql-5.0-bugteam
      > timestamp: Wed 2009-12-02 16:47:12 +0300
      > message:
      >   Auto-merged fix for the bug#48508.
      > ------------------------------------------------------------
      > Use --include-merges or -n0 to see merged revisions.
      5eebf7a9
  33. 22 Dec, 2009 1 commit
    • Ramil Kalimullin's avatar
      Fix for bug#49570: Assertion failed: !(order->used & map) · 7344b58c
      Ramil Kalimullin authored
      on re-execution of prepared statement
      
      Problem: some (see eq_ref_table()) ORDER BY/GROUP BY optimization
      is called before each PS execution. However, we don't properly 
      initialize its stucture every time before the call.
      
      Fix: properly initialize the sturture used.
      
      
      
      mysql-test/r/ps.result:
        Fix for bug#49570: Assertion failed: !(order->used & map) 
        on re-execution of prepared statement
          - test result.
      mysql-test/t/ps.test:
        Fix for bug#49570: Assertion failed: !(order->used & map) 
        on re-execution of prepared statement
          - test case.
      sql/sql_select.cc:
        Fix for bug#49570: Assertion failed: !(order->used & map) 
        on re-execution of prepared statement
          - set order->used to 0 before each eq_ref_table() call,
        as the function relies on that.
      7344b58c
  34. 04 Dec, 2009 2 commits
    • Konstantin Osipov's avatar
      Backport of revno ## 2617.31.1, 2617.31.3, 2617.31.4, 2617.31.5, · a14bbee5
      Konstantin Osipov authored
      2617.31.12, 2617.31.15, 2617.31.15, 2617.31.16, 2617.43.1
      - initial changeset that introduced the fix for 
      Bug#989 and follow up fixes for all test suite failures
      introduced in the initial changeset. 
      ------------------------------------------------------------
      revno: 2617.31.1
      committer: Davi Arnaut <Davi.Arnaut@Sun.COM>
      branch nick: 4284-6.0
      timestamp: Fri 2009-03-06 19:17:00 -0300
      message:
      Bug#989: If DROP TABLE while there's an active transaction, wrong binlog order
      WL#4284: Transactional DDL locking
      
      Currently the MySQL server does not keep metadata locks on
      schema objects for the duration of a transaction, thus failing
      to guarantee the integrity of the schema objects being used
      during the transaction and to protect then from concurrent
      DDL operations. This also poses a problem for replication as
      a DDL operation might be replicated even thought there are
      active transactions using the object being modified.
      
      The solution is to defer the release of metadata locks until
      a active transaction is either committed or rolled back. This
      prevents other statements from modifying the table for the
      entire duration of the transaction. This provides commitment
      ordering for guaranteeing serializability across multiple
      transactions.
      
      - Incompatible change:
      
      If MySQL's metadata locking system encounters a lock conflict,
      the usual schema is to use the try and back-off technique to
      avoid deadlocks -- this schema consists in releasing all locks
      and trying to acquire them all in one go.
      
      But in a transactional context this algorithm can't be utilized
      as its not possible to release locks acquired during the course
      of the transaction without breaking the transaction commitments.
      To avoid deadlocks in this case, the ER_LOCK_DEADLOCK will be
      returned if a lock conflict is encountered during a transaction.
      
      Let's consider an example:
      
      A transaction has two statements that modify table t1, then table
      t2, and then commits. The first statement of the transaction will
      acquire a shared metadata lock on table t1, and it will be kept
      utill COMMIT to ensure serializability.
      
      At the moment when the second statement attempts to acquire a
      shared metadata lock on t2, a concurrent ALTER or DROP statement
      might have locked t2 exclusively. The prescription of the current
      locking protocol is that the acquirer of the shared lock backs off
      -- gives up all his current locks and retries. This implies that
      the entire multi-statement transaction has to be rolled back.
      
      - Incompatible change:
      
      FLUSH commands such as FLUSH PRIVILEGES and FLUSH TABLES WITH READ
      LOCK won't cause locked tables to be implicitly unlocked anymore.
      
      
      mysql-test/extra/binlog_tests/drop_table.test:
        Add test case for Bug#989.
      mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction.
      mysql-test/include/mix1.inc:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction.
      mysql-test/include/mix2.inc:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction.
      mysql-test/r/flush_block_commit.result:
        Update test case result (WL#4284).
      mysql-test/r/flush_block_commit_notembedded.result:
        Update test case result (WL#4284).
      mysql-test/r/innodb.result:
        Update test case result (WL#4284).
      mysql-test/r/innodb_mysql.result:
        Update test case result (WL#4284).
      mysql-test/r/lock.result:
        Add test case result for an effect of WL#4284/Bug#989
        (all locks should be released when a connection terminates).
      mysql-test/r/mix2_myisam.result:
        Update test case result (effects of WL#4284/Bug#989).
      mysql-test/r/not_embedded_server.result:
        Update test case result (effects of WL#4284/Bug#989).
        Add a test case for interaction of WL#4284 and FLUSH PRIVILEGES.
      mysql-test/r/partition_innodb_semi_consistent.result:
        Update test case result (effects of WL#4284/Bug#989).
      mysql-test/r/partition_sync.result:
        Temporarily disable the test case for Bug#43867,
        which will be fixed by a subsequent backport.
      mysql-test/r/ps.result:
        Add a test case for effect of PREPARE on transactional
        locks: we take a savepoint at beginning of PREAPRE
        and release it at the end. Thus PREPARE does not 
        accumulate metadata locks (Bug#989/WL#4284).
      mysql-test/r/read_only_innodb.result:
        Update test case result (effects of WL#4284/Bug#989).
      mysql-test/suite/binlog/r/binlog_row_drop_tbl.result:
        Add a test case result (WL#4284/Bug#989).
      mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
        Update test case result (effects of WL#4284/Bug#989).
      mysql-test/suite/binlog/r/binlog_stm_drop_tbl.result:
        Add a test case result (WL#4284/Bug#989).
      mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
        Update test case result (effects of WL#4284/Bug#989).
      mysql-test/suite/binlog/r/binlog_unsafe.result:
        A side effect of Bug#989 -- slightly different table map ids.
      mysql-test/suite/binlog/t/binlog_row_drop_tbl.test:
        Add a test case for WL#4284/Bug#989.
      mysql-test/suite/binlog/t/binlog_stm_drop_tbl.test:
        Add a test case for WL#4284/Bug#989.
      mysql-test/suite/binlog/t/binlog_stm_row.test:
        Update to the new state name. This
        is actually a follow up to another patch for WL#4284, 
        that changes Locked thread state to Table lock.
      mysql-test/suite/ndb/r/ndb_index_ordered.result:
        Remove result for disabled part of the test case.
      mysql-test/suite/ndb/t/disabled.def:
        Temporarily disable a test case (Bug#45621).
      mysql-test/suite/ndb/t/ndb_index_ordered.test:
        Disable a part of a test case (needs update to
        reflect semantics of Bug#989).
      mysql-test/suite/rpl/t/disabled.def:
        Disable tests made meaningless by transactional metadata
        locking.
      mysql-test/suite/sys_vars/r/autocommit_func.result:
        Add a commit (Bug#989).
      mysql-test/suite/sys_vars/t/autocommit_func.test:
        Add a commit (Bug#989).
      mysql-test/t/flush_block_commit.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction.
      mysql-test/t/flush_block_commit_notembedded.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction.
        Add a test case for transaction-scope locks and the global
        read lock (Bug#989/WL#4284).
      mysql-test/t/innodb.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction
        (effects of Bug#989/WL#4284).
      mysql-test/t/lock.test:
        Add a test case for Bug#989/WL#4284.
      mysql-test/t/not_embedded_server.test:
        Add a test case for Bug#989/WL#4284.
      mysql-test/t/partition_innodb_semi_consistent.test:
        Replace TRUNCATE with DELETE, to not issue
        an implicit commit of a transaction, and not depend
        on metadata locks.
      mysql-test/t/partition_sync.test:
        Temporarily disable the test case for Bug#43867,
        which needs a fix to be backported from 6.0.
      mysql-test/t/ps.test:
        Add a test case for semantics of PREPARE and transaction-scope
        locks: metadata locks on tables used in PREPARE are enclosed into a
        temporary savepoint, taken at the beginning of PREPARE,
        and released at the end. Thus PREPARE does not effect
        what locks a transaction owns.
      mysql-test/t/read_only_innodb.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction 
        (Bug#989/WL#4284).
        
        Wait for the read_only statement to actually flush tables before
        sending other concurrent statements that depend on its state.
      mysql-test/t/xa.test:
        Fix test case to reflect the fact that transactions now hold
        metadata locks for the duration of a transaction 
        (Bug#989/WL#4284).
      sql/ha_ndbcluster_binlog.cc:
        Backport bits of changes of ha_ndbcluster_binlog.cc
        from 6.0, to fix the failing binlog test suite with
        WL#4284. WL#4284 implementation does not work
        with 5.1 implementation of ndbcluster binlog index.
      sql/log_event.cc:
        Release metadata locks after issuing a commit.
      sql/mdl.cc:
        Style changes (WL#4284).
      sql/mysql_priv.h:
        Rename parameter to match the name used in the definition (WL#4284).
      sql/rpl_injector.cc:
        Release metadata locks on commit (WL#4284).
      sql/rpl_rli.cc:
        Remove assert made meaningless, metadata locks are released
        at the end of the transaction.
      sql/set_var.cc:
        Close tables and release locks if autocommit mode is set.
      sql/slave.cc:
        Release metadata locks after a rollback.
      sql/sql_acl.cc:
        Don't implicitly unlock locked tables. Issue a implicit commit
        at the end and unlock tables.
      sql/sql_base.cc:
        Defer the release of metadata locks when closing tables
        if not required to.
        Issue a deadlock error if the locking protocol requires
        that a transaction re-acquire its locks.
        
        Release metadata locks when closing tables for reopen.
      sql/sql_class.cc:
        Release metadata locks if the thread is killed.
      sql/sql_parse.cc:
        Release metadata locks after implicitly committing a active
        transaction, or after explicit commits or rollbacks.
      sql/sql_plugin.cc:
        
        Allocate MDL request on the stack as the use of the table
        is contained within the function. It will be removed from
        the context once close_thread_tables is called at the end
        of the function.
      sql/sql_prepare.cc:
        The problem is that the prepare phase of the CREATE TABLE
        statement takes a exclusive metadata lock lock and this can
        cause a self-deadlock the thread already holds a shared lock
        on the table being that should be created.
        
        The solution is to make the prepare phase take a shared
        metadata lock when preparing a CREATE TABLE statement. The
        execution of the statement will still acquire a exclusive
        lock, but won't cause any problem as it issues a implicit
        commit.
        
        After some discussions with stakeholders it has been decided that
        metadata locks acquired during a PREPARE statement must be released
        once the statement is prepared even if it is prepared within a multi
        statement transaction.
      sql/sql_servers.cc:
        Don't implicitly unlock locked tables. Issue a implicit commit
        at the end and unlock tables.
      sql/sql_table.cc:
        Close table and release metadata locks after a admin operation.
      sql/table.h:
        The problem is that the prepare phase of the CREATE TABLE
        statement takes a exclusive metadata lock lock and this can
        cause a self-deadlock the thread already holds a shared lock
        on the table being that should be created.
        
        The solution is to make the prepare phase take a shared
        metadata lock when preparing a CREATE TABLE statement. The
        execution of the statement will still acquire a exclusive
        lock, but won't cause any problem as it issues a implicit
        commit.
      sql/transaction.cc:
        Release metadata locks after the implicitly committed due
        to a new transaction being started. Also, release metadata
        locks acquired after a savepoint if the transaction is rolled
        back to the save point.
        
        The problem is that in some cases transaction-long metadata locks
        could be released before the transaction was committed. This could
        happen when a active transaction was ended by a "START TRANSACTION"
        or "BEGIN" statement, in which case the metadata locks would be
        released before the actual commit of the active transaction.
        
        The solution is to defer the release of metadata locks to after the
        transaction has been implicitly committed. No test case is provided
        as the effort to provide one is too disproportional to the size of
        the fix.
      a14bbee5
    • Davi Arnaut's avatar
      Bug#49141: Encode function is significantly slower in 5.1 compared to 5.0 · e53ecf2d
      Davi Arnaut authored
      The problem was that the multiple evaluations of a ENCODE or
      DECODE function within a single statement caused the random
      generator to be reinitialized at each evaluation, even though
      the parameters were constants.
      
      The solution is to initialize the random generator only once
      if the password (seed) parameter is constant.
      
      This patch borrows code and ideas from Georgi Kodinov's patch.
      
      mysql-test/r/func_str.result:
        Add test case result.
      mysql-test/r/ps.result:
        Add test case result.
      mysql-test/t/func_str.test:
        Add test case for Bug#49141
      mysql-test/t/ps.test:
        Add test case for Bug#49141
      sql/item_strfunc.cc:
        Move seed generation code to a separate method.
        Seed only once if the password (seed) argument
        is constant.
        Remove duplicated code and use a transform method
        to apply encoding or decoding.
      sql/item_strfunc.h:
        Add parameter to signal whether the PRNG is already seeded.
        Introduce transform method.
        Combine val_str methods.
      sql/sql_crypt.cc:
        Remove method.
      sql/sql_crypt.h:
        Seed is supplied as two long integers.
      e53ecf2d
  35. 03 Dec, 2009 1 commit
  36. 01 Dec, 2009 1 commit
    • Evgeny Potemkin's avatar
      Bug#48508: Crash on prepared statement re-execution. · 7853f553
      Evgeny Potemkin authored
      Actually there is two different bugs.
      The first one caused crash on queries with WHERE condition over views
      containing WHERE condition. A wrong check for prepared statement phase led
      to items for view fields being allocated in the execution memory and freed
      at the end of execution. Thus the optimized WHERE condition refers to
      unallocated memory on the second execution and server crashed.
      The second one caused by the Item_cond::compile function not saving changes
      it made to the item tree. Thus on the next execution changes weren't
      reverted and server crashed on dereferencing of unallocated space.
      
      The new helper function called is_stmt_prepare_or_first_stmt_execute
      is added to the Query_arena class.
      The find_field_in_view function now uses
      is_stmt_prepare_or_first_stmt_execute() to check whether
      newly created view items should be freed at the end of the query execution.
      The Item_cond::compile function now saves changes it makes to item tree.
      
      mysql-test/r/ps.result:
        Added a test case for the bug#48508.
      mysql-test/t/ps.test:
        Added a test case for the bug#48508.
      sql/item_cmpfunc.cc:
        Bug#48508: Crash on prepared statement re-execution.
        The Item_cond::compile function now saves changes it makes to item tree.
      sql/sql_base.cc:
        Bug#48508: Crash on prepared statement re-execution.
        The find_field_in_view function now uses
        is_stmt_prepare_or_first_stmt_execute() to check whether
        newly created view items should be freed at the end of the query execution.
      sql/sql_class.h:
        Bug#48508: Crash on prepared statement re-execution.
        The Query_arena::is_stmt_prepare_or_first_sp_execute function now correctly
        do its check.
      7853f553
  37. 21 Oct, 2009 1 commit
    • Konstantin Osipov's avatar
      Backport of revno 2630.28.10, 2630.28.31, 2630.28.26, 2630.33.1, · 8ec23470
      Konstantin Osipov authored
      2630.39.1, 2630.28.29, 2630.34.3, 2630.34.2, 2630.34.1, 2630.29.29,
      2630.29.28, 2630.31.1, 2630.28.13, 2630.28.10, 2617.23.14 and
      some other minor revisions.
      
      This patch implements: 
      
      WL#4264 "Backup: Stabilize Service Interface" -- all the
      server prerequisites except si_objects.{h,cc} themselves (they can
      be just copied over, when needed).
      
      WL#4435: Support OUT-parameters in prepared statements.
      
      (and all issues in the initial patches for these two
      tasks, that were discovered in pushbuild and during testing).
      
      Bug#39519: mysql_stmt_close() should flush all data
      associated with the statement.
      
      After execution of a prepared statement, send OUT parameters of the invoked
      stored procedure, if any, to the client.
      
      When using the binary protocol, send the parameters in an additional result
      set over the wire.  When using the text protocol, assign out parameters to
      the user variables from the CALL(@var1, @var2, ...) specification.
      
      The following refactoring has been made:
        - Protocol::send_fields() was renamed to Protocol::send_result_set_metadata();
        - A new Protocol::send_result_set_row() was introduced to incapsulate
          common functionality for sending row data.
        - Signature of Protocol::prepare_for_send() was changed: this operation
          does not need a list of items, the number of items is fully sufficient.
      
      The following backward incompatible changes have been made:
        - CLIENT_MULTI_RESULTS is now enabled by default in the client;
        - CLIENT_PS_MULTI_RESUTLS is now enabled by default in the client.
      
      include/mysql.h:
        Add a new flag to MYSQL_METHODS::flush_use_result
        function pointer. This flag determines if all results
        should be flushed or only the first one:
            
        - if flush_all_results is TRUE, then cli_flush_use_result()
          will read/flush all pending results. I.e. it will read
          all packets while server status attribute indicates that
          there are more results. This is a new semantic, required
          to fix the bug.
                    
        - if flush_all_results is FALSE, the old sematic
          is preserved -- i.e. cli_flush_use_result() reads data
          until first EOF-packet.
      include/mysql.h.pp:
        Update the ABI with new calls (compatible changes).
      include/mysql_com.h:
        Add CLIENT_PS_OUT_PARAMS -- a client capability indicating that the client supportsю
      libmysql/libmysql.c:
        Add mysql_stmt_next_result() -- analogue of mysql_next_result() for binary protocol.
        Fix a minor bug in alloc_fields() -- not all members were copied over,
        and some only shallow-copied (catalog).
        Flush all results in mysql_stmt_close() (Bug#39519).
      libmysqld/lib_sql.cc:
        Rename send_fields() -> send_result_set_metadata().
        Refactoring: change prepare_for_send() so that it accepts only 
        what it really needs -- a number of elements in the list.
      mysql-test/r/ps.result:
        Update results: WL#4435.
      mysql-test/t/ps.test:
        WL#4435: A test case for an SQL-part of the problem.
      sql-common/client.c:
        Bug#39519.
        Implement new functionality in cli_flush_use_result():
        if flush_all_delete is TRUE, then it should read/flush
        all pending results.
      sql/Makefile.am:
        Add a new header sql_prepare.h to the list
        of build headers.
      sql/events.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/handler.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/mysql_priv.h:
        Move sql_prepare.cc-specific declarations to a new
        header - sql_prepare.h.
      sql/procedure.h:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/protocol.cc:
        Move the logic responsible for sending of one result
        set row to the Protocol class. Define a template
        for end-of-statement action. 
        Refactoring: change prepare_for_send() so that it accepts 
        only what it really needs -- a number of elements in the list.
        Rename send_fields() to send_result_set_metadata().
      sql/protocol.h:
        Update with new declarations (WL#4435).
        Rename send_fields() -> send_result_set_metadata().
        prepare_for_send() only needs the number of columns to send,
        and doesn't use the item list - update signature to require
        only what's needed.
        Add a new protocol type -- Protocol_local.
      sql/repl_failsafe.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/slave.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_acl.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_base.cc:
        Include sql_prepare.h (for Reprepare_observer).
      sql/sql_cache.cc:
        Extend the query cache flags block to be able
        to store a numeric id for the result format,
        not just a flag binary/non-binary.
      sql/sql_class.cc:
        Update to use the rename of Protocol::send_fields()
        to Protocol::send_result_set_metadata().
        Use Protocol::send_one_result_set_row().
      sql/sql_class.h:
        Move the declaration of Reprepare_observer to the 
        new header - sql_prepare.h.
        Update to the new signature of class Protocol::send_fields().
      sql/sql_connect.cc:
        Use a protocol template method instead of
        raw NET layer API at the end of a statement.
      sql/sql_cursor.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_error.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_handler.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
        Use new method Protocol::send_one_result_set_row().
      sql/sql_help.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_lex.cc:
        Initialize multi_statements variable.
        Add a handy constant for empty lex
        string.
      sql/sql_lex.h:
        Add a separate member for a standalone
        parsing option - multi-statements support.
      sql/sql_list.cc:
        sql_list.h is a standalone header now, 
        no need to include mysql_priv.h.
      sql/sql_list.h:
        Make sql_list.h a stand-alone header.
      sql/sql_parse.cc:
        Include sql_prepare.h for prepared
        statements- related declarations.
        Use a new Protocol template method to end
        each statement (send OK, EOF or ERROR to
        the client).
      sql/sql_prepare.cc:
        Implement Execute Direct API (WL#4264), 
        currently unused. It will be used by the service
        interface (Backup).
        Use a new header - sql_prepare.h.
        Add support for OUT parameters in the 
        binary and text protocol (prepared statements 
        only).
      sql/sql_prepare.h:
        Add a new header to contain (for now)
        all prepared statement- external
        related declarations.
      sql/sql_profile.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_repl.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_select.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_show.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_string.h:
        Add a way to convert a String to LEX_STRING.
      sql/sql_table.cc:
        Rename: Protocol::send_fields() -> 
        Protocol::send_result_set_metadata().
      sql/sql_update.cc:
        Remove an extraneous my_error(). The error
        is already reported in update_non_unique_table_error().
      sql/sql_yacc.yy:
        Support for multi-statements is an independent
        property of parsing, not derived from 
        the protocol type.
      tests/mysql_client_test.c:
        Add tests for WL#4435 (binary protocol).
      8ec23470
  38. 09 Oct, 2009 1 commit
    • Alexander Nozdrin's avatar
      A backporting patch for WL#4300 (Define privileges for tablespaces). · 13f09243
      Alexander Nozdrin authored
      Original revision in 6.0:
      ------------------------------------------------------------
      revno: 2630.13.11
      committer: Alexander Nozdrin <alik@mysql.com>
      branch nick: 6.0-rt-wl4300
      timestamp: Thu 2008-07-24 11:44:21 +0400
      message:
        A patch for WL#4300: Define privileges for tablespaces.
      ------------------------------------------------------------
      
      per-file messages:
        mysql-test/r/grant.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/r/ps.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/r/system_mysql_db.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/suite/falcon/r/falcon_tablespace_priv.result
          Test case for WL#4300.
        mysql-test/suite/falcon/t/falcon_tablespace_priv.test
          Test case for WL#4300.
        mysql-test/suite/ndb/r/ndb_dd_ddl.result
          Test case for WL#4300.
        mysql-test/suite/ndb/t/ndb_dd_ddl.test
          Test case for WL#4300.
        scripts/mysql_system_tables.sql
          New columm 'Create_tablespace_priv' has been added to mysql.user.
        scripts/mysql_system_tables_data.sql
          'CREATE TABLESPACE' is granted by default to the root user.
        scripts/mysql_system_tables_fix.sql
          Grant 'CREATE TABLESPACE' privilege during system table upgrade
          if a user had SUPER privilege.
        sql/sql_acl.cc
          Added CREATE TABLESPACE privilege.
        sql/sql_acl.h
          Added CREATE TABLESPACE privilege.
        sql/sql_parse.cc
          Check global 'CREATE TABLESPACE' privilege for the following SQL statements:
            - CREATE | ALTER | DROP TABLESPACE
            - CREATE | ALTER | DROP LOGFILE GROUP
        sql/sql_show.cc
          Added CREATE TABLESPACE privilege.
        sql/sql_yacc.yy
          Added CREATE TABLESPACE privilege.
      13f09243