• Monty's avatar
    MDEV-14907 FEDERATEDX doesn't respect DISTINCT · c18896f9
    Monty authored
    Federated and Federatex cannot be used with ROR scans
    
    Federated::position() and Federatex::position() is storing in 'ref' a
    pointer into a local result set buffer. This means that one cannot
    compare 'ref' from different handler instances to see if they point to the
    same physical record.
    
    This bug caused federated.federatedx to return wrong results when the
    optimizer tried to use index_merge to resolve some queries.
    
    Fixed by introducing table flag HA_NON_COMPARABLE_ROWID and using this
    with the above handlers.
    
    Todo:
    - Fix multi_delete(), multi_update and read_records() to use primary key
      instead of 'ref' if case HA_NON_COMPARABLE_ROWID is set. The current
      code only works if we have only one range (like table scan) for the
      tables that will be updated in the second pass.
    - Enable DBUG_ASSERT() in ha_federated::cmp_ref() and
      ha_federatedx::cmp_ref().
    c18896f9
opt_range.cc 521 KB