1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-04 06:05:05 +03:00

1504 Commits

Author SHA1 Message Date
unknown
32c6341ea8 Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
Problem: logging queries not using indexes we check a special flag which 
is set only at the server startup and is not changing with a corresponding
server variable together.

Fix: check the variable value instead of the flag.



mysql-test/r/show_check.result:
  Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
    - test result.
mysql-test/t/show_check.test:
  Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
    - test case.
sql/mysqld.cc:
  Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
    - SPECIAL_LOG_QUERIES_NOT_USING_INDEXES is not used anymore.
sql/sql_parse.cc:
  Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
    - check opt_log_queries_not_using_indexes instead of 
      SPECIAL_LOG_QUERIES_NOT_USING_INDEXES flag.
sql/unireg.h:
  Fix for bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
    - SPECIAL_LOG_QUERIES_NOT_USING_INDEXES is not used anymore.
2007-07-05 15:34:12 +05:00
unknown
4d9cc3db77 Bug#24924: shared-memory-base-name that is too long causes buffer overflow
long shared-memory-base-names could overflow a static internal buffer
and thus crash mysqld and various clients.  change both to dynamic
buffers, show everything but overflowing those buffers still works.

The test case for this would pretty much amount to
mysqld --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --shared-memory=1 &
mysqladmin --no-defaults --shared-memory-base-name=HeyMrBaseNameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX shutdown

Unfortunately, we can't just use an .opt file for the
server. The .opt file is used at start-up, before any
include in the actual test can tell mysqltest to skip
this one on non-Windows. As a result, such a test would
break on unices.

Fixing mysql-test-run.pl to export full path for master
and slave would enable us to start a server from within
the test which is ugly and, what's more, doesn't work as
the server blocks (mysqltest offers no fire-and-forget
fork-and-exec), and mysqladmin never gets run.

Making the test rpl_windows_shm or some such so we can
is beyond ugly. As is introducing another file-name based
special case (run "win*.test" only when on Windows). As is
(yuck) coding half the test into mtr (as in, having it
hand out a customized environment conductive to the shm-
thing on Win only).

Situation is exacerbated by the fact that .sh is not
necessary run as expected on Win.

In short, it's just not worth it. No test-case until we
have a new-and-improved test framework.


sql-common/client.c:
  Bug#24924: shared-memory-base-name that is too long causes buffer overflow
  
  compose shared memory name in dynamic rather than static buffer to prevent
  overflows (clients)
sql/mysqld.cc:
  Bug#24924: shared-memory-base-name that is too long causes buffer overflow
  
  compose shared memory name in dynamic rather than static buffer to prevent
  overflows (server)
2007-06-21 04:30:10 +02:00
unknown
3e2e6ea9e3 Merge chilla.local:/home/mydev/mysql-5.0-amain
into  chilla.local:/home/mydev/mysql-5.0-axmrg


configure.in:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-06-16 11:34:21 +02:00
unknown
c2db927bf7 Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/jun14/50


configure.in:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-06-15 17:59:04 +02:00
unknown
30057f678b Merge chilla.local:/home/mydev/mysql-5.0-amain
into  chilla.local:/home/mydev/mysql-5.0-axmrg


mysql-test/r/view.result:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
2007-06-15 17:47:02 +02:00
unknown
578b81bb5b Merge bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint


configure.in:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-06-14 18:17:26 -04:00
unknown
4a009817ab Bug#21723: Should be able to dump core after setuid() under Linux
In many cases, binaries can no longer dump core after calling setuid().

Where the PR_SET_DUMPABLE macro is set, use the prctl() system call 
to tell the kernel that it's allowed to dump the core of the server.


configure.in:
  Test system for "sys/prctl.h", to get access to prctl().
sql/mysqld.cc:
  Add a process-control operation that tells the Linux kernel that it 
  is allowed to dump core after setuid().
