This change set implements the DROP TRIGGER IF EXISTS functionality.
This fix is considered a bug and not a feature, because without it,
there is no known method to write a database creation script that can create
a trigger without failing, when executed on a database that may or may not
contain already a trigger of the same name.
Implementing this functionality closes an orthogonality gap between triggers
and stored procedures / stored functions (which do support the DROP IF
EXISTS syntax).
In sql_trigger.cc, in mysql_create_or_drop_trigger,
the code has been reordered to:
- perform the tests that do not depend on the file system (access()),
- get the locks (wait_if_global_read_lock, LOCK_open)
- call access()
- perform the operation
- write to the binlog
- unlock (LOCK_open, start_waiting_global_read_lock)
This is to ensure that all the code that depends on the presence of the
trigger file is executed in the same critical section,
and prevents race conditions similar to the case fixed by Bug 14262 :
- thread 1 executes DROP TRIGGER IF EXISTS, access() returns a failure
- thread 2 executes CREATE TRIGGER
- thread 2 logs CREATE TRIGGER
- thread 1 logs DROP TRIGGER IF EXISTS
The patch itself is based on code contributed by the MySQL community,
under the terms of the Contributor License Agreement (See Bug 18161).
mysql-test/r/rpl_trigger.result:
DROP TRIGGER IF EXISTS
mysql-test/r/trigger.result:
DROP TRIGGER IF EXISTS
mysql-test/t/rpl_trigger.test:
DROP TRIGGER IF EXISTS
mysql-test/t/trigger.test:
DROP TRIGGER IF EXISTS
sql/sql_trigger.cc:
DROP TRIGGER IF EXISTS
sql/sql_yacc.yy:
DROP TRIGGER IF EXISTS
into zippy.cornsilk.net:/home/cmiller/work/mysql/bug18761/my51-bug18761
BitKeeper/etc/collapsed:
auto-union
mysql-test/r/udf.result:
Auto merged
mysql-test/t/udf.test:
Auto merged
sql/item_func.cc:
Auto merged
sql/udf_example.c:
Auto merged
The code that set up data to be passed to user-defined functions was very
old and analyzed the "Type" of the data that was passed into the UDF, when
it really should analyze the "return_type", which is hard-coded for simple
Items and works correctly for complex ones like functions.
---
Added test at Sergei's behest.
mysql-test/r/udf.result:
Verify that various arguments work.
---
Added test at Sergei's behest.
mysql-test/t/udf.test:
Verify that various arguments work.
---
Added test at Sergei's behest.
sql/item_func.cc:
For function-Items, test whether it is constant and set the struct members
for the UDF parameter appropriately.
Replace tabs with spaces in affected code.
sql/udf_example.c:
Include a simple function that is useful in testing.
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint
client/mysql_upgrade.c:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
vio/Makefile.am:
Auto merged
BitKeeper/deleted/.del-Makefile.am~abb265028eb9b6a7:
Auto merged
mysql-test/mysql-test-run-shell.sh:
Auto merged
client/Makefile.am:
Use local
tests/Makefile.am:
SCCS merged
into mysql.com:/home/bk/MERGE/mysql-5.1-merge
BitKeeper/triggers/post-commit:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
sql/item_sum.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/slave.cc:
Manual merge
into mysql.com:/home/bk/MERGE/mysql-5.0-merge
BitKeeper/triggers/post-commit:
Auto merged
mysql-test/t/func_gconcat.test:
Auto merged
sql/item_sum.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/log_event.h:
Manual merge
sql/slave.cc:
Manual merge
into mysql.com:/home/hf/work/embt/my51-embt
libmysqld/lib_sql.cc:
Auto merged
BitKeeper/deleted/.del-bdb.result:
Auto merged
BitKeeper/deleted/.del-bdb.test:
Auto merged
mysql-test/r/insert_select.result:
Auto merged
mysql-test/r/join.result:
Auto merged
mysql-test/t/backup.test:
Auto merged
mysql-test/t/delayed.test:
Auto merged
mysql-test/t/join.test:
Auto merged
mysql-test/t/status.test:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_strfunc.cc:
Auto merged
mysql-test/mysql-test-run.pl:
merging
mysql-test/r/flush_block_commit.result:
SCCS merged
mysql-test/r/insert.result:
merging
mysql-test/t/innodb.test:
merging
mysql-test/t/insert.test:
merging
sql/share/errmsg.txt:
merging
libmysqld/lib_sql.cc:
check for bootstrap added
mysql-test/include/federated.inc:
disabled in embedded
mysql-test/mysql-test-run.pl:
we disable ssh in embedded server
mysql-test/r/bdb.result:
part moved to bdb_notembedded as it uses binlog
mysql-test/r/flush_block_commit.result:
part moved to flush_block_commit_notembedded
mysql-test/r/insert.result:
part moved to insert_notembedded as delayed works differently in embedded server
mysql-test/r/insert_select.result:
part moved to insert_notembedded as GRANTS usually disabled in embedded server
mysql-test/r/join.result:
access rights hidden in result
mysql-test/t/backup.test:
now available in embedded server
mysql-test/t/bdb.test:
part moved to bdb_notembedded as it uses binlog
mysql-test/t/delayed.test:
code trimmed
mysql-test/t/execution_constants.test:
skipped in embedded-server mode
mysql-test/t/flush_block_commit.test:
moved to flush_block_commit_notembedded
mysql-test/t/information_schema_db.test:
skipped in embedded-server
mysql-test/t/innodb.test:
directories replaced to be embedded-server compliant
mysql-test/t/insert.test:
part moved to insert_notembedded
mysql-test/t/insert_select.test:
part moved to insert_notembedded
mysql-test/t/join.test:
access rights hidden
mysql-test/t/status.test:
skipped in embedded server
mysql-test/t/trigger.test:
directories replaced to be embedded-server compliant
sql/item_strfunc.cc:
extra contexts not needed whan access checks disabled
sql/share/errmsg.txt:
bigger paths reserved to prevent test's fails
mysql-test/r/bdb_notembedded.result:
***MISSING WEAVE***
mysql-test/r/flush_block_commit_notembedded.result:
added
mysql-test/r/insert_notembedded.result:
added
mysql-test/t/bdb_notembedded.test:
***MISSING WEAVE***
mysql-test/t/flush_block_commit_notembedded.test:
added
mysql-test/t/insert_notembedded.test:
added
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint
BitKeeper/deleted/.del-abi_check.ic:
Auto merged
client/mysql_upgrade.c:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
Add new test file mysql_upgrade.test
BitKeeper/deleted/.del-abi_check.ic:
Rename: include/abi_check.ic -> BitKeeper/deleted/.del-abi_check.ic
client/mysql_upgrade.c:
Make mysql_upgrade search also in "client" dir so it can be run from a source dist.
mysql-test/mysql-test-run.pl:
Make it possible for .test scripts to run "mysql_upgrade"
mysql-test/r/mysql_upgrade.result:
New BitKeeper file ``mysql-test/r/mysql_upgrade.result''
mysql-test/t/mysql_upgrade.test:
New BitKeeper file ``mysql-test/t/mysql_upgrade.test''
into mysql.com:/home/bk/MERGE/mysql-5.1-merge
BitKeeper/etc/collapsed:
auto-union
mysql-test/r/view.result:
Auto merged
mysql-test/t/view.test:
Auto merged
sql/Makefile.am:
Auto merged
sql/handler.cc:
Auto merged
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_view.cc:
Auto merged
The server sends a number of columns to the client.
It uses a limited "fast" function for that instead of the
general one. This fast function cannot send numbers larger
than 2 bytes.
This causes the client to expect smaller number of columns.
The client writes outside of the allocated memory buffer
as a result.
Fixed the server to use the general function to send column
count.
Fixed the client to check the column count before writing
column data.
mysql-test/t/mysql_client.test:
Bug #19216: Client crashes on long SELECT
- test case
sql/protocol.cc:
Bug #19216: Client crashes on long SELECT
- renamed the function for bether comprehention
and made it local
- used the right (non-local) function to transfer
the column count in Protocol::send_fields
sql/protocol.h:
Bug #19216: Client crashes on long SELECT
- made optimized net_store_length local
sql-common/client.c:
Bug #19216: Client crashes on long SELECT
- fixed the client to check for older servers (without the fix).
into mockturtle.local:/home/dlenev/src/mysql-5.1-merge
mysql-test/r/trigger.result:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/item_func.cc:
Auto merged
stored function invoked from different connections".
Invocation of trigger which was using stored function from different
connections caused server crashes (for non-debug server this happened
in highly concurrent environment, but debug server failed on assertion
in relatively simple scenario).
Item_func_sp was not safe to use in triggers (in other words for
re-execution from different threads) as artificial TABLE object
pointed by Item_func_sp::dummy_table referenced incorrect THD
object. To fix the problem we force re-initialization of this
object for each re-execution of statement.
mysql-test/r/trigger.result:
Added test for bug#23651 "Server crashes when trigger which uses
stored function invoked from different connections".
mysql-test/t/trigger.test:
Added test for bug#23651 "Server crashes when trigger which uses
stored function invoked from different connections".
sql/item_func.cc:
To make Item_func_sp safe for usage in triggers (in other words safe
for re-execution in different threads) we need to ensure that artificial
TABLE object pointed by Item_func_sp::dummy_table references correct
THD object. To achieve this we simply force its re-initialization for
each re-execution of statement.
libmysqld/examples/test-run:
mysql_embedded should be run here
libmysqld/lib_sql.cc:
thd->real_id setup added
bootstrap check added
mysql-test/t/innodb.test:
paths can be different in embedded server - replace_result added
sql/item_func.cc:
we should compare real_id-s in embedded server
into chilla.local:/home/mydev/mysql-5.1-axmrg
BitKeeper/deleted/.del-CMakeLists.txt~1:
Auto merged
BitKeeper/deleted/.del-make_win_bin_dist:
Auto merged
configure.in:
Auto merged
include/mysql.h:
Auto merged
libmysqld/lib_sql.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_plugin.cc:
Auto merged
into bodhi.local:/opt/local/work/mysql-5.1-runtime
configure.in:
Auto merged
include/my_time.h:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/rename.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
mysql-test/t/im_daemon_life_cycle.imtest:
Auto merged
mysql-test/t/rename.test:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/time.cc:
Auto merged
sql-common/my_time.c:
Auto merged
into bodhi.local:/opt/local/work/mysql-5.0-runtime
configure.in:
Auto merged
include/my_time.h:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/rename.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
mysql-test/t/im_daemon_life_cycle.imtest:
Auto merged
sql-common/my_time.c:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/time.cc:
Auto merged
mysql-test/t/rename.test:
Use local (resolve a conflict)
into trift2.:/MySQL/M51/push-5.1
BitKeeper/deleted/.del-gcc.cpp~3d2e013cfac48838:
Auto merged
configure.in:
Auto merged
include/my_time.h:
Auto merged
mysql-test/install_test_db.sh:
Auto merged
mysql-test/mysql-test-run-shell.sh:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/rename.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
mysql-test/t/rename.test:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql-common/my_time.c:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/time.cc:
Auto merged
storage/myisam/sort.c:
Auto merged
into trift2.:/MySQL/M50/push-5.0
BitKeeper/deleted/.del-gcc.cpp~3d2e013cfac48838:
Auto merged
configure.in:
Auto merged
include/my_time.h:
Auto merged
mysql-test/install_test_db.sh:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/rename.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
mysql-test/t/rename.test:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql-common/my_time.c:
Auto merged
sql/time.cc:
Auto merged
myisam/sort.c:
Manual merge: "use local" (= 5.0 version).
mysql-test/mysql-test-run.pl:
Manual merge, part of the fix for bug#17194.
- Add printout of "Warning" or "Note" for non error messages in default_reporter
- Add test for the above in new mysqladmin.test
mysql-test/mysql-test-run.pl:
Add support for mysqladmin to mysql-test-run.pl
mysys/my_getopt.c:
Add printout of Warning: or Info: in 'default_reporter', this
will make the user aware of the problem but can filter it
as a warning or note.
mysql-test/r/mysqladmin.result:
New BitKeeper file ``mysql-test/r/mysqladmin.result''
mysql-test/t/mysqladmin.test:
New BitKeeper file ``mysql-test/t/mysqladmin.test''
into outpost.site:/home/cps/mysql/trees/4.1-runtime-bug9191
configure.in:
Auto merged
include/my_time.h:
Auto merged
mysql-test/r/func_time.result:
Auto merged
mysql-test/r/rename.result:
Auto merged
mysql-test/t/func_time.test:
Auto merged
sql-common/my_time.c:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/time.cc:
Auto merged
mysql-test/t/rename.test:
choose one of the race problem solutions. It was solved
differently in -runtime and mainstream
into mysql.com:/windows/Linux_space/MySQL/mysql-5.1-new-ndb
client/mysqldump.c:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/sql_show.cc:
Auto merged
storage/ndb/src/ndbapi/NdbTransaction.cpp:
Auto merged
sql/sql_class.h:
Fixed indentation
into mysql.com:/windows/Linux_space/MySQL/mysql-5.1
mysql-test/t/ndb_index_unique.test:
Auto merged
mysql-test/r/ndb_index_unique.result:
Using local
will re-generate
sql/ha_ndbcluster.cc:
Using local
will merge manually
sql/ha_ndbcluster.h:
Using local
will merge manually
specifying DEFAULT
This was not specific to datetime. When there is no default value
for a column, and the user inserted DEFAULT, we would write
uninitialized memory to the table.
Now, insist on writing a default value, a zero-ish value, the same
one that comes from inserting NULL into a not-NULL field.
(This is, at best, really strange behavior that comes from allowing
sloppy usage, and serves as a good reason always to run one's server
in a strict SQL mode.)
mysql-test/r/default.result:
Verify that all kinds of types work, even others other than datetime.
mysql-test/t/default.test:
Verify that all kinds of types work, even others other than datetime.
sql/item.cc:
Even if we warn that there is no default value in the table definition,
we have to insert /something/.
When compiling GROUP BY Item_ref instances are dereferenced in
setup_copy_fields(), i.e. replaced with the corresponding Item_field
(if they point to one) or Item_copy_string for the other cases.
Since the Item_ref (in the Item_field case) is no longer used the information
about the aliases stored in it is lost.
Fixed by preserving the column, table and DB alias on dereferencing Item_ref
mysql-test/r/metadata.result:
Bug #20191: getTableName gives wrong or inconsistent result when using VIEWs
- test case
mysql-test/t/metadata.test:
Bug #20191: getTableName gives wrong or inconsistent result when using VIEWs
- test case
sql/item.cc:
Bug #20191: getTableName gives wrong or inconsistent result when using VIEWs
- use the table and db name to fill up the metadata for columns
sql/sql_select.cc:
Bug #20191: getTableName gives wrong or inconsistent result when using VIEWs
- preserve the field, table and DB name on dereferencing an Item_ref
As get_arg0_date() in the Item_func_last_day::get_date() returns
0000-00-00 date sometimes, we have to check ltime->month for 0 after the call.
mysql-test/r/func_time.result:
Fix for bug #23653: Crash if last_day('0000-00-00')
- test result.
mysql-test/t/func_time.test:
Fix for bug #23653: Crash if last_day('0000-00-00')
- test case.
sql/item_timefunc.cc:
Fix for bug #23653: Crash if last_day('0000-00-00')
- return error if month is 0.
into mysql.com:/home/hf/work/8663/my51-8663
mysql-test/r/type_newdecimal.result:
Auto merged
mysql-test/t/type_newdecimal.test:
Auto merged
sql/item_func.cc:
Auto merged