• unknown's avatar
    Patch for WL#2894: Make stored routine variables work · 6b2f1309
    unknown authored
    according to the standard.
    
    The idea is to use Field-classes to implement stored routines
    variables. Also, we should provide facade to Item-hierarchy
    by Item_field class (it is necessary, since SRVs take part
    in expressions).
    
    The patch fixes the following bugs:
      - BUG#8702: Stored Procedures: No Error/Warning shown for inappropriate data 
        type matching; 
     
      - BUG#8768: Functions: For any unsigned data type, -ve values can be passed 
        and returned; 
     
      - BUG#8769: Functions: For Int datatypes, out of range values can be passed 
        and returned; 
     
      - BUG#9078: STORED PROCDURE: Decimal digits are not displayed when we use 
        DECIMAL datatype; 
     
      - BUG#9572: Stored procedures: variable type declarations ignored; 
     
      - BUG#12903: upper function does not work inside a function; 
     
      - BUG#13705: parameters to stored procedures are not verified; 
     
      - BUG#13808: ENUM type stored procedure parameter accepts non-enumerated
        data; 
     
      - BUG#13909: Varchar Stored Procedure Parameter always BINARY string (ignores 
        CHARACTER SET); 
     
      - BUG#14161: Stored procedure cannot retrieve bigint unsigned;
    
      - BUG#14188: BINARY variables have no 0x00 padding;
    
      - BUG#15148: Stored procedure variables accept non-scalar values;
    
    
    mysql-test/r/ctype_ujis.result:
      Explicitly specify correct charset.
    mysql-test/r/schema.result:
      Drop our test database to not affect this test if some test
      left it cause of failure.
    mysql-test/r/show_check.result:
      Drop our test database to not affect this test if some test
      left it cause of failure.
    mysql-test/r/skip_name_resolve.result:
      Ignore columns with unpredictable values.
    mysql-test/r/sp-big.result:
      Add cleanup statement.
    mysql-test/r/sp-dynamic.result:
      Add cleanup statements.
    mysql-test/r/sp.result:
      Update result file.
    mysql-test/r/sum_distinct-big.result:
      Update result file.
    mysql-test/r/type_newdecimal-big.result:
      Update result file.
    mysql-test/t/ctype_ujis.test:
      Explicitly specify correct charset.
    mysql-test/t/schema.test:
      Drop our test database to not affect this test if some test
      left it cause of failure.
    mysql-test/t/show_check.test:
      Drop our test database to not affect this test if some test
      left it cause of failure.
    mysql-test/t/skip_name_resolve.test:
      Ignore columns with unpredictable values.
    mysql-test/t/sp-big.test:
      Add cleanup statement.
    mysql-test/t/sp-dynamic.test:
      Add cleanup statements.
    mysql-test/t/sp.test:
      Non-scalar values prohibited for assignment to SP-vars;
      polishing.
    mysql-test/t/type_newdecimal-big.test:
      Update type specification so that the variables
      can contain the large values used in the test.
    sql/field.cc:
      Extract create_field::init() to initialize an existing
      instance of create_field from new_create_field().
    sql/field.h:
      Extract create_field::init() to initialize an existing
      instance of create_field from new_create_field().
    sql/item.cc:
      - Introduce a new class: Item_sp_variable -- a base class
        of stored-routine-variables classes;
      - Introduce Item_case_expr -- an Item, which is used to access
        to the expression of CASE statement;
    sql/item.h:
      - Introduce a new class: Item_sp_variable -- a base class
        of stored-routine-variables classes;
      - Introduce Item_case_expr -- an Item, which is used to access
        to the expression of CASE statement;
    sql/item_func.cc:
      Pass the Field (instead of Item) for the return value of
      a function to the function execution routine.
    sql/item_func.h:
      Pass the Field (instead of Item) for the return value of
      a function to the function execution routine.
    sql/mysql_priv.h:
      Move create_virtual_tmp_table() out of sql_select.h.
    sql/sp.cc:
      Use create_result_field() instead of make_field().
    sql/sp_head.cc:
      - Add a function to map enum_field_types to Item::Type;
      - Add sp_instr_push_case_expr instruction -- an instruction
        to push CASE expression into the active running context;
      - Add sp_instr_pop_case_expr instruction -- an instruction
        to pop CASE expression from the active running context;
      - Adapt the SP-execution code to using Fields instead of Items
        for SP-vars;
      - Use create_field structure for field description instead of
        a set of members.
    sql/sp_head.h:
      - Add a function to map enum_field_types to Item::Type;
      - Add sp_instr_push_case_expr instruction -- an instruction
        to push CASE expression into the active running context;
      - Add sp_instr_pop_case_expr instruction -- an instruction
        to pop CASE expression from the active running context;
      - Adapt the SP-execution code to using Fields instead of Items
        for SP-vars;
      - Use create_field structure for field description instead of
        a set of members.
    sql/sp_pcontext.cc:
      - Change rules to assign an index of SP-variable: use
        transparent index;
      - Add an operation to retrieve a list of defined SP-vars
        from the processing context recursively.
    sql/sp_pcontext.h:
      - Change rules to assign an index of SP-variable: use
        transparent index;
      - Add an operation to retrieve a list of defined SP-vars
        from the processing context recursively.
    sql/sp_rcontext.cc:
      - Change rules to assign an index of SP-variable: use
        transparent index;
      - Use a tmp virtual table to store SP-vars instead of Items;
      - Provide operations to work with CASE expresion.
    sql/sp_rcontext.h:
      - Change rules to assign an index of SP-variable: use
        transparent index;
      - Use a tmp virtual table to store SP-vars instead of Items;
      - Provide operations to work with CASE expresion.
    sql/sql_class.cc:
      - Reflect Item_splocal ctor changes;
      - Item_splocal::get_offset() has been renamed to get_var_idx().
    sql/sql_class.h:
      Polishing.
    sql/sql_parse.cc:
      Extract create_field::init() to initialize an existing
      instance of create_field from new_create_field().
    sql/sql_select.cc:
      Take care of BLOB columns in create_virtual_tmp_table().
    sql/sql_select.h:
      Move create_virtual_tmp_table() out of sql_select.h.
    sql/sql_trigger.cc:
      Use boolean constants for boolean type instead of numerical ones.
    sql/sql_yacc.yy:
      Provide an instance of create_field for each SP-var.
    mysql-test/include/sp-vars.inc:
      The definitions of common-procedures, which are created
      under different circumstances.
    mysql-test/r/sp-vars.result:
      Result file for the SP-vars test.
    mysql-test/sp-vars.test:
      A new test for checking SP-vars functionality.
    6b2f1309
sql_parse.cc 212 KB