2007-06-14 14:24:59 -04:00
unknown
6f168d1255 Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/d2/hf/mrg/mysql-5.0-opt


client/mysqltest.c:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_prepare.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/r/innodb_mysql.result:
  merging
mysql-test/t/innodb_mysql.test:
  merging
sql/sql_select.cc:
  merging
2007-06-14 16:41:10 +05:00
unknown
71aa571d09 Bug#28149 overflow in some "SHOW STATUS"-variables
changed bytes_received, bytes_sent status variables to longlong


sql/mysqld.cc:
  changed bytes_received, bytes_sent status variables to longlong
sql/sql_class.h:
  changed bytes_received, bytes_sent status variables to longlong
sql/sql_show.cc:
  changed bytes_received, bytes_sent status variables to longlong
sql/structs.h:
  changed bytes_received, bytes_sent status variables to longlong
2007-06-09 17:46:09 +05:00
unknown
a4422e8af7 Merge xiphis.org:/home/antony/work2/mysql-5.0-engines
into  xiphis.org:/home/antony/work2/mysql-5.0-engines.merge


sql/mysqld.cc:
  Auto merged
2007-06-06 12:03:54 -07:00
unknown
f5bc5381ae Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/jun05/50


client/mysqldump.c:
  Auto merged
mysql-test/mysql-test-run.pl:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
2007-06-05 23:04:40 +02:00
unknown
797bbbd4b0 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  chilla.local:/home/mydev/mysql-5.0-axmrg


sql/mysqld.cc:
  Auto merged
2007-06-05 19:56:57 +02:00
unknown
1c72c3a8c1 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/jun05/50


mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/t/mysqltest.test:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
2007-06-05 17:28:49 +02:00
unknown
5697c0c10c Merge bk-internal.mysql.com:/data0/bk/mysql-5.0
into  bk-internal.mysql.com:/data0/bk/mysql-5.0-opt


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
mysql-test/t/strict.test:
  Auto merged
mysql-test/t/subselect3.test:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_update.cc:
  Auto merged
sql/sql_view.cc:
  Manual merge
2007-06-02 00:57:25 +02:00
unknown
a471267a24 Merge chilla.local:/home/mydev/mysql-5.0-bug23068
into  chilla.local:/home/mydev/mysql-5.0-axmrg


sql/mysqld.cc:
  Auto merged
2007-05-31 20:08:23 +02:00
unknown
6e1130fba2 Merge polly.local:/home/kaa/src/maint/bug24611/my50-bug24611
into  polly.local:/home/kaa/src/maint/mysql-5.0-maint


sql/mysqld.cc:
  Auto merged
2007-05-29 17:16:23 +04:00
unknown
c00ad6c0b3 Bug #28366: multiple load_file('a: ... ') causes entire mysqld process to hang
When a Windows console application that has an open console (e.g. mysqld-nt 
started with the --console option) encounters certain type of errors 
(like no floppy disk in a floppy drive) the OS will pop-up an 
"abort/retry/ignore" dialog and block the application (depending on a 
registry setting : see http://msdn2.microsoft.com/en-us/embedded/aa731206.aspx
for details).
Fixed by disabling the dialog popups for every error except a GPF and
alignment errors. This is safe to do as the actual error gets reported
(and handled) to mysqld.


sql/mysqld.cc:
  Bug #28366: disable the system error messageboxes.
2007-05-29 14:36:21 +03:00
unknown
2212ad470e Merge adventure.(none):/home/thek/Development/cpp/bug24988/my50-bug24988
into  adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime


sql/mysqld.cc:
  Auto merged
2007-05-29 10:17:30 +02:00
unknown
96d16d96d1 Bug#24988 FLUSH PRIVILEGES causes brief unavailability
- A race condition caused brief unavailablility when trying to acccess
  a table.
- The unprotected variable 'grant_option' wasn't intended to alternate
  during normal execution. Variable initialization moved to grant_init
  a lines responsible for the alternation are removed. 


