Commit graph

191 commits

Author SHA1 Message Date
unknown
2df3b7b0ea Merge gleb.loc:/home/uchum/work/bk/5.0
into  gleb.loc:/home/uchum/work/bk/5.0-opt


mysql-test/t/create.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/table.cc:
  Auto merged
mysql-test/r/create.result:
  Merge with 5.0 (main).
2007-07-26 03:33:43 +05:00
unknown
c4d53e31b0 Bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT.
When the SQL_BIG_RESULT flag is specified SELECT should store items from the
select list in the filesort data and use them when sending to a client.
The get_addon_fields function is responsible for creating necessary structures
for that. But this function was allowed to do so only for SELECT and
INSERT .. SELECT queries. This makes the SQL_BIG_RESULT useless for
the CREATE .. SELECT queries.

Now the get_addon_fields allows storing select list items in the filesort
data for the CREATE .. SELECT queries.


mysql-test/t/create.test:
  Added a test case for the bug#15130: CREATE .. SELECT was denied to use
  advantages of the SQL_BIG_RESULT.
mysql-test/r/create.result:
  Added a test case for the bug#15130: CREATE .. SELECT was denied to use
  advantages of the SQL_BIG_RESULT.
sql/filesort.cc:
  Bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT.
  Now the get_addon_fields allows storing select list items in the filesort
  data for the CREATE .. SELECT queries.
2007-07-24 18:15:44 +04:00
unknown
c0277a1192 A fix and a test case for Bug#26104 Bug on foreign key class constructor.
Fix the typo in the constructor. Cover a semantic check that previously
never worked with a test.


mysql-test/r/create.result:
  Update results (Bug#26104)
mysql-test/r/innodb.result:
  Update results.
mysql-test/t/create.test:
  Add a test case for Bug#26104 Bug on foreign key class constructor
mysql-test/t/innodb.test:
  Return a new error number (MySQL error instead of internal InnoDB error).
sql/sql_class.h:
  A fix for Bug#26104 Bug on foreign key class constructor -- fix
  the typo in the constructor
2007-07-18 16:22:05 +04:00
unknown
0c31d0bbd7 Bug #26642: create index corrupts table definition in .frm
Thanks to Martin Friebe for finding and submitting a fix for this bug!
  
  A table with maximum number of key segments and maximum length key name
  would have a corrupted .frm file, due to an incorrect calculation of the
  complete key length.  Now the key length is computed correctly (I hope) :-)
  
  MyISAM would reject a table with the maximum number of keys and the maximum
  number of key segments in all keys.  It would allow one less than this total
  maximum.  Now MyISAM accepts a table defined with the maximum.  (This is a
  very minor issue.)


myisam/mi_open.c:
  Bug #26642: change >= to > in a comparison (i.e., error 
  only if key_parts_in_table really is greater than 
  MAX_KEY * MAX_KEY_SEG)
mysql-test/r/create.result:
  Bug #26642: test case
mysql-test/t/create.test:
  Bug #26642: test case
sql/table.cc:
  Bug #26642: In create_frm(), fix formula for key_length; 
  it was too small by (keys * 2) bytes
2007-06-27 14:35:49 +03:00
unknown
11b084102d backport of Bug#11491 Misleading error message if not NULL column set to NULL, SQL mode TRADITIONAL
mysql-test/r/auto_increment.result:
  result fix
mysql-test/r/create.result:
  result fix
mysql-test/r/insert.result:
  result fix
mysql-test/r/insert_select.result:
  result fix
mysql-test/r/insert_update.result:
  result fix
mysql-test/r/key.result:
  result fix
mysql-test/r/null.result:
  result fix
mysql-test/r/null_key.result:
  result fix
mysql-test/r/ps_2myisam.result:
  result fix
mysql-test/r/ps_3innodb.result:
  result fix
mysql-test/r/ps_4heap.result:
  result fix
mysql-test/r/ps_5merge.result:
  result fix
mysql-test/r/ps_6bdb.result:
  result fix
mysql-test/r/ps_7ndb.result:
  result fix
mysql-test/r/strict.result:
  result fix
mysql-test/r/view.result:
  result fix
mysql-test/r/warnings.result:
  result fix
mysql-test/t/strict.test:
  test fix
2007-05-30 17:04:04 +05:00
unknown
c5a8245596 Fix for:
Bug #20662 "Infinite loop in CREATE TABLE IF NOT EXISTS ... SELECT
              with locked tables"
  Bug #20903 "Crash when using CREATE TABLE .. SELECT and triggers"
  Bug #24738 "CREATE TABLE ... SELECT is not isolated properly"
  Bug #24508 "Inconsistent results of CREATE TABLE ... SELECT when
              temporary table exists"
 
