1. 23 Feb, 2013 1 commit
  2. 22 Feb, 2013 1 commit
    • Annamalai Gurusami's avatar
      Bug #14211565 CRASH WHEN ATTEMPTING TO SET SYSTEM VARIABLE TO RESULT OF VALUES() · dc696973
      Annamalai Gurusami authored
      Problem:
      
      When the VALUES() function is inappropriately used in the SET stmt the server
      exits.  
      
      set port = values(v);
      
      This happens because the values(v) will be parsed as an Item_insert_value by
      the parser.  Both Item_field and Item_insert_value return the type as
      FIELD_ITEM.  But for Item_insert_value the field_name member is NULL.  In
      set_var constructor, when the type of the item is FIELD_ITEM we try to access
      the non-existent field_name. 
      
      The class hierarchy is as follows:
      Item -> Item_ident -> Item_field -> Item_insert_value
      
      The Item_ident::field_name is NULL for Item_insert_value.  
      
      Solution:
      
      In the parsing stage, in the set_var constructor if the item type is
      FIELD_ITEM and if the field_name is non-existent, then it is probably
      the Item_insert_value.  So leave it as it is for later evaluation.
      
      rb://2004 approved by Roy and Norvald.
      
      dc696973
  3. 19 Feb, 2013 3 commits
    • Sujatha Sivakumar's avatar
      Bug#11746817:MYSQL_INSTALL_DB CREATES WILDCARD GRANTS WHEN · 4d494b17
      Sujatha Sivakumar authored
      HOST HAS '_' IN THE HOSTNAME
      
      Problem:
      =======
      '_' and '%' are treated as a wildcards by the ACL code and
      this is documented in the manual. The problem with
      mysql_install_db is that it does not take this into account
      when creating the initial GRANT tables:
      
      --- cut ---
      REPLACE INTO tmp_user SELECT @current_hostname,'root','','Y',
      'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
      'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',
      0,0,0,0 FROM dual WHERE LOWER( @current_hostname) != 'localhost';
      --- cut ---
      
      If @current_hostname contains any wildcard characters, then 
      a wildcard entry will be defined for the 'root' user, 
      which is a flaw.
      
      Analysis:
      ========
      As per the bug description when we have a hostname with a
      wildcard character in it, it allows clients from several other
      hosts with similar name pattern to connect to the server as root.
      For example, if the hostname is like 'host_.com' then the same
      name is logged in mysql.user table. This allows 'root' users
      from other hosts like 'host1.com', 'host2.com' ... to connect
      to the server as root user.
      
      While creating the intial GRANT tables we do not have a check
      for wildcard characters in hostname.
      
      Fix:
      ===
      As part of fix escape character "\" is added before wildcard
      character to make it a plain character, so that the one and
      only host with the exact name will be able to connect to the
      server.
      
      scripts/mysql_system_tables_data.sql:
        while creating default users get the hostname and
        replace the wildcard characters within the hostname after
        escaping them.
      4d494b17
    • Harin Vadodaria's avatar
      Bug#16235681: TURN OFF DEFAULT COMPRESSION WHILE USING · c4013654
      Harin Vadodaria authored
                    OPENSSL
      
      Description: Specify preference to disable compression
                   while using OpenSSL library. OpenSSL uses
                   zlib compression by default which may
                   lead to some problems.
      c4013654
    • unknown's avatar
      No commit message · 8ea6ed92
      unknown authored
      No commit message
      8ea6ed92
  4. 18 Feb, 2013 1 commit
  5. 16 Feb, 2013 1 commit
    • Shivji Kumar Jha's avatar
      BUG#15965353- RPL.RPL_ROW_UNTIL FAILS ON PB2, · 5fcf40a2
      Shivji Kumar Jha authored
                    PLATFORM= MACOSX10.6 X86_64 MAX
      
      Problem: The test was failing on pb2's mac machine because
               it was not cleaned up properly. The test checks if
               the command 'start slave until' throws a proper
               error when issued with a wrong number/type of
               parameters. After this,the replication stream was
               stopped using the include file 'rpl_end.inc'.
               The errors thrown earlier left the slave in an
               inconsistent state to be closed by the include
               file which was caught by the mac machine.
      
      Fix: Started slave by invoking start_slave.inc to have a
           working slave before calling rpl_reset.inc
      
      Problem: The test file was not in a good shape. It tested
               start slave until relay log file/pos combination 
               wrongly. A couple of commands were executed at 
               master and replicated at slave. Next, the 
               coordinates in terms of relay log file and pos 
               were noted down followed by reset slave and start
               slave until saved relay log file/pos. Reset slave
               deletes  all relay log files and makes the slave 
               forget its replication position. So, using the 
               saved coordiantes after reset slave is wrong.
      
      Fix: Split the test in two parts:
           a) Test for start slave until master log file/pos and
              checking for correct errors in the failure 
              scenarios.
           b) Test for start slave until relay log file/pos.
      
      Problem: The variables auto_increment_increment and 
               auto_increment_offset were set in the the include
               file rpl_init.inc. This was only configured for 
               some connections that are rarely used by test 
               cases, so likely that it will cause confusion. 
               If replication tests want to setup these variables
               they should do so explicitly.
      
      Fix:
           a) Removed code to set the variables
              auto_increment_increment and auto_increment_offset
              in the include file.
           b) Updated tests files using the same.
      5fcf40a2
  6. 15 Feb, 2013 2 commits
    • Pedro Gomes 's avatar
      BUG#13545447: RPL_ROTATE_LOGS FAILS DUE TO CONCURRENCY ISSUES IN REP. CODE · 7e8c8877
      Pedro Gomes authored
      In method mysql_binlog_send, right after detecting a EOF in the
      read event loop, and before deciding if we should change to a new
      binlog file there is a execution window where new events can be
      written to the binlog and a rotation can happen. When reaching
      the test, the function will then change to a new binlog file
      ignoring all the events written in this window. This will result
      in events not being replicated.
      
      Only when the binlog is detected as deactivated in the event loop
      of the dump thread, can we really know that no more events
      remain. For this reason, this test is now made under the log lock
      in the beginning of the event loop when reading the events.
      7e8c8877
    • Harin Vadodaria's avatar
      Bug#16218104: MYSQL YASSL - LUCKY THIRTEEN: BREAKING THE · 795b8acc
      Harin Vadodaria authored
                    TLS AND DTLS RECORD PROTOCOLS
      
      Description: In yassl, decryption phase in TLS protocol
                   depends on type of padding. This patch
                   removes this dependancy and makes error
                   generation/decryption process independent
                   of padding type.
      795b8acc
  7. 14 Feb, 2013 2 commits
  8. 12 Feb, 2013 1 commit
    • Annamalai Gurusami's avatar
      Bug #11753153 INNODB GENERATES SYMBOLS THAT ARE TOO LONG, INVALID DDL · 8aecb30c
      Annamalai Gurusami authored
      FROM SHOW CREATE
      
      Problem: The length of the internally generated foreign key name 
      is not checked. 
      
      Solution: The length of the internally generated foreign key name is
      checked.  If it is greater than the allowed limit, an error message
      is reported. Also, the constraint name is printed in the same manner
      as the table name, using the system charset information.
      
      rb://1969 approved by Marko.
      
      8aecb30c
  9. 08 Feb, 2013 4 commits
  10. 07 Feb, 2013 3 commits
  11. 06 Feb, 2013 1 commit
  12. 05 Feb, 2013 2 commits
  13. 04 Feb, 2013 1 commit
  14. 31 Jan, 2013 3 commits
    • Gleb Shchepa's avatar
      Bug #11827369: ASSERTION FAILED: !THD->LEX->CONTEXT_ANALYSIS_ONLY · 7ebfe30b
      Gleb Shchepa authored
      Some queries with the "SELECT ... FROM DUAL" nested subqueries
      failed with an assertion on debug builds.
      Non-debug builds were not affected.
      
      There were a few different issues with similar assertion
      failures on different queries:
      
      1. The first problem was related to the incomplete propagation
      of the "non-constant" item status from underlying subquery
      items to the outer item tree: in some cases non-constants were
      interpreted as constants and evaluated at the preparation stage
      (val_int() calls withing fix_fields() etc).
      
      Thus, the default implementation of Item_ref::const_item() from
      the Item parent class didn't take into account the "const_item"
      status of the referenced item tree -- it used the insufficient
      "used_tables() == 0" check instead. This worked in most cases
      since our "non-constant" functions like RAND() and SLEEP() set
      the RAND_TABLE_BIT in the used table map, so they aren't
      non-constant from Item_ref's "point of view". However, the
      "SELECT ... FROM DUAL" subquery may have an empty map of used
      tables, but at the same time subqueries are never "constant" at
      the context analysis stage (preparation, view creation etc).
      So, the non-contantness of such subqueries was missed.
      
      Fix: the Item_ref::const_item() function has been overloaded to
      take into account both (*ref)->const_item() status and tricky
      Item_ref::used_tables() return values, since the only
      (*ref)->const_item() call is not enough there.
      
      2. In some cases instead of the const_item() call we check a
      value of the Item::with_subselect field to recognize items
      with nested subqueries. However, the Item_ref class didn't
      propagate this value from the referenced item tree.
      
      Fix: Item::has_subquery() and Item_ref::has_subquery()
      functions have been backported from 5.6. All direct
      references to the with_subselect fields of nested items have
      been replaced with the has_subquery() function call.
      
      3. The Item_func_regex class didn't propagate with_subselect
      as well, since it overloads the Item_func::fix_fields()
      function with insufficient fix_fields() implementation.
      
      Fix: the Item_func_regex::fix_fields() function has been
      modified to gather "constant" statuses from inner items.
      
      4. The Item_func_isnull::update_used_tables() function has
      a special branch for the underlying item where the maybe_null
      value is false: in this case it marks the Item_func_isnull
      as a "const_item" and sets the cached_value to false.
      However, the Item_func_isnull::val_int() was not in sync with
      update_used_tables(): it didn't take into account neither
      const_item_cache nor cached_value for the case of
      "args[0]->maybe_null == false optimization".
      As far as such an Item_func_isnull has "const_item() == true",
      it's ok to call Item_func_isnull::val_int() etc from outer
      items on preparation stage. In this case the server tried to
      call Item_func_isnull::args[0]->isnull(), and if the args[0]
      item contained a nested not-nullable subquery, it failed
      with an assertion.
      
      Fix: take the value of Item_func_isnull::const_item_cache into
      account in the val_int() function.
      
      5. The auxiliary Item_is_not_null_test class has a similar
      optimization in the update_used_tables() function as the
      Item_func_isnull class has, and the same issue in the val_int()
      function.
      In addition to that the Item_is_not_null_test::update_used_tables()
      doesn't update the const_item_cache value, so the "maybe_null"
      optimization is useless there. Thus, we missed some optimizations
      of cases like these (before and after the fix):
        <  <is_not_null_test>(a),
        ---
        >  <cache>(<is_not_null_test>(a)),
      or
        < having (<is_not_null_test>(a) and <is_not_null_test>(a))
        ---
        > having 1
      etc.
      
      Fix: update Item_is_not_null_test::const_item_cache in
      update_used_tables() and take in into account in val_int().
      7ebfe30b
    • Yasufumi Kinoshita's avatar
      Bug #16220051 : INNODB_BUG12400341 FAILS ON VALGRIND WITH TOO MANY ACTIVE CONCURRENT TRANSACTION · c3d2803c
      Yasufumi Kinoshita authored
      innodb_bug12400341.test is disabled for valgrind daily test.
      It might be affected by the previous test's undo slots existing,
      because of slower execution.
      c3d2803c
    • Chaithra Gopalareddy's avatar
      Bug#14096619: UNABLE TO RESTORE DATABASE DUMP · e1ee9581
      Chaithra Gopalareddy authored
      Backport of Bug#13581962
      
      mysql-test/r/cast.result:
        Added test result for Bug#13581962,Bug#14096619
      mysql-test/t/cast.test:
        Added test case for Bug#13581962,Bug#14096619
      sql/item_func.h:
        limit max length by MY_INT64_NUM_DECIMAL_DIGITS
      e1ee9581
  15. 30 Jan, 2013 2 commits
    • unknown's avatar
      No commit message · 7aa707f2
      unknown authored
      No commit message
      7aa707f2
    • Krunal Bauskar krunal.bauskar@oracle.com's avatar
      - BUG#1608883: KILLING A QUERY INSIDE INNODB CAUSES IT TO EVENTUALLY CRASH · ed15e9c2
        WITH AN ASSERTION
      
        Correcting the build failure that was caused because of changes 
        checked-in to below mentioned revision.
        (Changes: DEBUG_SYNC_C should be disabled for innodb_plugin under
         Windows enviornment. Note: only for innodb_plugin.)
      
        revno: 3915
        revision-id: krunal.bauskar@oracle.com-20130114051951-ang92lkirop37431
        parent: nisha.gopalakrishnan@oracle.com-20130112054337-gk5pmzf30d2imuw7
        committer: Krunal Bauskar krunal.bauskar@oracle.com
        branch nick: mysql-5.1
        timestamp: Mon 2013-01-14 10:49:51 +0530
      
      
      ed15e9c2
  16. 29 Jan, 2013 1 commit
  17. 28 Jan, 2013 2 commits
    • Nuno Carvalho's avatar
      BUG#16200555: EMPTY NAME FOR USER VARIABLE IS ALLOWED AND BREAKS STATEMENT BINARY LOGGING · d1378565
      Nuno Carvalho authored
      On a previous fix, user variables with zero length name were incorrectly
      considered as event corruption, despite that them are allowed by server.
      
      Fix this wrong assumption by allowing again user variables with zero
      length on binary log.
      d1378565
    • Venkatesh Duggirala's avatar
      Bug#16084594 USER_VAR ITEM IN 'LOAD FILE QUERY' WAS NOT · 7e0901b9
      Venkatesh Duggirala authored
      PROPERLY QUOTED IN BINLOG FILE
      Problem: In load data file query, User variables are allowed
      inside "Into_list" and "Set_list". These user variables used
      inside these two lists are not properly guarded with backticks
      while server is writting into binlog. Hence user variable names
      like a` cannot be used in this context.
      
      Fix: Properly quote these variables while
      writting into binlog
      
      mysql-test/r/func_compress.result:
        changing result file
      mysql-test/r/variables.result:
        changing result file
      mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
        changing result file
      sql/item_func.cc:
        Quote the user variable items
      7e0901b9
  18. 24 Jan, 2013 2 commits
    • Venkata Sidagam's avatar
      BUG#11908153 CRASH AND/OR VALGRIND ERRORS IN FIELD_BLOB::GET_KEY_IMAGE · 26f662be
      Venkata Sidagam authored
      Backporting bug patch from 5.5 to 5.1.
      This fix is applicable to BUG#14362617 as well
      26f662be
    • Venkata Sidagam's avatar
      Bug #11752803 SERVER CRASHES IF MAX_CONNECTIONS DECREASED BELOW · 776df0a3
      Venkata Sidagam authored
                     CERTAIN LEVEL
            
      Problem description: mysqld crashes when we update the max_connections 
      variable to lesser value than the number of currently open connections.
            
      Analysis: The "alarm_queue.max_elements" size will be decided at the 
      server start time and it will get modified if we change max_connections 
      value. In the current scenario the value of "alarm_queue.max_elements" 
      is decremented when the max_connections is set to 2. When updating the  
      "alarm_queue.max_elements" value we are not updating "max_used_alarms" 
      value. Hence, instead of getting the warning "thr_alarm queue is full" 
      it is ending up in asserting the server at the time of inserting new 
      elements in the queue.
            
      Fix: the fix is to dynamically increase the size of the alarm_queue.
      In order to do that, queue_insert_safe() should be used instead if
      queue_insert().
      776df0a3
  19. 23 Jan, 2013 2 commits
    • Yasufumi Kinoshita's avatar
      Bug #16089381 : POSSIBLE NUMBER UNDERFLOW AROUND CALLING PAGE_ZIP_EMPTY_SIZE() · 65cb30b3
      Yasufumi Kinoshita authored
      some callers for page_zip_empty_size() ignored possibility its returning 0, and could cause underflow.
      
      rb#1837 approved by Marko
      65cb30b3
    • Gleb Shchepa's avatar
      Bug #11827369: ASSERTION FAILED: !THD->LEX->CONTEXT_ANALYSIS_ONLY · 19ea7c03
      Gleb Shchepa authored
      Some queries with the "SELECT ... FROM DUAL" nested subqueries
      failed with an assertion on debug builds.
      Non-debug builds were not affected.
      
      There were a few different issues with similar assertion
      failures on different queries:
      
      1. The first problem was related to the incomplete propagation
      of the "non-constant" item status from underlying subquery
      items to the outer item tree: in some cases non-constants were
      interpreted as constants and evaluated at the preparation stage
      (val_int() calls withing fix_fields() etc).
      
      Thus, the default implementation of Item_ref::const_item() from
      the Item parent class didn't take into account the "const_item"
      status of the referenced item tree -- it used the insufficient
      "used_tables() == 0" check instead. This worked in most cases
      since our "non-constant" functions like RAND() and SLEEP() set
      the RAND_TABLE_BIT in the used table map, so they aren't
      non-constant from Item_ref's "point of view". However, the
      "SELECT ... FROM DUAL" subquery may have an empty map of used
      tables, but at the same time subqueries are never "constant" at
      the context analysis stage (preparation, view creation etc).
      So, the non-contantness of such subqueries was missed.
      
      Fix: the Item_ref::const_item() function has been overloaded to
      take into account both (*ref)->const_item() status and tricky
      Item_ref::used_tables() return values, since the only
      (*ref)->const_item() call is not enough there.
      
      2. In some cases instead of the const_item() call we check a
      value of the Item::with_subselect field to recognize items
      with nested subqueries. However, the Item_ref class didn't
      propagate this value from the referenced item tree.
      
      Fix: Item::has_subquery() and Item_ref::has_subquery()
      functions have been backported from 5.6. All direct
      references to the with_subselect fields of nested items have
      been with the has_subquery() function call.
      
      3. The Item_func_regex class didn't propagate with_subselect
      as well, since it overloads the Item_func::fix_fields()
      function with insufficient fix_fields() implementation.
      
      Fix: the Item_func_regex::fix_fields() function has been
      modified to gather "constant" statuses from inner items.
      
      4. The Item_func_isnull::update_used_tables() function has
      a special branch for the underlying item where the maybe_null
      value is false: in this case it marks the Item_func_isnull
      as a "const_item" and sets the cached_value to false.
      However, the Item_func_isnull::val_int() was not in sync with
      update_used_tables(): it didn't take into account neither
      const_item_cache nor cached_value for the case of
      "args[0]->maybe_null == false optimization".
      As far as such an Item_func_isnull has "const_item() == true",
      it's ok to call Item_func_isnull::val_int() etc from outer
      items on preparation stage. In this case the server tried to
      call Item_func_isnull::args[0]->isnull(), and if the args[0]
      item contained a nested not-nullable subquery, it failed
      with an assertion.
      
      Fix: take the value of Item_func_isnull::const_item_cache into
      account in the val_int() function.
      
      5. The auxiliary Item_is_not_null_test class has a similar
      optimization in the update_used_tables() function as the
      Item_func_isnull class has, and the same issue in the val_int()
      function.
      In addition to that the Item_is_not_null_test::update_used_tables()
      doesn't update the const_item_cache value, so the "maybe_null"
      optimization is useless there. Thus, we missed some optimizations
      of cases like these (before and after the fix):
        <  <is_not_null_test>(a),
        ---
        >  <cache>(<is_not_null_test>(a)),
      or
        < having (<is_not_null_test>(a) and <is_not_null_test>(a))
        ---
        > having 1
      etc.
      
      Fix: update Item_is_not_null_test::const_item_cache in
      update_used_tables() and take in into account in val_int().
      19ea7c03
  20. 21 Jan, 2013 1 commit
    • Marko Mäkelä's avatar
      Bug#16067973 DROP TABLE SLOW WHEN IT DECOMPRESS COMPRESSED-ONLY PAGES · e7283cea
      Marko Mäkelä authored
      buf_page_get_gen(): Do not attempt to decompress a compressed-only
      page when mode == BUF_PEEK_IF_IN_POOL. This mode is only being used by
      btr_search_drop_page_hash_when_freed(). There cannot be any adaptive
      hash index pointing to a page that does not exist in uncompressed
      format in the buffer pool.
      
      innodb_buffer_pool_evict_update(): New function for debug builds, to handle
      SET GLOBAL innodb_buffer_pool_evicted='uncompressed'
      by evicting all uncompressed page frames of compressed tablespaces
      from the buffer pool.
      
      rb#1873 approved by Jimmy Yang
      e7283cea
  21. 19 Jan, 2013 1 commit
    • Venkatesh Duggirala's avatar
      Bug#11752707-SLAVE CRASHES IF RBR HAS AS DESTINATION A VIEW · bc21e8cd
      Venkatesh Duggirala authored
      RATHER THAN A TABLE
      
      Problem: In RBR, If a table is converted into a view at slave,
      (i.e., "drop table 'object1'" & "create view 'object1'"), then any
      DML operations on the table at master are causing crash at slave.
      
      Analysis: Slave prepares tables to be opened for DML list when it
      receives Table_map_log_event(s). And the same list will be sent to
      open_table function. Open_table logic assumes that if the list
      contains a view object, it also contains "select_lex" object of
      that view. In the above special case, the table object does not
      contain 'select_lex' as it is base table at master. Since it
      is a view at slave, open_table logic goes to 'mysql_make_view()'
      function which assumes that 'select_lex' exists for the object.
      
      Fix: While preparing 'tables to be opened' list, we should make 
      sure that table required type is 'base table'. If it is not 
      base table while opening the object, mysql_make_view will throw an 
      error similar to 'object is not a base table' 
      
      sql/log_event.cc:
        Restrict that all table_map_log_event's objects should be 
        base tables @ slave also.
      bc21e8cd
  22. 16 Jan, 2013 2 commits
    • Anirudh Mangipudi's avatar
      BUG#14117025: UNABLE TO RESTORE DUMP · 01208b5b
      Anirudh Mangipudi authored
      Problem: When a view, with a specific character set and collation, 
      is created on another view with a different character set and collation the 
      dump restoration results in an illegal mix of collations error.
      SOLUTION: To avoid this confusion of collations, the create table datatype 
      being used is hardcoded as "tinyint NOT NULL". This will not matter as the table 
      created will be dropped at runtime and specifically tinyint is used to 
      avoid hitting the row size conflicts.
      01208b5b
    • Neeraj Bisht's avatar
      Bug#11751794 MYSQL GIVES THE WRONG RESULT WITH SOME SPECIAL USAGE · 3930dbf7
      Neeraj Bisht authored
      Consider the following query:
      
      SELECT f_1,..,f_m, AGGREGATE_FN(C)
      FROM t1
      WHERE ...
      GROUP BY ...
      
      Loose index scan ("Using index for group-by") can be used for
      this query if there is an index 'i' covering all fields in the
      select list, and the GROUP BY clause makes up a prefix f1,...,fn
      of 'i'. Furthermore, according to rule NGA2 of
      get_best_group_min_max(), the WHERE clause must contain a
      conjunction of equality predicates for all fields fn+1,...,fm.
      
      The problem in this bug was that a query with WHERE clause that
      broke NGA2 was not detected and therefore used loose index scan.
      This lead to wrong result. The query had an index
      covering (c1,c2) and had:
        "WHERE (c1 = 1 AND c2 = 'a') OR (c1 = 2 AND c2 = 'b')
         GROUP BY c1"
      or 
        "WHERE (c1 = 1 ) OR (c1 = 2 AND c2 = 'b')
         GROUP BY c1"
      
      
      This WHERE clause cannot be transformed to a conjunction of
      equality predicates.
      
      The solution is to introduce another rule, NGA3, that complements
      NGA2. NGA3 says that if a gap field (field between those
      listed in GROUP BY and C in the index) has a predicate, then
      there can only be one range in the query. This requirement is
      more strict than it has to be in theory. BUG 15947433 will deal
      with that.
      
      
      sql/opt_range.cc:
        check for the repetition of non group field.
      3930dbf7
  23. 15 Jan, 2013 1 commit
    • Neeraj Bisht's avatar
      Bug#11758009 - UNION EXECUTION ORDER WRONG ? · 65af83f6
      Neeraj Bisht authored
      Problem:-
      In case of blob data field, UNION ALL doesn't give correct result.
      
      Analysis:-
      In MyISAM table, when we dont want to check for the distinct for particular 
      key, we set the key_map to zero.
      
      While writing record in MyISAM table, we check the distinct with the help 
      of keys, by checking whether that key is active in key_map and then writing 
      the record.
      
      In case of blob field, we are checking for distinct by unique constraint, 
      where we are not checking whether that unique key is active or not in key_map.
      
      Solution:-
      Before checking for distinct, check whether any key is active in key_map.
      
      storage/myisam/mi_write.c:
        check whether key_map is active before checking distinct.
      65af83f6