sql/mysqld.cc:
  - Added documentation to describe grant_option flag.
sql/sql_acl.cc:
  - This patch removes lines which causes grant_option to alternate and moves
    variable initialization to the grant_init()-function.
2007-05-28 13:50:33 +02:00
unknown
8358a0c7c7 Merge polly.local:/home/kaa/src/maint/bug28121/my50-bug28121
into  polly.local:/home/kaa/src/maint/mysql-5.0-maint


sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
strings/strtod.c:
  Auto merged
2007-05-28 14:34:36 +04:00
unknown
e3af3c2127 Fix for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits"
When storing a large number to a FLOAT or DOUBLE field with fixed length, it could be incorrectly truncated if the field's length was greater than 31.

This patch also does some code cleanups to be able to reuse code which is common between Field_float::store() and Field_double::store().


include/m_string.h:
  Added declarations for log_10 and log_01 from strtod.c
mysql-test/r/type_float.result:
  Added the testcase for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits"
mysql-test/t/type_float.test:
  Added the testcase for bug #28121 "INSERT or UPDATE into DOUBLE(200,0) field being truncated to 31 digits"
sql/field.cc:
  Moved common code from Field_float::store() and Field_double:store() to Field_real::truncate()
  Fixed the algorithm to not truncate large input numbers if the field length is greater than 31.
  Fixed rounding to not depend on FLT_MAX/DBL_MAX constants.
sql/field.h:
  Moved not_fixed member from Field_double to Field_real to allow code reuse between Field_float::store() and Field_double::store()
  Added truncate() method to Field_real which is used by both Field_float and Field_double
sql/init.cc:
  log_10[] and log_01[] are now defined as statical arrays in strtod.c, no need to pre-computed them.
sql/item_cmpfunc.cc:
  log_01[] now starts from 1e0, not from 1e-1 for consistency.
sql/mysql_priv.h:
  Moved log_10[] and log_01[] from mysqld.cc to libmystrings.
sql/mysqld.cc:
  Moved log_10[] and log_01[] from mysqld.cc to libmystrings.
strings/strtod.c:
  Define and use log_10[] and log_01[] as static arrays of constants instead of values pre-computed at startup.
2007-05-28 12:44:59 +04:00
unknown
36b183ee31 Fix for bug #24611 "mysqld crashes when connecting from remote host, and compiled from source".
On some Linux distributions with both LinuxThreads and NPTL glibc versions available, statically built binaries can crash, because linker defaults to LinuxThreads when linking statically, but calls to external libraries (like libnss) are resolved to NPTL versions.

Since there is nothing we can do in the code to work that around, just give user an advice on how to fix that, if a crash happened on such a binary/OS combination.


sql/mysqld.cc:
  Advise a user on possible solutions in case of a crash in a statically built binary on a system with both LinuxThreads and NPTL available.
2007-05-25 20:52:01 +04:00
unknown
b9ec849bb2 Bug#23068 - key_cache_block_size is not set or displayes correctly
Command line and configuration file option 'key_cache_block_size'
was reduced by MALLOC_OVERHEAD (8 in a production server, 36 in a
debug server) from the user supplied value and restricted it to
the greatest multiple of 512 less or equal to the reduced value.

This patch changes option 'key_cache_block_size' to not deduce
MALLOC_OVERHEAD from the input value. However, the restriction
to a multiple of 512 is still done.


sql/mysqld.cc:
  Bug#23068 - key_cache_block_size is not set or displayes correctly
  Changed option 'key_cache_block_size' to not deduce
  MALLOC_OVERHEAD from the input value.
2007-05-16 20:00:23 +02:00
unknown
2b73a6c85d Bug#27994 Expose counter for stored procedure calls in Com_% status
- Expose the already existing counter for number of stored procedure calls


sql/mysqld.cc:
  Expose counter for "Com_call_procedure"