Deadlock occured when one tried to execute CREATE TABLE IF NOT
EXISTS ... SELECT statement under LOCK TABLES which held
read lock on target table.
Attempt to execute the same statement for already existing
target table with triggers caused server crashes.
Also concurrent execution of CREATE TABLE ... SELECT statement
and other statements involving target table suffered from
various races (some of which might've led to deadlocks).
Finally, attempt to execute CREATE TABLE ... SELECT in case
when a temporary table with same name was already present
led to the insertion of data into this temporary table and
creation of empty non-temporary table.
 
All above problems stemmed from the old implementation of CREATE
TABLE ... SELECT in which we created, opened and locked target
table without any special protection in a separate step and not
with the rest of tables used by this statement.
This underminded deadlock-avoidance approach used in server
and created window for races. It also excluded target table
from prelocking causing problems with trigger execution.
  
The patch solves these problems by implementing new approach to
handling of CREATE TABLE ... SELECT for base tables.
We try to open and lock table to be created at the same time as
the rest of tables used by this statement. If such table does not
exist at this moment we create and place in the table cache special
placeholder for it which prevents its creation or any other usage
by other threads.

We still use old approach for creation of temporary tables.

Also note that we decided to postpone introduction of some tests
for concurrent behaviour of CREATE TABLE ... SELECT till 5.1.
The main reason for this is absence in 5.0 ability to set @@debug
variable at runtime, which can be circumvented only by using several
test files with individual .opt files. Since the latter is likely
to slowdown test-suite unnecessary we chose not to push this tests
into 5.0, but run them manually for this version and later push
their optimized version into 5.1


mysql-test/r/create.result:
  Extended test coverage for CREATE TABLE ... SELECT. In particular added
  tests for bug #24508 "Inconsistent results of CREATE TABLE ... SELECT
  when temporary table exists" and bug #20662 "Infinite loop in CREATE
  TABLE IF NOT EXISTS ... SELECT with locked tables".
mysql-test/r/trigger.result:
  Added test case for bug #20903 "Crash when using CREATE TABLE .. SELECT
  and triggers"
mysql-test/t/create.test:
  Extended test coverage for CREATE TABLE ... SELECT. In particular added
  tests for bug #24508 "Inconsistent results of CREATE TABLE ... SELECT
  when temporary table exists" and bug #20662 "Infinite loop in CREATE
  TABLE IF NOT EXISTS ... SELECT with locked tables".
mysql-test/t/trigger.test:
  Added test case for bug #20903 "Crash when using CREATE TABLE .. SELECT
  and triggers"
sql/lock.cc:
  Now for creation of name-lock placeholder in lock_table_name() we use
  auxiliary function table_cache_insert_placeholder().
sql/mysql_priv.h:
  Made build_table_path() function available outside of sql_table.cc file.
  reopen_name_locked_table() now has 3rd argument which controls linking
  in of table being opened into THD::open_tables (this is useful in
  cases when placeholder used for name-locking is already linked into
  this list).
  Added declaration of auxiliary function table_cache_insert_placeholder()
  which is used for creation of table placeholders for name-locking.
  Added declaration of table_cache_has_open_placeholder() function which
  can be used for checking if table cache contains an open placeholder for
  the table and if this placeholder was created by another thread.
  (This function is needed only in 5.0 where we use it in various versions
   of CREATE TABLE in order to protect it from concurrent CREATE TABLE
   ... SELECT operations for the table. Starting from 5.1 we use different
   approach so it is going to be removed there).
  Made close_old_data_files() static within sql_base.cc file. 
  Added auxiliary drop_open_table() routine.
  Moved declaration of refresh_version to table.h header to make it
  accessible from inline methods of TABLE class.
  MYSQL_OPEN_IGNORE_LOCKED_TABLES flag is no longer used. Instead
  MYSQL_OPEN_TEMPORARY_ONLY option was added.
sql/sql_base.cc:
  Added support for the new approach to the handling of CREATE TABLE
  ... SELECT for base tables.
  
  Now we try to open and lock table to be created at the same time as
  the rest of tables used by this statement. If such table does not
  exist at this moment we create and place in the table cache special
  placeholder for it which prevents its creation or any other usage
  by other threads.
  
  Note significant distinctions of this placeholder from the placeholder
  used for normal name-lock: 1) It is treated like open table by other
  name-locks so it does not allow name-lock taking operations like DROP
  TABLE or RENAME TABLE to proceed. 2) it is linked into THD::open_tables
  list and automatically removed during close_thread_tables() call.
  
  open_tables():
    Implemented logic described above. To do this added
    auxiliary check_if_table_exists() function.
    Removed support for MYSQL_OPEN_IGNORE_LOCKED_TABLES option
    which is no longer used.
    Added MYSQL_OPEN_TEMPORARY_ONLY which is used to restrict
    search for temporary tables only.
  close_cached_tables()/close_thread_table()/reopen_tables()/
  close_old_data_files()/table_is_used()/remove_table_from_cache():
    Added support for open placeholders (note that we also use them
    when we need to re-open tables during flush).
  Added auxiliary drop_open_table() routine.
  reopen_name_locked_table():
    Now has 3rd argument which controls linking in of table being
    opened into THD::open_tables (this is useful in cases when
    placeholder used for name-locking is already linked into
    this list).
  Added auxiliary table_cache_insert_placeholder() routine which
  simplifies creation of placeholders used for name-locking.
  Added table_cache_has_open_placeholder() function which can be
  used for checking if table cache contains an open placeholder for
  the table and if this placeholder was created by another thread.
  (This function is needed only in 5.0 where we use it in various versions
   of CREATE TABLE in order to protect it from concurrent CREATE TABLE
   ... SELECT operations for the table. Starting from 5.1 we use different
   approach so it is going to be removed there).
sql/sql_handler.cc:
  Adjusted mysql_ha_mark_tables_for_reopen() routine to properly
  handle placeholders which now can be linked into open tables
  list.
sql/sql_insert.cc:
  Introduced new approach to handling of base tables in CREATE TABLE
  ... SELECT statement.
  
  Now we try to open and lock table to be created at the same time as
  the rest of tables used by this statement. If such table does not
  exist at this moment we create and place in the table cache special
  placeholder for it which prevents its creation or any other usage
  by other threads. By doing this we avoid races which existed with
  previous approach in which we created, opened and locked target in
  separate step without any special protection.
  This also allows properly calculate prelocking set in cases when
  target table already exists and has some on insert triggers.
    
  Note that we don't employ the same approach for temporary tables
  (this is okay as such tables are unaffected by other threads).
  
  Changed create_table_from_items() and select_create methods to
  implement this approach.
sql/sql_parse.cc:
  The new approach to handling of CREATE TABLE ... SELECT for
  base tables assumes that all tables (including table to be
  created) are opened and (or) locked at the same time.
  So in cases when we create base table we have to pass to
  open_and_lock_tables() table list which includes target table.
sql/sql_prepare.cc:
  The new approach to handling of CREATE TABLE ... SELECT for
  base tables assumes that all tables (including table to be
  created) are opened and (or) locked at the same time.
  So in cases when we create base table we have to pass to
  open_and_lock_tables() table list which includes target table.
sql/sql_table.cc:
  Now mysql_create_table_internal(), mysql_create_like_table() and
  mysql_alter_table() not only check that destination table doesn't
  exist on disk but also check that there is no create placeholder
  in table cache for it (i.e. there is no CREATE TABLE ... SELECT
  operation in progress for it). Note that starting from 5.1 we
  use different approach in order to to protect CREATE TABLE ... SELECT
  from concurrent CREATE TABLE (ALTER TABLE ... RENAME) operations,
  the latter simply take name-locks on table before its creation
  (on target table name before renaming).
  
  Also made build_table_path() available from other files and
  asjusted calls to reopen_name_locked_table(), which now takes
  extra argument, which controls linking of open table into
  THD::open_tables list.
sql/sql_trigger.cc:
  reopen_name_locked_tables() now has one more argument which controls
  linking of opened table into the THD::open_tables list.
sql/sql_yacc.yy:
  The new approach to handling of CREATE TABLE ... SELECT statement
  for base tables assumes that all tables including table to be
  created are open and (or) locked at the same time. Therefore
  we need to set correct lock for target table.
sql/table.h:
  Moved declaration of refresh_version variable from mysql_priv.h
  to make it accessible from inline methods of TABLE class. 
  Renamed TABLE::locked_by_flush member to open_placeholder since
  now it is also used for taking exclusive name-lock and not only
  by flush. 
  Introduced TABLE::is_name_opened() helper method which can be used
  to distinguish TABLE instances corresponding to open tables or
  placeholders for them from closed instances (e.g. due to their old
  version). Also introduced TABLE::needs_reopen_or_name_lock() helper
  which allows to check if TABLE instance corresponds to outdated
  version of table or to name-lock placeholder.
  Introduced TABLE_LIST::create member which marks elements of
  table list corresponds to the table to be created.
  Adjusted TABLE_LIST::placeholder() method to take into account 
  name-lock placeholders for tables to be created (this, for example,
  allows to properly handle such placeholders in lock_tables()).
