1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00
Commit Graph

37337 Commits

Author SHA1 Message Date
eea5c2a3c5 Bug #29644: alter table hangs if records locked in share mode
by long running transaction

On Windows opened files can't be deleted. There was a special
upgraded lock mode (TL_WRITE instead of TL_WRITE_ALLOW_READ) 
in ALTER TABLE to make sure nobody has the table opened
when deleting the old table in ALTER TABLE. This special mode
was causing ALTER TABLE to hang waiting on a lock inside InnoDB.
This special lock is no longer necessary as the server is 
closing the tables it needs to delete in ALTER TABLE.
Fixed by removing the special lock.
Note that this also reverses the fix for bug 17264 that deals with
another consequence of this special lock mode being used.


mysql-test/r/innodb_mysql.result:
  Bug #29644: test case
mysql-test/t/innodb_mysql.test:
  Bug #29644: test case
sql/ha_innodb.cc:
  Bug #29644: reverse the (now excessive) fix
  for bug 17264 (but leave the test case).
sql/sql_base.cc:
  Bug #29644: don't need a special lock mode for Win32 anymore: 
  the table is closed before the drop.
2007-07-20 14:17:15 +03:00
1a2d2117ff Bug #29494 Field packet with NULL fields crashes libmysqlclient.
unpack_fields() didn't expect NULL_LENGHT in the field's descriptions.
In this case we get NULL in the resulting string so cannot use
strdup_root to make a copy of it.
strdup_root changed with strmake_root as it's NULL-safe


sql-common/client.c:
  Bug #29494 Field packet with NULL fields crashes libmysqlclient
  
  strdup_root changed with strmake_root in unpack_fields()
2007-07-20 16:05:55 +05:00
d8305ab99b Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.46
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build


configure.in:
  Auto merged
libmysql/libmysql.c:
  Auto merged
scripts/make_binary_distribution.sh:
  Auto merged
sql/field.cc:
  Auto merged
2007-07-20 09:20:48 +02:00
d1210318db Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0-engines
into  mysql.com:/home/svoj/devel/mysql/BUG28838/mysql-5.0-engines
2007-07-20 10:50:39 +05:00
db31d3c96d Merge gleb.loc:/home/uchum/work/bk/5.0
into  gleb.loc:/home/uchum/work/bk/5.0-opt


sql/set_var.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
2007-07-20 04:15:50 +05:00
77a0e7f718 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.44
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0.46


configure.in:
  Auto merged
libmysql/libmysql.c:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
2007-07-19 23:30:26 +02:00
d9fda1cf9a BUG#20815 Errno 12 on Windows after 197 connections
CMakeLists.txt:
  BUG#20815 Set stack size. This value is really supposed to be the linker's default. I'm not quite sure why we have to specify it manually too.
2007-07-19 23:06:34 +02:00
a131428f04 Bug#29898: Item_date_typecast::val_int doesn't reset the null_value flag.
The Item_date_typecast::val_int function doesn't reset null_value flag.
This makes all values that follows the first null value to be treated as nulls
and led to a wrong result.

Now the Item_date_typecast::val_int function correctly sets the null_value flag
for both null and non-null values.


mysql-test/t/cast.test:
  Added a test case for the bug#29898:  Item_date_typecast::val_int doesn't reset
  the null_value flag.
mysql-test/r/cast.result:
  Added a test case for the bug#29898:  Item_date_typecast::val_int doesn't reset
  the null_value flag.
sql/item_timefunc.cc:
  Bug#29898: Item_date_typecast::val_int doesn't reset the null_value flag.
  Now the Item_date_typecast::val_int function correctly sets the null_value flag
  for both null and non-null values.
2007-07-20 00:06:35 +04:00
92de7b7bb2 Merge trift2.:/MySQL/M50/mysql-5.0
into  trift2.:/MySQL/M50/push-5.0
2007-07-19 20:04:35 +02:00
d0020607b3 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/29850-bug-5.0-opt-mysql
2007-07-19 21:40:12 +04:00
7f6a816484 Bug#29850: Wrong charset of GROUP_CONCAT result when the select employs
a temporary table.

The result string of the Item_func_group_concat wasn't initialized in the 
copying constructor of the Item_func_group_concat class. This led to a
wrong charset of GROUP_CONCAT result when the select employs a temporary
table.

The copying constructor of the Item_func_group_concat class now correctly
initializes the charset of the result string.


mysql-test/t/func_gconcat.test:
  Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
  when the select employs a temporary table.
mysql-test/r/func_gconcat.result:
  Added a test case for the bug#29850: Wrong charset of the GROUP_CONCAT result
  when the select employs a temporary table.
sql/item_sum.cc:
  Bug#29850: Wrong charset of GROUP_CONCAT result when the select employs
  a temporary table.
  The copying constructor of the Item_func_group_concat class now correctly
  initializes the charset of the result string.
