Commit graph

46716 commits

Author SHA1 Message Date
unknown
33409eb87b Merge kpettersson@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime
2007-05-29 13:38:45 +02:00
unknown
6cd313b860 Removed broken test from list of test to execute.
To be restored when PB is patched to ignore 
requested safemalloc memory dumps.


mysql-test/t/disabled.def:
  Restored disabled test file.
2007-05-29 13:37:38 +02:00
unknown
07485d9e0d Fix for bug #28310 Server reports events which never were created
Fix a race

Wait at the end of the test for all events to finish.
Then continue to the next result. This should be done, as the
server won't be restarted, and although events are dropped with
drop database, they could still be executing in memory.


mysql-test/r/events_restart_phase3.result:
  fix result
mysql-test/t/events_restart_phase3.test:
  Fix a race
  Wait at the end of the test for all events to finish.
  Then continue to the next result. This should be done, as the
  server won't be restarted, and although events are dropped with
  drop database, they could still be executing in memory.
2007-05-29 12:44:44 +02:00
unknown
024f9d20e6 Merge kpettersson@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime


mysql-test/t/disabled.def:
  Auto merged
2007-05-28 16:47:45 +02:00
unknown
32dd4b0b19 Safemalloc memory dump reported as memory leak although it isn't. Waiting for
fix in PB.
2007-05-28 16:46:22 +02:00
unknown
90b517adfe Fix a compile-time warning. 2007-05-28 16:31:16 +04:00
unknown
cda19dfbd5 Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  vajra.(none):/opt/local/work/mysql-5.1-4968-clean
2007-05-28 15:34:51 +04:00
unknown
b11f1d0c97 5.1 version of a fix and test cases for bugs:
Bug#4968 ""Stored procedure crash if cursor opened on altered table"
Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from 
stored procedure."
Bug#19733 "Repeated alter, or repeated create/drop, fails"
Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
Bug#24879 "Prepared Statements: CREATE TABLE (UTF8 KEY) produces a 
growing key length" (this bug is not fixed in 5.0)

Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE 
statements in stored routines or as prepared statements caused
incorrect results (and crashes in versions prior to 5.0.25).

In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
  
The problem of bugs 4968, 19733, 19282 and 6895 was that functions
mysql_prepare_table, mysql_create_table and mysql_alter_table are not
re-execution friendly: during their operation they modify contents
of LEX (members create_info, alter_info, key_list, create_list),
thus making the LEX unusable for the next execution.
In particular, these functions removed processed columns and keys from
create_list, key_list and drop_list. Search the code in sql_table.cc 
for drop_it.remove() and similar patterns to find evidence.
  
The fix is to supply to these functions a usable copy of each of the
above structures at every re-execution of an SQL statement. 
  
To simplify memory management, LEX::key_list and LEX::create_list
were added to LEX::alter_info, a fresh copy of which is created for
every execution.
  
The problem of crashing bug 22060 stemmed from the fact that the above 
metnioned functions were not only modifying HA_CREATE_INFO structure 
in LEX, but also were changing it to point to areas in volatile memory
of the execution memory root.
   
The patch solves this problem by creating and using an on-stack
copy of HA_CREATE_INFO in mysql_execute_command.

Additionally, this patch splits the part of mysql_alter_table
that analizes and rewrites information from the parser into
a separate function - mysql_prepare_alter_table, in analogy with
mysql_prepare_table, which is renamed to mysql_prepare_create_table.


