Re: when propagate_cond_constants will be called?

Øystein Grøvlen <[email protected]> Mon, 11 Feb 2013 15:19:38 +0100
Newsgroups gmane.comp.db.mysql.devel
Organization Oracle
Message-ID <[email protected]>
On 02/10/13 05:12 PM, Mr. Left wrote:
> Hi, all
> Is there anyone can tell me when the function propagate_cond_constants() will be really used? Cause I found after the build_equal_items(), all Item_func::EQ_FUNC
> are transformed to Item_func::MULT_EQUAL_FUNC.
> And the example in mysql internals 8.2.1.1. Constant Propagation, just refer to propagate_cond_constants(), but all translate are really finished in build_equal_items().
>
> So I want to know when the function propagate_cond_constants() will really work? It's kind of you to supply an example.
> Thank you very much.
>

Hi,

If you look at the result files in the optimizer trace suite of MySQL 
5.6 (mysql-test/suite/opt_trace/r/'), there is at least one example 
where propagate_cond_constants() changes the condition. From 
general_no_prot_all.result:

   "condition_processing": {
     "condition": "WHERE",
     "original_condition": "((`t6`.`d` = ifnull(NULL,NULL)) and 
(<cache>(5) = 1))",
     "steps": [
       {
         "transformation": "equality_propagation",
         "resulting_condition": "((`t6`.`d` = ifnull(NULL,NULL)) and 
(<cache>(5) = 1))"
       },
       {
         "transformation": "constant_propagation",
         "resulting_condition": "((`t6`.`d` = NULL) and (<cache>(5) = 1))"
       },
       {
         "transformation": "trivial_condition_removal",
         "resulting_condition": null
       }
     ] /* steps */
   } /* condition_processing */

Hope this helps,

-- 
Øystein

-- 
MySQL Internals Mailing List
For list archives: http://lists.mysql.com/internals
To unsubscribe:    http://lists.mysql.com/internals