~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/join.cc

Merged Padraig from lp:~posulliv/drizzle/code-cleanup-c++-use-bitset

Show diffs side-by-side

added added

removed removed

Lines of Context:
3291
3291
  uint32_t prune_level=  join->session->variables.optimizer_prune_level;
3292
3292
  bool straight_join= test(join->select_options & SELECT_STRAIGHT_JOIN);
3293
3293
 
3294
 
  join->cur_embedding_map= 0;
 
3294
  join->cur_embedding_map.reset();
3295
3295
  reset_nj_counters(join->join_list);
3296
3296
  /*
3297
3297
    if (SELECT_STRAIGHT_JOIN option is set)
5650
5650
        continue;
5651
5651
      }
5652
5652
      outer_join|= table->map;
5653
 
      s->embedding_map= 0;
 
5653
      s->embedding_map.reset();
5654
5654
      for (;embedding; embedding= embedding->embedding)
5655
5655
        s->embedding_map|= embedding->nested_join->nj_map;
5656
5656
      continue;
5658
5658
    if (embedding && !(false && ! embedding->embedding))
5659
5659
    {
5660
5660
      /* s belongs to a nested join, maybe to several embedded joins */
5661
 
      s->embedding_map= 0;
 
5661
      s->embedding_map.reset();
5662
5662
      do
5663
5663
      {
5664
5664
        nested_join_st *nested_join= embedding->nested_join;
5665
 
        s->embedding_map|=nested_join->nj_map;
 
5665
        s->embedding_map|= nested_join->nj_map;
5666
5666
        s->dependent|= embedding->dep_tables;
5667
5667
        embedding= embedding->embedding;
5668
5668
        outer_join|= nested_join->used_tables;
5762
5762
        substitution of a const table the key value happens to be null
5763
5763
        then we can state that there are no matches for this equi-join.
5764
5764
      */
5765
 
      if ((keyuse= s->keyuse) && *s->on_expr_ref && !s->embedding_map)
 
5765
      if ((keyuse= s->keyuse) && *s->on_expr_ref && s->embedding_map.none())
5766
5766
      {
5767
5767
        /*
5768
5768
          When performing an outer join operation if there are no matching rows
5987
5987
}
5988
5988
 
5989
5989
/**
5990
 
  Assign each nested join structure a bit in nested_join_map.
 
5990
  Assign each nested join structure a bit in the nested join bitset.
5991
5991
 
5992
5992
    Assign each nested join structure (except "confluent" ones - those that
5993
 
    embed only one element) a bit in nested_join_map.
 
5993
    embed only one element) a bit in the nested join bitset.
5994
5994
 
5995
5995
  @param join          Join being processed
5996
5996
  @param join_list     List of tables
5997
 
  @param first_unused  Number of first unused bit in nested_join_map before the
 
5997
  @param first_unused  Number of first unused bit in the nest joing bitset before the
5998
5998
                       call
5999
5999
 
6000
6000
  @note
6001
6001
    This function is called after simplify_joins(), when there are no
6002
6002
    redundant nested joins, #non_confluent_nested_joins <= #tables_in_join so
6003
 
    we will not run out of bits in nested_join_map.
 
6003
    we will not run out of bits in the nested join bitset.
6004
6004
 
6005
6005
  @return
6006
 
    First unused bit in nested_join_map after the call.
 
6006
    First unused bit in the nest join bitset after the call.
6007
6007
*/
6008
6008
static uint32_t build_bitmap_for_nested_joins(List<TableList> *join_list, uint32_t first_unused)
6009
6009
{
6023
6023
        We don't assign bits to such sj-nests because
6024
6024
        1. it is redundant (a "sequence" of one table cannot be interleaved
6025
6025
            with anything)
6026
 
        2. we could run out bits in nested_join_map otherwise.
 
6026
        2. we could run out of bits in the nested join bitset otherwise.
6027
6027
      */
6028
6028
      if (nested_join->join_list.elements != 1)
6029
6029
      {
6030
6030
        /* Don't assign bits to sj-nests */
6031
6031
        if (table->on_expr)
6032
 
          nested_join->nj_map= (nested_join_map) 1 << first_unused++;
 
6032
          nested_join->nj_map.set(first_unused++);
6033
6033
        first_unused= build_bitmap_for_nested_joins(&nested_join->join_list,
6034
6034
                                                    first_unused);
6035
6035
      }