Commit graph

16369 commits

Author SHA1 Message Date
unknown
805c2d52cd NULL MERGE this to 5.1
Apply the following InnoDB snapshots:
innodb-5.0-ss1319
innodb-5.0-ss1331
innodb-5.0-ss1333
innodb-5.0-ss1341

Fixes:
- Bug #21409: Incorrect result returned when in READ-COMMITTED with query_cache ON
  At low transaction isolation levels we let each consistent read set
  its own snapshot.
- Bug #23666: strange Innodb_row_lock_time_% values in show status; also millisecs wrong
  On Windows ut_usectime returns secs and usecs relative to the UNIX
  epoch (which is Jan, 1 1970).

- Bug #25494: LATEST DEADLOCK INFORMATION is not always cleared
  lock_deadlock_recursive(): When the search depth or length is exceeded,
  rewind lock_latest_err_file and display the two transactions at the
  point of aborting the search.

- Bug #25927: Foreign key with ON DELETE SET NULL on NOT NULL can crash server
  Prevent ALTER TABLE ... MODIFY ... NOT NULL on columns for which
  there is a foreign key constraint ON ... SET NULL.

- Bug #26835: Repeatable corruption of utf8-enabled tables inside InnoDB
  The bug could be reproduced as follows:

  Define a table so that the first column of the clustered index is
  a VARCHAR or a UTF-8 CHAR in a collation where sequences of bytes
  of differing length are considered equivalent.

  Insert and delete a record.  Before the delete-marked record is
  purged, insert another record whose first column is of different
  length but equivalent to the first record.  Under certain conditions,
  the insertion can be incorrectly performed as update-in-place.

  Likewise, an operation that could be done as update-in-place can
  unnecessarily be performed as delete and insert, but that would not
  cause corruption but merely degraded performance.


