~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_select.cc

  • Committer: Brian Aker
  • Date: 2010-12-16 02:16:37 UTC
  • mto: This revision was merged to the branch mainline in revision 1999.
  • Revision ID: brian@tangent.org-20101216021637-owmmneuy57ddhcn3
uuid type code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
78
78
static Item* part_of_refkey(Table *form,Field *field);
79
79
static bool cmp_buffer_with_ref(JoinTable *tab);
80
80
static void change_cond_ref_to_const(Session *session,
81
 
                                     vector<COND_CMP>& save_list,
 
81
                                     vector<COND_CMP*>& save_list,
82
82
                                     Item *and_father,
83
83
                                     Item *cond,
84
84
                                     Item *field,
2364
2364
  and_level
2365
2365
*/
2366
2366
static void change_cond_ref_to_const(Session *session,
2367
 
                                     vector<COND_CMP>& save_list,
 
2367
                                     vector<COND_CMP*>& save_list,
2368
2368
                                     Item *and_father,
2369
2369
                                     Item *cond,
2370
2370
                                     Item *field,
2406
2406
          ! left_item->const_item())
2407
2407
      {
2408
2408
        cond->marker=1;
2409
 
        save_list.push_back( COND_CMP(and_father, func) );
 
2409
        COND_CMP *new_cond_cmp= new COND_CMP(and_father, func);
 
2410
        save_list.push_back( new_cond_cmp );
2410
2411
      }
2411
2412
      func->set_cmp_func();
2412
2413
    }
2431
2432
        args[0]= args[1];                       // For easy check
2432
2433
        session->change_item_tree(args + 1, value);
2433
2434
        cond->marker=1;
2434
 
        save_list.push_back( COND_CMP(and_father, func) );
 
2435
        COND_CMP *new_cond_cmp= new COND_CMP(and_father, func);
 
2436
        save_list.push_back( new_cond_cmp );
2435
2437
      }
2436
2438
      func->set_cmp_func();
2437
2439
    }
2470
2472
}
2471
2473
 
2472
2474
static void propagate_cond_constants(Session *session, 
2473
 
                                     vector<COND_CMP>& save_list, 
 
2475
                                     vector<COND_CMP*>& save_list, 
2474
2476
                                     COND *and_father, 
2475
2477
                                     COND *cond)
2476
2478
{
2479
2481
    bool and_level= ((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC;
2480
2482
    List_iterator_fast<Item> li(*((Item_cond*) cond)->argument_list());
2481
2483
    Item *item;
2482
 
    vector<COND_CMP> save;
 
2484
    vector<COND_CMP*> save;
2483
2485
    while ((item=li++))
2484
2486
    {
2485
2487
      propagate_cond_constants(session, save, and_level ? cond : item, item);
2487
2489
    if (and_level)
2488
2490
    {
2489
2491
      // Handle other found items
2490
 
      for (vector<COND_CMP>::iterator iter= save.begin(); iter != save.end(); ++iter)
 
2492
      for (vector<COND_CMP*>::iterator iter= save.begin(); iter < save.end(); iter++)
2491
2493
      {
2492
 
        Item **args= iter->cmp_func->arguments();
2493
 
        if (not args[0]->const_item())
 
2494
        Item **args= (*iter)->second->arguments();
 
2495
        if (!args[0]->const_item())
2494
2496
        {
2495
 
          change_cond_ref_to_const(session, save_list, iter->and_level,
2496
 
                                   iter->and_level, args[0], args[1] );
 
2497
          change_cond_ref_to_const( session, save_list, (*iter)->first,
 
2498
                                    (*iter)->first, args[0], args[1] );
2497
2499
        }
2498
2500
      }
2499
2501
    }
2684
2686
                             &join->cond_equal);
2685
2687
 
2686
2688
    /* change field = field to field = const for each found field = const */
2687
 
    vector<COND_CMP> temp;
 
2689
    vector<COND_CMP*> temp;
2688
2690
    propagate_cond_constants(session, temp, conds, conds);
2689
2691
    /*
2690
2692
      Remove all instances of item == item