• Georgi Kodinov's avatar
    Bug #32124: crash if prepared statements refer to variables in the where clause · 6d54b044
    Georgi Kodinov authored
                      
    The code to get read the value of a system variable was extracting its value 
    on PREPARE stage and was substituting the value (as a constant) into the parse tree.
    Note that this must be a reversible transformation, i.e. it must be reversed before
    each re-execution.
    Unfortunately this cannot be reliably done using the current code, because there are
    other non-reversible source tree transformations that can interfere with this
    reversible transformation.
    Fixed by not resolving the value at PREPARE, but at EXECUTE (as the rest of the 
    functions operate). Added a cache of the value (so that it's constant throughout
    the execution of the query). Note that the cache also caches NULL values.
    Updated an obsolete related test suite (variables-big) and the code to test the 
    result type of system variables (as per bug 74).
    
    mysql-test/extra/rpl_tests/rpl_insert_id.test:
      Bug #32124: removed ambiguous testcase
    mysql-test/r/innodb_data_home_dir_basic.result:
      Bug #32124: fixed wrong test case
    mysql-test/r/innodb_flush_method_basic.result:
      Bug #32124: fixed wrong test case
    mysql-test/r/ps_11bugs.result:
      Bug #32124: test case
    mysql-test/r/ssl_capath_basic.result:
      Bug #32124: fixed wrong test case
    mysql-test/r/ssl_cipher_basic.result:
      Bug #32124: fixed wrong test case
    mysql-test/r/variables.result:
      Bug #32124: system vars are shown as such in EXPLAIN EXTENDED, not as constants.
    mysql-test/suite/rpl/r/rpl_insert_id.result:
      Bug #32124: removed ambiguous testcase
    mysql-test/t/ps_11bugs.test:
      Bug #32124: test case
    sql/item.cc:
      Bug #32124: placed the code to convert string to longlong or double 
      to a function (so that it can be reused)
    sql/item.h:
      Bug #32124: placed the code to convert string to longlong or double 
      to a function (so that it can be reused)
    sql/item_func.cc:
      Bug #32124: moved the evaluation of system variables at runtime (val_xxx).
    sql/item_func.h:
      Bug #32124: moved the evaluation of system variables at runtime (val_xxx).
    sql/set_var.cc:
      Bug #32124: removed the code that calculated the system variable's value 
      at PREPARE
    sql/set_var.h:
      Bug #32124: removed the code that calculated the system variable's value 
      at PREPARE
    tests/mysql_client_test.c:
      Bug #32124 : removed the reading of the system variable, because its max
      length is depended on the system charset and client charset and can't be
      easily calculated.
    6d54b044
innodb_flush_method_basic.result 1.82 KB