2007-07-19 20:21:23 +04:00
248c5e24e9 Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/home/hf/work/29687/my50-29687
2007-07-19 21:01:58 +05:00
0299963601 Merge bk@192.168.21.1:mysql-5.0-opt
into  mysql.com:/home/hf/work/29687/my50-29687
2007-07-19 20:59:08 +05:00
8d592e95a5 Merge bk-internal.mysql.com:/data0/bk/mysql-4.1-maint
into  bk-internal.mysql.com:/data0/bk/tsmith-tmp/mysql-5.0-maint
2007-07-19 17:43:34 +02:00
62eb5f1794 Rename all references to 'Delayed_insert' instances from 'tmp' to 'di'
for consistency.
2007-07-19 19:36:52 +04:00
e81e55e783 A fix for Bug#29431 killing an insert delayed thread causes crash
No test case, since the bug requires a stress case with 30 INSERT DELAYED
threads and 1 killer thread to repeat. The patch is verified
manually.
Review fixes.

The server that is running DELAYED inserts would deadlock itself
or crash under high load if some of the delayed threads were KILLed
in the meanwhile.

The fix is to change internal lock acquisition order of delayed inserts
subsystem and to ensure that
Delayed_insert::table_list::db does not point to volatile memory in some 
cases.
For details, please see a comment for sql_insert.cc.


sql/sql_insert.cc:
  A fix for Bug#29431 killing an insert delayed thread causes crash
  
  1) The deadlock was caused by different lock acquisition order
  between delayed_get_table and handle_delayed_insert.
  
  delayed_get_table would:
  - acquire LOCK_delayed_create
  - create a new Delayed_insert instance
  - acquire instance mutex (di->mutex)
  - "lock the instance in memory" by 
  increasing di->locked_in_memory variable
  - start the delayed thread
  - release di->mutex
  - let the delayed thread open the delayed table
  - discover that the delayed thread was killed
  - try to unlock() the delayed insert instance in memory
  - in Delayed_insert::unlock() do
   * lock LOCK_delayed_insert
   * decrease locks_in_memory and discover it's 0
   * attempt to lock di->mutex to broadcast di->cond condition <-- deadlock
   here
  
  Meanwhile, the delayed thread would
   * lock di->mutex
   * open the table
   * get killed
   * not notice that and attempt to lock LOCK_delayed_insert
  to register itself in the delayed insert list <-- deadlock here.
  
  Simply put, delayed_get_table used to lock LOCK_delayed_insert and then 
  di->mutex, and handle_delayed_insert would lock di->mutex and then 
  LOCK_delayed_insert.
  
  Fixed by moving registration in the list of delayed insert threads from 
  handle_delayed_insert to delayed_get_table - so that now
  handle_delayed_insert doesn't need to acquire LOCK_delayed_insert mutex.
  
  
  2) di->table_list.db was copied by-pointer from table_list.db of the first
  producer -- the one who initiated creation of the delayed insert thread.
  This producer might be long gone when the member is needed
  (handle_delayed_insert:open_ltable),
  e.g. by having been killed with KILL CONNECTION statement.
  Fixed by using a pointer to the consumer's deep copy of THD::db.
  
  3) In find_handler, we shouldn't assume that Delayed_insert object
  already (or still) has a table opened all the time it is
  present in the delayed insert list. E.g. it's not the case
  when Delayed_insert decided to terminate, closed the table, but haven't
  yet unregistered from the list (see the end of handle_delayed_insert).
2007-07-19 19:28:00 +04:00
c865b22514 Merge gleb.loc:/home/uchum/work/bk/5.0
into  gleb.loc:/home/uchum/work/bk/5.0-opt


sql/ha_myisam.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
2007-07-19 19:57:53 +05:00
36f1e4848c Fixed bug #29338.
Optimization of queries with DETERMINISTIC functions in the
WHERE clause was not effective: sequential scan was always
used.
Now a SF with the DETERMINISTIC flags is treated as constant
when it's arguments are constants (or a SF doesn't has arguments).


sql/item_func.h:
  Fixed bug #29338.
  The Item_func_sp::used_tables has been removed
  (virtual Item_func::used_tables function is enough).
  The virtual Item_func_sp::update_used_tables function
  has been added.
sql/item_func.cc:
  Fixed bug #29338.
  The Item_func_sp::update_used_tables and the
  Item_func_sp::fix_field functions have been modified
  to take into account the DETERMINISTIC flag of SF definition.
mysql-test/r/sp.result:
  Updated test case for bug #29338.
mysql-test/t/sp.test:
  Updated test case for bug #29338.
2007-07-19 18:39:01 +05:00
f4209c71a2 Avoid the name conflict between the system-provided "md5.h" and the MySQL one
by renaming "include/md5.h" to "include/my_md5.h".