2007-05-11 20:33:13 +04:00
unknown
3378a48698 Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint


mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/r/create.result:
  Auto merged
mysql-test/r/type_datetime.result:
  Auto merged
sql/field.h:
  Auto merged
sql/item.h:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/item_strfunc.cc:
  Auto merged
sql/item_sum.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/r/gis.result:
  SCCS merged
mysql-test/t/gis.test:
  SCCS merged
2007-04-02 10:50:39 +02:00
unknown
44d4940fcc Merge pilot.blaudden:/home/msvensson/mysql/mysql-4.1-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint


myisam/mi_open.c:
  Auto merged
sql/table.cc:
  Auto merged
mysql-test/r/create.result:
  SCCS merged
mysql-test/t/create.test:
  SCCS merged
2007-04-02 10:42:08 +02:00
unknown
0bb2f43d2e Cset exclude: tsmith@siva.hindu.god|ChangeSet|20070328212513|13373
myisam/mi_open.c:
  Exclude
mysql-test/r/create.result:
  Exclude
mysql-test/t/create.test:
  Exclude
sql/table.cc:
  Exclude
2007-04-02 10:39:23 +02:00
unknown
e76abb0d89 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/41
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50


myisam/mi_open.c:
  Auto merged
sql-common/my_time.c:
  Auto merged
sql/table.cc:
  Auto merged
mysql-test/r/create.result:
  Manual merge
mysql-test/t/create.test:
  Manual merge
2007-03-29 12:52:31 +02:00
unknown
0b72b7f0a4 Bug #26642: create index corrupts table definition in .frm
Thanks to Martin Friebe for finding and submitting a fix for this bug!

A table with maximum number of key segments and maximum length key name
would have a corrupted .frm file, due to an incorrect calculation of the
complete key length.  Now the key length is computed correctly (I hope) :-)

MyISAM would reject a table with the maximum number of keys and the maximum
number of key segments in all keys.  It would allow one less than this total
maximum.  Now MyISAM accepts a table defined with the maximum.  (This is a
very minor issue.)


myisam/mi_open.c:
  change >= to > in a comparison (i.e., error only if key_parts_in_table
  really is greater than MAX_KEY * MAX_KEY_SEG)
mysql-test/r/create.result:
  Add test results for bug #26642 (create index corrupts table definition in .frm)
mysql-test/t/create.test:
  Add test case for bug #26642 (create index corrupts table definition in .frm)
sql/table.cc:
  In create_frm(), fix formula for key_length; it was too small by (keys * 2) bytes
2007-03-28 15:25:13 -06:00
unknown
aa32336198 Bug #24791: Union with AVG-groups generates wrong results
The problem in this bug is when we create temporary tables. When
temporary tables are created for unions, there is some 
inferrence being carried out regarding the type of the column.
Whenever this column type is inferred to be REAL (i.e. FLOAT or
DOUBLE), MySQL will always try to maintain exact precision, and
if that is not possible (there are hardware limits, since FLOAT
and DOUBLE are stored as approximate values) will switch to
using approximate values. The problem here is that at this point
the information about number of significant digits is not 
available. Furthermore, the number of significant digits should
be increased for the AVG function, however, this was not properly 
handled. There are 4 parts to the problem:

#1: DOUBLE and FLOAT fields don't display their proper display 
lengths in max_display_length(). This is hard-coded as 53 for 
DOUBLE and 24 for FLOAT. Now changed to instead return the 
field_length.

#2: Type holders for temporary tables do not preserve the 
max_length of the Item's from which they are created, and is 
instead reverted to the 53 and 24 from above. This causes 
*all* fields to get non-fixed significant digits.

#3: AVG function does not update max_length (display length)
when updating number of decimals.

#4: The function that switches to non-fixed number of 
significant digits should use DBL_DIG + 2 or FLT_DIG + 2 as 
cut-off values (Since fixed precision does not use the 'e' 
notation)

Of these points, #1 is the controversial one, but this 
change is preferred and has been cleared with Monty. The 
function causes quite a few unit tests to blow up and they had
to b changed, but each one is annotated and motivated. We 
frequently see the magical 53 and 24 give way to more relevant
numbers.


mysql-test/r/create.result:
  bug#24791
  
  changed test result
  
  With the changes made for FLOAT and DOUBLE, the original display
  lengths are now preserved.
mysql-test/r/temp_table.result:
  bug#24791
  
  changed test resullt
  
  Test case added
mysql-test/r/type_float.result:
  bug#24791
  
  changed test result
  
  delta 1: field was originally declared as DOUBLE with no display
  length, so the hardware maximum is chosen rather than 53.
  
  delta 2: fields exceed the maximum precision and thus switch to
  non-fixed significant digits
  
  delta 3: Same as above, number of decmals and significant digits
  was not specified when t3 was created.
mysql-test/t/temp_table.test:
  bug#24791
  
  Test case
sql/field.h:
  bug#24791
  
  The method max_display_length is reimplemented as
  
  uint32 max_display_length() { return field_length; }
  
  in Field_double and Field_float. Since all subclasses of 
  Field_real now have the same implementation of this method, the
  implementation has been moved up the hierarchy to Field_real.
sql/item.cc:
  bug#24791
  
  We switch to a non-fixed number of significant digits
  (by setting decimals=NOT_FIXED_DECIMAL) if the calculated 
  display length is greater than the display length of a value 
  with the maximum precision. These values differ for double and 
  float, obviously.
sql/item_sum.cc:
  bug#24791
  
  We must increase the display length accordinly whenever we 
  change number of decimal places.
2007-03-22 10:56:47 +01:00
unknown
5d4e0417ad Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Use mysql_system_tables.sql to create MySQL system tables in
   all places where we create them(mysql_install_db, mysql-test-run-pl
   and mysql_fix_privilege_tables.sql)


BitKeeper/deleted/.del-init_db.sql:
  Rename: mysql-test/init_db.sql -> BitKeeper/deleted/.del-init_db.sql
BitKeeper/deleted/.del-init_db.sql~a77d572c39d5a1f8:
  Rename: mysql-test/lib/init_db.sql -> BitKeeper/deleted/.del-init_db.sql~a77d572c39d5a1f8
BitKeeper/deleted/.del-mysql_create_system_tables.sh:
  Rename: scripts/mysql_create_system_tables.sh -> BitKeeper/deleted/.del-mysql_create_system_tables.sh
BitKeeper/etc/ignore:
  Added scripts/mysql_fix_privilege_tables.sql to the ignore list