innobase/dict/dict0dict.c:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1317:
  branches/5.0: Port r1316 from trunk:
  
  Prevent ALTER TABLE ... MODIFY ... NOT NULL on columns for which
  there is a foreign key constraint ON ... SET NULL.  (Bug #25927)
  
  dict_foreign_find_index(): Add paramettter check_null.
  
  dict_foreign_add_to_cache(): Do not allow ON DELETE SET NULL
  or ON UPDATE SET NULL if any of the referencing columns are declared NOT NULL.
innobase/include/rem0rec.ic:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1339:
  branches/5.0: Merge r1338 from trunk:
  
  rec_offs_nth_size(): Treat n==0 as a special case.  (Bug #26835)
innobase/include/sync0sync.ic:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1293:
  branches/5.0: Fixed inline asm code, it didn't work with GCC > ver 3.x.
innobase/lock/lock0lock.c:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1331:
  branches/5.0: Merge r1330 from trunk:
  
  lock_deadlock_recursive(): When the search depth or length is exceeded,
  rewind lock_latest_err_file and display the two transactions at the
  point of aborting the search.  (Bug #25494)
  
  
  Revision r1333:
  branches/5.0: Merge r1332 from trunk:
  
  lock_deadlock_recursive(): When aborting the search, display a note
  regardless of start->undo_no.  Otherwise, aborted searches may show
  up as genuine deadlocks.  This mistake was made in r1330.
innobase/srv/srv0srv.c:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1261:
  branches/5.0: Fix for Bug# 23666. On Windows ut_usectime returns secs 
  and usecs relative to the UNIX epoch (which is Jan, 1 1970).
innobase/ut/ut0ut.c:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1261:
  branches/5.0: Fix for Bug# 23666. On Windows ut_usectime returns secs 
  and usecs relative to the UNIX epoch (which is Jan, 1 1970).
mysql-test/r/innodb.result:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1319:
  branches/5.0: Port r1318 from trunk:
  
  Add a test case for r1316 (Bug #25927).
  
  
  Revision r1328:
  branches/5.0: mysql-test: Merge changes from MySQL AB.
  
  
  Revision r1341:
  branches/5.0: Merge r1340 from trunk:
  
  innodb.test, innodb.result: Add test case for Bug #26835.
  The bug could be reproduced as follows:
  
  Define a table so that the first column of the clustered index is
  a VARCHAR or a UTF-8 CHAR in a collation where sequences of bytes
  of differing length are considered equivalent.
  
  Insert and delete a record.  Before the delete-marked record is
  purged, insert another record whose first column is of different
  length but equivalent to the first record.  Under certain conditions,
  the insertion can be incorrectly performed as update-in-place.
  
  Likewise, an operation that could be done as update-in-place can
  unnecessarily be performed as delete and insert, but that would not
  cause corruption but merely degraded performance.
  
  Revision r1284:
  Merge changes from MySQL AB:
  
  ChangeSet
    2007/01/24 14:49:36+04:00 holyfoot@mysql.com 
    bug #22682 Test fails --without-geometry
    geometry dependent parts moved to proper .test files
  
  mysql-test/r/innodb.result
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +0 -2
    result fixed
  
  mysql-test/r/innodb_gis.result
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +2 -0
    result fixed
  
  mysql-test/t/innodb.test
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +0 -6
    HAVE_GEOMETRY dependent part moved to innodb_gis.test
  
  mysql-test/t/innodb_gis.test
    2007/01/24 14:49:35+04:00 holyfoot@mysql.com +6 -0
    HAVE_GEOMETRY dependent part moved here from innodb.test
  
  
  Revision r1186:
  dict_load_foreign(): Use a local variable instead of the 10-bit field
  foreign->n_fields in order to preserve ON UPDATE CASCADE and
  ON DELETE CASCADE flags.  For some reason, gcc does not warn about
  shifting a 10-bit field to right by 24 bits.  (Bug #24741)
  
  This bug was introduced while reducing the memory footprint of the
  InnoDB data dictionary (Bug #20877).
  
  innodb.test, innodb.result: Add a test case.
  
  
  Revision r1318:
  Add a test case for r1316 (Bug #25927).
  
  
  Revision r1340:
  innodb.test, innodb.result: Add test case for Bug #26835.
  The bug could be reproduced as follows:
  
  Define a table so that the first column of the clustered index is
  a VARCHAR or a UTF-8 CHAR in a collation where sequences of bytes
  of differing length are considered equivalent.
  
  Insert and delete a record.  Before the delete-marked record is
  purged, insert another record whose first column is of different
  length but equivalent to the first record.  Under certain conditions,
  the insertion can be incorrectly performed as update-in-place.
  
  Likewise, an operation that could be done as update-in-place can
  unnecessarily be performed as delete and insert, but that would not
  cause corruption but merely degraded performance.
mysql-test/t/innodb.test:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1279:
  branches/5.0: Merge changes from MySQL AB:
  
  ChangeSet
    2006/11/20 22:42:06+02:00 monty@mysql.com 
    Remove compiler warnings
    (Mostly in DBUG_PRINT() and unused arguments)
    Fixed bug in query cache when used with traceing (--with-debug)
    Fixed memory leak in mysqldump
    Removed warnings from mysqltest scripts (replaced -- with #)
  
  mysql-test/t/innodb.test
    2006/11/20 22:41:41+02:00 monty@mysql.com +1 -1
    Remove mysqltest warnings
  
  sql/ha_innodb.cc
    2006/11/20 22:41:51+02:00 monty@mysql.com +2 -2
    Fixed compiler warning
  
  
  Revision r1319:
  branches/5.0: Port r1318 from trunk:
  
  Add a test case for r1316 (Bug #25927).
  
  
  Revision r1328:
  branches/5.0: mysql-test: Merge changes from MySQL AB.
  
  
  Revision r1341:
  branches/5.0: Merge r1340 from trunk:
  
  innodb.test, innodb.result: Add test case for Bug #26835.
  The bug could be reproduced as follows:
  
  Define a table so that the first column of the clustered index is
  a VARCHAR or a UTF-8 CHAR in a collation where sequences of bytes
  of differing length are considered equivalent.
  
  Insert and delete a record.  Before the delete-marked record is
  purged, insert another record whose first column is of different
  length but equivalent to the first record.  Under certain conditions,
  the insertion can be incorrectly performed as update-in-place.
  
  Likewise, an operation that could be done as update-in-place can
  unnecessarily be performed as delete and insert, but that would not
  cause corruption but merely degraded performance.
  
  Revision r1284:
  Merge changes from MySQL AB:
  
  ChangeSet
    2007/01/24 14:49:36+04:00 holyfoot@mysql.com 
    bug #22682 Test fails --without-geometry
    geometry dependent parts moved to proper .test files
  
  mysql-test/r/innodb.result
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +0 -2
    result fixed
  
  mysql-test/r/innodb_gis.result
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +2 -0
    result fixed
  
  mysql-test/t/innodb.test
    2007/01/24 14:49:34+04:00 holyfoot@mysql.com +0 -6
    HAVE_GEOMETRY dependent part moved to innodb_gis.test
  
  mysql-test/t/innodb_gis.test
    2007/01/24 14:49:35+04:00 holyfoot@mysql.com +6 -0
    HAVE_GEOMETRY dependent part moved here from innodb.test
  
  
  Revision r1283:
  Merge changes from MySQL AB:
  
  ChangeSet
    2007/01/22 18:42:52+02:00 monty@mysql.com 
    Give warnings for unused objects
    Changed error message to be compatible with old error file
    Added new error message for new DUP_ENTRY syntax
  
  mysql-test/t/innodb.test
    2007/01/22 18:42:49+02:00 monty@mysql.com +14 -14
    Changed to use new error message
  
  
  Revision r1186:
  dict_load_foreign(): Use a local variable instead of the 10-bit field
  foreign->n_fields in order to preserve ON UPDATE CASCADE and
  ON DELETE CASCADE flags.  For some reason, gcc does not warn about
  shifting a 10-bit field to right by 24 bits.  (Bug #24741)
  
  This bug was introduced while reducing the memory footprint of the
  InnoDB data dictionary (Bug #20877).
  
  innodb.test, innodb.result: Add a test case.
  
  
  Revision r1318:
  Add a test case for r1316 (Bug #25927).
  
  
  Revision r1329:
  Merge changes from MySQL AB to mysql-test directives.
  The results are not affected.
  
  
  Revision r1340:
  innodb.test, innodb.result: Add test case for Bug #26835.
  The bug could be reproduced as follows:
  
  Define a table so that the first column of the clustered index is
  a VARCHAR or a UTF-8 CHAR in a collation where sequences of bytes
  of differing length are considered equivalent.
  
  Insert and delete a record.  Before the delete-marked record is
  purged, insert another record whose first column is of different
  length but equivalent to the first record.  Under certain conditions,
  the insertion can be incorrectly performed as update-in-place.
  
  Likewise, an operation that could be done as update-in-place can
  unnecessarily be performed as delete and insert, but that would not
  cause corruption but merely degraded performance.
sql/ha_innodb.cc:
  NULL MERGE this to 5.1
  
  Apply the following InnoDB snapshots:
  innodb-5.0-ss1319
  innodb-5.0-ss1331
  innodb-5.0-ss1333
  innodb-5.0-ss1341
  
  Revision r1279:
  branches/5.0: Merge changes from MySQL AB:
  
  ChangeSet
    2006/11/20 22:42:06+02:00 monty@mysql.com 
    Remove compiler warnings
    (Mostly in DBUG_PRINT() and unused arguments)
    Fixed bug in query cache when used with traceing (--with-debug)
    Fixed memory leak in mysqldump
    Removed warnings from mysqltest scripts (replaced -- with #)
  
  mysql-test/t/innodb.test
    2006/11/20 22:41:41+02:00 monty@mysql.com +1 -1
    Remove mysqltest warnings
  
  sql/ha_innodb.cc
    2006/11/20 22:41:51+02:00 monty@mysql.com +2 -2
    Fixed compiler warning
  
  
  Revision r1280:
  branches/5.0: Merge a change from MySQL AB:
  
  ChangeSet
    2006/11/30 18:25:05+02:00 monty@mysql.com 
    Fixed portability issue in my_thr_init.c (was added in my last push)
    
    Fixed compiler warnings (detected by VC++):
    - Removed not used variables
    - Added casts
    - Fixed wrong assignments to bool
    - Fixed wrong calls with bool arguments
    - Added missing argument to store(longlong), which caused wrong store
    method to be called.
  
  sql/ha_innodb.cc
    2006/11/30 18:24:53+02:00 monty@mysql.com +0 -1
    Removed not used variable
  
  
  Revision r1260:
  branches/5.0: Fix for Bug# 21409. At low transaction isolation levels
  we let each consistent read set its own snapshot.
  
  
  Revision r1326:
  branches/5.0: Merge code from MySQL AB:
  
  ChangeSet@1.2417.3.1  2007-02-22 16:59:57+02:00  monty@mysql.fi
  
  Fixed compiler warnings (for linux and win32 and win64)
2007-03-22 14:40:52 -06:00
unknown
4e288dc3cf Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
2007-03-22 10:34:46 +01:00
unknown
8f69cbdb2e Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
2007-03-22 05:44:39 +01:00
unknown
b203723bd8 Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
2007-03-21 23:58:02 +01:00
unknown
54a0f623c7 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.local:/opt/local/work/mysql-5.0-runtime
2007-03-21 23:57:12 +03:00
unknown
de44ff1ba2 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-telco-gca
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb


sql/ha_ndbcluster.cc:
  Auto merged
2007-03-21 09:00:38 +01:00
unknown
49f2196da0 Bug #26825 MySQL Server Crashes in high load
- initialize to NULL, to avoid call of free on uninitialized variable
2007-03-21 08:40:24 +01:00
unknown
bbe0990bc7 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/41
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/50


sql/sql_class.cc:
  Auto merged
2007-03-20 21:35:11 +01:00
unknown
6bb78b95de Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-build
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/50
2007-03-20 20:59:41 +01:00
unknown
23fa1ee874 Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/kent/bk/tmp/mysql-5.0-build
2007-03-20 19:23:20 +01:00
unknown
d59272fb3d Bug #27231: Server crash when dumping into outfile with long FIELDS ENCLOSED BY option
- Problem: data separators were copied to a fixed-size buffer
  on the stack; memcpy was used, without bounds checking; a
  server crash could result if long FIELDS ENCLOSED BY, etc.,
  was given
- Fix: write the separators directly, instead of copying to
  a buffer first (in select_export::send_data())


sql/sql_class.cc:
  In select_export::send_data(), write data separators
  directly, instead of copying into a fixed-size memory
  buffer before writing.  This avoids a buffer overflow
  when very large separators are specified.
2007-03-20 19:09:28 +01:00
unknown
da8e832a05 Merge polly.local:/tmp/maint/bug23775/my50-bug23775
into  polly.local:/home/kaa/src/maint/mysql-5.0-maint


sql/slave.cc:
  Auto merged
2007-03-20 17:27:49 +03:00
unknown
a491b2c116 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
2007-03-20 08:57:55 +01:00
unknown
168515a179 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
2007-03-19 23:10:58 +01:00
unknown
3798a7d500 sql_insert.cc:
Removed wrong fix for the bug#27006.
  The bug was added by the fix for the bug#19978 and fixed by Monty on 2007/02/21.
trigger.test, trigger.result:
  Corrected test case for the bug#27006.


sql/sql_insert.cc:
  Removed wrong fix for the bug#27006.
  The bug was added by the fix for the bug#19978 and fixed by Monty on 2007/02/21.
mysql-test/t/trigger.test:
  Corrected test case for the bug#27006.
mysql-test/r/trigger.result:
  Corrected test case for the bug#27006.
2007-03-20 00:46:19 +03:00
unknown
adf4f63513 Merge trift2.:/MySQL/M50/clone-5.0
into  trift2.:/MySQL/M50/push-5.0


sql/mysql_priv.h:
  Auto merged
2007-03-19 22:18:31 +01:00
unknown
14ab9bef52 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.local:/opt/local/work/mysql-5.0-runtime


sql/field.cc:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/r/sp.result:
  SCCS merged
mysql-test/t/sp.test:
  SCCS merged
2007-03-19 23:59:53 +03:00
unknown
ccb75090c3 Fix a failure in test "func_in" on some 64-bit big-endian hosts in first 5.0.38 builds.
sql/item_cmpfunc.cc:
  Ensure both operands of a comparison are cast to "ulonglong", not just one only.
  Without this, some 64-bit big-endian hosts failed test "func_in" when 5.0.38 builds were started.
  
  Patch provided by Timothy.
2007-03-17 19:45:01 +01:00
unknown
77fccd038f Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Build sql files for netware from the mysql_system_tables*.sq files
 - Fix comments about mysql_create_system_tables.sh
 - Use mysql_install_db.sh to create system tables for mysql_test-run-shell
 - Fix mysql-test-run.pl to also look in share/mysql for the msyql_system*.sql files

Changeset coded today by Magnus Svensson, just the application to 5.0.38 is by Joerg Bruehe.


BitKeeper/deleted/.del-init_db.sql~e2b8d0c8390e8023:
  Delete: netware/init_db.sql
BitKeeper/deleted/.del-test_db.sql:
  Delete: netware/test_db.sql
BitKeeper/etc/ignore:
  Added netware/init_db.sql netware/test_db.sql to the ignore list
mysql-test/install_test_db.sh:
  Use mysql_install_db from install_test_db(which is used by mysql-test-run-shell)
  to install the system tables
mysql-test/mysql-test-run.pl:
  Look for the mysql_system_tables*.sql also in share/mysql
netware/Makefile.am:
  Build netware/init_db.sql and netware/test_db.sql from
  the sources in scripts/msyql_system_tables*.sql
scripts/make_binary_distribution.sh:
  netware/init_db.sql and netware/test_db.sql are now built by the Makefiles
  from the scripts/mysql_system_tables*.sql files
sql/mysql_priv.h:
  Update comment remindging to update the MySQL system table definitions
  when adding a new SQL_MODE
sql/sql_acl.h:
  Update comment reminding to update the MySQL System tables
  when changing the ACL defines
2007-03-16 20:56:16 +01:00
unknown
f7aa1930f4 Fix for bug #23775 "Replicated event larger that max_allowed_packet infinitely re-transmits".
Problem: to handle a situation when the size of event on the master is greater than max_allowed_packet on slave, we checked for the wrong constant (ER_NET_PACKET_TOO_LARGE instead of CR_NET_PACKET_TOO_LARGE).

Solution: test for the client "packet too large" error code instead of the server one in slave I/O thread.


mysql-test/r/rpl_packet.result:
  Added test case for bug #23775 "Replicated event larger that max_allowed_packet infinitely re-transmits"
mysql-test/t/rpl_packet.test:
  Added test case for bug #23775 "Replicated event larger that max_allowed_packet infinitely re-transmits"
sql/slave.cc:
  Test for the client "packet too large" error code instead of the server one in slave I/O thread.
2007-03-16 17:25:20 +03:00
unknown
6d93f15039 Bug#27006: AFTER UPDATE triggers not fired with INSERT ... ON DUPLICATE KEY
UPDATE if the row wasn't actually changed.

This bug was caused by fix for bug#19978. It causes AFTER UPDATE triggers
not firing if a row wasn't actually changed by the update part of the
INSERT .. ON DUPLICATE KEY UPDATE.

Now triggers are always fired if a row is touched by the INSERT ... ON
DUPLICATE KEY UPDATE.


sql/sql_insert.cc:
  Bug#27006: AFTER UPDATE triggers not fired with INSERT ... ON DUPLICATE KEY
  UPDATE if the row wasn't actually changed.
  Now triggers are always fired if a row is touched by the INSERT ... ON
  DUPLICATE KEY UPDATE.
mysql-test/r/trigger.result:
  Added a test case for the bug#27006: AFTER UPDATE triggers not fired with INSERT ... ON DUPLICATE KEY
  UPDATE if the row wasn't actually changed.
mysql-test/t/trigger.test:
  Added a test case for the bug#27006: AFTER UPDATE triggers not fired with INSERT ... ON DUPLICATE KEY
  UPDATE if the row wasn't actually changed.
2007-03-16 17:23:26 +03:00
unknown
43b9ff1b21 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26261-5.0-opt


sql/mysql_priv.h:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/sql_prepare.cc:
  Auto merged
mysql-test/r/insert_update.result:
  SCCS merged
mysql-test/t/insert_update.test:
  SCCS merged
2007-03-16 10:50:33 +02:00
unknown
2e8e78a42c Bug #26261:
INSERT uses query_id to verify what fields are
 mentioned in the fields list of the INSERT command.
 However the check for that is made after the 
 ON DUPLICATE KEY is processed. This causes all
 the fields mentioned in ON DUPLICATE KEY to be 
 considered as mentioned in the fields list of 
 INSERT.
 Moved the check up, right after processing the
 fields list.


mysql-test/r/insert_update.result:
  Bug #26261: test case
mysql-test/t/insert_update.test:
  Bug #26261: test case
sql/mysql_priv.h:
  Bug #26261: moved the check inside mysql_prepare_insert
sql/sql_insert.cc:
  Bug #26261: move the check inside mysql_prepare_insert
  before setting up the ON DUPLICATE KEY part
sql/sql_prepare.cc:
  Bug #26261: moved the check inside mysql_prepare_insert
2007-03-16 10:35:39 +02:00
unknown
1a259b885f Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
2007-03-16 12:16:15 +04:00
unknown
a51b768600 Bug#26285 selecting information_schema crahes server
The crash happens when 'skip-grant-tables' is enabled.
We skip the filling of I_S privilege tables 
if acl_cache is not initialized.


mysql-test/r/skip_grants.result:
  test result
mysql-test/t/skip_grants.test:
  test case
sql/sql_acl.cc:
  skip filling of I_S privilege tables
  if acl_cache is not initialized
2007-03-16 12:15:51 +04:00
unknown
6b428e8507 Merge bk@192.168.21.1:mysql-5.0-opt
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-16 12:06:36 +04:00
unknown
173dc70d3f Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt


sql/sql_parse.cc:
  Auto merged
2007-03-16 11:55:16 +04:00
unknown
c6ab94bdf1 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/27033-bug-5.0-opt-mysql
2007-03-15 23:56:21 +03:00
unknown
542f18a31a Bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
touched but not actually changed.

The LAST_INSERT_ID() is reset to 0 if no rows were inserted or changed.
This is the case when an INSERT ... ON DUPLICATE KEY UPDATE updates a row
with the same values as the row contains.

Now the LAST_INSERT_ID() values is reset to 0 only if there were no rows
successfully inserted or touched.
The new 'touched' field is added to the COPY_INFO structure. It holds the
number of rows that were touched no matter whether they were actually
changed or not.


sql/sql_class.h:
  Bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
  touched but not actually changed.
  
  The new 'touched' field is added to the COPY_INFO structure. It holds the
  number of rows that were touched no matter whether they were actually
  changed or not.
mysql-test/r/insert_update.result:
  Added a test case for the bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
  touched but not actually changed.
mysql-test/t/insert_update.test:
  Added a test case for the bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
  touched but not actually changed.
sql/sql_insert.cc:
  Bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
  touched but not actually changed.
  
  Now the LAST_INSERT_ID() values is reset to 0 only if there were no rows
  successfully inserted or touched.
2007-03-15 23:21:29 +03:00
unknown
34c5586773 Merge mysql.com:/home/hf/work/26833/my50-26833
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt


sql/sql_parse.cc:
  Auto merged
2007-03-15 16:26:37 +04:00
unknown
b6515184e0 Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt


mysql-test/r/gis-rtree.result:
  Auto merged
2007-03-15 16:21:43 +04:00
unknown
cdd2a2e40d Fix for bug #25966 "2MB per second endless memory consumption after LOCK
TABLE ... WRITE".

Memory and CPU hogging occured when connection which had to wait for table
lock was serviced by thread which previously serviced connection that was
killed (note that connections can reuse threads if thread cache is enabled).
One possible scenario which exposed this problem was when thread which
provided binlog dump to replication slave was implicitly/automatically
killed when the same slave reconnected and started pulling data through
different thread/connection.
The problem also occured when one killed particular query in connection
(using KILL QUERY) and later this connection had to wait for some table
lock.

This problem was caused by the fact that thread-specific mysys_var::abort
variable, which indicates that waiting operations on mysys layer should
be aborted (this includes waiting for table locks), was set by kill
operation but was never reset back. So this value was "inherited" by the
following statements or even other connections (which reused the same
physical thread). Such discrepancy between this variable and THD::killed
flag broke logic on SQL-layer and caused CPU and memory hogging.

This patch tries to fix this problem by properly resetting this member.

There is no test-case associated with this patch since it is hard to test
for memory/CPU hogging conditions in our test-suite.


sql/mysqld.cc:
  We should not forget to reset THD::mysys_var::abort after kill operation
  if we are going to use thread to which this operation was applied for
  handling of other connections.
sql/sp_head.cc:
  We should not forget to reset THD::mysys_var::abort after kill operation
  if we are going to use thread to which this operation was applied for
  handling of further statements.
sql/sql_parse.cc:
  We should not forget to reset THD::mysys_var::abort after kill operation
  if we are going to use thread to which this operation was applied for
  handling of further statements.
2007-03-15 11:51:35 +03:00
unknown
db1d2f64d1 Fix for bug #25966 "2MB per second endless memory consumption after LOCK
TABLE ... WRITE".

CPU hogging occured when connection which had to wait for table lock was
serviced by thread which previously serviced connection that was killed
(note that connections can reuse threads if thread cache is enabled).
One possible scenario which exposed this problem was when thread which
provided binlog dump to replication slave was implicitly/automatically
killed when the same slave reconnected and started pulling data through
different thread/connection.
In 5.* versions memory hogging was added to CPU hogging. Moreover in
those versions the problem also occured when one killed particular query
in connection (using KILL QUERY) and later this connection had to wait for
some table lock.

This problem was caused by the fact that thread-specific mysys_var::abort
variable, which indicates that waiting operations on mysys layer should
be aborted (this includes waiting for table locks), was set by kill
operation but was never reset back. So this value was "inherited" by the
following statements or even other connections (which reused the same
physical thread). Such discrepancy between this variable and THD::killed
flag broke logic on SQL-layer and caused CPU and memory hogging.

This patch tries to fix this problem by properly resetting this member.

There is no test-case associated with this patch since it is hard to test
for memory/CPU hogging conditions in our test-suite.


sql/mysqld.cc:
  We should not forget to reset THD::mysys_var::abort after kill operation
  if we are going to use thread to which this operation was applied for
  handling of other connections.
2007-03-15 11:30:17 +03:00
unknown
9e5691cb33 Fix for bug #24558: Increasing decimal column length causes data loss
Altering to a decimal field we get double value then store it 
that may cause data loss. 
Fix: use store_decimal() instead.



mysql-test/r/type_newdecimal.result:
  Fix for bug #24558: Increasing decimal column length causes data loss
    - test result.
mysql-test/t/type_newdecimal.test:
  Fix for bug #24558: Increasing decimal column length causes data loss
    - test case.
sql/field_conv.cc:
  Fix for bug #24558: Increasing decimal column length causes data loss
    - if target field's result type is DECIMAL_RESULT
      use store_decimal(val_decimal()) in order not to loss data.
2007-03-15 12:06:06 +04:00
unknown
cfcd27b3db Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-26503
2007-03-14 14:29:27 -06:00
unknown
79344c7b67 Bug#26503 (Illegal SQL exception handler code causes the server to crash)
Before this fix, the parser would accept illegal code in SQL exceptions
handlers, that later causes the runtime to crash when executing the code,
due to memory violations in the exception handler stack.

The root cause of the problem is instructions within an exception handler
that jumps to code located outside of the handler. This is illegal according
to the SQL 2003 standard, since labels located outside the handler are not
supposed to be visible (they are "out of scope"), so any instruction that
jumps to these labels, like ITERATE or LEAVE, should not parse.

The section of the standard that is relevant for this is :
  SQL:2003 SQL/PSM (ISO/IEC 9075-4:2003)
  section 13.1 <compound statement>,
  syntax rule 4
<quote>
  The scope of the <beginning label> is CS excluding every <SQL schema
  statement> contained in CS and excluding every
  <local handler declaration list> contained in CS. <beginning label> shall
  not be equivalent to any other <beginning label>s within that scope.
</quote>

With this fix, the C++ class sp_pcontext, which represent the "parsing
context" tree (a.k.a symbol table) of a stored procedure, has been changed
as follows:
- constructors have been cleaned up, so that only building a root node for
the tree is public; building nodes inside a tree is not public.
- a new member, m_label_scope, indicates if a given syntactic context
belongs to a DECLARE HANDLER block,
- label resolution, in the method find_label(), has been changed to
implement the restriction of scope regarding labels used in a compound
statement.

The actions in the parser, when parsing the body of a SQL exception handler,
have been changed as follows:
- the implementation of an exception handler (DECLARE HANDLER) now creates
explicitly a new sp_pcontext, to isolate the code inside the handler from
the containing compound statement context.
- registering exception handlers as a result occurs in the parent context,
see the rule sp_hcond_element
- the code in sp_hcond_list has been cleaned up, to avoid code duplication

In addition, the flags IN_SIMPLE_CASE and IN_HANDLER, declared in sp_head.h
have been removed, since they are unused and broken by design (as seen with
Bug 19194 (Right recursion in parser for CASE causes excessive stack usage,
limitation), representing a stack in a single flag is not possible.

Tests in sp-error have been added to show that illegal constructs are now
rejected.

Tests in sp have been added for code coverage, to show that ITERATE or LEAVE
statements are legal when jumping to a label in scope, inside the body of
an exception handler.


mysql-test/r/sp-error.result:
  SQL Exception handlers define a parsing context for label resolution.
mysql-test/r/sp.result:
  SQL Exception handlers define a parsing context for label resolution.
mysql-test/t/sp-error.test:
  SQL Exception handlers define a parsing context for label resolution.
mysql-test/t/sp.test:
  SQL Exception handlers define a parsing context for label resolution.
sql/sp_head.cc:
  Minor cleanup
sql/sp_head.h:
  Minor cleanup
sql/sp_pcontext.cc:
  SQL Exception handlers define a parsing context for label resolution.
sql/sp_pcontext.h:
  SQL Exception handlers define a parsing context for label resolution.
sql/sql_yacc.yy:
  SQL Exception handlers define a parsing context for label resolution.
2007-03-14 12:02:32 -06:00
unknown
ff810fb952 Bug #26794: fixed valgrind warning 2007-03-14 15:58:14 +02:00
unknown
347e832abf Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26794-5.0-opt


sql/field.cc:
  Auto merged
2007-03-14 11:55:40 +02:00
unknown
a22f257e04 Bug #26794:
Different set of conditions is used to verify
the validity of index definitions over a GEOMETRY
column in ALTER TABLE and CREATE TABLE. 
The difference was on how sub-keys notion validity
is checked.
Fixed by extending the CREATE TABLE condition to
support the cases allowed in ALTER TABLE.
Made the SHOW CREATE TABLE not to display spatial
indexes using the sub-key notion.


mysql-test/r/alter_table.result:
  Bug #26794: test case
mysql-test/r/gis-rtree.result:
  Bug #26794: fixed SHOW CREATE TABLE output.
mysql-test/t/alter_table.test:
  Bug #26794: test case
sql/field.cc:
  Bug #26794: Allow sub-keys for GEOMETRY
sql/sql_show.cc:
  Bug #26794: Don't show sub-key notion 
   in SHOW CREATE TABLE for SPATIAL indexes.
sql/sql_table.cc:
  Bug #26794: Allow sub-keys for GEOMETRY
2007-03-14 11:54:20 +02:00
unknown
4108ca9617 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26672-5.0-opt


mysql-test/r/order_by.result:
  Auto merged
mysql-test/t/order_by.test:
  Auto merged
2007-03-13 18:46:46 +02:00
unknown
968d1695a7 Merge mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-4.1-engines
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-5.0-engines


myisam/mi_create.c:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
sql/ha_myisam.cc:
  Auto merged
sql/sql_parse.cc:
  Use local.
mysql-test/r/merge.result:
  SCCS merged
2007-03-13 18:11:47 +04:00
unknown
969b71653d BUG#26881 - Large MERGE tables report incorrect specification when no
differences in tables
Certain merge tables were wrongly reported as having incorrect definition:
- Some fields that are 1 byte long (e.g. TINYINT, CHAR(1)), might
  be internally casted (in certain cases) to a different type on a
  storage engine layer. (affects 4.1 and up)
- If tables in a merge (and a MERGE table itself) had short VARCHAR column (less
  than 4 bytes) and at least one (but not all) tables were ALTER'ed (even to an
  identical table: ALTER TABLE xxx ENGINE=yyy), table definitions went ouf of
  sync. (affects 4.1 only)

This is fixed by relaxing a check for underlying conformance and setting
field type to FIELD_TYPE_STRING in case varchar is shorter than 4
when a table is created.


myisam/mi_create.c:
  Added a comment.
mysql-test/r/merge.result:
  A test case for bug#26881.
mysql-test/t/merge.test:
  A test case for bug#26881.
sql/ha_myisam.cc:
  Relaxed some checks performed by check_definition():
  As comparing of fulltext keys (and key segments) is not yet implemented,
  only return an error in case one of keys is fulltext and other is not.
  Otherwise, if both keys are fulltext, accept them as is.
  
  As comparing of spatial keys (and key segments) is not yet implemented,
  only return an error in case one of keys is spatial and other is not.
  Otherwise, if both keys are spatial, accept them as is.
  
  A workaround to handle situation when field is casted from FIELD_SKIP_ZERO
  to FIELD_NORMAL. This could happen only in case field length is 1 and row
  format is fixed.
sql/sql_parse.cc:
  When a table that has varchar field shorter than 4 is created, field type is
  set to FIELD_TYPE_VAR_STRING. Later, when a table is modified using alter
  table, field type is changed to FIELD_TYPE_STRING (see Field_string::type).
  That means HA_OPTION_PACK_RECORD flag might be lost and thus null_bit might
  be shifted by alter table, in other words alter table doesn't create 100%
  equal table definition.
  
  This is usually not a problem, since when a table is created/altered,
  definition on a storage engine layer is based on one that is passed from
  sql layer. But it is a problem for merge engine - null_bit is shifted when
  a table (merge or underlying) is altered.
  
  Set field type to FIELD_TYPE_STRING in case FIELD_TYPE_VAR_STRING is shorter
  than 4 when a table is created as it is done in Field::type.
2007-03-13 18:02:06 +04:00
unknown
d496ab15e4 Merge mysql.com:/home/svoj/devel/bk/mysql-5.0
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-5.0-engines


myisam/rt_index.c:
  Auto merged
sql/field.h:
  Auto merged
2007-03-13 16:58:52 +04:00
unknown
e266365cad Merge mysql.com:/home/svoj/devel/bk/mysql-4.1
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-4.1-engines
2007-03-13 16:57:16 +04:00
unknown
ed80fe2dfb Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug26963


mysql-test/r/select.result:
  Auto merged
mysql-test/t/select.test:
  Auto merged
2007-03-12 02:24:09 -07:00
unknown
91abf15ed2 Fixed bug #26738: incomplete string values in a result set column
when the column is to be read from a derived table column which 
was specified as a concatenation of string literals.
The bug happened because the Item_string::append did not adjust the
value of Item_string::max_length. As a result of it the temporary 
table column  defined to store the concatenation of literals was 
not wide enough to hold the whole value.



mysql-test/r/subselect.result:
  Added a test case for bug #26738.
mysql-test/t/subselect.test:
  Added a test case for bug #26738.
2007-03-12 01:39:57 -07:00
unknown
13c05162f3 Fixed bug #26963: invalid optimization of the pushdown conditions
after single-row table substitution could lead to a wrong result set.
The bug happened because the function Item_field::replace_equal_field
erroniously assumed that any field included in a multiple equality
with a constant has been already substituted for this constant.
This not true for fields becoming constant after row substitutions
for constant tables.
 


mysql-test/r/select.result:
  Added a test case for bug #26963.
mysql-test/t/select.test:
  Added a test case for bug #26963.
sql/item.cc:
  Fixed bug #26963: invalid optimization of the pushdown conditions
  after single-row table substitution could lead to a wrong result set.
  The bug happened because the function Item_field::replace_equal_field
  erroneously assumed that any field included in a multiple equality
  with a constant has been already substituted for this constant.
  This not true for fields becoming constant after row substitutions
  for constant tables.
2007-03-11 23:34:40 -07:00
unknown
d00731db77 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/WL3527-5.0-opt-merge
2007-03-11 10:10:33 +02:00
unknown
2f774b479b Merge moonbone.local:/mnt/gentoo64/work/15757-bug-5.0-opt-mysql
into  moonbone.local:/mnt/gentoo64/work/25373-bug-5.0-opt-mysql


sql/item_strfunc.cc:
  Auto merged
mysql-test/r/func_str.result:
  SCCS merged
mysql-test/t/func_str.test:
  SCCS merged
2007-03-10 19:57:18 +03:00
unknown
816ea8a379 Bug#15757: Wrong SUBSTRING() result when a tmp table was employed.
When the SUBSTRING() function was used over a LONGTEXT field the max_length of
the SUBSTRING() result was wrongly calculated and set to 0. As the max_length
parameter is used while tmp field creation it limits the length of the result
field and leads to printing an empty string instead of the correct result.

Now the Item_func_substr::fix_length_and_dec() function correctly calculates
the max_length parameter.


mysql-test/t/func_str.test:
  Added a test case for the bug#15757: Wrong SUBSTRING() result when a tmp table was employed.
mysql-test/r/func_str.result:
  Added a test case for the bug#15757: Wrong SUBSTRING() result when a tmp table was employed.
sql/item_strfunc.cc:
  Bug#15757: Wrong SUBSTRING() result when a tmp table was employed.
  Now the Item_func_substr::fix_length_and_dec() function correctly calculates
  the max_length parameter.
2007-03-10 19:55:34 +03:00