2007-05-02 14:25:11 +02:00
unknown
d446289fd6 Remove dangerous "remove warning" hack, cast to long
will truncate the time value on systems where "long" are 32bit,
instead use time_t as datatype
2007-04-27 15:33:48 +02:00
unknown
dc5dd7a264 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  recycle.(none):/src/bug25621/my50-bug25621


sql/mysqld.cc:
  Auto merged
2007-04-23 14:38:43 -04:00
unknown
800d74f208 Bug#25621 Error in my_thread_global_end(): 1 threads didn't exit
- On Windows, connection handlers while exiting properly did not 
decrement the server's thread count.


sql/mysqld.cc:
  Bug#25621 Error in my_thread_global_end(): 1 threads didn't exit
  - Make sure that connection handlers decrement number of threads
  and handlers on Windows.
  - Signal condition variable before unlocking mutex.
2007-04-23 14:28:33 -04:00
unknown
20b22b40cf Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint


client/mysql.cc:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-04-23 16:22:01 +02:00
unknown
1992907b45 mysqld.cc:
Removing wrong MYF(0) argument.


sql/mysqld.cc:
  Removing wrong MYF(0) argument.
2007-04-12 11:29:43 +05:00
unknown
d25a540dca Print warning to log when SSL setup fails 2007-04-11 21:38:43 +02:00
unknown
8e2b68c3cd Bug#22648 LC_TIME_NAMES: Setting GLOBAL has no effect
Problem: setting/displaying @@LC_TIME_NAMES didn't distinguish between
GLOBAL and SESSION variable types - always SESSION variable
was set/shonw.
Fix: set either global or session value.
Also, "mysqld --lc-time-names" was added to set "global default" value.


mysql-test/r/variables.result:
  Adding test cases
mysql-test/t/variables.test:
  Adding test cases
sql/mysql_priv.h:
  Declaring variable for global default.
sql/mysqld.cc:
  Adding --lc-time-names
sql/set_var.cc:
  Distinguish between GLOBAL and SESSION variables.
sql/sql_class.cc:
  Don't initialize to en_US, use global_system_variables value instead.
2007-04-09 17:58:56 +05:00
unknown
f47c23288a Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge


sql/mysqld.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
2007-03-31 00:15:20 +02:00
unknown
e420488ee6 Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge


sql/mysqld.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
2007-03-29 12:25:28 +02:00
unknown
27f8c35760 Merge sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.1
into  sergbook.mysql.com:/usr/home/serg/Abk/mysql-5.0-build


sql/mysqld.cc:
  Auto merged
2007-03-24 14:05:27 +02:00
unknown
a1e7490f41 nptl: typo fixed. sigaddset restored 2007-03-24 14:03:27 +02:00
unknown
1e92dcae89 Merge sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.1
into  sergbook.mysql.com:/usr/home/serg/Abk/mysql-5.0-build


mysys/thr_alarm.c:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-03-23 20:39:34 +02:00
unknown
d89329c685 reverted linuxthreads thr_client_alarm fix (not future-proof)
fixed differently: wake up select_thread with THR_SERVER_ALARM instead


mysys/thr_alarm.c:
  reverted linuxthreads thr_client_alarm fix (not future-proof)
2007-03-23 20:37:20 +02:00
unknown
c62c0d9df8 Merge sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.1
into  sergbook.mysql.com:/usr/home/serg/Abk/mysql-5.0-build


mysys/thr_alarm.c:
  Auto merged
sql/mysqld.cc:
  SCCS merged
2007-03-23 16:37:19 +02:00
unknown
9a4b2e9081 Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into  sergbook.mysql.com:/usr/home/serg/Abk/mysql-4.1


mysys/thr_alarm.c:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-03-23 14:57:55 +02:00
unknown
6e1f446ae1 move thr_client_alarm initialization to mysqld.cc
(in thr_alarm.cc it happened too late).