mysql-test/Makefile.am:
  lib/init_db.sql has been removed
mysql-test/mysql-test-run.pl:
  - Build var/tmp/bootstrap.sql from mysql_system_tables.sql,
  mysql_test_data_timezone.sql and fill_help_tables.sql and use
  it when bootsraping the system tables to use during test.
mysql-test/r/create.result:
  Update result file
mysql-test/r/derived.result:
  Update result file
mysql-test/r/join.result:
  Update result file
mysql-test/r/mysql_upgrade.result:
  Update result file
mysql-test/r/sp-security.result:
  Update result file
mysql-test/t/create.test:
  Add user mysqltest_1 before trying to connect as that user - no
  anon users by default anymore
mysql-test/t/derived.test:
  Add user mysqltest_1 before trying to connect as that user - no
  anon users by default anymore
mysql-test/t/grant2.test:
  Add anonymous users for part of thes that need it.
mysql-test/t/grant_cache.test:
  Add anonymous users for part of thes that need it.
mysql-test/t/init_connect.test:
  Add anonymous users for part of thes that need it.
mysql-test/t/lock_multi.test:
  Add anonymous users for part of thes that need it.
mysql-test/t/ndb_basic.test:
  Connect as "root", blank user will take currently logged in
  username
mysql-test/t/ndb_index_ordered.test:
  Connect as "root", blank user will take currently logged in
  username
mysql-test/t/ndb_multi.test:
  Connect as "root", blank user will take currently logged in
  username
mysql-test/t/overflow.test:
  Connect as root - no anonymous users by default anymore
mysql-test/t/rpl_temporary.test:
  Add anonymous users for the test
mysql-test/t/xa.test:
  Connect as "root", blank user wil pick currently logged in user
scripts/Makefile.am:
  Remove mysql_create_system_tables.sh
  Add mysql_system_tables.sql and mysql_test_data_timezone.sql
  Build mysql_fix_privilege_tables.sql from mysql_system_tables.sql
  and mysql_fix_privilege_tables.sql.in
scripts/mysql_fix_privilege_tables.sh:
  Update message describing what the script does
scripts/mysql_fix_privilege_tables.sql.in:
  Remove the part that creates system tables as that will be added to
  mysql_fix_privileg_tables.sql from mysql_system_tables.sql
  Change all comments to use #
scripts/mysql_install_db.sh:
  Use mysql_system_tables.sql to create the MySQL system tables
  Update comments and indentation
  Add more descriptive comments about --windows switch
  Reduce number of hardcoded names for the SQL files the script
  looks for
mysql-test/include/add_anonymous_users.inc:
  New BitKeeper file ``mysql-test/include/add_anonymous_users.inc''
mysql-test/include/delete_anonymous_users.inc:
  New BitKeeper file ``mysql-test/include/delete_anonymous_users.inc''
scripts/mysql_system_tables.sql:
  New BitKeeper file ``scripts/mysql_system_tables.sql''
scripts/mysql_test_data_timezone.sql:
  New BitKeeper file ``scripts/mysql_test_data_timezone.sql''
2007-02-26 11:49:24 +01:00
unknown
15a86d185d Merge neptunus.(none):/home/msvensson/mysql/bug22436/my50-bug22436
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint


mysql-test/r/innodb_mysql.result:
  Auto merged
mysql-test/t/innodb_mysql.test:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
mysql-test/r/create.result:
  Merge
mysql-test/t/create.test:
  Merge
mysql-test/t/view.test:
  Remove the disable_warnings part as engine=innodb has been removed
2006-10-19 01:01:54 +02:00
unknown
d8d57c77b1 Bug#22436 Four tests require "innodb" to be configured, fail in "classic" build
- Disable warnings when creating the "innodb" tables if it works anyway.
 - Move test that are really innodb dependent to innodb_mysql 


mysql-test/r/create.result:
  Move the innodb dependent test to innodb_mysql.test
mysql-test/r/innodb_mysql.result:
  Move the innodb dependent test to innodb_mysql.test
mysql-test/t/create.test:
  Move the innodb dependent test to innodb_mysql.test
mysql-test/t/innodb_mysql.test:
  Move the innodb dependent test to innodb_mysql.test
mysql-test/t/lock_multi.test:
  Disable warnings while creating the innodb table. If innodb is not available, the table will be created with default engine and thus create a warning. Regardless of this, test output should be the same.
mysql-test/t/sp.test:
  Disable warnings while creating the innodb table. If innodb is not available, the table will be created with default engine and thus create a warning. Regardless of this, test output should be the same.
mysql-test/t/view.test:
  Disable warnings while creating the innodb table. If innodb is not available, the table will be created with default engine and thus create a warning. Regardless of this, test output should be the same.
2006-09-28 15:13:40 +02:00
unknown
0eb5442fd9 Bug #21772: can not name a column 'upgrade' when create a table in version 5.0.24
Upgrade was a reserved word. Unreserve UPGRADE so it can be used in unquoted identifiers.


mysql-test/r/create.result:
  Bug #21772: can not name a column 'upgrade' when create a table in version 5.0.24
   - test case
mysql-test/t/create.test:
  Bug #21772: can not name a column 'upgrade' when create a table in version 5.0.24
   - test case
sql/sql_yacc.yy:
  Bug #21772: can not name a column 'upgrade' when create a table in version 5.0.24
   - unreserve UPGRADE.
2006-09-08 13:10:14 +03:00
unknown
131f9a71d1 Merge xiphis.org:/home/antony/work2/mysql-5.0-engines
into  xiphis.org:/home/antony/work2/mysql-5.0-merge


mysql-test/r/create.result:
  Auto merged
mysql-test/r/federated.result:
  Auto merged
mysql-test/r/insert_select.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_6bdb.result:
  Auto merged
mysql-test/r/ps_7ndb.result:
  Auto merged
mysql-test/r/strict.result:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/r/warnings.result:
  Auto merged
sql/share/errmsg.txt:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_insert.cc:
  Auto merged
2006-08-14 21:27:36 -07:00
unknown
a1bd0bd118 BUG#14770 - LOAD DATA INFILE doesn't respect default values for
columns
Fixed confusing warning.

Quoting INSERT section of the manual:
----
Inserting NULL into a column that has been declared NOT NULL. For
multiple-row INSERT statements or INSERT INTO ... SELECT statements, the
column is set to the implicit default value for the column data type. This
is 0 for numeric types, the empty string ('') for string types, and the
"zero" value for date and time types. INSERT INTO ... SELECT statements are
handled the same way as multiple-row inserts because the server does not
examine the result set from the SELECT to see whether it returns a single
row. (For a single-row INSERT, no warning occurs when NULL is inserted into
a NOT NULL column. Instead, the statement fails with an error.)
----
This is also true for LOAD DATA INFILE. For INSERT user can specify
DEFAULT keyword as a value to set column default. There is no similiar
feature available for LOAD DATA INFILE.


