1. 14 Jun, 2012 1 commit
  2. 13 Jun, 2012 2 commits
  3. 10 Jun, 2012 3 commits
  4. 09 Jun, 2012 1 commit
    • Igor Babaev's avatar
      Fixed LP bug #1010729. · 10f42e2c
      Igor Babaev authored
      The bug prevented acceptance of UNION queries whose non-first select 
      clauses contained join expressions with degenerated single-table nests
      as valid queries.
      The bug was introduced into mysql-5.5 code line by the patch for
      bug 33204.
      10f42e2c
  5. 08 Jun, 2012 4 commits
    • Michael Widenius's avatar
    • Michael Widenius's avatar
      Changed last_insert_id() to be unsigned. · 438e9eca
      Michael Widenius authored
      Fixed MDEV-331: last_insert_id() returns a signed number
      
      mysql-test/r/auto_increment.result:
        Added test case
      mysql-test/t/auto_increment.test:
        Added test case
      sql/item_func.h:
        Changed last_insert_id() to be unsigned.
      438e9eca
    • Vladislav Vaintroub's avatar
      LP1008334 : Speedup specific datetime queries that got slower with... · afe1ef5e
      Vladislav Vaintroub authored
      LP1008334 : Speedup specific datetime queries that got slower with introduction of microseconds in 5.3
      
      - Item::get_seconds() now skips decimal arithmetic, if decimals is 0. This significantly speeds up from_unixtime() if no fractional part is passed.
      - replace sprintfs used to format temporal values  by hand-coded formatting 
        
      Query1 (original query in the bug report)
      BENCHMARK(10000000,DATE_SUB(FROM_UNIXTIME(RAND() * 2147483648), INTERVAL (FLOOR(1 + RAND() * 365)) DAY)) 
        
      Query2 (Variation of query1 that does not use fractional part in FROM_UNIXTIME parameter)
      BENCHMARK(10000000,DATE_SUB(FROM_UNIXTIME(FLOOR(RAND() * 2147483648)), INTERVAL (FLOOR(1 + RAND() * 365)) DAY)) 
        
      Prior to the patch, the runtimes were (32 bit compilation/AMD machine)
      Query1: 41.53 sec 
      Query2: 23.90 sec
        
      With the patch, the runtimes are
      Query1: 32.32 sec (speed up due to removing sprintf)
      Query2: 12.06 sec (speed up due to skipping decimal arithmetic)
      afe1ef5e
    • unknown's avatar
      MDEV-329: MariaDB 5.5 does not use fdatasync(). · cb6109cd
      unknown authored
      The --debug-no-sync incorrectly defaulted to ON, disabling sync calls
      by default which can loose data or cause corruption. Also, the code
      used fsync() instead of the sometimes more efficient fdatasync().
      cb6109cd
  6. 06 Jun, 2012 4 commits
  7. 05 Jun, 2012 1 commit
    • unknown's avatar
      Fixed bug lp:1000649 · f1ab0089
      unknown authored
      Analysis:
      
      When the method JOIN::choose_subquery_plan() decided to apply
      the IN-TO-EXISTS strategy, it set the unit and select_lex
      uncacheable flag to UNCACHEABLE_DEPENDENT_INJECTED unconditionally.
      As result, even if IN-TO-EXISTS injected non-correlated predicates,
      the subquery was still treated as correlated.
      
      Solution:
      Set the subquery as correlated only if the injected predicate(s) depend
      on the outer query.
      f1ab0089
  8. 04 Jun, 2012 4 commits
    • Sergei Golubchik's avatar
      MDEV-308 lp:1008516 - Failing assertion: templ->mysql_col_len == len · 265d5aaa
      Sergei Golubchik authored
      remove the offending assert.
      take the test case from mysql Bug#58015
      265d5aaa
    • Sergei Golubchik's avatar
      MDEV-136 Non-blocking "set read_only" · 4361c864
      Sergei Golubchik authored
      backport dmitry.shulga@oracle.com-20120209125742-w7hdxv0103ymb8ko from mysql-trunk:
      
        Patch for bug#11764747 (formerly known as 57612): SET GLOBAL READ_ONLY=1 cannot
        progress when a table is locked with LOCK TABLES.
        
        The reason for the bug was that mysql server makes a flush of all open tables
        during handling of statement 'SET GLOBAL READ_ONLY=1'. Therefore if some of
        these tables were locked by "LOCK TABLE ... READ" from a different connection,
        then execution of statement 'SET GLOBAL READ_ONLY=1' would be waiting for
        the lock for such table even if the table was locked in a compatible read mode.
        
        Flushing of all open tables before setting of read_only system variable
        is inherited from 5.1 implementation since this was the only possible approach
        to ensure that there isn't any pending write operations on open tables.
        
        Start from version 5.5 and above such behaviour is guaranteed by the fact
        that we acquire global_read_lock before setting read_only flag. Since
        acquiring of global_read_lock is successful only when there isn't any 
        active write operation then we can remove flushing of open tables from
        processing of SET GLOBAL READ_ONLY=1.
        
        This modification changes the server behavior so that read locks held
        by other connections (LOCK TABLE ... READ) no longer will block attempts
        to enable read_only.
      4361c864
    • Sergei Golubchik's avatar
      merge with 5.3. · 3e3606d2
      Sergei Golubchik authored
      Take only test cases from MDEV-136 Non-blocking "set read_only"
      3e3606d2
    • unknown's avatar
      Fix bug lp:1008487 · ca5473f1
      unknown authored
      Analysis:
      The crash is a result of Item_cache_temporal::example not being set
      (it is NULL). It turns out that the value of Item_cache_temporal
      may be set directly by calling Item_cache_temporal::store_packed
      without ever setting the "example" of this Item_cache. Therefore
      the failing assertion is too narrow.
      
      Solution:
      Remove the assert.
      In principle we could overwrite this method for Item_cache_temporal,
      but it doesn't make sense just for this assert.
      ca5473f1
  9. 02 Jun, 2012 1 commit
  10. 01 Jun, 2012 3 commits
    • Sergey Petrunya's avatar
      BUG#1006164: Multi-table DELETE that uses innodb + index_merge/intersect may fail to delete rows · c17216ee
      Sergey Petrunya authored
      - Set index columns to be read when using index_merge, even if TABLE->no_keyread is 
        set for the table (happens for multi-table UPDATEs)
      c17216ee
    • unknown's avatar
      MDEV-304: Insufficient buffer allocation for Query_log_event · 4d8d7912
      unknown authored
      The constructor for Query_log_event allocated 2 bytes too few for
      extra space needed by Query cache. (Not sure if this is reproducible
      in practice, as there are often a couple of extra bytes allocated
      for unused string zero terminators, but better safe than sorry).
      4d8d7912
    • unknown's avatar
      Fixed bug MDEV-288 · 7ddd5418
      unknown authored
      CHEAP SQ: Valgrind warnings "Memory lost" with IN and EXISTS nested subquery, materialization+semijoin
      
      Analysis:
      The memory leak was a result of the interaction of semi-join optimization
      with early optimization of constant subqueries. The function:
      setup_jtbm_semi_joins() created a dummy temporary table "dummy_table"
      in order to make some JOIN_TAB objects complete. Normally, such temporary
      tables are freed inside JOIN_TAB::cleanup.
      
      However, the inner-most subquery is pre-optimized, which allows the
      optimization fo the MAX subquery to determine that its WHERE is TRUE,
      and thus to compute the result of the MAX during optimization. This
      ultimately allows the optimize phase of the outer query to find that
      it WHERE clause is FALSE. Once JOIN::optimize finds that the result
      set is empty, it sets zero_result_cause, and returns *before* it ever
      reached make_join_statistics(). As a result the query plan has no
      JOIN_TABs at all. Since the temporary table is supposed to be cleanup
      via JOIN_TAB::cleanup, this never happens because there is no JOIN_TAB
      for this table. Hence we get a memory leak.
      
      Solution:
      Whenever there are no JOIN_TABs, iterate over all table reference in
      JOIN::join_list, and free the ones that contain semi-join temporary
      tables.
      7ddd5418
  11. 30 May, 2012 3 commits
  12. 29 May, 2012 4 commits
    • 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
    • Sergei Golubchik's avatar
      RPM packages should not obsolete themselves. · 32addeaf
      Sergei Golubchik authored
      Otherwise yum on fedora will not install them
      (rpm will, yum on centos and rhel will).
      32addeaf
    • Sergei Golubchik's avatar
      MDEV-293 5.5 RPMs for RHEL6/CentOS6 · 6cfb62b7
      Sergei Golubchik authored
      Build MariaDB-compat rpm by repackaging files from MariaDB-shared-5.3.*.rpm
      Or RHEL6/CentOS6 make all other MariaDB rpms depend on MariaDB-compat.
      6cfb62b7
    • Alexey Botchkov's avatar
      MDEV-294 SELECT WHERE ST_CONTAINS doesn't return all the records where ST_CONTAINS() is 1. · 662c51ba
      Alexey Botchkov authored
              Optimizator fails using index with ST_Within(g, constant_poly).
      
      per-file comments:
        mysql-test/r/gis-rt-precise.result
              test result fixed.
        mysql-test/r/gis-rtree.result
              test result fixed.
        mysql-test/suite/maria/r/maria-gis-rtree-dynamic.result
              test result fixed.
        mysql-test/suite/maria/r/maria-gis-rtree-trans.result
              test result fixed.
        mysql-test/suite/maria/r/maria-gis-rtree.result
              test result fixed.
        storage/maria/ma_rt_index.c
              Use MBR_INTERSECT mode when optimizing the select WITH ST_Within.
        storage/myisam/rt_index.c
              Use MBR_INTERSECT mode when optimizing the select WITH ST_Within.
      662c51ba
  13. 26 May, 2012 1 commit
  14. 25 May, 2012 4 commits
  15. 24 May, 2012 2 commits
    • Sergey Petrunya's avatar
      BUG#1002630: Valgrind warnings 'Invalid read' in subselect_engine::calc_const_tables with SELECT · 5b73a17b
      Sergey Petrunya authored
      - In JOIN::exec(), make the having->update_used_tables() call before we've
        made the JOIN::cleanup(full=true) call. The latter frees SJ-Materialization
        structures, which correlated subquery predicate items attempt to walk afterwards.
      5b73a17b
    • unknown's avatar
      Test case for bug lp:1001117, MySQL BUG#12330344 · 4fa89b5f
      unknown authored
      Analysis:
      The problem in the original MySQL bug is that the range optimizer
      performs its analysis in a separate MEM_ROOT object that is freed
      after the range optimzier is done. During range analysis get_mm_tree
      calls Item_func_like::select_optimize, which in turn evaluates its
      right argument. In the test case the right argument is a subquery.
      
      In MySQL, subqueries are optimized lazyly, thus the call to val_str
      triggers optimization for the subquery. All objects needed by the
      subquery plan end up in the temporary MEM_ROOT used by the range
      optimizer. When execution ends, the JOIN::cleanup process tries to
      cleanup objects of the subquery plan, but all these objects are gone
      with the temporary MEM_ROOT. The solution for MySQL is to switch the
      mem_root.
      
      In MariaDB with the patch for bug lp:944706, all constant subqueries
      that may be used by the optimization process are preoptimized. Therefore
      Item_func_like::select_optimize only triggers subquery execution, and
      the above problem is not present.
      
      The patch however adds a test whether the evaluated right argument of
      the LIKE predicate is expensive. This is consistent with our approach
      not to evaluate expensive expressions during optimization.
      4fa89b5f
  16. 23 May, 2012 2 commits