mysql-test/r/ps.result:
  Update test results (Bug#19182, Bug#22060, Bug#4968, Bug#6895)
mysql-test/r/sp.result:
  Update results (Bug#19733)
mysql-test/t/ps.test:
  Add test cases for Bug#19182, Bug#22060, Bug#4968, Bug#6895
mysql-test/t/sp.test:
  Add a test case for Bug#19733
sql/field.h:
  Implement a deep copy constructor for create_field
sql/mysql_priv.h:
  LEX::key_list and LEX::create_list were moved to LEX::alter_info.
  Update declarations to use LEX::alter_info instead of these two
  members.
  Remove declarations of mysql_add_index, mysql_drop_index.
sql/sql_class.cc:
  Implement deep copy constructors.
sql/sql_class.h:
  Implement (almost) deep copy constructors for key_part_spec, 
  Alter_drop, Alter_column, Key, foreign_key.
  Replace pair<columns, keys> with an instance of Alter_info in
  select_create constructor. We create a new copy of Alter_info
  each time we re-execute SELECT .. CREATE prepared statement.
sql/sql_insert.cc:
  Adjust to a new signature of create_table_from_items.
sql/sql_lex.cc:
  Implement Alter_info::Alter_info that would make a "deep" copy
  of all definition lists (keys, columns).
  Move is_partition_management() from sql_partition.cc (feature-based
  file division is evil).
sql/sql_lex.h:
  Move key_list and create_list to class Alter_info. Implement
  Alter_info::Alter_info that can be used with PS and SP.
  Get rid of Alter_info::clear() which was an attempt to save on
  matches and always use Alter_info::reset().
  Implement an auxiliary Alter_info::init_for_create_from_alter()
  which is used in mysql_alter_table.
sql/sql_list.cc:
    Implement a copy constructor of class List that makes a deep copy
    of all list nodes.
sql/sql_list.h:
  Implement a way to make a deep copy of all list nodes.
sql/sql_parse.cc:
  Adjust to new signatures of mysql_create_table, mysql_alter_table,
  select_create. Functions mysql_create_index and mysql_drop_index has
  become identical after initialization of alter_info was moved to the 
  parser, and were merged. Flag enable_slow_log was not updated for 
  SQLCOM_DROP_INDEX, which was a bug.
  Just like CREATE INDEX, DROP INDEX is currently done via complete 
  table rebuild and is rightfully a slow administrative statement.
sql/sql_partition.cc:
  Move is_partition_management() to sql_lex.cc
  Adjust code to the new Alter_info.
sql/sql_table.cc:
  Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
  mysql_prepare_table to new signatures.
  Rename mysql_prepare_table to mysql_prepare_create_table. Make
  sure it follows the convention and returns FALSE for success and
  TRUE for error.
  Move parts of mysql_alter_table to mysql_prepare_alter_table.
  Move the first invokation of mysql_prepare_table from mysql_alter_table
  to compare_tables, as it was needed only for the purpose
  of correct comparison.
  Since now Alter_info itself is created in the runtime mem root,
  adjust mysql_prepare_table to always allocate memory in the
  runtime memory root.
  Remove dead code.
sql/sql_yacc.yy:
  LEX::key_list and LEX::create_list moved to class Alter_info
2007-05-28 15:30:01 +04:00
unknown
624d65c591 Fix for
bug#26338 events_bugs.test fail on Debian
and
bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"


mysql-test/r/events_bugs.result:
  uppercase
mysql-test/t/events.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_bugs.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_grant.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_logs_tests.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_scheduling.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_stress.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_time_zone.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_trans.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
mysql-test/t/events_trans_notembedded.test:
  wait at the end of the script for event which haven't
  finished their execution. This should solve
  bug#26338 events_bugs.test fail on Debian
  and
  bug#28285 Test "events_bugs" has instable results of "select /*1*/ ... from processlist"
2007-05-26 16:36:38 +02:00
unknown
1f5f609ae8 Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  whirlpool.mysql.com:/work/mysql-5.1-runtime
2007-05-25 20:37:14 +02:00
unknown
b432f9c1e3 Fix for bug#28666 CREATE EVENT ... EVERY 0 SECOND let server crash
A missing check for zero value of interval was added.


mysql-test/r/events_bugs.result:
  update result file
mysql-test/t/events_bugs.test:
  add test case for bug#28666 CREATE EVENT ... EVERY 0 SECOND let server crash
sql/event_data_objects.cc:
  add a missing check about zero value for interval
2007-05-25 14:46:22 +02:00
unknown
a9edb06221 Merge four.local.lan:/WORK/mysql-5.1-runtime/src-clean
into  four.local.lan:/WORK/mysql-5.1-runtime/src-1
2007-05-25 11:47:09 +02:00
unknown
850eadadc6 Fix warnings.
sql/item_func.h:
  Resolve a warning (wrong initialization order).
sql/sql_lex.cc:
  Make -ansi mode compile.
2007-05-25 00:41:27 +04:00
unknown
bcb1ff7f48 This changeset belongs to the fix of Bug#735 Prepared Statements: there is no support for Query Cache
- Create "--ps-protocol" and no "--<whatever>-protocol" variants of the former tests
  t/grant_cache.test and t/query_cache_sql_prepare.test.
- Some additional subtest and fixes of bugs
- Minor improvements 


mysql-test/include/grant_cache.inc:
  - Rename mysql-test/t/grant_cache.test to include/grant_cache.inc
  - Toplevel scripts running variants of this test are
       t/grant_cache_ps_prot.test (runs only with "--ps-protocol")
       t/grant_cache_no_prot.test (skipped if any protocol is assigned)
  - Modifications to include/grant_cache.inc:
    - Minor improvements like replace --error <number> by --error <name>
    - enable that some subtests are run with "--ps-protocol"
mysql-test/include/query_cache_sql_prepare.inc:
  - Rename t/query_cache_sql_prepare.test to include/query_cache_sql_prepare.inc
  - Toplevel scripts running variants of this test are
       query_cache_ps_ps_prot.test (skipped if other protocol than --ps-protocol is used.)
       query_cache_ps_no_prot.test (skipped if --<whatever>-protocol is used)   
  - Modifications to include/query_cache_sql_prepare.inc:
  - Minor improvements like add drop table
  - Add tests checking that 
    - another connection gets the same amount of QC hits
    - statements running via ps-protocol do not hit QC results of preceding sql EXECUTEs
mysql-test/r/grant_cache_no_prot.result:
  Updated result
mysql-test/r/query_cache_ps_no_prot.result:
  Updated result
tests/mysql_client_test.c:
  - correct wrong sized "for" loop
  - add some missing tests of query cache hit numbers
mysql-test/r/grant_cache_ps_prot.result:
  New BitKeeper file ``mysql-test/r/grant_cache_ps_prot.result''
mysql-test/r/query_cache_ps_ps_prot.result:
  New BitKeeper file ``mysql-test/r/query_cache_ps_ps_prot.result''
mysql-test/t/grant_cache_no_prot.test:
  Variant of the test grant_cache to be run without any "--<whatever>-protocol"
mysql-test/t/grant_cache_ps_prot.test:
  Variant of the test grant_cache to be run with "--ps-protocol" only
mysql-test/t/query_cache_ps_no_prot.test:
  Variant of the test query_cache_sql_prepare to be run without any "--<whatever>-protocol"
mysql-test/t/query_cache_ps_ps_prot.test:
  Variant of the test query_cache_sql_prepare to be run with "--ps-protocol" only
2007-05-24 22:13:49 +02:00
unknown
16de4981e1 Merge vajra.(none):/opt/local/work/mysql-5.0-runtime
into  vajra.(none):/opt/local/work/mysql-5.1-runtime


sql/mysql_priv.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
2007-05-24 21:12:03 +04:00
unknown
ee7088e730 Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  vajra.(none):/opt/local/work/mysql-5.1-runtime


include/my_global.h:
  Auto merged
mysql-test/include/mix1.inc:
  Auto merged
mysql-test/r/innodb_mysql.result:
  Auto merged
mysql-test/r/ps_2myisam.result:
  Auto merged
mysql-test/r/ps_3innodb.result:
  Auto merged
mysql-test/r/ps_4heap.result:
  Auto merged
mysql-test/r/ps_5merge.result:
  Auto merged
mysql-test/r/ps_7ndb.result:
  Auto merged
mysql-test/r/type_date.result:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
mysql-test/t/type_date.test:
  Auto merged
sql/filesort.cc:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/item_func.h:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
2007-05-24 19:34:14 +04:00
unknown
c8236f564c Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  vajra.(none):/opt/local/work/mysql-5.0-runtime


sql/mysql_priv.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
2007-05-24 19:23:52 +04:00
unknown
e3a3110fc6 Merge jbruehe@bk-internal.mysql.com:/home/bk/mysql-5.1-build
into  trift2.:/MySQL/M51/push-5.1
2007-05-24 15:32:14 +02:00
unknown
07ce35d237 Makefile.am : Add "embedded" tests to the "test-bt" target.
Makefile.am:
  The "test-bt" target was lacking "embedded" tests -
  add them, dependent on the build of the test binary needed for them.
2007-05-24 15:20:06 +02:00
unknown
eb1aa3bb21 Merge kpettersson@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime
2007-05-24 13:57:17 +02:00
unknown
404f0e66b2 Merge adventure.(none):/home/thek/Development/cpp/bug28644/my50-bug28644
into  adventure.(none):/home/thek/Development/cpp/bug28644/my51-bug28644


mysql-test/lib/mtr_report.pl:
  Auto merged
sql/sql_test.cc:
  Auto merged
2007-05-24 13:54:32 +02:00
unknown
a903e789e1 Merge adventure.(none):/home/thek/Development/cpp/bug28644/my41-bug28644
into  adventure.(none):/home/thek/Development/cpp/bug28644/my50-bug28644


mysql-test/lib/mtr_report.pl:
  Auto merged
sql/sql_test.cc:
  Auto merged
2007-05-24 13:53:49 +02:00
unknown
1632586e20 Bug#28644 Memory status report confused with memory leak
This patch removes a false memory leak error report from the test suite.
There is a test case that puposely provokes a SAFEMALLOC leak report,
even though there is no actual leak.


mysql-test/lib/mtr_report.pl:
  There is a test case that purposely provokes a SAFEMALLOC leak report,
  even though there is no actual leak. We need to detect this, and ignore the
  warning in that case.
sql/sql_test.cc:
  Added tags to surround memory dump status report to help the test
  suite to determine that this isn't a memory leak
2007-05-24 13:11:45 +02:00
unknown
160d6794c2 Merge dfischer@bk-internal.mysql.com:/home/bk/mysql-5.1-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
2007-05-24 09:29:12 +02:00
unknown
b5e17f5d2a Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build


configure.in:
  Auto merged
include/my_global.h:
  Auto merged
sql/item_func.cc:
  Auto merged
strings/strtod.c:
  Auto merged
2007-05-24 09:28:30 +02:00
unknown
0629727088 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build-work
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
2007-05-24 09:27:53 +02:00
unknown
ce5d7af17d Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build


configure.in:
  Auto merged
include/my_global.h:
  Auto merged
sql/item_func.cc:
  Auto merged
strings/strtod.c:
  Auto merged
2007-05-24 09:26:05 +02:00
unknown
6df02cf7d7 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build


configure.in:
  Auto merged
include/my_global.h:
  Auto merged
sql/item_func.cc:
  Auto merged
strings/strtod.c:
  Auto merged
2007-05-24 09:22:00 +02:00
unknown
37f1e22247 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build-work
2007-05-24 09:12:29 +02:00
unknown
b24c1b04ed Merge mockturtle.local:/home/dlenev/src/mysql-5.0-like
into  mockturtle.local:/home/dlenev/src/mysql-5.1-like-2


sql/handler.h:
  Auto merged
sql/mysql_priv.h:
  5.1 version of mysql_priv.h already contains all necessary changes.
sql/sql_parse.cc:
  5.1 version of sql_parse.cc already contains all necessary changes.
sql/sql_table.cc:
  5.1 version of sql_table.cc already contains all necessary changes.
sql/sql_yacc.yy:
  SCCS merged
mysql-test/r/grant2.result:
  Manual merge.
mysql-test/t/grant2.test:
  Manual merge.
2007-05-23 15:55:36 +04:00
unknown
4b9b1edae7 Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  mockturtle.local:/home/dlenev/src/mysql-5.1-like-2


sql/sql_parse.cc:
  Auto merged
2007-05-23 15:43:25 +04:00
unknown
206a6bb176 5.1 version of fix for:
Bug #23667 "CREATE TABLE LIKE is not isolated from alteration
              by other connections"
  Bug #18950 "CREATE TABLE LIKE does not obtain LOCK_open"
As well as:
  Bug #25578 "CREATE TABLE LIKE does not require any privileges
              on source table".

The first and the second bugs resulted in various errors and wrong
binary log order when one tried to execute concurrently CREATE TABLE LIKE
statement and DDL statements on source table or DML/DDL statements on its
target table.

The problem was caused by incomplete protection/table-locking against
concurrent statements implemented in mysql_create_like_table() routine.
We solve it by simply implementing such protection in proper way.
Most of actual work for 5.1 was already done by fix for bug 20662 and
preliminary patch changing locking in ALTER TABLE.

The third bug allowed user who didn't have any privileges on table create
its copy and therefore circumvent privilege check for SHOW CREATE TABLE.

This patch solves this problem by adding privilege check, which was missing.

Finally it also removes some duplicated code from mysql_create_like_table()
and thus fixes bug #26869 "TABLE_LIST::table_name_length inconsistent with
TABLE_LIST::table_name".


mysql-test/r/create-big.result:
  Added test coverage for concurrency-related issues with CREATE TABLE LIKE.
mysql-test/r/create.result:
  Adjusted error-code in the test case after refactoring code that
  implements CREATE TABLE ... LIKE.
mysql-test/r/grant2.result:
  Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
  on source table".
mysql-test/t/create-big.test:
  Added test coverage for concurrency-related issues with CREATE TABLE LIKE.
mysql-test/t/create.test:
  Adjusted error-code in the test case after refactoring code that
  implements CREATE TABLE ... LIKE.
mysql-test/t/disabled.def:
  Recent code changes ensured that CREATE TABLE LIKE statement is properly
  isolated against other statements, so synchronization.test should no
  longer fail (see fix for bug 20662 and preliminary patch for bug 23667
  changing ALTER TABLE locking).
mysql-test/t/grant2.test:
  Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
  on source table".
sql/handler.h:
  Introduced new flag for HA_CREATE_INFO::options in order to be able to
  distinguish CREATE TABLE ... LIKE from other types of CREATE TABLE.
sql/mysql_priv.h:
  mysql_create_like_table() now takes source table name not as a
  Table_ident object but as regular table list element.
sql/sql_lex.h:
  Removed LEX::like_name member. Now we use special flag in
  LEX::create_info::options for distinguishing CREATE TABLE ... LIKE
  from other types of CREATE TABLE and store name of source table as
  regular element in statement's table list.
sql/sql_parse.cc:
  CREATE TABLE ... LIKE implementation now uses statement's table list
  for storing information about the source table. We also use flag
  in LEX::create_info.options for distinguishing it from other types
  of CREATE TABLE.
  Finally CREATE TABLE ... LIKE now requires the same privileges on
  the source tables as SHOW CREATE TABLE. Moved this privilege check
  to check_show_create_table_access() function.
sql/sql_partition.cc:
  Now we use special flag in LEX::create_info::options for distinguishing
  CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
  of source table as regular element in statement's table list.
sql/sql_table.cc:
  mysql_create_like_table():  
   - Commented and cleaned-up a bit code which is responsible for achieving
     isolation from concurrent statements. Most of actual work was done by
     fix for bug 20662 and preliminary patch changing locking locking in
     ALTER TABLE, so here we do minor things like relaxing locking on
     source table (we don't need lock on it, to have it open is enough) and
     adjusting code to make it more friendly against code implementing I_S.
   - Get rid of duplicated code related to source database/table name
     handling. All these operations are already done in
     st_select_lex::add_table_to_list(), so we achieve the same effect
     by including source table into the statement's table list.
sql/sql_yacc.yy:
  Now we use special flag in LEX::create_info::options for distinguishing
  CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
  of source table as regular element in statement's table list.
2007-05-23 15:26:16 +04:00
unknown
f9d7642e7b 5.0 version of fix for:
Bug #23667 "CREATE TABLE LIKE is not isolated from alteration
             by other connections"
 Bug #18950 "CREATE TABLE LIKE does not obtain LOCK_open"
As well as:
 Bug #25578 "CREATE TABLE LIKE does not require any privileges
             on source table".

The first and the second bugs resulted in various errors and wrong
binary log order when one tried to execute concurrently CREATE TABLE LIKE
statement and DDL statements on source table or DML/DDL statements on its
target table.

The problem was caused by incomplete protection/table-locking against
concurrent statements implemented in mysql_create_like_table() routine.
We solve it by simply implementing such protection in proper way (see
comment for sql_table.cc for details).

The third bug allowed user who didn't have any privileges on table create
its copy and therefore circumvent privilege check for SHOW CREATE TABLE.

This patch solves this problem by adding privilege check, which was missing.

Finally it also removes some duplicated code from mysql_create_like_table().

Note that, altough tests covering concurrency-related aspects of CREATE TABLE
LIKE behaviour will only be introduced in 5.1, they were run manually for
this patch as well.


mysql-test/r/grant2.result:
  Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
  on source table".
mysql-test/t/grant2.test:
  Added test for bug#25578 "CREATE TABLE LIKE does not require any privileges
  on source table".
sql/handler.h:
  Introduced new flag for HA_CREATE_INFO::options in order to be able to
  distinguish CREATE TABLE ... LIKE from other types of CREATE TABLE.
sql/mysql_priv.h:
  mysql_create_like_table() now takes source table name not as a
  Table_ident object but as regular table list element.
sql/sql_parse.cc:
  CREATE TABLE ... LIKE implementation now uses statement's table list
  for storing information about the source table. We also use flag
  in LEX::create_info.options for distinguishing it from other types
  of CREATE TABLE.
  Finally CREATE TABLE ... LIKE now requires the same privileges on
  the source tables as SHOW CREATE TABLE. Moved this privilege check
  to check_show_create_table_access() function.
sql/sql_table.cc:
  mysql_create_like_table():
   - Provided proper protection from concurrent statements.
     This is achieved by keeping name-lock on the source table and holding
     LOCK_open mutex during whole operation. This gives protection against
     concurrent DDL on source table. Also holding this mutex makes copying
     of .frm file, call to ha_create_table() and binlogging atomic against
     concurrent DML and DDL operations on target table.
   - Get rid of duplicated code related to source database/table name
     handling. All these operations are already done in
     st_select_lex::add_table_to_list(), so we achieve the same effect
     by including source table into the statement's table list.
sql/sql_yacc.yy:
  Now we use special flag in LEX::create_info::options for distinguishing
  CREATE TABLE ... LIKE from other types of CREATE TABLE and store name
  of source table as regular element in statement's table list.
2007-05-23 15:22:13 +04:00
unknown
7f35d66d79 - Corrected type misstake in debug statement. 2007-05-23 13:04:49 +02:00
unknown
3807b25ef4 Merge adventure.(none):/home/thek/Development/cpp/bug21074/my51-bug21074
into  adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime


sql/set_var.cc:
  Auto merged
sql/sql_cache.cc:
  Auto merged
2007-05-23 12:55:11 +02:00
unknown
548070849a - This patch addesses the performance issues with invalidating the entire
cache by changing the behavior of the query cache resize-method.
- set query_cache_size=<new_size>; is significantly faster than RESET QUERY
  CACHE as it simply destroys and recreates the query cache, whereas
  RESET QUERY CACHE keeps its internal structure aligned with server 
  load profile.


sql/set_var.cc:
  Refactored behavior of function. Instead of setting the global variable
  from within the class method scope we return the new cache size as a 
  result of the method call.
sql/sql_cache.cc:
  - Changed behavior of resize-method. Now, the cache will be cleared as one
    single block of data instead of an iteration over all cached statements.
2007-05-23 12:54:15 +02:00
unknown
7e2e5372d5 Merge trift2.:/MySQL/M50/push-5.0
into  trift2.:/MySQL/M51/push-5.1
2007-05-23 12:02:48 +02:00
unknown
e6cbd8180c Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build


configure.in:
  Auto merged
include/my_global.h:
  Auto merged
sql/item_func.cc:
  Auto merged
BitKeeper/deleted/.del-CMakeLists.txt~13:
  Auto merged
2007-05-23 10:51:27 +02:00
unknown
5e236f85c5 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.42
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build


configure.in:
  Auto merged
sql/item_func.cc:
  Auto merged
2007-05-23 10:49:26 +02:00
unknown
7932fb5432 Merge mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.1-engines
2007-05-23 12:42:17 +05:00
unknown
32cd2fe6c2 Merge mysql.com:/home/svoj/devel/bk/mysql-5.1
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.1-engines


mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
sql/handler.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
storage/myisam/ha_myisam.cc:
  Auto merged
2007-05-23 12:41:30 +05:00
unknown
351abe5a89 Merge mysql.com:/home/svoj/devel/mysql/merge/mysql-4.1-engines
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines
2007-05-23 12:40:12 +05:00
unknown
adef673652 Merge mysql.com:/home/svoj/devel/bk/mysql-5.0
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines
2007-05-23 12:39:33 +05:00
unknown
e5b2adeac1 Merge mysql.com:/home/svoj/devel/bk/mysql-4.1
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-4.1-engines
2007-05-23 12:38:34 +05:00
unknown
4f3b4af226 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build-work
2007-05-23 08:40:39 +02:00
unknown
e5fe02615e build break cleanup
include/config-win.h:
  cleanup, windows build break
include/my_pthread.h:
  cleanup, windows build break
sql/event_queue.cc:
  warnings cleanup, unititialized waiting_on_cond
tests/mysql_client_test.c:
  warnings cleanup
2007-05-22 16:19:36 -06:00
unknown
2d95236b71 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user


storage/ndb/src/common/transporter/Packer.cpp:
  Auto merged
storage/ndb/src/common/transporter/TCP_Transporter.hpp:
  Auto merged
storage/ndb/src/common/transporter/TransporterRegistry.cpp:
  Auto merged
storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
  Auto merged
storage/ndb/test/ndbapi/testNdbApi.cpp:
  manual merge
storage/ndb/test/run-test/daily-basic-tests.txt:
  manual merge
2007-05-22 23:28:19 +02:00
unknown
d06875b3a4 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-4.1-ndb
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
2007-05-22 23:21:55 +02:00
unknown
b8dc4b6306 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
2007-05-22 23:21:32 +02:00
unknown
f529d18ba6 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
2007-05-22 23:20:40 +02:00