mysql-test/r/auto_increment.result:
  Fixed confusing warning.
mysql-test/r/create.result:
  Fixed confusing warning.
mysql-test/r/insert.result:
  Fixed confusing warning.
mysql-test/r/insert_select.result:
  Fixed confusing warning.
mysql-test/r/key.result:
  Fixed confusing warning.
mysql-test/r/null.result:
  Fixed confusing warning.
mysql-test/r/null_key.result:
  Fixed confusing warning.
mysql-test/r/ps_2myisam.result:
  Fixed confusing warning.
mysql-test/r/ps_3innodb.result:
  Fixed confusing warning.
mysql-test/r/ps_4heap.result:
  Fixed confusing warning.
mysql-test/r/ps_5merge.result:
  Fixed confusing warning.
mysql-test/r/ps_6bdb.result:
  Fixed confusing warning.
mysql-test/r/strict.result:
  Fixed confusing warning.
mysql-test/r/view.result:
  Fixed confusing warning.
mysql-test/r/warnings.result:
  Fixed confusing warning.
sql/share/errmsg.txt:
  Fixed confusing warning.
2006-08-02 17:15:50 +05:00
unknown
f171d628c7 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/work/autopush/12185-bug-5.0-opt-mysql


mysql-test/r/create.result:
  Auto merged
mysql-test/t/innodb.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/item.cc:
  Auto merged
mysql-test/r/union.result:
  SCCS merged
mysql-test/t/union.test:
  SCCS merged
2006-07-22 02:15:36 +04:00
unknown
35209c68ea Fixed bug#12185: Data type aggregation may produce wrong result
The Item::tmp_table_field_from_field_type() function creates Field_datetime
object instead of Field_timestamp object for timestamp field thus always
changing data type is a tmp table is used.

The Field_blob object constructor which is used in the 
Item::tmp_table_field_from_field_type() is always setting packlength field of
newly created blob to 4. This leads to changing fields data type for example
from the blob to the longblob if a temporary table is used.

The Item::make_string_field() function always converts Field_string objects 
to Field_varstring objects. This leads to changing data type from the 
char/binary to varchar/varbinary.

Added appropriate Field_timestamp object constructor for using in the 
Item::tmp_table_field_from_field_type() function.

Added Field_blob object constructor which sets pack length according to
max_length argument.

The Item::tmp_table_field_from_field_type() function now creates
Field_timestamp object for a timestamp field.

The Item_type_holder::display_length() now returns correct NULL length NULL
length. 

The Item::make_string_field() function now doesn't change Field_string to
Field_varstring in the case of Item_type_holder. 

The Item::tmp_table_field_from_field_type() function now uses the Field_blob
constructor which sets packlength according to max_length.


mysql-test/t/union.test:
  Added test case for bug#12185: Data type aggregation may produce wrong result
  Corrected test case after fix for bug#12185
mysql-test/t/innodb.test:
  Corrected test case after fix for bug#12185
mysql-test/r/union.result:
  Added test case for bug#12185: Data type aggregation may produce wrong result
   Corrected test case after fix for bug#12185
mysql-test/r/innodb.result:
  Corrected test case after fix for bug#12185
mysql-test/r/create.result:
  Corrected the test case after fixing bug#12185
sql/field.h:
  Fixed bug#12185: Data type aggregation may produce wrong result
  Added Field_blob object constructor which sets packlength according to
  max_length argument.
sql/item.cc:
  Fixed bug#12185: Data type aggregation may produce wrong result
  The Item::make_string_field() function now doesn't change Field_string to
  Field_varstring in the case of Item_type_holder.
  The Item::tmp_table_field_from_field_type() function now creates
  Field_timestamp object for a timestamp field.
  The Item::tmp_table_field_from_field_type() function now uses the Field_blob
  constructor which sets packlength according to max_length.
  The Item_type_holder::display_length() now returns correct NULL length NULL
  length.
sql/field.cc:
  Fixed bug#12185: Data type aggregation may produce wrong result
  Added appropriate Field_timestamp object constructor for using in the 
  Item::tmp_table_field_from_field_type() function.
2006-07-22 02:08:00 +04:00
unknown
1e44259440 Fixed bug #19714.
DESCRIBE returned the type BIGINT for a column of a view if the column
was specified by an expression over values of the type INT.
    
E.g. for the view defined as follows:
  CREATE VIEW v1 SELECT COALESCE(f1,f2) FROM t1
DESCRIBE returned type BIGINT for the only column of the view if f1,f2 are
columns of the INT type.
At the same time DESCRIBE returned type INT for the only column of the table
defined by the statement:
  CREATE TABLE t2 SELECT COALESCE(f1,f2) FROM t1.
    
This inconsistency was removed by the patch.

Now the code chooses between INT/BIGINT depending on the
precision of the aggregated column type.
 
Thus both DESCRIBE commands above returns type INT for v1 and t2.
 


mysql-test/r/analyse.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/bigint.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/create.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/olap.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_2myisam.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_3innodb.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_4heap.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_5merge.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_6bdb.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/ps_7ndb.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/sp.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/subselect.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/type_ranges.result:
  Adjusted the results after having fixed bug #19714.
mysql-test/r/view.result:
  Added a test case for bug #19714.
mysql-test/t/view.test:
  Added a test case for bug #19714.
2006-07-13 20:48:26 -07:00
unknown
d6bcbfbe92 A fix and a test case for
Bug#19022 "Memory bug when switching db during trigger execution"
 Bug#17199 "Problem when view calls function from another database."
 Bug#18444 "Fully qualified stored function names don't work correctly in
            SELECT statements"

 Documentation note: this patch introduces a change in behaviour of prepared
 statements.

 This patch adds a few new invariants with regard to how THD::db should
 be used. These invariants should be preserved in future:

  - one should never refer to THD::db by pointer and always make a deep copy
    (strmake, strdup)
  - one should never compare two databases by pointer, but use strncmp or
    my_strncasecmp
  - TABLE_LIST object table->db should be always initialized in the parser or
    by creator of the object.

    For prepared statements it means that if the current database is changed
    after a statement is prepared, the database that was current at prepare
    remains active. This also means that you can not prepare a statement that
    implicitly refers to the current database if the latter is not set.
    This is not documented, and therefore needs documentation. This is NOT a
    change in behavior for almost all SQL statements except:
     - ALTER TABLE t1 RENAME t2 
     - OPTIMIZE TABLE t1
     - ANALYZE TABLE t1
     - TRUNCATE TABLE t1 --
     until this patch t1 or t2 could be evaluated at the first execution of
     prepared statement. 

     CURRENT_DATABASE() still works OK and is evaluated at every execution
     of prepared statement.

     Note, that in stored routines this is not an issue as the default
     database is the database of the stored procedure and "use" statement
     is prohibited in stored routines.

  This patch makes obsolete the use of check_db_used (it was never used in the
  old code too) and all other places that check for table->db and assign it
  from THD::db if it's NULL, except the parser.

 How this patch was created: THD::{db,db_length} were replaced with a
 LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
 manually checked and:
  - if the place uses thd->db by pointer, it was fixed to make a deep copy
  - if a place compared two db pointers, it was fixed to compare them by value
    (via strcmp/my_strcasecmp, whatever was approproate)
 Then this intermediate patch was used to write a smaller patch that does the
 same thing but without a rename.

 TODO in 5.1:
   - remove check_db_used
   - deploy THD::set_db in mysql_change_db

 See also comments to individual files.


