• Alexey Kopytov's avatar
    Bug #47123: Endless 100% CPU loop with STRAIGHT_JOIN · f6868a4e
    Alexey Kopytov authored
     
    The problem was in incorrect handling of predicates involving 
    NULL as a constant value by the range optimizer. 
     
    For example, when creating a SEL_ARG node from a condition of 
    the form "field < const" (which would normally result in the 
    "NULL < field < const" SEL_ARG),  the special case when "const" 
    is NULL was not taken into account, so "NULL < field < NULL" 
    was produced for the "field < NULL" condition. 
     
    As a result, SEL_ARG structures of this form could not be 
    further optimized which in turn could lead to incorrectly 
    constructed SEL_ARG trees. In particular, code assuming SEL_ARG 
    structures to always form a sequence of ordered disjoint 
    intervals could enter an infinite loop under some 
    circumstances. 
     
    Fixed by changing get_mm_leaf() so that for any sargable 
    predicate except "<=>" involving NULL as a constant, "empty" 
    SEL_ARG is returned, since such a predicate is always false. 
    
    mysql-test/r/partition_pruning.result:
      Fixed a broken test case.
    mysql-test/r/range.result:
      Added a test case for bug #47123.
    mysql-test/r/subselect.result:
      Fixed a broken test cases.
    mysql-test/t/range.test:
      Added a test case for bug #47123.
    sql/opt_range.cc:
      Fixed get_mm_leaf() so that for any sargable
      predicate except "<=>" involving NULL as a constant, "empty"
      SEL_ARG is returned, since such a predicate is always false.
    f6868a4e
range.test 43.6 KB