Fixes bug#14151.


include/my_md5.h:
  Rename: include/md5.h -> include/my_md5.h
2007-07-19 14:14:03 +02:00
9fa66ba423 field.cc, field.h:
i5 compatibility


sql/field.h:
  i5 compatibility
sql/field.cc:
  i5 compatibility
2007-07-19 14:12:05 +02:00
2486c23ca6 BUG#26325 - TEMPORARY TABLE "corrupt" after first read, according
to CHECK TABLE

CHECK/REPAIR TABLE reports "File not found" error when issued
against temporary table.

Fixed by disabling a brunch of code (in case it gets temporary table)
that is responsible for updating frm version as it is not needed
for temporary tables.


mysql-test/r/check.result:
  A test case for BUG#26325.
mysql-test/t/check.test:
  A test case for BUG#26325.
sql/handler.cc:
  No need to update frm version in case table was created or checked
  by server with the same version. This also ensures that we do not
  update frm version for temporary tables as this code doesn't support
  temporary tables.
2007-07-19 13:51:31 +05:00
8b59beaebe Merge gleb.loc:/home/uchum/work/bk/5.0-opt-28524
into  gleb.loc:/home/uchum/work/bk/5.0-opt
2007-07-19 10:54:39 +05:00
2bfe84d434 Fixed bug #28524.
For each view the mysqldump utility creates a temporary table
with the same name and the same columns as the view 
in order to satisfy views that depend on this view.
After the creation of all tables, mysqldump drops all
temporary tables and creates actual views.
However, --skip-add-drop-table and --compact flags disable
DROP TABLE statements for those temporary tables. Thus, it was
impossible to create the views because of existence of the
temporary tables with the same names.


client/mysqldump.c:
  Fixed bug #28524.
  The mysqldump utility has been modified to unconditionally drop
  temporary tables before the creation of views.
mysql-test/t/mysqldump.test:
  Updated test case for bug #28524 and updated result of previous tests.
mysql-test/r/mysqldump.result:
  Updated test case for bug #28524 and updated result of previous tests.
2007-07-18 19:14:48 +05:00
73a680a54d CMakeLists.txt, configure.js:
Allow to set mysqld exe suffix


sql/CMakeLists.txt:
  Allow to set mysqld exe suffix
win/configure.js:
  Allow to set mysqld exe suffix
2007-07-18 15:42:36 +02:00
6981af6ff5 Add a test case for Bug#22427 create table if not exists + stored
function results in inconsistent behavior.

The bug itself was fixed by the patch for bug 20662.


mysql-test/r/sp-prelocking.result:
  Update results (Bug#22427)
mysql-test/t/sp-prelocking.test:
  Add a test case for Bug#22427 create table if not exists + stored 
  function results in inconsistent behavior
2007-07-18 17:09:03 +04:00
a266c16d14 Bug #29325: create table overwrites .MYD file of other
table (datadir)
Set errno when retunring an error in my_create_with_symlink.


mysys/my_symlink2.c:
  Bug #29325: set errno when retunring 
  an error in my_create_with_symlink
2007-07-18 15:33:41 +03:00
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
5f462f9626 Add a test case for Bug#27248 Triggers: error if insert affects temporary
table.
The bug itself is yet another manifestation of Bug 26141.


mysql-test/r/trigger.result:
  Update results.
mysql-test/t/trigger.test:
  Add a test case for Bug#27248 Triggers: error if insert affects temporary
  table
2007-07-18 14:42:06 +04:00
035b06b4e1 BUG#28838 - duplicate external_lock in mysql_alter_table
Removed duplicate call to handler::external_lock() when
ALTER TABLE that doesn't need to copy a table (quick
ALTER TABLE) was executed.

Also quick ALTER TABLE doesn't hold LOCK_open anymore when
it enables/disables indexes.


sql/sql_table.cc:
  Do not call handler::external_lock() as table is already locked
  by open_ltable().
  
  Also do not hold LOCK_open mutex for alter_table_manage_keys() as
  this function doesn't require LOCK_open (LOCK_open is required by
  wait_while_table_is_used() only).
2007-07-18 15:39:13 +05:00
06b446dae4 Mark deadcode for gcov 2007-07-18 11:12:15 +04:00
043f697aee Mark deadcode for gcov 2007-07-18 00:29:25 +04:00
c3e1eaba62 Merge trift2.:/MySQL/M50/bug21023-25486-5.0
into  trift2.:/MySQL/M50/push-5.0
2007-07-17 21:44:36 +02:00
a5a0a38d8d Merge trift2.:/MySQL/M50/mysql-5.0
into  trift2.:/MySQL/M50/push-5.0
2007-07-17 21:40:36 +02:00
2679e53a73 Small comments fix 2007-07-17 22:46:51 +04:00
91301448e9 Merge ramayana.hindu.god:/home/tsmith/m/bk/50
into  ramayana.hindu.god:/home/tsmith/m/bk/maint/50