mysys/thr_alarm.c:
  move thr_client_alarm initialization to mysqld.cc
  (here it happened too late)
sql/mysqld.cc:
  move thr_client_alarm initialization to mysqld.cc
  (in thr_alarm.cc it happened too late).
  moved thr_kill_signal initialization to init_signals()
2007-03-23 13:38:42 +02:00
unknown
685d21b72f - renaming TMP_TABLE to NON_TRANSACTIONAL_TMP_TABLE because this is
what it actually means (Monty approved the renaming)
- correcting description of transaction_alloc command-line options
(our manual is correct)
- fix for a failure of rpl_trigger.


mysql-test/t/rpl_misc_functions.test:
  test was cleaning up only on slave, but it's also needed on master,
  otherwise it influences rpl_trigger.test
sql/lock.cc:
  clearer name
sql/mysqld.cc:
  I checked the code that those two variables are not about binlogging
  but about the size of the transaction's memroot which is used
  to create savepoint structures and to store list of tables to be invalidated
  (for NDB). The manual has a correct description, no need to fix it.
sql/sql_base.cc:
  clearer name
sql/sql_derived.cc:
  clearer name
sql/sql_select.cc:
  clearer name
sql/table.h:
  clearer name: TMP_TABLE is used for non-transactional tables.
2007-03-22 15:07:32 +01: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
cc379fff6d Merge bk-internal:/home/bk/mysql-5.0-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint


extra/comp_err.c:
  Auto merged
sql/mysqld.cc:
  Auto merged
2007-03-08 13:30:04 +01:00
unknown
30c1622ec4 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/50


sql/mysqld.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
2007-03-07 23:55:25 +01:00
unknown
7f69b747d0 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  bodhi.local:/opt/local/work/mysql-5.0-26750


sql/mysqld.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
sql/sql_class.h:
  Manual merge.
2007-03-07 12:28:16 +03:00
unknown
053c6c01d6 A fix for Bug#26750 "valgrind leak in sp_head" (and post-review
fixes).

The legend: on a replication slave, in case a trigger creation
was filtered out because of application of replicate-do-table/
replicate-ignore-table rule, the parsed definition of a trigger was not 
cleaned up properly. LEX::sphead member was left around and leaked 
memory. Until the actual implementation of support of 
replicate-ignore-table rules for triggers by the patch for Bug 24478 it 
was never the case that "case SQLCOM_CREATE_TRIGGER"
was not executed once a trigger was parsed,
so the deletion of lex->sphead there worked and the memory did not leak.

The fix: 

The real cause of the bug is that there is no 1 or 2 places where
we can clean up the main LEX after parse. And the reason we 
can not have just one or two places where we clean up the LEX is
asymmetric behaviour of MYSQLparse in case of success or error. 

One of the root causes of this behaviour is the code in Item::Item()
constructor. There, a newly created item adds itself to THD::free_list
- a single-linked list of Items used in a statement. Yuck. This code
is unaware that we may have more than one statement active at a time,
and always assumes that the free_list of the current statement is
located in THD::free_list. One day we need to be able to explicitly
allocate an item in a given Query_arena.
Thus, when parsing a definition of a stored procedure, like
CREATE PROCEDURE p1() BEGIN SELECT a FROM t1; SELECT b FROM t1; END;
we actually need to reset THD::mem_root, THD::free_list and THD::lex
to parse the nested procedure statement (SELECT *).
The actual reset and restore is implemented in semantic actions
attached to sp_proc_stmt grammar rule.
The problem is that in case of a parsing error inside a nested statement
Bison generated parser would abort immediately, without executing the
restore part of the semantic action. This would leave THD in an 
in-the-middle-of-parsing state.
This is why we couldn't have had a single place where we clean up the LEX
after MYSQLparse - in case of an error we needed to do a clean up
immediately, in case of success a clean up could have been delayed.
This left the door open for a memory leak.

