• unknown's avatar
    Patch two (the final one) for Bug#7306 "the server side preparedStatement · 59544040
    unknown authored
     error for LIMIT placeholder".
    The patch adds grammar support for LIMIT ?, ? and changes the
    type of ST_SELECT_LEX::select_limit,offset_limit from ha_rows to Item*,
    so that it can point to Item_param.
    
    
    mysql-test/include/ps_modify.inc:
      Fix existing tests: now LIMIT can contain placeholders.
    mysql-test/include/ps_query.inc:
      Fix existing tests: now LIMIT can contain placeholders.
    mysql-test/r/ps.result:
      Add basic test coverage for LIMIT ?, ? and fix test results.
    mysql-test/r/ps_2myisam.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/r/ps_3innodb.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/r/ps_4heap.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/r/ps_5merge.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/r/ps_6bdb.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/r/ps_7ndb.result:
      Fix test results: now LIMIT can contain placeholders.
    mysql-test/t/ps.test:
      Add basic test coverage for LIMIT ?, ?.
    sql/item.h:
      Add a short-cut for (ulonglong) val_int() to Item.
      Add a constructor to Item_int() that accepts ulonglong.
      Simplify Item_uint constructor by using the c-tor above.
    sql/item_subselect.cc:
      Now select_limit has type Item *.
      We can safely create an Item in Item_exists_subselect::fix_length_and_dec():
      it will be allocated in runtime memory root and freed in the end of
      execution.
    sql/sp_head.cc:
      Add a special initalization state for stored procedures to 
      be able to easily distinguish the first execution of a stored procedure
      from prepared statement prepare.
    sql/sql_class.h:
      Introduce new state 'INITIALIZED_FOR_SP' to be able to easily distinguish
      the first execution of a stored procedure from prepared statement prepare.
    sql/sql_derived.cc:
      - use unit->set_limit() to set unit->select_limit_cnt, offset_limit_cnt
        evreryplace. Add a warning about use of set_limit in 
      mysql_derived_filling.
    sql/sql_error.cc:
      - use unit->set_limit() to set unit->select_limit_cnt, offset_limit_cnt
        evreryplace.
      - this change is also aware of bug#11095 "show warnings limit 0 returns 
      all rows instead of zero rows", so the one who merges the bugfix from
      4.1 can use local version of sql_error.cc.
    sql/sql_handler.cc:
      - use unit->set_limit() to initalize 
      unit->select_limit_cnt,offset_limit_cnt everyplace.
    sql/sql_lex.cc:
      Now ST_SELECT_LEX::select_limit, offset_limit have type Item *
    sql/sql_lex.h:
      Now ST_SELECT_LEX::select_limit, offset_limit have type Item *
    sql/sql_parse.cc:
      - use unit->set_limit() to initalize 
      unit->select_limit_cnt,offset_limit_cnt everyplace. 
      - we can create an Item_int to set global limit of a statement:
      it will be created in the runtime mem root and freed in the end of
      execution.
    sql/sql_repl.cc:
      Use unit->set_limit to initialize limits.
    sql/sql_select.cc:
      - select_limit is now Item* so the proper way to check for default value
      is to compare it with NULL.
    sql/sql_union.cc:
      Evaluate offset_limit_cnt using the new type of ST_SELECT_LEX::offset_limit
    sql/sql_view.cc:
      Now ST_SELECT_LEX::select_limit, offset_limit have type Item *
    sql/sql_yacc.yy:
      Add grammar support for LIMIT ?, ? clause.
    59544040
sql_yacc.yy 220 KB