sql/mysql_priv.h:
  Auto merged
2007-07-17 11:32:50 -06:00
c20595d8a0 Merge ramayana.hindu.god:/home/tsmith/m/bk/41
into  ramayana.hindu.god:/home/tsmith/m/bk/maint/41
2007-07-17 11:32:34 -06:00
3ec7c63645 Handle "support-files/mysqld_multi.server.sh" like other shell scripts.
Fixing bug#25486:  mysqld_multi.server.sh missing from builds


support-files/Makefile.am:
  Handle "mysqld_multi.server.sh" like other shell scripts.
  
  Fixing bug#25486.
2007-07-17 19:27:31 +02:00
ded5009aaf Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/home/psergey/mysql-5.0-bug29740
2007-07-17 19:53:33 +04:00
955c19961d [pb problem]: ha_heap->clone() fails on windows because of mess with
'/' and '\' in path delimiters:
- Fix this by creating new handler with exactly the same path line as
  was passed to ha_create/ha_open.


sql/opt_range.cc:
  Set thd->net.report_error on handler::clone() failure
2007-07-17 19:51:50 +04:00
e44d995fa9 Ensure "mysql-stress-test.pl" is included in both "tar.gz" and RPM packages.
Fixing bug#21023:  "mysql-stress-test.pl" missing in builds


mysql-test/Makefile.am:
  Ensure "mysql-stress-test.pl" is handled by "make install" in the "mysql-test" directory.
  
  This should get the script into the result tree of a RPM build.
  
  Fixing bug#21023.
scripts/make_binary_distribution.sh:
  Copy "mysql-test/mysql-stress-test.pl" into a binary distribution ("tar.gz" and derived formats).
  
  Fixing bug#21023.
2007-07-17 16:25:32 +02:00
cff1088d03 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-engines
into  bodhi.(none):/opt/local/work/mysql-5.0-runtime
2007-07-17 13:08:23 +04:00
e90b0c6e79 make_binary_distribution.sh:
BUG#29382


scripts/make_binary_distribution.sh:
  BUG#29382
2007-07-17 10:25:48 +02:00
60e70c6920 Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  sin.intern.azundris.com:/home/tnurnberg/27198/50-27198
2007-07-17 09:37:46 +02:00
7858729d94 Merge sin.intern.azundris.com:/home/tnurnberg/27198/41-27198
into  sin.intern.azundris.com:/home/tnurnberg/27198/50-27198


sql/mysql_priv.h:
  Auto merged
sql/sql_class.h:
  Auto merged
2007-07-17 06:59:24 +02:00
e587830c50 Merge sin.intern.azundris.com:/home/tnurnberg/27198/40-27198
into  sin.intern.azundris.com:/home/tnurnberg/27198/41-27198


sql/mysql_priv.h:
  Bug #27198: Error returns from time() are ignored
  
  manual merge
sql/sql_class.h:
  Bug #27198: Error returns from time() are ignored
  
  manual merge
2007-07-16 22:38:50 +02:00
b94fb82847 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.(none):/opt/local/work/mysql-5.0-runtime


mysql-test/t/sp.test:
  Auto merged
sql/item.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/r/innodb_mysql.result:
  Manual merge.
mysql-test/t/innodb_mysql.test:
  Manual merge.
2007-07-16 23:41:28 +04:00
de2089264f Bug#29050 Creation of a legal stored procedure fails if a database is not
selected prior: ensure the fix also works for information_schema
tables.


sql/sql_parse.cc:
  Ensure the fix for Bug#29050 works for information_schema tables.
2007-07-16 23:37:02 +04:00
7dc853561c Merge chilla.local:/home/mydev/mysql-5.0-amain
into  chilla.local:/home/mydev/mysql-5.0-axmrg
2007-07-16 20:39:05 +02:00
0cbe9a284c Merge trift-lap.fambruehe:/MySQL/M50/mysql-5.0
into  trift-lap.fambruehe:/MySQL/M50/push-5.0


configure.in:
  Auto merged
sql/field.cc:
  Auto merged
2007-07-16 19:06:11 +02:00
9917ce268d Bug #29687 mysql_stmt_store_result memory leak in libmysqld
In embedded server we use result->alloc to store field data for the
result, but we didn't clean the result->alloc if the query returned
an empty recordset. Cleaning for the empty recordset enabled


libmysql/libmysql.c:
  Bug #29687 mysql_stmt_store_result memory leak in libmysqld
  
  we should clean result->alloc even if we have nothin in 'data' field
2007-07-16 19:08:07 +05:00