One of the following possibilities were considered when working on a fix:
- patch the replication logic to do the clean up. Rejected
as breaks module borders, replication code should not need to know the
gory details of clean up procedure after CREATE TRIGGER.
- wrap MYSQLparse with a function that would do a clean up.
Rejected as ideally we should fix the problem when it happens, not
adjust for it outside of the problematic code.
- make sure MYSQLparse cleans up after itself by invoking the clean up
functionality in the appropriate places before return. Implemented in 
this patch.
- use %destructor rule for sp_proc_stmt to restore THD - cleaner
than the prevoius approach, but rejected
because needs a careful analysis of the side effects, and this patch is 
for 5.0, and long term we need to use the next alternative anyway
- make sure that sp_proc_stmt doesn't juggle with THD - this is a 
large work that will affect many modules.

Cleanup: move main_lex and main_mem_root from Statement to its
only two descendants Prepared_statement and THD. This ensures that
when a Statement instance was created for purposes of statement backup,
we do not involve LEX constructor/destructor, which is fairly expensive.
In order to track that the transformation produces equivalent 
functionality please check the respective constructors and destructors
of Statement, Prepared_statement and THD - these members were
used only there.
This cleanup is unrelated to the patch.


sql/log_event.cc:
  THD::main_lex is private and should not be used.
sql/mysqld.cc:
  Move MYSQLerror to sql_yacc.yy as it depends on LEX headers now.
sql/sql_class.cc:
  Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
sql/sql_class.h:
  Cleanup: move main_lex and main_mem_root to THD and Prepared_statement
sql/sql_lex.cc:
  Implement st_lex::restore_lex()
sql/sql_lex.h:
  Declare st_lex::restore_lex().
sql/sql_parse.cc:
  Consolidate the calls to unit.cleanup() and deletion of lex->sphead
  in mysql_parse (COM_QUERY handler)
sql/sql_prepare.cc:
  No need to delete lex->sphead to restore memory roots now in case of a 
  parse error - this is done automatically inside MYSQLparse
sql/sql_trigger.cc:
  This code could lead to double deletion apparently, as in case
  of an error lex.sphead was never reset.
sql/sql_yacc.yy:
  Trap all returns from the parser to ensure that MySQL-specific cleanup
  is invoked: we need to restore the global state of THD and LEX in 
  case of a parsing error. In case of a parsing success this happens as 
  part of normal grammar reduction process.
2007-03-07 12:24:46 +03:00
unknown
a966b0b71c Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/50


mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_cmpfunc.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
2007-03-07 06:54:35 +01:00
unknown
307c9f1e8f Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-8407_b


mysql-test/r/view.result:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sp_head.h:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_update.cc:
  Auto merged
sql/table.cc:
  Auto merged
sql/table.h:
  Auto merged
sql/sql_base.cc:
  Manual merge
2007-03-06 11:30:08 -07:00
unknown
266a7fff52 Bug#8407 (Stored functions/triggers ignore exception handler)
Bug 18914 (Calling certain SPs from triggers fail)
Bug 20713 (Functions will not not continue for SQLSTATE VALUE '42S02')
Bug 21825 (Incorrect message error deleting records in a table with a
  trigger for inserting)
Bug 22580 (DROP TABLE in nested stored procedure causes strange dependency
  error)
Bug 25345 (Cursors from Functions)


This fix resolves a long standing issue originally reported with bug 8407,
which affect the behavior of Stored Procedures, Stored Functions and Trigger
in many different ways, causing symptoms reported by all the bugs listed.
In all cases, the root cause of the problem traces back to 8407 and how the
server locks tables involved with sub statements.

Prior to this fix, the implementation of stored routines would:
- compute the transitive closure of all the tables referenced by a top level
statement
- open and lock all the tables involved
- execute the top level statement
"transitive closure of tables" means collecting:
- all the tables,
- all the stored functions,
- all the views,
- all the table triggers
- all the stored procedures
involved, and recursively inspect these objects definition to find more
references to more objects, until the list of every object referenced does
not grow any more.
This mechanism is known as "pre-locking" tables before execution.
The motivation for locking all the tables (possibly) used at once is to
prevent dead locks.