mysql-test/r/create.result:
  Modify the result file: a database can never be NULL.
mysql-test/r/ps.result:
  Update test results (Bug#17199 et al)
mysql-test/r/sp.result:
  Update test results (Bug#17199 et al)
mysql-test/t/create.test:
  Update the id of the returned error.
mysql-test/t/ps.test:
  Add test coverage for prepared statements and current database. In scope of
  work on Bug#17199 "Problem when view calls function from another database."
mysql-test/t/sp.test:
  Add a test case for Bug#17199 "Problem when view calls function from another
  database." and Bug#18444 "Fully qualified stored function names don't work
  correctly in SELECT statements". Test a complementary problem.
sql/item_strfunc.cc:
  Touch the code that reads thd->db (cleanup).
sql/log_event.cc:
  While we are at it, replace direct access to thd->db with a method.
  Should simplify future conversion of THD::db to LEX_STRING.
sql/slave.cc:
  While we are at it, replace direct access to thd->db with a method.
  Should simplify future conversion of THD::db to LEX_STRING.
sql/slave.h:
  Remove a declaration for a method that is used only in one module.
sql/sp.cc:
  Rewrite sp_use_new_db: this is a cleanup that I needed in order to understand
  this function and ensure that it has no bugs.
sql/sp.h:
  Add a new declaration for sp_use_new_db (uses LEX_STRINGs) and a comment.
sql/sp_head.cc:
  - drop sp_name_current_db_new - a creator of sp_name class that was used
  when sp_name was created for an identifier without an explicitly initialized
  database. Now we pass thd->db to constructor of sp_name right in the 
  parser.
  - rewrite sp_head::init_strings: name->m_db is always set now
  - use the new variant of sp_use_new_db
  - we don't need to update thd->db with SP MEM_ROOT pointer anymore when
  parsing a stored procedure, as noone will refer to it (yes!)
sql/sp_head.h:
  - remove unneded methods and members
sql/sql_class.h:
  - introduce 3 THD  methods to work with THD::db:
    .set_db to assign the current database
    .reset_db to reset the current database (temporarily) or set it to NULL
    .opt_copy_db_to - to deep-copy thd->db to a pointer if it's not NULL
sql/sql_db.cc:
  While we are at it, replace direct access to thd->db with a method.
  Should simplify future conversion of THD::db to LEX_STRING.
sql/sql_insert.cc:
  - replace checks with asserts: table_list->db must be always set in the parser.
sql/sql_lex.h:
  - add a comment
sql/sql_parse.cc:
  - implement the invariant described in the changeset comment.
  - remove juggling with lex->sphead in SQLCOM_CREATE_PROCEDURE:
    now db_load_routine uses its own LEX object and doesn't damage the main
    LEX.
  - add DBUG_ASSERT(0) to unused "check_db_used"
sql/sql_table.cc:
  - replace a check with an assert (table_ident->db)
sql/sql_trigger.cc:
  While we are at it, replace direct access to thd->db with a method.
  Should simplify future conversion of THD::db to LEX_STRING.
sql/sql_udf.cc:
  - use thd->set_db instead of direct modification of to thd->db
sql/sql_view.cc:
  - replace a check with an assert (view->db)
sql/sql_yacc.yy:
  - make sure that we always copy table->db or name->db or ident->db or
    select_lex->db from thd->db if the former is not set. If thd->db
    is not set but is accessed, return an error.
sql/tztime.cc:
  - be nice, never copy thd->db by pointer.
2006-06-27 00:47:52 +04:00
unknown
600a17635e post-merge fix 2006-03-30 09:13:25 +05:00
unknown
a7431720ce Merge
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
mysql-test/r/create.result:
  SCCS merged
2006-03-30 08:13:28 +05:00
unknown
4af4e1e704 Fix for bug#15316 SET value having comma not correctly handled
disallow the use of comma in SET members


mysql-test/r/create.result:
  Fix for bug#15316 SET value having comma not correctly handled
   test case
mysql-test/t/create.test:
  Fix for bug#15316 SET value having comma not correctly handled
   test case
2006-03-29 19:52:26 +05:00
unknown
71ee8615c3 Fixed bug#17530: Incorrect key truncation on table creation caused server crash.
When a too long field is used for a key, only a prefix part of the field is 
used. Length is reduced to the max key length allowed for storage. But if the
field have a multibyte charset it is possible to break multibyte char
sequence. This leads to the failed assertion in the innodb code and 
server crash when a record is inserted.

The make_prepare_table() now aligns truncated key length to the boundary of
multibyte char.


mysql-test/t/create.test:
  Added test case for bug#17530: Incorrect key truncation on table creation caused server crash.
mysql-test/r/create.result:
  Added test case for bug#17530: Incorrect key truncation on table creation caused server crash.
sql/sql_table.cc:
  Fixed bug#17530: Incorrect key truncation on table creation caused server crash.
  The make_prepare_table() now aligns truncated key length to the boundary of
  multibyte char.
2006-02-21 18:09:32 +03:00
unknown
490fbdb63e Merge a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-4.1
into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0


mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
2006-01-16 21:31:22 +02:00
unknown
f41b7bca6c Merge
mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  SCCS merged
2006-01-16 16:21:41 +01:00
unknown
29fde52802 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/my/mysql-5.0


mysql-test/r/create.result:
  Auto merged
mysql-test/r/trigger.result:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
mysql-test/t/view.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/opt_range.cc:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sp_head.h:
  Auto merged
sql/sql_acl.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
mysql-test/t/disabled.def:
  Manual merge
sql/mysqld.cc:
  Manual merge
sql/sp_head.cc:
  Manual merge
sql/sql_trigger.cc:
  Manual merge
2006-01-06 01:08:48 +02:00
unknown
64206b1850 Review fixes of new pushed code
- Fixed tests
- Optimized new code
- Fixed some unlikely core dumps
- Better bug fixes for:
  - #14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
  - #14850 (ERROR 1062 when a quering a view using a Group By on a column that can be null


mysql-test/r/create.result:
  Update results after removing wrong warnings for CREATE ... SELECT
  New tests
mysql-test/r/handler.result:
  Drop used tables
mysql-test/r/kill.result:
  Make test portable
mysql-test/r/mysqlshow.result:
  Drop tables used by previous test
mysql-test/r/trigger.result:
  Reuse old procedure name
mysql-test/r/view.result:
  Extra tests
mysql-test/t/create.test:
  New tests to test fix of removing wrong warnings for CREATE ... SELECT
mysql-test/t/disabled.def:
  Enable 'kill' test (should now be portable)
mysql-test/t/handler.test:
  Drop used tables
mysql-test/t/kill.test:
  Make test portable even if kill doesn't work at once
mysql-test/t/mysqlshow.test:
  Drop tables used by previous test
mysql-test/t/trigger.test:
  Reuse old procedure name
mysql-test/t/view.test:
  Extra tests
sql/field.cc:
  Removed compiler warning
sql/ha_federated.cc:
  my_snprintf -> strmake()
  (Simple optimization)
sql/ha_ndbcluster.cc:
  Indentation cleanups and trival optimization
sql/item.cc:
  Moved save_org_in_field() to item.cc to make it easier to test
  Remove setting of null_value as this is not needed
sql/item.h:
  Moved save_org_in_field() to item.cc to make it easier to test
sql/log_event.cc:
  Remove inline of slave_load_file_stem()
  Added 'extension' parameter to slave_load_file_stem() to get smaller code
  Removed not critical (or needed) DBUG_ASSERT()'s
  Cleaned up usage of slave_load_file_stem() to not depend on constant string lengths
  Indentation fixes
sql/opt_range.cc:
  Moved code from declaration to function body
  (To make it more readable)
sql/parse_file.cc:
  Fixed DBUG_PRINT
sql/sp.cc:
  Simple cleanups
  - Removed not needed {} level
  - Ensure saved variables starts with old_
sql/sp_head.cc:
  Indentation fixes
  Remove core dump when using --debug when m_next_cached_sp == 0
  Fixed compiler warnings
  Trivial optimizations
sql/sp_head.h:
  Changed argument to set_definer() to const
  Added THD argument to recursion_level_error() to avoid call to current_thd
sql/sql_acl.cc:
  Removed not needed test (first_not_own_table is the guard)
sql/sql_base.cc:
  Removed extra empty line
sql/sql_handler.cc:
  Don't test table version in mysql_ha_read() as this is already tested in lock_tables()
  Moved call to insert_fields to be after lock_table() to guard aganst reopen of tables
  (Better fix for Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash)
sql/sql_insert.cc:
  Mark fields that are set in CREATE ... SELECT as used
  (Removed wrong warnings about field not having a default value)
sql/sql_parse.cc:
  Removed not needed test of 'tables' (first_not_own_table is the guard)
  Simplify code
sql/sql_select.cc:
  Use group->field to check if value is null instead of item called by 'save_org_in_field'
  This is a better bug fix for #14850 (ERROR 1062 when a quering a view using a Group By on a column that can be null)
sql/sql_trigger.cc:
  Move sql_modes_parameters outside of function
  Indentation fixes
  Fixed compiler warning
  Ensure that thd->lex->query_tables_own_last is set properly before calling check_table_access()
  (This allows us to remove the extra test in check_grant() and check_table_access())
2006-01-06 00:47:49 +02:00
unknown
5113bdffd0 BUG#5390 - problems with merge tables
Problem #1: INSERT...SELECT, Version for 5.0.
Extended the unique table check by a check of lock data.
Merge sub-tables cannot be detected by doing name checks only.


mysql-test/r/create.result:
  BUG#5390 - problems with merge tables
  Removed a duplicate test.
mysql-test/r/merge.result:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT
  Added test results.
mysql-test/t/create.test:
  BUG#5390 - problems with merge tables
  Removed a duplicate test.
mysql-test/t/merge.test:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT
  Added tests.
sql/lock.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added a new function to find a duplicate lock in a list of tables.
sql/mysql_priv.h:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
  Added a declaration for the new function.
sql/sql_base.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
  Added a call to the new mysql_lock_have_duplicate(),
  which needs the thread handle, to unique_table().
sql/sql_delete.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
sql/sql_insert.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
sql/sql_load.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
sql/sql_parse.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
sql/sql_update.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 5.0.
  Added the thread handle to unique_table().
  Replaced a call to find_table_in_local_list() by
  the newly extended unique_table().
2005-12-20 16:35:05 +01:00
unknown
f6cac54bf6 BUG#5390 - problems with merge tables
Problem #1: INSERT...SELECT, Version for 4.1.
INSERT ... SELECT with the same table on both sides (hidden
below a MERGE table) does now work by buffering the select result.
The duplicate detection works now after open_and_lock_tables() 
on the locks.
I did not find a test case that failed without the change in
sql_update.cc. I made the change anyway as it should in theory
fix a possible MERGE table problem with multi-table update.


libmysqld/ha_blackhole.cc:
  BUG#5390 - problems with merge tables
  No idea, how the symlink change made it into my patch.
mysql-test/r/create.result:
  BUG#5390 - problems with merge tables
  Removed a duplicate test.
mysql-test/r/merge.result:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Added test results.
mysql-test/t/create.test:
  BUG#5390 - problems with merge tables
  Removed a duplicate test.
mysql-test/t/merge.test:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Added tests.
sql/lock.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Added a new function to find a duplicate lock in a list of tables.
sql/mysql_priv.h:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Added a declaration for the new function.
sql/sql_parse.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Changed the duplicate tables detection for INSERT ... SELECT
  to use the new function, which does also work for MERGE tables.
sql/sql_update.cc:
  BUG#5390 - problems with merge tables
  Problem #1: INSERT...SELECT, Version for 4.1.
  Changed the duplicate tables detection for UPDATE
  to use the new function, which does also work for MERGE tables.
2005-12-07 19:52:26 +01:00
unknown
6c41013ea3 Merge mysql.com:/home/jimw/my/mysql-4.1-14155
into  mysql.com:/home/jimw/my/mysql-5.0-clean


mysql-test/t/create.test:
  Auto merged
sql/table.cc:
  Auto merged
mysql-test/r/create.result:
  Resolve conflict
2005-11-28 10:50:23 -08:00
unknown
687b57be8d Fix handling of maximum value for MAX_ROWS on 64-bit platforms. (Bug #14155)
mysql-test/r/create.result:
  Add new results
mysql-test/t/create.test:
  Add regression test
sql/table.cc:
  To cap a value at 2^32-1 on a 64-bit platform, use UINT_MAX32, not
  ~(ulong)0, since a ulong may be 64-bit itself.
2005-11-23 17:05:59 -08:00
unknown
18b488d7f9 BUG#14480 post-fix: merge to 5.0 2005-11-09 14:47:58 +03:00
unknown
168c66736a Merge mysql.com:/home/psergey/mysql-4.1-nov08-push
into mysql.com:/home/psergey/mysql-5.0-oct08-push


mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
2005-11-09 10:12:58 +03:00
unknown
f76ff56512 BUG#14480: post-fix: use the default field value from CREATE list too. 2005-11-09 09:34:46 +03:00
unknown
eeb99f505d Merge, will need post-merge fixes.
mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
2005-11-08 11:22:51 +03:00
unknown
467deb4cb7 BUG#14480, attempt2: In CREATE ... SELECT ..., don't count the same field twice
when calculating table->null_fields.


mysql-test/r/create.result:
  Testcase for BUG#14480
mysql-test/t/create.test:
  Testcase for BUG#14480
sql/sql_table.cc:
  BUG#14480: For CREATE ... SELECT ... a field list passed to mysql_prepare_table() contains
  instances of create_field for both create-list and select-list. mysql_prepare_table() 
  matches elements that refer to the same field, and joins them together. When the "join"  
  is performed, both of create_field structures has already been counted in "null_fields". 
  
  This fix makes sure that "null_fields" contains the correct value after two create_field 
  structures have been joined.
2005-11-07 09:23:43 +03:00
unknown
fdd6daf4b5 BUG#14139 - Merge to 5.0 2005-10-31 09:22:33 +03:00
unknown
2f6bb04f9e 4.1->5.0 merge
include/config-netware.h:
  Merged
innobase/row/row0ins.c:
  BUG#10511: Per alexi's instructions, the changes in innobase/row/row0ins.c are not 
  propagated to 5.x
mysql-test/r/create.result:
  Auto Merged
mysql-test/t/create.test:
  Auto Merged
sql/field.cc:
  Auto Merged
sql/field.h:
  Manual Merge
sql/sql_table.cc:
  Auto Merged
2005-10-29 02:36:57 +04:00
unknown
115bf43602 BUG#14139: When handling "CREATE TABLE(field_X type_spec,...) SELECT smth AS field_X, ...."
avoid multiplying length of field_X by charset->mbmaxlen twice when calculating space 
required for field_X in the new table.


mysql-test/r/create.result:
  Testcase for BUG#14139
mysql-test/t/create.test:
  Testcase for BUG#14139
sql/field.cc:
  BUG#14139: Make create_length_to_internal_length() save length-in-characters in 
  create_field::chars_length.
sql/field.h:
  BUG#14139: Add create_length::chars_length where we save length-in-characters, added comments.
sql/sql_table.cc:
  BUG#14139: When handling "CREATE TABLE(field_X type_spec,...) SELECT smth AS field_X, ...."
  we get two instances of create_field: (1) is occurence of field_X in create list, and (2) is
  in select list. If we figure they both refer to the same field, we "join" them according to
  some rule that is not explicitly specified anywhere.
  When we do this "join", create_field::length already contains length-in-bytes for both, so
  when we transfer field length (in characters) from (1) to (2), use length-in-characters that
  we have saved in create_length::chars_length.
2005-10-26 00:56:17 +04:00
unknown
f147d73c87 Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-4.1
into lmy004.:/work/mysql-4.1-bug12913


mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
2005-09-20 06:55:23 +03:00
unknown
4d29b85d14 Merged from 4.1 to 5.0. 2005-09-13 01:44:50 +03:00
unknown
8c3423652d Merge a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-4.1
into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0


mysql-test/r/temp_table.result:
  Auto merged
mysql-test/r/warnings.result:
  Auto merged
sql/sql_db.cc:
  Auto merged
client/mysqltest.c:
  Auto merged
mysql-test/t/innodb.test:
  Auto merged
sql/filesort.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
mysql-test/r/create.result:
  Merged from 4.1 to 5.0
mysql-test/r/innodb.result:
  Merged from 4.1 to 5.0
mysql-test/t/create.test:
  Merged from 4.1 to 5.0
sql/item_cmpfunc.cc:
  Merged from 4.1 to 5.0
sql/sql_table.cc:
  Merged from 4.1 to 5.0
2005-09-12 20:18:49 +03:00
unknown
63080dc200 Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
produce warning for 'create database if not exists' if database exists
  do not update database options in this case  
  produce warning for 'create table if not exists' if table exists



mysql-test/r/create.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/r/temp_table.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/r/warnings.result:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    updated test case result
mysql-test/t/create.test:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    test case
sql/sql_db.cc:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    produce warning for 'create database if not exists' if database exists
    do not update database options in this case
sql/sql_table.cc:
  Fix for bug #6008: MySQL does not create warnings when creating database and using IF NOT EXISTS
    produce warning for 'create table if not exists' if table exists
2005-09-12 17:09:19 +05:00
unknown
11bd1f871a fix for bug#12913
(Simple SQL can crash server or connection)
(not initialized member leads to server crash)


mysql-test/r/create.result:
  result of test for bug #12913
mysql-test/t/create.test:
  test for bug#12913
  (Simple SQL can crash server or connection)
sql/sql_table.cc:
  copy the interval pointer too or a bit later
  dereferencing of this pointer being 0x0 will crash the server
  (see bug #12913)
2005-09-01 00:13:02 +02:00
unknown
c6b54efea2 create.test, create.result, sql_select.cc, item.cc:
After merge fix for bug #12537


sql/item.cc:
  After merge fix for bug #12537
sql/sql_select.cc:
  After merge fix for bug #12537
mysql-test/r/create.result:
  After merge fix for bug #12537
mysql-test/t/create.test:
  After merge fix for bug #12537
2005-08-31 22:06:34 +04:00
unknown
a1f59825be Manual merged
mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
2005-08-31 21:24:25 +04:00
unknown
033faf7256 Fix bug #12537 UNION produces longtext instead of varchar
Item::tmp_table_field_from_field_type() and create_tmp_field_from_item()
was converting string field to blob depending on byte-wise length instead of
character length, which results in converting valid varchar string with
length == 86 to longtext.

Made that functions above take into account max width of character when
converting string fields to blobs.


sql/item.cc:
  Fix bug #12537 UNION produces longtext instead of varchar
  Item::tmp_table_field_from_field_type() now taking into account max char width when creating tmp field for string fields.
sql/sql_select.cc:
  Fix bug #12537 UNION produces longtext instead of varchar
   create_tmp_field_from_item()now taking into account max char width when creating tmp field for string fields.
mysql-test/r/create.result:
  Test case for bug #12537 UNION produces longtext instead of varchar
mysql-test/t/create.test:
  Test case for bug #12537 UNION produces longtext instead of varchar
2005-08-30 16:19:53 +04:00