You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

23 lines
323 B

A fix and a test case for Bug#17843 "Certain stored procedures fail to run at startup" The server returned an error when trying to execute init-file with a stored procedure that could return multiple result sets to the client. A stored procedure can return multiple result sets if it contains PREPARE, SELECT, SHOW and similar statements. The fix is to set client_capabilites|=CLIENT_MULTI_RESULTS in sql_parse.cc:handle_bootstrap(). There is no "client" really, so nothing is ever sent. This makes init-file feature behave consistently: the prepared statements that can be called directly in the init-file can be used in a stored procedure too. Re-committed the patch originally submitted by Per-Erik after review. mysql-test/Makefile.am: Fix re-make without make clean. mysql-test/r/init_connect.result: Updated results (a test case for Bug#17843) mysql-test/r/init_file.result: Updated results (a test case for Bug#17843) mysql-test/std_data/init_file.dat: Add test coverage for new features added in 5.0. Note, that what can be done in init_file is very limited as it does not support any other delimiter except ';' -- only "one liners" and no multiple statement procedures. Also, this is executed with a dummy user "boot@", which calls for the use of DEFINER clause. mysql-test/t/init_connect.test: Add test coverage for new features added in 5.0. mysql-test/t/init_file.test: Add test coverage for new features added in 5.0 -- stored routines, views, triggers. The actual tests are in std_data/init_file.dat, here we just check the results and clean up. sql/sql_class.cc: Initialize Security_context::priv_host to an empty string: when executing an init-file, sql_parse.cc:get_default_definer() will use this for the value of the definer if it's not set in the query. sql/sql_parse.cc: Set CLIENT_MULTI_RESULTS in handle_bootstrap(), to make prepared statements work in stored procedures called from init-file.
20 years ago
  1. INSERT INTO init_file.startup VALUES ( NOW() );
  2. SELECT * INTO @X FROM init_file.startup limit 0,1;
  3. SELECT * INTO @Y FROM init_file.startup limit 1,1;
  4. SELECT YEAR(@X)-YEAR(@Y);
  5. YEAR(@X)-YEAR(@Y)
  6. 0
  7. DROP DATABASE init_file;
  8. ok
  9. end of 4.1 tests
  10. select * from t1;
  11. x
  12. 3
  13. 5
  14. 7
  15. 11
  16. 13
  17. select * from t2;
  18. y
  19. 30
  20. 3
  21. 11
  22. 13
  23. drop table t1, t2;