One problem with this approach is that, if the execution path the code
really takes during runtime does not use a given table, and if the table is
missing, the server would not execute the statement.
This in particular has a major impact on triggers, since a missing table
referenced by an update/delete trigger would prevent an insert trigger to run.

Another problem is that stored routines might define SQL exception handlers
to deal with missing tables, but the server implementation would never give
user code a chance to execute this logic, since the routine is never
executed when a missing table cause the pre-locking code to fail.

With this fix, the internal implementation of the pre-locking code has been
relaxed of some constraints, so that failure to open a table does not
necessarily prevent execution of a stored routine.

In particular, the pre-locking mechanism is now behaving as follows:

1) the first step, to compute the transitive closure of all the tables
possibly referenced by a statement, is unchanged.

2) the next step, which is to open all the tables involved, only attempts
to open the tables added by the pre-locking code, but silently fails without
reporting any error or invoking any exception handler is the table is not
present. This is achieved by trapping internal errors with
Prelock_error_handler

3) the locking step only locks tables that were successfully opened.

4) when executing sub statements, the list of tables used by each statements
is evaluated as before. The tables needed by the sub statement are expected
to be already opened and locked. Statement referencing tables that were not
opened in step 2) will fail to find the table in the open list, and only at
this point will execution of the user code fail.

5) when a runtime exception is raised at 4), the instruction continuation
destination (the next instruction to execute in case of SQL continue
handlers) is evaluated.
This is achieved with sp_instr::exec_open_and_lock_tables()

6) if a user exception handler is present in the stored routine, that
handler is invoked as usual, so that ER_NO_SUCH_TABLE exceptions can be
trapped by stored routines. If no handler exists, then the runtime execution
will fail as expected.

With all these changes, a side effect is that view security is impacted, in
two different ways.

First, a view defined as "select stored_function()", where the stored
function references a table that may not exist, is considered valid.
The rationale is that, because the stored function might trap exceptions
during execution and still return a valid result, there is no way to decide
when the view is created if a missing table really cause the view to be invalid.

Secondly, testing for existence of tables is now done later during
execution. View security, which consist of trapping errors and return a
generic ER_VIEW_INVALID (to prevent disclosing information) was only
implemented at very specific phases covering *opening* tables, but not
covering the runtime execution. Because of this existing limitation,
errors that were previously trapped and converted into ER_VIEW_INVALID are
not trapped, causing table names to be reported to the user.
This change is exposing an existing problem, which is independent and will
be resolved separately.


mysql-test/r/information_schema_db.result:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/sp-error.result:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/sp.result:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/trigger.result:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/view.result:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/sp-error.test:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/sp.test:
  Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/trigger.test:
  Revised the pre-locking code implementation, aligned the tests.
sql/lock.cc:
  table->placeholder now checks for schema_table
sql/mysqld.cc:
  my_message_sql(): invoke internal exception handlers
sql/sp_head.cc:
  exec_open_and_lock_tables(): open and lock tables, or return the
  continuation destination of this instruction
sql/sp_head.h:
  exec_open_and_lock_tables(): open and lock tables, or return the
  continuation destination of this instruction
sql/sql_base.cc:
  Prelock_error_handler: delay open table errors until execution
sql/sql_class.cc:
  THD: add internal error handler, as an exception mechanism.
sql/sql_class.h:
  THD: add internal error handler, as an exception mechanism.
sql/sql_update.cc:
  table->placeholder now checks for schema_table
sql/table.cc:
  st_table_list::hide_view_error(): masked more errors for view security
sql/table.h:
  table->placeholder now checks for schema_table, and unopened tables
2007-03-05 19:42:07 -07:00