1. 29 Jun, 2017 8 commits
  2. 28 Jun, 2017 5 commits
    • Igor Babaev's avatar
      Fixed the bug mdev-13107 and some similar unreported bugs. · e6080239
      Igor Babaev authored
      The problems were in the code of sql_show.cc. There the tables
      could be opened in such a way that mysql_derived_init() never
      worked for CTE tables. As a result they were not marked as
      derived and mysql_handle_derived() were not called for derived
      tables used in their specifications.
      e6080239
    • Vicențiu Ciorbaru's avatar
      MDEV-12851: Case with window functions query crashes server · 31ba0fa4
      Vicențiu Ciorbaru authored
      The "is null" function performs one operation which no other Item_func
      does, which is to update used tables during fix_length_and_dec().
      
      This however can not be performed before window functions have had a
      chance to resolve their order by and partition by definitions, which
      happens after the initial setup_fields call. Consequently, do not call
      Item_func_isnull update_used_tables during fix_length_and_dec().
      
      There was another issue detected once the crash was resolved.
      Because window functions did not implement is_null() method, we would
      end up returning bad results for "is null" and "is not null" functions.
      Implemented is_null() method for Item_windowfunc.
      31ba0fa4
    • Vicențiu Ciorbaru's avatar
      MDEV-13186: main.win failure post MDEV-12336 · 23edc7c8
      Vicențiu Ciorbaru authored
      During statement preparation st_order::item gets set to a value in
      ref_ptr_array. During statement execution we were overriding that value,
      causing subsequent checks for window functions to return true.
      
      Whenever we do any setting from ref_ptr_array, make sure to always
      store the value in all_fields as well.
      
      For function items containing window functions, as MDEV-12336 has
      discovered, we don't need to create a separate Item_direct_ref or
      Item_aggregate_ref as they will be computed directly from the top-level
      item once the window function argument columns are computed.
      23edc7c8
    • Vicențiu Ciorbaru's avatar
      Simplify IO_CACHE by removing current_pos and end_pos as self-references · 90038693
      Vicențiu Ciorbaru authored
      These self references were previously used to avoid having to check the
      IO_CACHE's type. However, a benchmark shows that on x86 5930k stock,
      the type comparison is marginally faster than the double pointer dereference.
      For 40 billion my_b_tell calls, the difference is .1 seconds in favor of performing the
      type check. (Basically there is no measurable difference)
      
      To prevent bugs from copying the structure using the equals(=) operator,
      and having to do the bookkeeping manually, remove these "convenience"
      variables.
      90038693
    • Marko Mäkelä's avatar
      Avoid InnoDB messages about recovery after creating redo logs · b3171607
      Marko Mäkelä authored
      srv_log_files_created: A debug flag to ensure that InnoDB redo log
      files can only be created once in the server lifetime, and that
      after log files have been created, no crash recovery will take place.
      
      recv_scan_log_recs(): Detect the special case where the log consists
      of a sole MLOG_CHECKPOINT record, such as immediately after creating
      the redo logs.
      
      recv_recovery_from_checkpoint_start(): Skip the recovery message
      if the redo log is logically empty.
      b3171607
  3. 27 Jun, 2017 2 commits
    • Marko Mäkelä's avatar
      Fix a merge error in commit 8f643e20 · 3e1d0ff5
      Marko Mäkelä authored
      A merge error caused InnoDB bootstrap to fail when
      innodb_undo_tablespaces was set to more than 2.
      This was because of a bug that was introduced to
      srv_undo_tablespaces_init() by the merge.
      
      Furthermore, some adjustments for Oracle Bug#25551311 aka
      Bug#23517560 changes were forgotten. We must minimize direct
      references to srv_undo_tablespaces_open and use predicates
      instead.
      
      srv_undo_tablespaces_init(): Increment srv_undo_tablespaces_open
      once, not twice, per loop iteration.
      
      is_system_or_undo_tablespace(): Remove (unused function).
      
      is_predefined_tablespace(): Invoke srv_is_undo_tablespace().
      3e1d0ff5
    • Marko Mäkelä's avatar
      MDEV-13176 ALTER TABLE…CHANGE col col TIMESTAMP NOT NULL DEFAULT… fails · 29624ea3
      Marko Mäkelä authored
      When it comes to DEFAULT values of columns, InnoDB is imposing both
      unnecessary and insufficient conditions on whether ALGORITHM=INPLACE
      should be allowed for ALTER TABLE.
      
      When changing an existing column to NOT NULL, any NULL values in the
      columns only get a special treatment if the column is changed to an
      AUTO_INCREMENT column (which is not supported by ALGORITHM=INPLACE)
      or the column type is TIMESTAMP. In all other cases, an error
      must be reported for the failure to convert a NULL value to NOT NULL.
      
      InnoDB was unnecessarily interested in whether the DEFAULT value
      is not constant when altering other than TIMESTAMP columns. Also,
      when changing a TIMESTAMP column to NOT NULL, InnoDB was performing
      an insufficient check, and it was incorrectly allowing a constant
      DEFAULT value while not being able to replace NULL values with that
      constant value.
      
      Furthermore, in ADD COLUMN, InnoDB is unnecessarily rejecting certain
      nondeterministic DEFAULT expressions (depending on the session
      parameters or the current time).
      29624ea3
  4. 26 Jun, 2017 3 commits
  5. 23 Jun, 2017 3 commits
    • Marko Mäkelä's avatar
      Prevent interleaved error log output on InnoDB startup · 0d69d313
      Marko Mäkelä authored
      buf_flush_page_cleaner_coordinator(): Signal the thread creator
      that the error log output regarding setpriority() has been issued.
      
      innobase_start_or_create_for_mysql(): Wait for
      buf_flush_page_cleaner_coordinator() to completely start up.
      
      This prevents sporadic failures of tests that search the server
      error log for InnoDB redo log recovery messages.
      0d69d313
    • Marko Mäkelä's avatar
      Do allow writes for innodb_force_recovery=2 or 3 · 0288fa61
      Marko Mäkelä authored
      While the primary purpose of innodb_force_recovery is to allow
      data to be rescued from an InnoDB instance that would crash due
      to some data corruption, the settings 1, 2, or 3 are relatively
      safe to use and there is no need to prevent write transactions
      in these modes.
      
      The setting innodb_force_recovery=4 and above can cause database
      corruption. For those modes, we already set the flag
      high_level_read_only to disable modifications, except DROP TABLE.
      
      MODIFICATIONS_NOT_ALLOWED_MSG_FORCE_RECOVERY: Remove. There is no
      need to spam the error log for each refused DML operation. It suffices
      to return an error to the client. There will be messages at startup
      if innodb_read_only or innodb_force_recovery are preventing writes.
      0288fa61
    • Igor Babaev's avatar
      Fixed the bug mdev-12845. · 9f362219
      Igor Babaev authored
      This patch fills in a serious flaw in the
      code that supports condition pushdown into
      materialized views / derived tables.
      
      If a predicate happened to contain a reference
      to a mergeable view / derived table and it does
      not depended directly on the target materialized
      view / derived table then the predicate was not
      considered as a subject to pusdown to this view
      / derived table.
      9f362219
  6. 22 Jun, 2017 7 commits
  7. 21 Jun, 2017 1 commit
  8. 20 Jun, 2017 1 commit
    • Vicențiu Ciorbaru's avatar
      MDEV-13068 Crash in Item::split_sum_func2 with INSERT SELECT using window functions · 0992be92
      Vicențiu Ciorbaru authored
      When running setup fields during the final step of insert using select
      the final setup_fields does not have any sum functions. Our current
      condition for calling split_sum_func however would attempt to use an empty
      NULL sum_func_list, if the item contained a window function.
      
      The solution is to not perform another split_sum_func for the item
      containing a window function if we do not actually have a sum_func_list.
      0992be92
  9. 19 Jun, 2017 6 commits
  10. 16 Jun, 2017 4 commits
    • Igor Babaev's avatar
      Fixed the bug mdev-13064. · cf4a6abe
      Igor Babaev authored
      This is another attempt to fix the bug mdev-12992.
      This patch introduces st_select_lex::context_analysis_place for
      the place in SELECT where context analysis is currently performed.
      It's similar to st_select_lex::parsing_place, but it is used at
      the preparation stage.
      cf4a6abe
    • Oleksandr Byelkin's avatar
      result fix · f73507e6
      Oleksandr Byelkin authored
      f73507e6
    • Sergey Vojtovich's avatar
      MDEV-12620 - set lock_wait_timeout = 1;flush tables with read lock; · 056bab08
      Sergey Vojtovich authored
                   lock not released after timeout
      
      Release GRL if FLUSH TABLES phase failed.
      056bab08
    • Marko Mäkelä's avatar
      Remove trx_t::has_search_latch and simplify debug code · 50faeda4
      Marko Mäkelä authored
      When the btr_search_latch was split into an array of latches
      in MySQL 5.7.8 as part of the Oracle Bug#20985298 fix, the "caching"
      of the latch across storage engine API calls was removed, and
      the field trx->has_search_latch would only be set during a short
      time frame in the execution of row_search_mvcc(), which was
      formerly called row_search_for_mysql().
      
      This means that the column
      INFORMATION_SCHEMA.INNODB_TRX.TRX_ADAPTIVE_HASH_LATCHED will always
      report 0. That column cannot be removed in MariaDB 10.2, but it
      can be removed in future releases.
      
      trx_t::has_search_latch: Remove.
      
      trx_assert_no_search_latch(): Remove.
      
      row_sel_try_search_shortcut_for_mysql(): Remove a redundant condition
      on trx->has_search_latch (it was always true).
      
      sync_check_iterate(): Make the parameter const.
      
      sync_check_functor_t: Make the operator() const, and remove result()
      and the virtual destructor. There is no need to have mutable state
      in the functors.
      
      sync_checker<bool>: Replaces dict_sync_check and btrsea_sync_check.
      
      sync_check: Replaces btrsea_sync_check.
      
      dict_sync_check: Instantiated from sync_checker.
      
      sync_allowed_latches: Use std::find() directly on the array.
      Remove the std::vector.
      
      TrxInInnoDB::enter(), TrxInInnoDB::exit(): Remove obviously redundant
      debug assertions on trx->in_depth, and use equality comparison against 0
      because it could be more efficient on some architectures.
      50faeda4