Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
3f6de6c5
Commit
3f6de6c5
authored
Jul 13, 2006
by
andrey@lmy004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update to ease the patch process
parent
9eee0ee4
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1523 additions
and
418 deletions
+1523
-418
.bzrignore
.bzrignore
+1103
-0
sql/Makefile.am
sql/Makefile.am
+3
-3
sql/event_data_objects.cc
sql/event_data_objects.cc
+165
-159
sql/event_queue.cc
sql/event_queue.cc
+20
-20
sql/event_queue.h
sql/event_queue.h
+1
-3
sql/event_scheduler.cc
sql/event_scheduler.cc
+230
-232
sql/event_scheduler.h
sql/event_scheduler.h
+1
-1
No files found.
.bzrignore
View file @
3f6de6c5
...
@@ -1785,3 +1785,1106 @@ vio/viotest-sslconnect.cpp
...
@@ -1785,3 +1785,1106 @@ vio/viotest-sslconnect.cpp
vio/viotest.cpp
vio/viotest.cpp
zlib/*.ds?
zlib/*.ds?
zlib/*.vcproj
zlib/*.vcproj
sql/.deps/client.Po
sql/.deps/derror.Po
sql/.deps/des_key_file.Po
sql/.deps/discover.Po
sql/.deps/event_data_objects.Po
sql/.deps/event_db_repository.Po
sql/.deps/event_queue.Po
sql/.deps/event_scheduler.Po
sql/.deps/events.Po
sql/.deps/field.Po
sql/.deps/field_conv.Po
sql/.deps/filesort.Po
sql/.deps/gen_lex_hash.Po
sql/.deps/gstream.Po
sql/.deps/ha_berkeley.Po
sql/.deps/ha_federated.Po
sql/.deps/ha_heap.Po
sql/.deps/ha_innodb.Po
sql/.deps/ha_myisam.Po
sql/.deps/ha_myisammrg.Po
sql/.deps/ha_ndbcluster.Po
sql/.deps/ha_ndbcluster_binlog.Po
sql/.deps/ha_partition.Po
sql/.deps/handler.Po
sql/.deps/hash_filo.Po
sql/.deps/hostname.Po
sql/.deps/init.Po
sql/.deps/item.Po
sql/.deps/item_buff.Po
sql/.deps/item_cmpfunc.Po
sql/.deps/item_create.Po
sql/.deps/item_func.Po
sql/.deps/item_geofunc.Po
sql/.deps/item_row.Po
sql/.deps/item_strfunc.Po
sql/.deps/item_subselect.Po
sql/.deps/item_sum.Po
sql/.deps/item_timefunc.Po
sql/.deps/item_uniq.Po
sql/.deps/item_xmlfunc.Po
sql/.deps/key.Po
sql/.deps/lock.Po
sql/.deps/log.Po
sql/.deps/log_event.Po
sql/.deps/mf_iocache.Po
sql/.deps/mini_client_errors.Po
sql/.deps/my_decimal.Po
sql/.deps/my_lock.Po
sql/.deps/my_time.Po
sql/.deps/my_user.Po
sql/.deps/mysql_tzinfo_to_sql.Po
sql/.deps/mysqld.Po
sql/.deps/net_serv.Po
sql/.deps/opt_range.Po
sql/.deps/opt_sum.Po
sql/.deps/pack.Po
sql/.deps/parse_file.Po
sql/.deps/partition_info.Po
sql/.deps/password.Po
sql/.deps/procedure.Po
sql/.deps/protocol.Po
sql/.deps/records.Po
sql/.deps/repl_failsafe.Po
sql/.deps/rpl_filter.Po
sql/.deps/rpl_injector.Po
sql/.deps/rpl_tblmap.Po
sql/.deps/set_var.Po
sql/.deps/slave.Po
sql/.deps/sp.Po
sql/.deps/sp_cache.Po
sql/.deps/sp_head.Po
sql/.deps/sp_pcontext.Po
sql/.deps/sp_rcontext.Po
sql/.deps/spatial.Po
sql/.deps/sql_acl.Po
sql/.deps/sql_analyse.Po
sql/.deps/sql_base.Po
sql/.deps/sql_binlog.Po
sql/.deps/sql_builtin.Po
sql/.deps/sql_cache.Po
sql/.deps/sql_class.Po
sql/.deps/sql_client.Po
sql/.deps/sql_crypt.Po
sql/.deps/sql_cursor.Po
sql/.deps/sql_db.Po
sql/.deps/sql_delete.Po
sql/.deps/sql_derived.Po
sql/.deps/sql_do.Po
sql/.deps/sql_error.Po
sql/.deps/sql_handler.Po
sql/.deps/sql_help.Po
sql/.deps/sql_insert.Po
sql/.deps/sql_lex.Po
sql/.deps/sql_list.Po
sql/.deps/sql_load.Po
sql/.deps/sql_manager.Po
sql/.deps/sql_map.Po
sql/.deps/sql_olap.Po
sql/.deps/sql_parse.Po
sql/.deps/sql_partition.Po
sql/.deps/sql_plugin.Po
sql/.deps/sql_prepare.Po
sql/.deps/sql_rename.Po
sql/.deps/sql_repl.Po
sql/.deps/sql_select.Po
sql/.deps/sql_show.Po
sql/.deps/sql_state.Po
sql/.deps/sql_string.Po
sql/.deps/sql_table.Po
sql/.deps/sql_tablespace.Po
sql/.deps/sql_test.Po
sql/.deps/sql_trigger.Po
sql/.deps/sql_udf.Po
sql/.deps/sql_union.Po
sql/.deps/sql_update.Po
sql/.deps/sql_view.Po
sql/.deps/sql_yacc.Po
sql/.deps/stacktrace.Po
sql/.deps/strfunc.Po
sql/.deps/table.Po
sql/.deps/thr_malloc.Po
sql/.deps/time.Po
sql/.deps/tztime.Po
sql/.deps/udf_example.Plo
sql/.deps/uniques.Po
sql/.deps/unireg.Po
sql/.libs/udf_example.lai
sql/.libs/udf_example.so.0
sql/.libs/udf_example.so.0.0.0
storage/archive/.deps/archive_test-archive_test.Po
storage/archive/.deps/archive_test-azio.Po
storage/archive/.deps/ha_archive_la-azio.Plo
storage/archive/.deps/ha_archive_la-ha_archive.Plo
storage/archive/.deps/libarchive_a-azio.Po
storage/archive/.deps/libarchive_a-ha_archive.Po
storage/blackhole/.deps/ha_blackhole_la-ha_blackhole.Plo
storage/blackhole/.deps/libblackhole_a-ha_blackhole.Po
storage/csv/.deps/ha_csv_la-ha_tina.Plo
storage/csv/.deps/libcsv_a-ha_tina.Po
storage/example/.deps/ha_example_la-ha_example.Plo
storage/example/.deps/libexample_a-ha_example.Po
storage/heap/.deps/_check.Po
storage/heap/.deps/_rectest.Po
storage/heap/.deps/hp_block.Po
storage/heap/.deps/hp_clear.Po
storage/heap/.deps/hp_close.Po
storage/heap/.deps/hp_create.Po
storage/heap/.deps/hp_delete.Po
storage/heap/.deps/hp_extra.Po
storage/heap/.deps/hp_hash.Po
storage/heap/.deps/hp_info.Po
storage/heap/.deps/hp_open.Po
storage/heap/.deps/hp_panic.Po
storage/heap/.deps/hp_rename.Po
storage/heap/.deps/hp_rfirst.Po
storage/heap/.deps/hp_rkey.Po
storage/heap/.deps/hp_rlast.Po
storage/heap/.deps/hp_rnext.Po
storage/heap/.deps/hp_rprev.Po
storage/heap/.deps/hp_rrnd.Po
storage/heap/.deps/hp_rsame.Po
storage/heap/.deps/hp_scan.Po
storage/heap/.deps/hp_static.Po
storage/heap/.deps/hp_test1.Po
storage/heap/.deps/hp_test2.Po
storage/heap/.deps/hp_update.Po
storage/heap/.deps/hp_write.Po
storage/innobase/btr/.deps/btr0btr.Po
storage/innobase/btr/.deps/btr0cur.Po
storage/innobase/btr/.deps/btr0pcur.Po
storage/innobase/btr/.deps/btr0sea.Po
storage/innobase/buf/.deps/buf0buf.Po
storage/innobase/buf/.deps/buf0flu.Po
storage/innobase/buf/.deps/buf0lru.Po
storage/innobase/buf/.deps/buf0rea.Po
storage/innobase/data/.deps/data0data.Po
storage/innobase/data/.deps/data0type.Po
storage/innobase/dict/.deps/dict0boot.Po
storage/innobase/dict/.deps/dict0crea.Po
storage/innobase/dict/.deps/dict0dict.Po
storage/innobase/dict/.deps/dict0load.Po
storage/innobase/dict/.deps/dict0mem.Po
storage/innobase/dyn/.deps/dyn0dyn.Po
storage/innobase/eval/.deps/eval0eval.Po
storage/innobase/eval/.deps/eval0proc.Po
storage/innobase/fil/.deps/fil0fil.Po
storage/innobase/fsp/.deps/fsp0fsp.Po
storage/innobase/fut/.deps/fut0fut.Po
storage/innobase/fut/.deps/fut0lst.Po
storage/innobase/ha/.deps/ha0ha.Po
storage/innobase/ha/.deps/hash0hash.Po
storage/innobase/ibuf/.deps/ibuf0ibuf.Po
storage/innobase/lock/.deps/lock0lock.Po
storage/innobase/log/.deps/log0log.Po
storage/innobase/log/.deps/log0recv.Po
storage/innobase/mach/.deps/mach0data.Po
storage/innobase/mem/.deps/mem0mem.Po
storage/innobase/mem/.deps/mem0pool.Po
storage/innobase/mtr/.deps/mtr0log.Po
storage/innobase/mtr/.deps/mtr0mtr.Po
storage/innobase/os/.deps/os0file.Po
storage/innobase/os/.deps/os0proc.Po
storage/innobase/os/.deps/os0sync.Po
storage/innobase/os/.deps/os0thread.Po
storage/innobase/page/.deps/page0cur.Po
storage/innobase/page/.deps/page0page.Po
storage/innobase/pars/.deps/lexyy.Po
storage/innobase/pars/.deps/pars0grm.Po
storage/innobase/pars/.deps/pars0opt.Po
storage/innobase/pars/.deps/pars0pars.Po
storage/innobase/pars/.deps/pars0sym.Po
storage/innobase/que/.deps/que0que.Po
storage/innobase/read/.deps/read0read.Po
storage/innobase/rem/.deps/rem0cmp.Po
storage/innobase/rem/.deps/rem0rec.Po
storage/innobase/row/.deps/row0ins.Po
storage/innobase/row/.deps/row0mysql.Po
storage/innobase/row/.deps/row0purge.Po
storage/innobase/row/.deps/row0row.Po
storage/innobase/row/.deps/row0sel.Po
storage/innobase/row/.deps/row0uins.Po
storage/innobase/row/.deps/row0umod.Po
storage/innobase/row/.deps/row0undo.Po
storage/innobase/row/.deps/row0upd.Po
storage/innobase/row/.deps/row0vers.Po
storage/innobase/srv/.deps/srv0que.Po
storage/innobase/srv/.deps/srv0srv.Po
storage/innobase/srv/.deps/srv0start.Po
storage/innobase/sync/.deps/sync0arr.Po
storage/innobase/sync/.deps/sync0rw.Po
storage/innobase/sync/.deps/sync0sync.Po
storage/innobase/thr/.deps/thr0loc.Po
storage/innobase/trx/.deps/trx0purge.Po
storage/innobase/trx/.deps/trx0rec.Po
storage/innobase/trx/.deps/trx0roll.Po
storage/innobase/trx/.deps/trx0rseg.Po
storage/innobase/trx/.deps/trx0sys.Po
storage/innobase/trx/.deps/trx0trx.Po
storage/innobase/trx/.deps/trx0undo.Po
storage/innobase/usr/.deps/usr0sess.Po
storage/innobase/ut/.deps/ut0byte.Po
storage/innobase/ut/.deps/ut0dbg.Po
storage/innobase/ut/.deps/ut0list.Po
storage/innobase/ut/.deps/ut0mem.Po
storage/innobase/ut/.deps/ut0rnd.Po
storage/innobase/ut/.deps/ut0ut.Po
storage/innobase/ut/.deps/ut0vec.Po
storage/innobase/ut/.deps/ut0wqueue.Po
storage/myisam/.deps/ft_boolean_search.Po
storage/myisam/.deps/ft_nlq_search.Po
storage/myisam/.deps/ft_parser.Po
storage/myisam/.deps/ft_static.Po
storage/myisam/.deps/ft_stopwords.Po
storage/myisam/.deps/ft_update.Po
storage/myisam/.deps/mi_cache.Po
storage/myisam/.deps/mi_changed.Po
storage/myisam/.deps/mi_check.Po
storage/myisam/.deps/mi_checksum.Po
storage/myisam/.deps/mi_close.Po
storage/myisam/.deps/mi_create.Po
storage/myisam/.deps/mi_dbug.Po
storage/myisam/.deps/mi_delete.Po
storage/myisam/.deps/mi_delete_all.Po
storage/myisam/.deps/mi_delete_table.Po
storage/myisam/.deps/mi_dynrec.Po
storage/myisam/.deps/mi_extra.Po
storage/myisam/.deps/mi_info.Po
storage/myisam/.deps/mi_key.Po
storage/myisam/.deps/mi_keycache.Po
storage/myisam/.deps/mi_locking.Po
storage/myisam/.deps/mi_log.Po
storage/myisam/.deps/mi_open.Po
storage/myisam/.deps/mi_packrec.Po
storage/myisam/.deps/mi_page.Po
storage/myisam/.deps/mi_panic.Po
storage/myisam/.deps/mi_preload.Po
storage/myisam/.deps/mi_range.Po
storage/myisam/.deps/mi_rename.Po
storage/myisam/.deps/mi_rfirst.Po
storage/myisam/.deps/mi_rkey.Po
storage/myisam/.deps/mi_rlast.Po
storage/myisam/.deps/mi_rnext.Po
storage/myisam/.deps/mi_rnext_same.Po
storage/myisam/.deps/mi_rprev.Po
storage/myisam/.deps/mi_rrnd.Po
storage/myisam/.deps/mi_rsame.Po
storage/myisam/.deps/mi_rsamepos.Po
storage/myisam/.deps/mi_scan.Po
storage/myisam/.deps/mi_search.Po
storage/myisam/.deps/mi_static.Po
storage/myisam/.deps/mi_statrec.Po
storage/myisam/.deps/mi_test1.Po
storage/myisam/.deps/mi_test2.Po
storage/myisam/.deps/mi_test3.Po
storage/myisam/.deps/mi_unique.Po
storage/myisam/.deps/mi_update.Po
storage/myisam/.deps/mi_write.Po
storage/myisam/.deps/myisam_ftdump.Po
storage/myisam/.deps/myisamchk.Po
storage/myisam/.deps/myisamlog.Po
storage/myisam/.deps/myisampack.Po
storage/myisam/.deps/rt_index.Po
storage/myisam/.deps/rt_key.Po
storage/myisam/.deps/rt_mbr.Po
storage/myisam/.deps/rt_split.Po
storage/myisam/.deps/rt_test.Po
storage/myisam/.deps/sort.Po
storage/myisam/.deps/sp_key.Po
storage/myisam/.deps/sp_test.Po
storage/myisammrg/.deps/myrg_close.Po
storage/myisammrg/.deps/myrg_create.Po
storage/myisammrg/.deps/myrg_delete.Po
storage/myisammrg/.deps/myrg_extra.Po
storage/myisammrg/.deps/myrg_info.Po
storage/myisammrg/.deps/myrg_locking.Po
storage/myisammrg/.deps/myrg_open.Po
storage/myisammrg/.deps/myrg_panic.Po
storage/myisammrg/.deps/myrg_queue.Po
storage/myisammrg/.deps/myrg_range.Po
storage/myisammrg/.deps/myrg_rfirst.Po
storage/myisammrg/.deps/myrg_rkey.Po
storage/myisammrg/.deps/myrg_rlast.Po
storage/myisammrg/.deps/myrg_rnext.Po
storage/myisammrg/.deps/myrg_rnext_same.Po
storage/myisammrg/.deps/myrg_rprev.Po
storage/myisammrg/.deps/myrg_rrnd.Po
storage/myisammrg/.deps/myrg_rsame.Po
storage/myisammrg/.deps/myrg_static.Po
storage/myisammrg/.deps/myrg_update.Po
storage/myisammrg/.deps/myrg_write.Po
strings/.deps/bchange.Po
strings/.deps/bcmp.Po
strings/.deps/bfill.Po
strings/.deps/bmove.Po
strings/.deps/bmove512.Po
strings/.deps/bmove_upp.Po
strings/.deps/conf_to_src.Po
strings/.deps/ctype-big5.Po
strings/.deps/ctype-bin.Po
strings/.deps/ctype-cp932.Po
strings/.deps/ctype-czech.Po
strings/.deps/ctype-euc_kr.Po
strings/.deps/ctype-eucjpms.Po
strings/.deps/ctype-extra.Po
strings/.deps/ctype-gb2312.Po
strings/.deps/ctype-gbk.Po
strings/.deps/ctype-latin1.Po
strings/.deps/ctype-mb.Po
strings/.deps/ctype-simple.Po
strings/.deps/ctype-sjis.Po
strings/.deps/ctype-tis620.Po
strings/.deps/ctype-uca.Po
strings/.deps/ctype-ucs2.Po
strings/.deps/ctype-ujis.Po
strings/.deps/ctype-utf8.Po
strings/.deps/ctype-win1250ch.Po
strings/.deps/ctype.Po
strings/.deps/decimal.Po
strings/.deps/int2str.Po
strings/.deps/is_prefix.Po
strings/.deps/llstr.Po
strings/.deps/longlong2str.Po
strings/.deps/longlong2str_asm.Po
strings/.deps/my_strchr.Po
strings/.deps/my_strtoll10.Po
strings/.deps/my_vsnprintf.Po
strings/.deps/r_strinstr.Po
strings/.deps/str2int.Po
strings/.deps/str_alloc.Po
strings/.deps/strappend.Po
strings/.deps/strcend.Po
strings/.deps/strcont.Po
strings/.deps/strend.Po
strings/.deps/strfill.Po
strings/.deps/strinstr.Po
strings/.deps/strmake.Po
strings/.deps/strmov.Po
strings/.deps/strnlen.Po
strings/.deps/strnmov.Po
strings/.deps/strstr.Po
strings/.deps/strtod.Po
strings/.deps/strtol.Po
strings/.deps/strtoll.Po
strings/.deps/strtoul.Po
strings/.deps/strtoull.Po
strings/.deps/strxmov.Po
strings/.deps/strxnmov.Po
strings/.deps/xml.Po
tests/.deps/dummy.Po
tests/.deps/insert_test.Po
tests/.deps/mysql_client_test.Po
tests/.deps/select_test.Po
tests/.deps/thread_test.Po
tests/.libs/lt-mysql_client_test
tests/.libs/mysql_client_test
unittest/examples/.deps/no_plan-t.Po
unittest/examples/.deps/simple-t.Po
unittest/examples/.deps/skip-t.Po
unittest/examples/.deps/skip_all-t.Po
unittest/examples/.deps/todo-t.Po
unittest/mysys/.deps/base64-t.Po
unittest/mysys/.deps/bitmap-t.Po
unittest/mysys/.deps/my_atomic-t.Po
unittest/mytap/t/.deps/basic-t.Po
unittest/mytap/.deps/tap.Po
vio/.deps/dummy.Po
vio/.deps/test-ssl.Po
vio/.deps/test-sslclient.Po
vio/.deps/test-sslserver.Po
vio/.deps/vio.Po
vio/.deps/viosocket.Po
vio/.deps/viossl.Po
vio/.deps/viosslfactories.Po
client/.deps/base64.Po
client/.deps/completion_hash.Po
client/.deps/dummy.Po
client/.deps/mf_tempdir.Po
client/.deps/my_bit.Po
client/.deps/my_bitmap.Po
client/.deps/my_getsystime.Po
client/.deps/my_new.Po
client/.deps/my_user.Po
client/.deps/my_vle.Po
client/.deps/mysql.Po
client/.deps/mysql_upgrade.Po
client/.deps/mysqladmin.Po
client/.deps/mysqlbinlog.Po
client/.deps/mysqlcheck.Po
client/.deps/mysqldump.Po
client/.deps/mysqlimport.Po
client/.deps/mysqlshow.Po
client/.deps/mysqlslap.Po
client/.deps/mysqltest.Po
client/.deps/readline.Po
client/.deps/sql_string.Po
client/.libs/lt-mysql
client/.libs/lt-mysqladmin
client/.libs/lt-mysqlbinlog
client/.libs/lt-mysqlcheck
client/.libs/lt-mysqldump
client/.libs/lt-mysqlimport
client/.libs/lt-mysqlshow
client/.libs/lt-mysqlslap
client/.libs/lt-mysqltest
client/.libs/mysql
client/.libs/mysql_upgrade
client/.libs/mysqladmin
client/.libs/mysqlbinlog
client/.libs/mysqlcheck
client/.libs/mysqldump
client/.libs/mysqlimport
client/.libs/mysqlshow
client/.libs/mysqlslap
client/.libs/mysqltest
cmd-line-utils/libedit/.deps/chared.Po
cmd-line-utils/libedit/.deps/common.Po
cmd-line-utils/libedit/.deps/el.Po
cmd-line-utils/libedit/.deps/emacs.Po
cmd-line-utils/libedit/.deps/fcns.Po
cmd-line-utils/libedit/.deps/fgetln.Po
cmd-line-utils/libedit/.deps/help.Po
cmd-line-utils/libedit/.deps/hist.Po
cmd-line-utils/libedit/.deps/history.Po
cmd-line-utils/libedit/.deps/key.Po
cmd-line-utils/libedit/.deps/map.Po
cmd-line-utils/libedit/.deps/parse.Po
cmd-line-utils/libedit/.deps/prompt.Po
cmd-line-utils/libedit/.deps/read.Po
cmd-line-utils/libedit/.deps/readline.Po
cmd-line-utils/libedit/.deps/refresh.Po
cmd-line-utils/libedit/.deps/search.Po
cmd-line-utils/libedit/.deps/sig.Po
cmd-line-utils/libedit/.deps/strlcat.Po
cmd-line-utils/libedit/.deps/strlcpy.Po
cmd-line-utils/libedit/.deps/term.Po
cmd-line-utils/libedit/.deps/tokenizer.Po
cmd-line-utils/libedit/.deps/tty.Po
cmd-line-utils/libedit/.deps/unvis.Po
cmd-line-utils/libedit/.deps/vi.Po
cmd-line-utils/libedit/.deps/vis.Po
cmd-line-utils/readline/.deps/bind.Po
cmd-line-utils/readline/.deps/callback.Po
cmd-line-utils/readline/.deps/compat.Po
cmd-line-utils/readline/.deps/complete.Po
cmd-line-utils/readline/.deps/display.Po
cmd-line-utils/readline/.deps/funmap.Po
cmd-line-utils/readline/.deps/histexpand.Po
cmd-line-utils/readline/.deps/histfile.Po
cmd-line-utils/readline/.deps/history.Po
cmd-line-utils/readline/.deps/histsearch.Po
cmd-line-utils/readline/.deps/input.Po
cmd-line-utils/readline/.deps/isearch.Po
cmd-line-utils/readline/.deps/keymaps.Po
cmd-line-utils/readline/.deps/kill.Po
cmd-line-utils/readline/.deps/macro.Po
cmd-line-utils/readline/.deps/mbutil.Po
cmd-line-utils/readline/.deps/misc.Po
cmd-line-utils/readline/.deps/nls.Po
cmd-line-utils/readline/.deps/parens.Po
cmd-line-utils/readline/.deps/readline.Po
cmd-line-utils/readline/.deps/rltty.Po
cmd-line-utils/readline/.deps/savestring.Po
cmd-line-utils/readline/.deps/search.Po
cmd-line-utils/readline/.deps/shell.Po
cmd-line-utils/readline/.deps/signals.Po
cmd-line-utils/readline/.deps/terminal.Po
cmd-line-utils/readline/.deps/text.Po
cmd-line-utils/readline/.deps/tilde.Po
cmd-line-utils/readline/.deps/undo.Po
cmd-line-utils/readline/.deps/util.Po
cmd-line-utils/readline/.deps/vi_mode.Po
cmd-line-utils/readline/.deps/xmalloc.Po
dbug/.deps/dbug.Po
dbug/.deps/dbug_analyze.Po
dbug/.deps/factorial.Po
dbug/.deps/my_main.Po
dbug/.deps/sanity.Po
extra/yassl/src/.deps/buffer.Plo
extra/yassl/src/.deps/cert_wrapper.Plo
extra/yassl/src/.deps/crypto_wrapper.Plo
extra/yassl/src/.deps/handshake.Plo
extra/yassl/src/.deps/lock.Plo
extra/yassl/src/.deps/log.Plo
extra/yassl/src/.deps/socket_wrapper.Plo
extra/yassl/src/.deps/ssl.Plo
extra/yassl/src/.deps/template_instnt.Plo
extra/yassl/src/.deps/timer.Plo
extra/yassl/src/.deps/yassl_error.Plo
extra/yassl/src/.deps/yassl_imp.Plo
extra/yassl/src/.deps/yassl_int.Plo
extra/yassl/taocrypt/benchmark/.deps/benchmark-benchmark.Po
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aes.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-aestables.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-algebra.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-arc4.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-asn.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-bftables.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-blowfish.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-coding.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-des.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dh.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-dsa.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-file.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-hash.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-integer.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md2.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md4.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-md5.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-misc.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-random.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-ripemd.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-rsa.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-sha.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-template_instnt.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-tftables.Plo
extra/yassl/taocrypt/src/.deps/libtaocrypt_la-twofish.Plo
extra/yassl/taocrypt/test/.deps/test-test.Po
extra/yassl/testsuite/.deps/testsuite-client.Po
extra/yassl/testsuite/.deps/testsuite-echoclient.Po
extra/yassl/testsuite/.deps/testsuite-echoserver.Po
extra/yassl/testsuite/.deps/testsuite-server.Po
extra/yassl/testsuite/.deps/testsuite-test.Po
extra/yassl/testsuite/.deps/testsuite-testsuite.Po
extra/.deps/charset2html.Po
extra/.deps/comp_err.Po
extra/.deps/innochecksum.Po
extra/.deps/my_print_defaults.Po
extra/.deps/mysql_waitpid.Po
extra/.deps/perror.Po
extra/.deps/replace.Po
extra/.deps/resolve_stack_dump.Po
extra/.deps/resolveip.Po
libmysql/.deps/array.Plo
libmysql/.deps/bchange.Plo
libmysql/.deps/bcmp.Plo
libmysql/.deps/bmove.Plo
libmysql/.deps/bmove_upp.Plo
libmysql/.deps/charset-def.Plo
libmysql/.deps/charset.Plo
libmysql/.deps/client.Plo
libmysql/.deps/conf_to_src.Po
libmysql/.deps/ctype-big5.Plo
libmysql/.deps/ctype-bin.Plo
libmysql/.deps/ctype-cp932.Plo
libmysql/.deps/ctype-czech.Plo
libmysql/.deps/ctype-euc_kr.Plo
libmysql/.deps/ctype-eucjpms.Plo
libmysql/.deps/ctype-extra.Plo
libmysql/.deps/ctype-gb2312.Plo
libmysql/.deps/ctype-gbk.Plo
libmysql/.deps/ctype-latin1.Plo
libmysql/.deps/ctype-mb.Plo
libmysql/.deps/ctype-simple.Plo
libmysql/.deps/ctype-sjis.Plo
libmysql/.deps/ctype-tis620.Plo
libmysql/.deps/ctype-uca.Plo
libmysql/.deps/ctype-ucs2.Plo
libmysql/.deps/ctype-ujis.Plo
libmysql/.deps/ctype-utf8.Plo
libmysql/.deps/ctype-win1250ch.Plo
libmysql/.deps/ctype.Plo
libmysql/.deps/dbug.Plo
libmysql/.deps/default.Plo
libmysql/.deps/default_modify.Plo
libmysql/.deps/errmsg.Plo
libmysql/.deps/errors.Plo
libmysql/.deps/get_password.Plo
libmysql/.deps/hash.Plo
libmysql/.deps/int2str.Plo
libmysql/.deps/is_prefix.Plo
libmysql/.deps/libmysql.Plo
libmysql/.deps/list.Plo
libmysql/.deps/llstr.Plo
libmysql/.deps/longlong2str.Plo
libmysql/.deps/manager.Plo
libmysql/.deps/md5.Plo
libmysql/.deps/mf_cache.Plo
libmysql/.deps/mf_dirname.Plo
libmysql/.deps/mf_fn_ext.Plo
libmysql/.deps/mf_format.Plo
libmysql/.deps/mf_iocache.Plo
libmysql/.deps/mf_iocache2.Plo
libmysql/.deps/mf_loadpath.Plo
libmysql/.deps/mf_pack.Plo
libmysql/.deps/mf_path.Plo
libmysql/.deps/mf_tempfile.Plo
libmysql/.deps/mf_unixpath.Plo
libmysql/.deps/mf_wcomp.Plo
libmysql/.deps/mulalloc.Plo
libmysql/.deps/my_alloc.Plo
libmysql/.deps/my_chsize.Plo
libmysql/.deps/my_compress.Plo
libmysql/.deps/my_create.Plo
libmysql/.deps/my_delete.Plo
libmysql/.deps/my_div.Plo
libmysql/.deps/my_error.Plo
libmysql/.deps/my_file.Plo
libmysql/.deps/my_fopen.Plo
libmysql/.deps/my_fstream.Plo
libmysql/.deps/my_gethostbyname.Plo
libmysql/.deps/my_getopt.Plo
libmysql/.deps/my_getwd.Plo
libmysql/.deps/my_init.Plo
libmysql/.deps/my_lib.Plo
libmysql/.deps/my_malloc.Plo
libmysql/.deps/my_messnc.Plo
libmysql/.deps/my_net.Plo
libmysql/.deps/my_once.Plo
libmysql/.deps/my_open.Plo
libmysql/.deps/my_port.Plo
libmysql/.deps/my_pread.Plo
libmysql/.deps/my_pthread.Plo
libmysql/.deps/my_read.Plo
libmysql/.deps/my_realloc.Plo
libmysql/.deps/my_rename.Plo
libmysql/.deps/my_seek.Plo
libmysql/.deps/my_sleep.Plo
libmysql/.deps/my_static.Plo
libmysql/.deps/my_strtoll10.Plo
libmysql/.deps/my_symlink.Plo
libmysql/.deps/my_thr_init.Plo
libmysql/.deps/my_time.Plo
libmysql/.deps/my_vsnprintf.Plo
libmysql/.deps/my_write.Plo
libmysql/.deps/net.Plo
libmysql/.deps/pack.Plo
libmysql/.deps/password.Plo
libmysql/.deps/safemalloc.Plo
libmysql/.deps/sha1.Plo
libmysql/.deps/str2int.Plo
libmysql/.deps/str_alloc.Plo
libmysql/.deps/strcend.Plo
libmysql/.deps/strcont.Plo
libmysql/.deps/strend.Plo
libmysql/.deps/strfill.Plo
libmysql/.deps/string.Plo
libmysql/.deps/strinstr.Plo
libmysql/.deps/strmake.Plo
libmysql/.deps/strmov.Plo
libmysql/.deps/strnlen.Plo
libmysql/.deps/strnmov.Plo
libmysql/.deps/strtod.Plo
libmysql/.deps/strtoll.Plo
libmysql/.deps/strtoull.Plo
libmysql/.deps/strxmov.Plo
libmysql/.deps/strxnmov.Plo
libmysql/.deps/thr_mutex.Plo
libmysql/.deps/typelib.Plo
libmysql/.deps/vio.Plo
libmysql/.deps/viosocket.Plo
libmysql/.deps/viossl.Plo
libmysql/.deps/viosslfactories.Plo
libmysql/.deps/xml.Plo
libmysql/.libs/libmysqlclient.lai
libmysql/.libs/libmysqlclient.so.15
libmysql/.libs/libmysqlclient.so.15.0.0
libmysql_r/.deps/array.Plo
libmysql_r/.deps/bchange.Plo
libmysql_r/.deps/bcmp.Plo
libmysql_r/.deps/bmove.Plo
libmysql_r/.deps/bmove_upp.Plo
libmysql_r/.deps/charset-def.Plo
libmysql_r/.deps/charset.Plo
libmysql_r/.deps/client.Plo
libmysql_r/.deps/conf_to_src.Po
libmysql_r/.deps/ctype-big5.Plo
libmysql_r/.deps/ctype-bin.Plo
libmysql_r/.deps/ctype-cp932.Plo
libmysql_r/.deps/ctype-czech.Plo
libmysql_r/.deps/ctype-euc_kr.Plo
libmysql_r/.deps/ctype-eucjpms.Plo
libmysql_r/.deps/ctype-extra.Plo
libmysql_r/.deps/ctype-gb2312.Plo
libmysql_r/.deps/ctype-gbk.Plo
libmysql_r/.deps/ctype-latin1.Plo
libmysql_r/.deps/ctype-mb.Plo
libmysql_r/.deps/ctype-simple.Plo
libmysql_r/.deps/ctype-sjis.Plo
libmysql_r/.deps/ctype-tis620.Plo
libmysql_r/.deps/ctype-uca.Plo
libmysql_r/.deps/ctype-ucs2.Plo
libmysql_r/.deps/ctype-ujis.Plo
libmysql_r/.deps/ctype-utf8.Plo
libmysql_r/.deps/ctype-win1250ch.Plo
libmysql_r/.deps/ctype.Plo
libmysql_r/.deps/dbug.Plo
libmysql_r/.deps/default.Plo
libmysql_r/.deps/default_modify.Plo
libmysql_r/.deps/errmsg.Plo
libmysql_r/.deps/errors.Plo
libmysql_r/.deps/get_password.Plo
libmysql_r/.deps/hash.Plo
libmysql_r/.deps/int2str.Plo
libmysql_r/.deps/is_prefix.Plo
libmysql_r/.deps/libmysql.Plo
libmysql_r/.deps/list.Plo
libmysql_r/.deps/llstr.Plo
libmysql_r/.deps/longlong2str.Plo
libmysql_r/.deps/manager.Plo
libmysql_r/.deps/md5.Plo
libmysql_r/.deps/mf_cache.Plo
libmysql_r/.deps/mf_dirname.Plo
libmysql_r/.deps/mf_fn_ext.Plo
libmysql_r/.deps/mf_format.Plo
libmysql_r/.deps/mf_iocache.Plo
libmysql_r/.deps/mf_iocache2.Plo
libmysql_r/.deps/mf_loadpath.Plo
libmysql_r/.deps/mf_pack.Plo
libmysql_r/.deps/mf_path.Plo
libmysql_r/.deps/mf_tempfile.Plo
libmysql_r/.deps/mf_unixpath.Plo
libmysql_r/.deps/mf_wcomp.Plo
libmysql_r/.deps/mulalloc.Plo
libmysql_r/.deps/my_alloc.Plo
libmysql_r/.deps/my_chsize.Plo
libmysql_r/.deps/my_compress.Plo
libmysql_r/.deps/my_create.Plo
libmysql_r/.deps/my_delete.Plo
libmysql_r/.deps/my_div.Plo
libmysql_r/.deps/my_error.Plo
libmysql_r/.deps/my_file.Plo
libmysql_r/.deps/my_fopen.Plo
libmysql_r/.deps/my_fstream.Plo
libmysql_r/.deps/my_gethostbyname.Plo
libmysql_r/.deps/my_getopt.Plo
libmysql_r/.deps/my_getwd.Plo
libmysql_r/.deps/my_init.Plo
libmysql_r/.deps/my_lib.Plo
libmysql_r/.deps/my_malloc.Plo
libmysql_r/.deps/my_messnc.Plo
libmysql_r/.deps/my_net.Plo
libmysql_r/.deps/my_once.Plo
libmysql_r/.deps/my_open.Plo
libmysql_r/.deps/my_port.Plo
libmysql_r/.deps/my_pread.Plo
libmysql_r/.deps/my_pthread.Plo
libmysql_r/.deps/my_read.Plo
libmysql_r/.deps/my_realloc.Plo
libmysql_r/.deps/my_rename.Plo
libmysql_r/.deps/my_seek.Plo
libmysql_r/.deps/my_sleep.Plo
libmysql_r/.deps/my_static.Plo
libmysql_r/.deps/my_strtoll10.Plo
libmysql_r/.deps/my_symlink.Plo
libmysql_r/.deps/my_thr_init.Plo
libmysql_r/.deps/my_time.Plo
libmysql_r/.deps/my_vsnprintf.Plo
libmysql_r/.deps/my_write.Plo
libmysql_r/.deps/net.Plo
libmysql_r/.deps/pack.Plo
libmysql_r/.deps/password.Plo
libmysql_r/.deps/safemalloc.Plo
libmysql_r/.deps/sha1.Plo
libmysql_r/.deps/str2int.Plo
libmysql_r/.deps/str_alloc.Plo
libmysql_r/.deps/strcend.Plo
libmysql_r/.deps/strcont.Plo
libmysql_r/.deps/strend.Plo
libmysql_r/.deps/strfill.Plo
libmysql_r/.deps/string.Plo
libmysql_r/.deps/strinstr.Plo
libmysql_r/.deps/strmake.Plo
libmysql_r/.deps/strmov.Plo
libmysql_r/.deps/strnlen.Plo
libmysql_r/.deps/strnmov.Plo
libmysql_r/.deps/strtod.Plo
libmysql_r/.deps/strtoll.Plo
libmysql_r/.deps/strtoull.Plo
libmysql_r/.deps/strxmov.Plo
libmysql_r/.deps/strxnmov.Plo
libmysql_r/.deps/thr_mutex.Plo
libmysql_r/.deps/typelib.Plo
libmysql_r/.deps/vio.Plo
libmysql_r/.deps/viosocket.Plo
libmysql_r/.deps/viossl.Plo
libmysql_r/.deps/viosslfactories.Plo
libmysql_r/.deps/xml.Plo
libmysql_r/.libs/libmysqlclient_r.lai
libmysql_r/.libs/libmysqlclient_r.so.15
libmysql_r/.libs/libmysqlclient_r.so.15.0.0
libmysqld/examples/.deps/completion_hash.Po
libmysqld/examples/.deps/mysql.Po
libmysqld/examples/.deps/mysql_client_test.Po
libmysqld/examples/.deps/mysqltest.Po
libmysqld/examples/.deps/readline.Po
libmysqld/.deps/client.Po
libmysqld/.deps/derror.Po
libmysqld/.deps/discover.Po
libmysqld/.deps/emb_qcache.Po
libmysqld/.deps/errmsg.Po
libmysqld/.deps/event_data_objects.Po
libmysqld/.deps/event_db_repository.Po
libmysqld/.deps/event_queue.Po
libmysqld/.deps/event_scheduler.Po
libmysqld/.deps/events.Po
libmysqld/.deps/field.Po
libmysqld/.deps/field_conv.Po
libmysqld/.deps/filesort.Po
libmysqld/.deps/get_password.Po
libmysqld/.deps/gstream.Po
libmysqld/.deps/ha_berkeley.Po
libmysqld/.deps/ha_federated.Po
libmysqld/.deps/ha_heap.Po
libmysqld/.deps/ha_innodb.Po
libmysqld/.deps/ha_myisam.Po
libmysqld/.deps/ha_myisammrg.Po
libmysqld/.deps/ha_ndbcluster.Po
libmysqld/.deps/ha_ndbcluster_binlog.Po
libmysqld/.deps/ha_partition.Po
libmysqld/.deps/handler.Po
libmysqld/.deps/hash_filo.Po
libmysqld/.deps/hostname.Po
libmysqld/.deps/init.Po
libmysqld/.deps/item.Po
libmysqld/.deps/item_buff.Po
libmysqld/.deps/item_cmpfunc.Po
libmysqld/.deps/item_create.Po
libmysqld/.deps/item_func.Po
libmysqld/.deps/item_geofunc.Po
libmysqld/.deps/item_row.Po
libmysqld/.deps/item_strfunc.Po
libmysqld/.deps/item_subselect.Po
libmysqld/.deps/item_sum.Po
libmysqld/.deps/item_timefunc.Po
libmysqld/.deps/item_uniq.Po
libmysqld/.deps/item_xmlfunc.Po
libmysqld/.deps/key.Po
libmysqld/.deps/lib_sql.Po
libmysqld/.deps/libmysql.Po
libmysqld/.deps/libmysqld.Po
libmysqld/.deps/lock.Po
libmysqld/.deps/log.Po
libmysqld/.deps/log_event.Po
libmysqld/.deps/my_decimal.Po
libmysqld/.deps/my_time.Po
libmysqld/.deps/my_user.Po
libmysqld/.deps/net_serv.Po
libmysqld/.deps/opt_range.Po
libmysqld/.deps/opt_sum.Po
libmysqld/.deps/pack.Po
libmysqld/.deps/parse_file.Po
libmysqld/.deps/partition_info.Po
libmysqld/.deps/password.Po
libmysqld/.deps/procedure.Po
libmysqld/.deps/protocol.Po
libmysqld/.deps/records.Po
libmysqld/.deps/rpl_filter.Po
libmysqld/.deps/rpl_injector.Po
libmysqld/.deps/set_var.Po
libmysqld/.deps/sp.Po
libmysqld/.deps/sp_cache.Po
libmysqld/.deps/sp_head.Po
libmysqld/.deps/sp_pcontext.Po
libmysqld/.deps/sp_rcontext.Po
libmysqld/.deps/spatial.Po
libmysqld/.deps/sql_acl.Po
libmysqld/.deps/sql_analyse.Po
libmysqld/.deps/sql_base.Po
libmysqld/.deps/sql_builtin.Po
libmysqld/.deps/sql_cache.Po
libmysqld/.deps/sql_class.Po
libmysqld/.deps/sql_crypt.Po
libmysqld/.deps/sql_cursor.Po
libmysqld/.deps/sql_db.Po
libmysqld/.deps/sql_delete.Po
libmysqld/.deps/sql_derived.Po
libmysqld/.deps/sql_do.Po
libmysqld/.deps/sql_error.Po
libmysqld/.deps/sql_handler.Po
libmysqld/.deps/sql_help.Po
libmysqld/.deps/sql_insert.Po
libmysqld/.deps/sql_lex.Po
libmysqld/.deps/sql_list.Po
libmysqld/.deps/sql_load.Po
libmysqld/.deps/sql_manager.Po
libmysqld/.deps/sql_map.Po
libmysqld/.deps/sql_parse.Po
libmysqld/.deps/sql_partition.Po
libmysqld/.deps/sql_plugin.Po
libmysqld/.deps/sql_prepare.Po
libmysqld/.deps/sql_rename.Po
libmysqld/.deps/sql_select.Po
libmysqld/.deps/sql_show.Po
libmysqld/.deps/sql_state.Po
libmysqld/.deps/sql_string.Po
libmysqld/.deps/sql_table.Po
libmysqld/.deps/sql_tablespace.Po
libmysqld/.deps/sql_test.Po
libmysqld/.deps/sql_trigger.Po
libmysqld/.deps/sql_udf.Po
libmysqld/.deps/sql_union.Po
libmysqld/.deps/sql_update.Po
libmysqld/.deps/sql_view.Po
libmysqld/.deps/sql_yacc.Po
libmysqld/.deps/stacktrace.Po
libmysqld/.deps/strfunc.Po
libmysqld/.deps/table.Po
libmysqld/.deps/thr_malloc.Po
libmysqld/.deps/time.Po
libmysqld/.deps/tztime.Po
libmysqld/.deps/uniques.Po
libmysqld/.deps/unireg.Po
mysys/.deps/array.Po
mysys/.deps/base64.Po
mysys/.deps/charset-def.Po
mysys/.deps/charset.Po
mysys/.deps/checksum.Po
mysys/.deps/default.Po
mysys/.deps/default_modify.Po
mysys/.deps/errors.Po
mysys/.deps/hash.Po
mysys/.deps/list.Po
mysys/.deps/md5.Po
mysys/.deps/mf_brkhant.Po
mysys/.deps/mf_cache.Po
mysys/.deps/mf_dirname.Po
mysys/.deps/mf_fn_ext.Po
mysys/.deps/mf_format.Po
mysys/.deps/mf_getdate.Po
mysys/.deps/mf_iocache.Po
mysys/.deps/mf_iocache2.Po
mysys/.deps/mf_keycache.Po
mysys/.deps/mf_keycaches.Po
mysys/.deps/mf_loadpath.Po
mysys/.deps/mf_pack.Po
mysys/.deps/mf_path.Po
mysys/.deps/mf_qsort.Po
mysys/.deps/mf_qsort2.Po
mysys/.deps/mf_radix.Po
mysys/.deps/mf_same.Po
mysys/.deps/mf_sort.Po
mysys/.deps/mf_strip.Po
mysys/.deps/mf_tempdir.Po
mysys/.deps/mf_tempfile.Po
mysys/.deps/mf_unixpath.Po
mysys/.deps/mf_wcomp.Po
mysys/.deps/mf_wfile.Po
mysys/.deps/mulalloc.Po
mysys/.deps/my_access.Po
mysys/.deps/my_aes.Po
mysys/.deps/my_alarm.Po
mysys/.deps/my_alloc.Po
mysys/.deps/my_append.Po
mysys/.deps/my_atomic.Po
mysys/.deps/my_bit.Po
mysys/.deps/my_bitmap.Po
mysys/.deps/my_chsize.Po
mysys/.deps/my_clock.Po
mysys/.deps/my_compress.Po
mysys/.deps/my_copy.Po
mysys/.deps/my_crc32.Po
mysys/.deps/my_create.Po
mysys/.deps/my_delete.Po
mysys/.deps/my_div.Po
mysys/.deps/my_dup.Po
mysys/.deps/my_error.Po
mysys/.deps/my_file.Po
mysys/.deps/my_fopen.Po
mysys/.deps/my_fstream.Po
mysys/.deps/my_gethostbyname.Po
mysys/.deps/my_gethwaddr.Po
mysys/.deps/my_getncpus.Po
mysys/.deps/my_getopt.Po
mysys/.deps/my_getsystime.Po
mysys/.deps/my_getwd.Po
mysys/.deps/my_handler.Po
mysys/.deps/my_init.Po
mysys/.deps/my_largepage.Po
mysys/.deps/my_lib.Po
mysys/.deps/my_libwrap.Po
mysys/.deps/my_lock.Po
mysys/.deps/my_lockmem.Po
mysys/.deps/my_lread.Po
mysys/.deps/my_lwrite.Po
mysys/.deps/my_malloc.Po
mysys/.deps/my_memmem.Po
mysys/.deps/my_messnc.Po
mysys/.deps/my_mkdir.Po
mysys/.deps/my_mmap.Po
mysys/.deps/my_net.Po
mysys/.deps/my_netware.Po
mysys/.deps/my_new.Po
mysys/.deps/my_once.Po
mysys/.deps/my_open.Po
mysys/.deps/my_port.Po
mysys/.deps/my_pread.Po
mysys/.deps/my_pthread.Po
mysys/.deps/my_quick.Po
mysys/.deps/my_read.Po
mysys/.deps/my_realloc.Po
mysys/.deps/my_redel.Po
mysys/.deps/my_rename.Po
mysys/.deps/my_seek.Po
mysys/.deps/my_semaphore.Po
mysys/.deps/my_sleep.Po
mysys/.deps/my_static.Po
mysys/.deps/my_symlink.Po
mysys/.deps/my_symlink2.Po
mysys/.deps/my_sync.Po
mysys/.deps/my_thr_init.Po
mysys/.deps/my_vle.Po
mysys/.deps/my_windac.Po
mysys/.deps/my_write.Po
mysys/.deps/ptr_cmp.Po
mysys/.deps/queues.Po
mysys/.deps/rijndael.Po
mysys/.deps/safemalloc.Po
mysys/.deps/sha1.Po
mysys/.deps/string.Po
mysys/.deps/thr_alarm.Po
mysys/.deps/thr_lock.Po
mysys/.deps/thr_mutex.Po
mysys/.deps/thr_rwlock.Po
mysys/.deps/tree.Po
mysys/.deps/trie.Po
mysys/.deps/typelib.Po
netware/.deps/libmysqlmain.Po
netware/.deps/my_manage.Po
netware/.deps/mysql_install_db.Po
netware/.deps/mysql_test_run.Po
netware/.deps/mysqld_safe.Po
plugin/fulltext/.deps/mypluglib_la-plugin_example.Plo
plugin/fulltext/.libs/mypluglib.lai
plugin/fulltext/.libs/mypluglib.so.0
plugin/fulltext/.libs/mypluglib.so.0.0.0
pstack/.deps/bucomm.Po
pstack/.deps/debug.Po
pstack/.deps/filemode.Po
pstack/.deps/ieee.Po
pstack/.deps/linuxthreads.Po
pstack/.deps/pstack.Po
pstack/.deps/rddbg.Po
pstack/.deps/stabs.Po
regex/.deps/debug.Po
regex/.deps/main.Po
regex/.deps/regcomp.Po
regex/.deps/regerror.Po
regex/.deps/regexec.Po
regex/.deps/regfree.Po
regex/.deps/reginit.Po
regex/.deps/split.Po
server-tools/instance-manager/.deps/buffer.Po
server-tools/instance-manager/.deps/command.Po
server-tools/instance-manager/.deps/commands.Po
server-tools/instance-manager/.deps/guardian.Po
server-tools/instance-manager/.deps/instance.Po
server-tools/instance-manager/.deps/instance_map.Po
server-tools/instance-manager/.deps/instance_options.Po
server-tools/instance-manager/.deps/liboptions_la-options.Plo
server-tools/instance-manager/.deps/liboptions_la-priv.Plo
server-tools/instance-manager/.deps/listener.Po
server-tools/instance-manager/.deps/log.Po
server-tools/instance-manager/.deps/manager.Po
server-tools/instance-manager/.deps/messages.Po
server-tools/instance-manager/.deps/mysql_connection.Po
server-tools/instance-manager/.deps/mysqlmanager.Po
server-tools/instance-manager/.deps/net_serv.Po
server-tools/instance-manager/.deps/parse.Po
server-tools/instance-manager/.deps/parse_output.Po
server-tools/instance-manager/.deps/protocol.Po
server-tools/instance-manager/.deps/thread_registry.Po
server-tools/instance-manager/.deps/user_management_commands.Po
server-tools/instance-manager/.deps/user_map.Po
sql/Makefile.am
View file @
3f6de6c5
...
@@ -65,8 +65,8 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
...
@@ -65,8 +65,8 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \
sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h
\
sp_head.h sp_pcontext.h sp_rcontext.h sp.h sp_cache.h
\
parse_file.h sql_view.h sql_trigger.h
\
parse_file.h sql_view.h sql_trigger.h
\
sql_array.h sql_cursor.h events.h
\
sql_array.h sql_cursor.h events.h
\
event_db_repository.h event_queue.h
\
sql_plugin.h authors.h sql_partition.h event_data_objects.h
\
sql_plugin.h authors.h sql_partition.h event_data_objects.h
\
event_queue.h event_db_repository.h
\
partition_info.h partition_element.h event_scheduler.h
\
partition_info.h partition_element.h event_scheduler.h
\
contributors.h
contributors.h
mysqld_SOURCES
=
sql_lex.cc sql_handler.cc sql_partition.cc
\
mysqld_SOURCES
=
sql_lex.cc sql_handler.cc sql_partition.cc
\
...
@@ -104,8 +104,8 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
...
@@ -104,8 +104,8 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
gstream.cc spatial.cc sql_help.cc sql_cursor.cc
\
gstream.cc spatial.cc sql_help.cc sql_cursor.cc
\
tztime.cc my_time.c my_user.c my_decimal.cc
\
tztime.cc my_time.c my_user.c my_decimal.cc
\
sp_head.cc sp_pcontext.cc sp_rcontext.cc sp.cc
\
sp_head.cc sp_pcontext.cc sp_rcontext.cc sp.cc
\
sp_cache.cc parse_file.cc sql_trigger.cc
event_scheduler.cc
\
sp_cache.cc parse_file.cc sql_trigger.cc
\
events.cc event_data_objects.cc
\
event
_scheduler.cc event
s.cc event_data_objects.cc
\
event_queue.cc event_db_repository.cc
\
event_queue.cc event_db_repository.cc
\
sql_plugin.cc sql_binlog.cc
\
sql_plugin.cc sql_binlog.cc
\
sql_builtin.cc sql_tablespace.cc partition_info.cc
sql_builtin.cc sql_tablespace.cc partition_info.cc
...
...
sql/event_data_objects.cc
View file @
3f6de6c5
...
@@ -24,65 +24,12 @@
...
@@ -24,65 +24,12 @@
#define EVEX_MAX_INTERVAL_VALUE 1000000000L
#define EVEX_MAX_INTERVAL_VALUE 1000000000L
/*
Switches the security context
SYNOPSIS
event_change_security_context()
thd Thread
user The user
host The host of the user
db The schema for which the security_ctx will be loaded
backup Where to store the old context
RETURN VALUE
FALSE OK
TRUE Error (generates error too)
*/
static
bool
static
bool
event_change_security_context
(
THD
*
thd
,
LEX_STRING
user
,
LEX_STRING
host
,
event_change_security_context
(
THD
*
thd
,
LEX_STRING
user
,
LEX_STRING
host
,
LEX_STRING
db
,
Security_context
*
backup
)
LEX_STRING
db
,
Security_context
*
backup
);
{
DBUG_ENTER
(
"event_change_security_context"
);
DBUG_PRINT
(
"info"
,(
"%s@%s@%s"
,
user
.
str
,
host
.
str
,
db
.
str
));
#ifndef NO_EMBEDDED_ACCESS_CHECKS
*
backup
=
thd
->
main_security_ctx
;
if
(
acl_getroot_no_password
(
&
thd
->
main_security_ctx
,
user
.
str
,
host
.
str
,
host
.
str
,
db
.
str
))
{
my_error
(
ER_NO_SUCH_USER
,
MYF
(
0
),
user
.
str
,
host
.
str
);
DBUG_RETURN
(
TRUE
);
}
thd
->
security_ctx
=
&
thd
->
main_security_ctx
;
#endif
DBUG_RETURN
(
FALSE
);
}
/*
Restores the security context
SYNOPSIS
event_restore_security_context()
thd Thread
backup Context to switch to
*/
static
void
static
void
event_restore_security_context
(
THD
*
thd
,
Security_context
*
backup
)
event_restore_security_context
(
THD
*
thd
,
Security_context
*
backup
);
{
DBUG_ENTER
(
"event_restore_security_context"
);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if
(
backup
)
{
thd
->
main_security_ctx
=
*
backup
;
thd
->
security_ctx
=
&
thd
->
main_security_ctx
;
}
#endif
DBUG_VOID_RETURN
;
}
/*
/*
Returns a new instance
Returns a new instance
...
@@ -236,47 +183,6 @@ Event_parse_data::init_body(THD *thd)
...
@@ -236,47 +183,6 @@ Event_parse_data::init_body(THD *thd)
}
}
/*
Inits definer (definer_user and definer_host) during parsing.
SYNOPSIS
Event_parse_data::init_definer()
thd Thread
*/
void
Event_parse_data
::
init_definer
(
THD
*
thd
)
{
int
definer_user_len
;
int
definer_host_len
;
DBUG_ENTER
(
"Event_parse_data::init_definer"
);
DBUG_PRINT
(
"info"
,(
"init definer_user thd->mem_root=0x%lx "
"thd->sec_ctx->priv_user=0x%lx"
,
thd
->
mem_root
,
thd
->
security_ctx
->
priv_user
));
definer_user_len
=
strlen
(
thd
->
security_ctx
->
priv_user
);
definer_host_len
=
strlen
(
thd
->
security_ctx
->
priv_host
);
/* + 1 for @ */
DBUG_PRINT
(
"info"
,(
"init definer as whole"
));
definer
.
length
=
definer_user_len
+
definer_host_len
+
1
;
definer
.
str
=
thd
->
alloc
(
definer
.
length
+
1
);
DBUG_PRINT
(
"info"
,(
"copy the user"
));
memcpy
(
definer
.
str
,
thd
->
security_ctx
->
priv_user
,
definer_user_len
);
definer
.
str
[
definer_user_len
]
=
'@'
;
DBUG_PRINT
(
"info"
,(
"copy the host"
));
memcpy
(
definer
.
str
+
definer_user_len
+
1
,
thd
->
security_ctx
->
priv_host
,
definer_host_len
);
definer
.
str
[
definer
.
length
]
=
'\0'
;
DBUG_PRINT
(
"info"
,(
"definer [%s] initted"
,
definer
.
str
));
DBUG_VOID_RETURN
;
}
/*
/*
Sets time for execution for one-time event.
Sets time for execution for one-time event.
...
@@ -645,6 +551,47 @@ Event_parse_data::check_parse_data(THD *thd)
...
@@ -645,6 +551,47 @@ Event_parse_data::check_parse_data(THD *thd)
}
}
/*
Inits definer (definer_user and definer_host) during parsing.
SYNOPSIS
Event_parse_data::init_definer()
thd Thread
*/
void
Event_parse_data
::
init_definer
(
THD
*
thd
)
{
int
definer_user_len
;
int
definer_host_len
;
DBUG_ENTER
(
"Event_parse_data::init_definer"
);
DBUG_PRINT
(
"info"
,(
"init definer_user thd->mem_root=0x%lx "
"thd->sec_ctx->priv_user=0x%lx"
,
thd
->
mem_root
,
thd
->
security_ctx
->
priv_user
));
definer_user_len
=
strlen
(
thd
->
security_ctx
->
priv_user
);
definer_host_len
=
strlen
(
thd
->
security_ctx
->
priv_host
);
/* + 1 for @ */
DBUG_PRINT
(
"info"
,(
"init definer as whole"
));
definer
.
length
=
definer_user_len
+
definer_host_len
+
1
;
definer
.
str
=
thd
->
alloc
(
definer
.
length
+
1
);
DBUG_PRINT
(
"info"
,(
"copy the user"
));
memcpy
(
definer
.
str
,
thd
->
security_ctx
->
priv_user
,
definer_user_len
);
definer
.
str
[
definer_user_len
]
=
'@'
;
DBUG_PRINT
(
"info"
,(
"copy the host"
));
memcpy
(
definer
.
str
+
definer_user_len
+
1
,
thd
->
security_ctx
->
priv_host
,
definer_host_len
);
definer
.
str
[
definer
.
length
]
=
'\0'
;
DBUG_PRINT
(
"info"
,(
"definer [%s] initted"
,
definer
.
str
));
DBUG_VOID_RETURN
;
}
/*
/*
Constructor
Constructor
...
@@ -1667,6 +1614,69 @@ Event_job_data::get_fake_create_event(THD *thd, String *buf)
...
@@ -1667,6 +1614,69 @@ Event_job_data::get_fake_create_event(THD *thd, String *buf)
}
}
/*
Executes the event (the underlying sp_head object);
SYNOPSIS
Event_job_data::execute()
thd THD
RETURN VALUE
0 success
-99 No rights on this.dbname.str
others retcodes of sp_head::execute_procedure()
*/
int
Event_job_data
::
execute
(
THD
*
thd
)
{
Security_context
save_ctx
;
/* this one is local and not needed after exec */
int
ret
=
0
;
DBUG_ENTER
(
"Event_job_data::execute"
);
DBUG_PRINT
(
"info"
,
(
"EXECUTING %s.%s"
,
dbname
.
str
,
name
.
str
));
if
((
ret
=
compile
(
thd
,
NULL
)))
goto
done
;
event_change_security_context
(
thd
,
definer_user
,
definer_host
,
dbname
,
&
save_ctx
);
/*
THD::~THD will clean this or if there is DROP DATABASE in the SP then
it will be free there. It should not point to our buffer which is allocated
on a mem_root.
*/
thd
->
db
=
my_strdup
(
dbname
.
str
,
MYF
(
0
));
thd
->
db_length
=
dbname
.
length
;
if
(
!
check_access
(
thd
,
EVENT_ACL
,
dbname
.
str
,
0
,
0
,
0
,
is_schema_db
(
dbname
.
str
)))
{
List
<
Item
>
empty_item_list
;
empty_item_list
.
empty
();
if
(
thd
->
enable_slow_log
)
sphead
->
m_flags
|=
sp_head
::
LOG_SLOW_STATEMENTS
;
sphead
->
m_flags
|=
sp_head
::
LOG_GENERAL_LOG
;
ret
=
sphead
->
execute_procedure
(
thd
,
&
empty_item_list
);
}
else
{
DBUG_PRINT
(
"error"
,
(
"%s@%s has no rights on %s"
,
definer_user
.
str
,
definer_host
.
str
,
dbname
.
str
));
ret
=
-
99
;
}
event_restore_security_context
(
thd
,
&
save_ctx
);
done:
thd
->
end_statement
();
thd
->
cleanup_after_query
();
DBUG_PRINT
(
"info"
,
(
"EXECUTED %s.%s ret=%d"
,
dbname
.
str
,
name
.
str
,
ret
));
DBUG_RETURN
(
ret
);
}
/*
/*
Compiles an event before it's execution. Compiles the anonymous
Compiles an event before it's execution. Compiles the anonymous
sp_head object held by the event
sp_head object held by the event
...
@@ -1799,69 +1809,6 @@ Event_job_data::compile(THD *thd, MEM_ROOT *mem_root)
...
@@ -1799,69 +1809,6 @@ Event_job_data::compile(THD *thd, MEM_ROOT *mem_root)
}
}
/*
Executes the event (the underlying sp_head object);
SYNOPSIS
Event_job_data::execute()
thd THD
RETURN VALUE
0 success
-99 No rights on this.dbname.str
others retcodes of sp_head::execute_procedure()
*/
int
Event_job_data
::
execute
(
THD
*
thd
)
{
Security_context
save_ctx
;
/* this one is local and not needed after exec */
int
ret
=
0
;
DBUG_ENTER
(
"Event_job_data::execute"
);
DBUG_PRINT
(
"info"
,
(
"EXECUTING %s.%s"
,
dbname
.
str
,
name
.
str
));
if
((
ret
=
compile
(
thd
,
NULL
)))
goto
done
;
event_change_security_context
(
thd
,
definer_user
,
definer_host
,
dbname
,
&
save_ctx
);
/*
THD::~THD will clean this or if there is DROP DATABASE in the SP then
it will be free there. It should not point to our buffer which is allocated
on a mem_root.
*/
thd
->
db
=
my_strdup
(
dbname
.
str
,
MYF
(
0
));
thd
->
db_length
=
dbname
.
length
;
if
(
!
check_access
(
thd
,
EVENT_ACL
,
dbname
.
str
,
0
,
0
,
0
,
is_schema_db
(
dbname
.
str
)))
{
List
<
Item
>
empty_item_list
;
empty_item_list
.
empty
();
if
(
thd
->
enable_slow_log
)
sphead
->
m_flags
|=
sp_head
::
LOG_SLOW_STATEMENTS
;
sphead
->
m_flags
|=
sp_head
::
LOG_GENERAL_LOG
;
ret
=
sphead
->
execute_procedure
(
thd
,
&
empty_item_list
);
}
else
{
DBUG_PRINT
(
"error"
,
(
"%s@%s has no rights on %s"
,
definer_user
.
str
,
definer_host
.
str
,
dbname
.
str
));
ret
=
-
99
;
}
event_restore_security_context
(
thd
,
&
save_ctx
);
done:
thd
->
end_statement
();
thd
->
cleanup_after_query
();
DBUG_PRINT
(
"info"
,
(
"EXECUTED %s.%s ret=%d"
,
dbname
.
str
,
name
.
str
,
ret
));
DBUG_RETURN
(
ret
);
}
/*
/*
Checks whether two events are in the same schema
Checks whether two events are in the same schema
...
@@ -1899,3 +1846,62 @@ event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b)
...
@@ -1899,3 +1846,62 @@ event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b)
return
!
sortcmp_lex_string
(
name
,
b
->
name
,
system_charset_info
)
&&
return
!
sortcmp_lex_string
(
name
,
b
->
name
,
system_charset_info
)
&&
!
sortcmp_lex_string
(
db
,
b
->
dbname
,
system_charset_info
);
!
sortcmp_lex_string
(
db
,
b
->
dbname
,
system_charset_info
);
}
}
/*
Switches the security context
SYNOPSIS
event_change_security_context()
thd Thread
user The user
host The host of the user
db The schema for which the security_ctx will be loaded
backup Where to store the old context
RETURN VALUE
FALSE OK
TRUE Error (generates error too)
*/
static
bool
event_change_security_context
(
THD
*
thd
,
LEX_STRING
user
,
LEX_STRING
host
,
LEX_STRING
db
,
Security_context
*
backup
)
{
DBUG_ENTER
(
"event_change_security_context"
);
DBUG_PRINT
(
"info"
,(
"%s@%s@%s"
,
user
.
str
,
host
.
str
,
db
.
str
));
#ifndef NO_EMBEDDED_ACCESS_CHECKS
*
backup
=
thd
->
main_security_ctx
;
if
(
acl_getroot_no_password
(
&
thd
->
main_security_ctx
,
user
.
str
,
host
.
str
,
host
.
str
,
db
.
str
))
{
my_error
(
ER_NO_SUCH_USER
,
MYF
(
0
),
user
.
str
,
host
.
str
);
DBUG_RETURN
(
TRUE
);
}
thd
->
security_ctx
=
&
thd
->
main_security_ctx
;
#endif
DBUG_RETURN
(
FALSE
);
}
/*
Restores the security context
SYNOPSIS
event_restore_security_context()
thd Thread
backup Context to switch to
*/
static
void
event_restore_security_context
(
THD
*
thd
,
Security_context
*
backup
)
{
DBUG_ENTER
(
"event_restore_security_context"
);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if
(
backup
)
{
thd
->
main_security_ctx
=
*
backup
;
thd
->
security_ctx
=
&
thd
->
main_security_ctx
;
}
#endif
DBUG_VOID_RETURN
;
}
sql/event_queue.cc
View file @
3f6de6c5
...
@@ -41,6 +41,7 @@ struct event_queue_param
...
@@ -41,6 +41,7 @@ struct event_queue_param
Event_queue
*
queue
;
Event_queue
*
queue
;
pthread_mutex_t
LOCK_loaded
;
pthread_mutex_t
LOCK_loaded
;
pthread_cond_t
COND_loaded
;
pthread_cond_t
COND_loaded
;
bool
loading_finished
;
};
};
...
@@ -85,9 +86,14 @@ event_queue_loader_thread(void *arg)
...
@@ -85,9 +86,14 @@ event_queue_loader_thread(void *arg)
DBUG_ENTER
(
"event_queue_loader_thread"
);
DBUG_ENTER
(
"event_queue_loader_thread"
);
pthread_mutex_lock
(
&
param
->
LOCK_loaded
);
pthread_mutex_lock
(
&
param
->
LOCK_loaded
);
param
->
queue
->
check_system_tables
(
thd
);
param
->
queue
->
load_events_from_db
(
thd
);
param
->
queue
->
load_events_from_db
(
thd
);
param
->
loading_finished
=
TRUE
;
pthread_cond_signal
(
&
param
->
COND_loaded
);
pthread_cond_signal
(
&
param
->
COND_loaded
);
pthread_mutex_unlock
(
&
param
->
LOCK_loaded
);
pthread_mutex_unlock
(
&
param
->
LOCK_loaded
);
end:
end:
...
@@ -113,8 +119,6 @@ Event_queue::Event_queue()
...
@@ -113,8 +119,6 @@ Event_queue::Event_queue()
mutex_last_attempted_lock_in_func
=
""
;
mutex_last_attempted_lock_in_func
=
""
;
mutex_queue_data_locked
=
mutex_queue_data_attempting_lock
=
FALSE
;
mutex_queue_data_locked
=
mutex_queue_data_attempting_lock
=
FALSE
;
queue_loaded
=
FALSE
;
}
}
...
@@ -195,8 +199,10 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
...
@@ -195,8 +199,10 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
event_queue_param_value
=
(
struct
event_queue_param
*
)
event_queue_param_value
=
(
struct
event_queue_param
*
)
my_malloc
(
sizeof
(
struct
event_queue_param
),
MYF
(
0
));
my_malloc
(
sizeof
(
struct
event_queue_param
),
MYF
(
0
));
event_queue_param_value
->
thd
=
new_thd
;
event_queue_param_value
->
thd
=
new_thd
;
event_queue_param_value
->
queue
=
this
;
event_queue_param_value
->
queue
=
this
;
event_queue_param_value
->
loading_finished
=
FALSE
;
pthread_mutex_init
(
&
event_queue_param_value
->
LOCK_loaded
,
MY_MUTEX_INIT_FAST
);
pthread_mutex_init
(
&
event_queue_param_value
->
LOCK_loaded
,
MY_MUTEX_INIT_FAST
);
pthread_cond_init
(
&
event_queue_param_value
->
COND_loaded
,
NULL
);
pthread_cond_init
(
&
event_queue_param_value
->
COND_loaded
,
NULL
);
...
@@ -207,8 +213,8 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
...
@@ -207,8 +213,8 @@ Event_queue::init_queue(Event_db_repository *db_repo, Event_scheduler *sched)
{
{
do
{
do
{
pthread_cond_wait
(
&
event_queue_param_value
->
COND_loaded
,
pthread_cond_wait
(
&
event_queue_param_value
->
COND_loaded
,
&
event_queue_param_value
->
LOCK_loaded
);
&
event_queue_param_value
->
LOCK_loaded
);
}
while
(
queue_load
ed
==
FALSE
);
}
while
(
event_queue_param_value
->
loading_finish
ed
==
FALSE
);
}
}
pthread_mutex_unlock
(
&
event_queue_param_value
->
LOCK_loaded
);
pthread_mutex_unlock
(
&
event_queue_param_value
->
LOCK_loaded
);
...
@@ -662,8 +668,6 @@ Event_queue::load_events_from_db(THD *thd)
...
@@ -662,8 +668,6 @@ Event_queue::load_events_from_db(THD *thd)
close_thread_tables
(
thd
);
close_thread_tables
(
thd
);
queue_loaded
=
TRUE
;
DBUG_PRINT
(
"info"
,
(
"Status code %d. Loaded %d event(s)"
,
ret
,
count
));
DBUG_PRINT
(
"info"
,
(
"Status code %d. Loaded %d event(s)"
,
ret
,
count
));
DBUG_RETURN
(
ret
);
DBUG_RETURN
(
ret
);
}
}
...
@@ -683,7 +687,7 @@ Event_queue::load_events_from_db(THD *thd)
...
@@ -683,7 +687,7 @@ Event_queue::load_events_from_db(THD *thd)
TRUE Error
TRUE Error
*/
*/
bool
void
Event_queue
::
check_system_tables
(
THD
*
thd
)
Event_queue
::
check_system_tables
(
THD
*
thd
)
{
{
TABLE_LIST
tables
;
TABLE_LIST
tables
;
...
@@ -702,39 +706,35 @@ Event_queue::check_system_tables(THD *thd)
...
@@ -702,39 +706,35 @@ Event_queue::check_system_tables(THD *thd)
tables
.
lock_type
=
TL_READ
;
tables
.
lock_type
=
TL_READ
;
if
((
ret
=
simple_open_n_lock_tables
(
thd
,
&
tables
)))
if
((
ret
=
simple_open_n_lock_tables
(
thd
,
&
tables
)))
sql_print_error
(
"Cannot open mysql.db"
);
else
{
{
ret
=
table_check_intact
(
tables
.
table
,
MYSQL_DB_FIELD_COUNT
,
sql_print_error
(
"Cannot open mysql.db"
);
mysql_db_table_fields
,
&
mysql_db_table_last_check
,
goto
end
;
ER_CANNOT_LOAD_FROM_TABLE
);
close_thread_tables
(
thd
);
}
}
if
(
ret
)
ret
=
table_check_intact
(
tables
.
table
,
MYSQL_DB_FIELD_COUNT
,
DBUG_RETURN
(
TRUE
);
mysql_db_table_fields
,
&
mysql_db_table_last_check
,
ER_CANNOT_LOAD_FROM_TABLE
);
close_thread_tables
(
thd
);
bzero
((
char
*
)
&
tables
,
sizeof
(
tables
));
bzero
((
char
*
)
&
tables
,
sizeof
(
tables
));
tables
.
db
=
(
char
*
)
"mysql"
;
tables
.
db
=
(
char
*
)
"mysql"
;
tables
.
table_name
=
tables
.
alias
=
(
char
*
)
"user"
;
tables
.
table_name
=
tables
.
alias
=
(
char
*
)
"user"
;
tables
.
lock_type
=
TL_READ
;
tables
.
lock_type
=
TL_READ
;
if
(
(
ret
=
simple_open_n_lock_tables
(
thd
,
&
tables
)
))
if
(
simple_open_n_lock_tables
(
thd
,
&
tables
))
sql_print_error
(
"Cannot open mysql.db"
);
sql_print_error
(
"Cannot open mysql.db"
);
else
else
{
{
if
(
tables
.
table
->
s
->
fields
<
29
||
if
(
tables
.
table
->
s
->
fields
<
29
||
strncmp
(
tables
.
table
->
field
[
29
]
->
field_name
,
strncmp
(
tables
.
table
->
field
[
29
]
->
field_name
,
STRING_WITH_LEN
(
"Event_priv"
)))
STRING_WITH_LEN
(
"Event_priv"
)))
{
sql_print_error
(
"mysql.user has no `Event_priv` column at position 29"
);
sql_print_error
(
"mysql.user has no `Event_priv` column at position 29"
);
ret
=
TRUE
;
}
close_thread_tables
(
thd
);
close_thread_tables
(
thd
);
}
}
end:
thd
->
restore_backup_open_tables_state
(
&
backup
);
thd
->
restore_backup_open_tables_state
(
&
backup
);
DBUG_
RETURN
(
ret
)
;
DBUG_
VOID_RETURN
;
}
}
...
...
sql/event_queue.h
View file @
3f6de6c5
...
@@ -56,7 +56,7 @@ class Event_queue
...
@@ -56,7 +56,7 @@ class Event_queue
void
void
drop_schema_events
(
THD
*
thd
,
LEX_STRING
schema
);
drop_schema_events
(
THD
*
thd
,
LEX_STRING
schema
);
static
bool
void
check_system_tables
(
THD
*
thd
);
check_system_tables
(
THD
*
thd
);
void
void
...
@@ -99,8 +99,6 @@ class Event_queue
...
@@ -99,8 +99,6 @@ class Event_queue
/* The sorted queue with the Event_job_data objects */
/* The sorted queue with the Event_job_data objects */
QUEUE
queue
;
QUEUE
queue
;
bool
queue_loaded
;
uint
mutex_last_locked_at_line
;
uint
mutex_last_locked_at_line
;
uint
mutex_last_unlocked_at_line
;
uint
mutex_last_unlocked_at_line
;
uint
mutex_last_attempted_lock_at_line
;
uint
mutex_last_attempted_lock_at_line
;
...
...
sql/event_scheduler.cc
View file @
3f6de6c5
...
@@ -28,19 +28,12 @@
...
@@ -28,19 +28,12 @@
#define SCHED_FUNC "<unknown>"
#define SCHED_FUNC "<unknown>"
#endif
#endif
#define LOCK_
SCHEDULER_DATA()
lock_data(SCHED_FUNC, __LINE__)
#define LOCK_
DATA()
lock_data(SCHED_FUNC, __LINE__)
#define UNLOCK_
SCHEDULER_DATA()
unlock_data(SCHED_FUNC, __LINE__)
#define UNLOCK_
DATA()
unlock_data(SCHED_FUNC, __LINE__)
#define COND_STATE_WAIT(timer) cond_wait(timer, SCHED_FUNC, __LINE__)
#define COND_STATE_WAIT(timer) cond_wait(timer, SCHED_FUNC, __LINE__)
extern
pthread_attr_t
connection_attrib
;
extern
pthread_attr_t
connection_attrib
;
struct
scheduler_param
{
THD
*
thd
;
Event_scheduler
*
scheduler
;
};
static
static
LEX_STRING
scheduler_states_names
[]
=
LEX_STRING
scheduler_states_names
[]
=
{
{
...
@@ -49,6 +42,11 @@ LEX_STRING scheduler_states_names[] =
...
@@ -49,6 +42,11 @@ LEX_STRING scheduler_states_names[] =
{
C_STRING_WITH_LEN
(
"STOPPING"
)}
{
C_STRING_WITH_LEN
(
"STOPPING"
)}
};
};
struct
scheduler_param
{
THD
*
thd
;
Event_scheduler
*
scheduler
;
};
/*
/*
Prints the stack of infos, warnings, errors from thd to
Prints the stack of infos, warnings, errors from thd to
...
@@ -99,54 +97,6 @@ evex_print_warnings(THD *thd, Event_job_data *et)
...
@@ -99,54 +97,6 @@ evex_print_warnings(THD *thd, Event_job_data *et)
}
}
/*
Performs pre- pthread_create() initialisation of THD. Do this
in the thread that will pass THD to the child thread. In the
child thread call post_init_event_thread().
SYNOPSIS
pre_init_event_thread()
thd The THD of the thread. Has to be allocated by the caller.
NOTES
1. The host of the thead is my_localhost
2. thd->net is initted with NULL - no communication.
*/
void
pre_init_event_thread
(
THD
*
thd
)
{
DBUG_ENTER
(
"pre_init_event_thread"
);
thd
->
client_capabilities
=
0
;
thd
->
security_ctx
->
master_access
=
0
;
thd
->
security_ctx
->
db_access
=
0
;
thd
->
security_ctx
->
host_or_ip
=
(
char
*
)
my_localhost
;
thd
->
security_ctx
->
set_user
((
char
*
)
"event_scheduler"
);
my_net_init
(
&
thd
->
net
,
NULL
);
thd
->
net
.
read_timeout
=
slave_net_timeout
;
thd
->
slave_thread
=
0
;
thd
->
options
|=
OPTION_AUTO_IS_NULL
;
thd
->
client_capabilities
|=
CLIENT_MULTI_RESULTS
;
pthread_mutex_lock
(
&
LOCK_thread_count
);
thd
->
thread_id
=
thread_id
++
;
threads
.
append
(
thd
);
thread_count
++
;
thread_running
++
;
pthread_mutex_unlock
(
&
LOCK_thread_count
);
/*
Guarantees that we will see the thread in SHOW PROCESSLIST though its
vio is NULL.
*/
thd
->
proc_info
=
"Initialized"
;
thd
->
version
=
refresh_version
;
thd
->
set_time
();
DBUG_VOID_RETURN
;
}
/*
/*
Performs post initialization of structures in a new thread.
Performs post initialization of structures in a new thread.
...
@@ -201,6 +151,54 @@ deinit_event_thread(THD *thd)
...
@@ -201,6 +151,54 @@ deinit_event_thread(THD *thd)
}
}
/*
Performs pre- pthread_create() initialisation of THD. Do this
in the thread that will pass THD to the child thread. In the
child thread call post_init_event_thread().
SYNOPSIS
pre_init_event_thread()
thd The THD of the thread. Has to be allocated by the caller.
NOTES
1. The host of the thead is my_localhost
2. thd->net is initted with NULL - no communication.
*/
void
pre_init_event_thread
(
THD
*
thd
)
{
DBUG_ENTER
(
"pre_init_event_thread"
);
thd
->
client_capabilities
=
0
;
thd
->
security_ctx
->
master_access
=
0
;
thd
->
security_ctx
->
db_access
=
0
;
thd
->
security_ctx
->
host_or_ip
=
(
char
*
)
my_localhost
;
my_net_init
(
&
thd
->
net
,
NULL
);
thd
->
security_ctx
->
set_user
((
char
*
)
"event_scheduler"
);
thd
->
net
.
read_timeout
=
slave_net_timeout
;
thd
->
slave_thread
=
0
;
thd
->
options
|=
OPTION_AUTO_IS_NULL
;
thd
->
client_capabilities
|=
CLIENT_MULTI_RESULTS
;
pthread_mutex_lock
(
&
LOCK_thread_count
);
thd
->
thread_id
=
thread_id
++
;
threads
.
append
(
thd
);
thread_count
++
;
thread_running
++
;
pthread_mutex_unlock
(
&
LOCK_thread_count
);
/*
Guarantees that we will see the thread in SHOW PROCESSLIST though its
vio is NULL.
*/
thd
->
proc_info
=
"Initialized"
;
thd
->
version
=
refresh_version
;
thd
->
set_time
();
DBUG_VOID_RETURN
;
}
/*
/*
Function that executes the scheduler,
Function that executes the scheduler,
...
@@ -259,33 +257,32 @@ event_worker_thread(void *arg)
...
@@ -259,33 +257,32 @@ event_worker_thread(void *arg)
thd
->
thread_stack
=
(
char
*
)
&
thd
;
// remember where our stack is
thd
->
thread_stack
=
(
char
*
)
&
thd
;
// remember where our stack is
DBUG_ENTER
(
"event_worker_thread"
);
DBUG_ENTER
(
"event_worker_thread"
);
if
(
post_init_event_thread
(
thd
))
if
(
!
post_init_event_thread
(
thd
))
goto
end
;
{
DBUG_PRINT
(
"info"
,
(
"Baikonur, time is %d, BURAN reporting and operational."
DBUG_PRINT
(
"info"
,
(
"Baikonur, time is %d, BURAN reporting and operational."
"THD=0x%lx"
,
time
(
NULL
),
thd
));
"THD=0x%lx"
,
time
(
NULL
),
thd
));
sql_print_information
(
"SCHEDULER: [%s.%s of %s] executing in thread %lu"
,
sql_print_information
(
"SCHEDULER: [%s.%s of %s] executing in thread %lu"
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
definer
.
str
,
thd
->
thread_id
);
event
->
definer
.
str
,
thd
->
thread_id
);
thd
->
enable_slow_log
=
TRUE
;
thd
->
enable_slow_log
=
TRUE
;
ret
=
event
->
execute
(
thd
);
ret
=
event
->
execute
(
thd
);
evex_print_warnings
(
thd
,
event
);
evex_print_warnings
(
thd
,
event
);
sql_print_information
(
"SCHEDULER: [%s.%s of %s] executed "
sql_print_information
(
"SCHEDULER: [%s.%s of %s] executed "
" in thread thread %lu. RetCode=%d"
,
" in thread thread %lu. RetCode=%d"
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
definer
.
str
,
thd
->
thread_id
,
ret
);
if
(
ret
==
EVEX_COMPILE_ERROR
)
sql_print_information
(
"SCHEDULER: COMPILE ERROR for event %s.%s of %s"
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
definer
.
str
);
event
->
definer
.
str
,
thd
->
thread_id
,
ret
);
else
if
(
ret
==
EVEX_MICROSECOND_UNSUP
)
if
(
ret
==
EVEX_COMPILE_ERROR
)
sql_print_information
(
"SCHEDULER: MICROSECOND is not supported"
);
sql_print_information
(
"SCHEDULER: COMPILE ERROR for event %s.%s of %s"
,
event
->
dbname
.
str
,
event
->
name
.
str
,
event
->
definer
.
str
);
else
if
(
ret
==
EVEX_MICROSECOND_UNSUP
)
sql_print_information
(
"SCHEDULER: MICROSECOND is not supported"
);
}
end:
end:
DBUG_PRINT
(
"info"
,
(
"BURAN %s.%s is landing!"
,
event
->
dbname
.
str
,
DBUG_PRINT
(
"info"
,
(
"BURAN %s.%s is landing!"
,
event
->
dbname
.
str
,
event
->
name
.
str
));
event
->
name
.
str
));
...
@@ -293,7 +290,7 @@ event_worker_thread(void *arg)
...
@@ -293,7 +290,7 @@ event_worker_thread(void *arg)
deinit_event_thread
(
thd
);
deinit_event_thread
(
thd
);
DBUG_RETURN
(
0
);
//
Against gcc warnings
DBUG_RETURN
(
0
);
//
Can't return anything here
}
}
...
@@ -305,17 +302,15 @@ event_worker_thread(void *arg)
...
@@ -305,17 +302,15 @@ event_worker_thread(void *arg)
Event_scheduler::init_scheduler()
Event_scheduler::init_scheduler()
*/
*/
bool
void
Event_scheduler
::
init_scheduler
(
Event_queue
*
q
)
Event_scheduler
::
init_scheduler
(
Event_queue
*
q
)
{
{
LOCK_SCHEDULER_DATA
();
LOCK_DATA
();
thread_id
=
0
;
state
=
INITIALIZED
;
queue
=
q
;
queue
=
q
;
started_events
=
0
;
started_events
=
0
;
UNLOCK_SCHEDULER_DATA
()
;
thread_id
=
0
;
state
=
INITIALIZED
;
return
FALSE
;
UNLOCK_DATA
()
;
}
}
...
@@ -377,7 +372,7 @@ Event_scheduler::start()
...
@@ -377,7 +372,7 @@ Event_scheduler::start()
struct
scheduler_param
*
scheduler_param_value
;
struct
scheduler_param
*
scheduler_param_value
;
DBUG_ENTER
(
"Event_scheduler::start"
);
DBUG_ENTER
(
"Event_scheduler::start"
);
LOCK_
SCHEDULER_
DATA
();
LOCK_DATA
();
DBUG_PRINT
(
"info"
,
(
"state before action %s"
,
scheduler_states_names
[
state
]));
DBUG_PRINT
(
"info"
,
(
"state before action %s"
,
scheduler_states_names
[
state
]));
if
(
state
>
INITIALIZED
)
if
(
state
>
INITIALIZED
)
goto
end
;
goto
end
;
...
@@ -408,7 +403,7 @@ Event_scheduler::start()
...
@@ -408,7 +403,7 @@ Event_scheduler::start()
DBUG_PRINT
(
"info"
,
(
"Setting state go RUNNING"
));
DBUG_PRINT
(
"info"
,
(
"Setting state go RUNNING"
));
state
=
RUNNING
;
state
=
RUNNING
;
end:
end:
UNLOCK_
SCHEDULER_
DATA
();
UNLOCK_DATA
();
if
(
ret
&&
new_thd
)
if
(
ret
&&
new_thd
)
{
{
...
@@ -426,56 +421,6 @@ Event_scheduler::start()
...
@@ -426,56 +421,6 @@ Event_scheduler::start()
}
}
/*
Stops the scheduler (again). Waits for acknowledgement from the
scheduler that it has stopped - synchronous stopping.
SYNOPSIS
Event_scheduler::stop()
RETURN VALUE
FALSE OK
TRUE Error (not reported)
*/
bool
Event_scheduler
::
stop
()
{
THD
*
thd
=
current_thd
;
DBUG_ENTER
(
"Event_scheduler::stop"
);
DBUG_PRINT
(
"enter"
,
(
"thd=0x%lx"
,
current_thd
));
LOCK_SCHEDULER_DATA
();
DBUG_PRINT
(
"info"
,
(
"state before action %s"
,
scheduler_states_names
[
state
]));
if
(
state
!=
RUNNING
)
goto
end
;
state
=
STOPPING
;
DBUG_PRINT
(
"info"
,
(
"Manager thread has id %d"
,
thread_id
));
sql_print_information
(
"SCHEDULER: Killing manager thread %lu"
,
thread_id
);
pthread_cond_signal
(
&
COND_state
);
/* Guarantee we don't catch spurious signals */
sql_print_information
(
"SCHEDULER: Waiting the manager thread to reply"
);
do
{
DBUG_PRINT
(
"info"
,
(
"Waiting for COND_started_or_stopped from the manager "
"thread. Current value of state is %s . "
"workers count=%d"
,
scheduler_states_names
[
state
].
str
,
workers_count
()));
/* thd could be 0x0, when shutting down */
COND_STATE_WAIT
(
NULL
);
}
while
(
state
==
STOPPING
);
DBUG_PRINT
(
"info"
,
(
"Manager thread has cleaned up. Set state to INIT"
));
thread_id
=
0
;
end:
UNLOCK_SCHEDULER_DATA
();
DBUG_RETURN
(
FALSE
);
}
/*
/*
The main loop of the scheduler.
The main loop of the scheduler.
...
@@ -496,7 +441,7 @@ Event_scheduler::run(THD *thd)
...
@@ -496,7 +441,7 @@ Event_scheduler::run(THD *thd)
Event_job_data
*
job_data
;
Event_job_data
*
job_data
;
DBUG_ENTER
(
"Event_scheduler::run"
);
DBUG_ENTER
(
"Event_scheduler::run"
);
LOCK_
SCHEDULER_
DATA
();
LOCK_DATA
();
thread_id
=
thd
->
thread_id
;
thread_id
=
thd
->
thread_id
;
sql_print_information
(
"SCHEDULER: Manager thread started with id %lu"
,
sql_print_information
(
"SCHEDULER: Manager thread started with id %lu"
,
...
@@ -529,7 +474,7 @@ Event_scheduler::run(THD *thd)
...
@@ -529,7 +474,7 @@ Event_scheduler::run(THD *thd)
COND_STATE_WAIT
(
NULL
);
COND_STATE_WAIT
(
NULL
);
thd
->
exit_cond
(
""
);
thd
->
exit_cond
(
""
);
DBUG_PRINT
(
"info"
,
(
"Woke up. Got COND_state"
));
DBUG_PRINT
(
"info"
,
(
"Woke up. Got COND_state"
));
LOCK_
SCHEDULER_
DATA
();
LOCK_DATA
();
}
}
else
if
(
abstime
.
tv_sec
)
else
if
(
abstime
.
tv_sec
)
{
{
...
@@ -545,16 +490,16 @@ Event_scheduler::run(THD *thd)
...
@@ -545,16 +490,16 @@ Event_scheduler::run(THD *thd)
1. Spurious wake-up
1. Spurious wake-up
2. The top of the queue was changed (new one becase of create/update)
2. The top of the queue was changed (new one becase of create/update)
*/
*/
/* This will do implicit UNLOCK_
SCHEDULER_
DATA() */
/* This will do implicit UNLOCK_DATA() */
thd
->
exit_cond
(
""
);
thd
->
exit_cond
(
""
);
DBUG_PRINT
(
"info"
,
(
"Woke up. Got COND_stat or time for execution."
));
DBUG_PRINT
(
"info"
,
(
"Woke up. Got COND_stat or time for execution."
));
LOCK_
SCHEDULER_
DATA
();
LOCK_DATA
();
}
}
else
else
{
{
UNLOCK_
SCHEDULER_
DATA
();
UNLOCK_DATA
();
res
=
execute_top
(
thd
,
job_data
);
res
=
execute_top
(
thd
,
job_data
);
LOCK_
SCHEDULER_
DATA
();
LOCK_DATA
();
if
(
res
)
if
(
res
)
break
;
break
;
++
started_events
;
++
started_events
;
...
@@ -565,7 +510,7 @@ Event_scheduler::run(THD *thd)
...
@@ -565,7 +510,7 @@ Event_scheduler::run(THD *thd)
pthread_cond_signal
(
&
COND_state
);
pthread_cond_signal
(
&
COND_state
);
error:
error:
state
=
INITIALIZED
;
state
=
INITIALIZED
;
UNLOCK_
SCHEDULER_
DATA
();
UNLOCK_DATA
();
sql_print_information
(
"SCHEDULER: Stopped"
);
sql_print_information
(
"SCHEDULER: Stopped"
);
DBUG_RETURN
(
res
);
DBUG_RETURN
(
res
);
...
@@ -627,23 +572,52 @@ Event_scheduler::execute_top(THD *thd, Event_job_data *job_data)
...
@@ -627,23 +572,52 @@ Event_scheduler::execute_top(THD *thd, Event_job_data *job_data)
/*
/*
Returns the current state of the scheduler
Stops the scheduler (again). Waits for acknowledgement from the
scheduler that it has stopped - synchronous stopping.
SYNOPSIS
SYNOPSIS
Event_scheduler::
get_state
()
Event_scheduler::
stop
()
RETURN VALUE
RETURN VALUE
The state of the scheduler (INITIALIZED | RUNNING | STOPPING)
FALSE OK
TRUE Error (not reported)
*/
*/
enum
Event_scheduler
::
enum_state
bool
Event_scheduler
::
get_state
()
Event_scheduler
::
stop
()
{
{
enum
Event_scheduler
::
enum_state
ret
;
THD
*
thd
=
current_thd
;
LOCK_SCHEDULER_DATA
();
DBUG_ENTER
(
"Event_scheduler::stop"
);
ret
=
state
;
DBUG_PRINT
(
"enter"
,
(
"thd=0x%lx"
,
current_thd
));
UNLOCK_SCHEDULER_DATA
();
return
ret
;
LOCK_DATA
();
DBUG_PRINT
(
"info"
,
(
"state before action %s"
,
scheduler_states_names
[
state
]));
if
(
state
!=
RUNNING
)
goto
end
;
state
=
STOPPING
;
DBUG_PRINT
(
"info"
,
(
"Manager thread has id %d"
,
thread_id
));
sql_print_information
(
"SCHEDULER: Killing manager thread %lu"
,
thread_id
);
pthread_cond_signal
(
&
COND_state
);
/* Guarantee we don't catch spurious signals */
sql_print_information
(
"SCHEDULER: Waiting the manager thread to reply"
);
do
{
DBUG_PRINT
(
"info"
,
(
"Waiting for COND_started_or_stopped from the manager "
"thread. Current value of state is %s . "
"workers count=%d"
,
scheduler_states_names
[
state
].
str
,
workers_count
()));
/* thd could be 0x0, when shutting down */
COND_STATE_WAIT
(
NULL
);
}
while
(
state
==
STOPPING
);
DBUG_PRINT
(
"info"
,
(
"Manager thread has cleaned up. Set state to INIT"
));
thread_id
=
0
;
end:
UNLOCK_DATA
();
DBUG_RETURN
(
FALSE
);
}
}
...
@@ -697,7 +671,7 @@ Event_scheduler::queue_changed()
...
@@ -697,7 +671,7 @@ Event_scheduler::queue_changed()
/*
/*
Auxiliary function for locking LOCK_scheduler_state. Used
Auxiliary function for locking LOCK_scheduler_state. Used
by the LOCK_
SCHEDULER_
DATA macro.
by the LOCK_DATA macro.
SYNOPSIS
SYNOPSIS
Event_scheduler::lock_data()
Event_scheduler::lock_data()
...
@@ -720,7 +694,7 @@ Event_scheduler::lock_data(const char *func, uint line)
...
@@ -720,7 +694,7 @@ Event_scheduler::lock_data(const char *func, uint line)
/*
/*
Auxiliary function for unlocking LOCK_scheduler_state. Used
Auxiliary function for unlocking LOCK_scheduler_state. Used
by the UNLOCK_
SCHEDULER_
DATA macro.
by the UNLOCK_DATA macro.
SYNOPSIS
SYNOPSIS
Event_scheduler::unlock_data()
Event_scheduler::unlock_data()
...
@@ -754,29 +728,51 @@ Event_scheduler::unlock_data(const char *func, uint line)
...
@@ -754,29 +728,51 @@ Event_scheduler::unlock_data(const char *func, uint line)
*/
*/
void
void
Event_scheduler
::
cond_wait
(
struct
timespec
*
abstime
,
Event_scheduler
::
cond_wait
(
struct
timespec
*
abstime
,
const
char
*
func
,
const
char
*
func
,
uint
line
)
uint
line
)
{
{
DBUG_ENTER
(
"Event_scheduler::cond_wait"
);
waiting_on_cond
=
TRUE
;
waiting_on_cond
=
TRUE
;
mutex_last_unlocked_at_line
=
line
;
mutex_last_unlocked_at_line
=
line
;
mutex_scheduler_data_locked
=
FALSE
;
mutex_scheduler_data_locked
=
FALSE
;
mutex_last_unlocked_in_func
=
func
;
mutex_last_unlocked_in_func
=
func
;
if
(
!
abstime
)
if
(
abstime
)
pthread_cond_timedwait
(
&
COND_state
,
&
LOCK_scheduler_state
,
abstime
);
else
pthread_cond_wait
(
&
COND_state
,
&
LOCK_scheduler_state
);
pthread_cond_wait
(
&
COND_state
,
&
LOCK_scheduler_state
);
else
pthread_cond_timedwait
(
&
COND_state
,
&
LOCK_scheduler_state
,
abstime
);
mutex_last_locked_in_func
=
func
;
mutex_last_locked_in_func
=
func
;
mutex_last_locked_at_line
=
line
;
mutex_last_locked_at_line
=
line
;
mutex_scheduler_data_locked
=
TRUE
;
mutex_scheduler_data_locked
=
TRUE
;
waiting_on_cond
=
FALSE
;
waiting_on_cond
=
FALSE
;
}
DBUG_VOID_RETURN
;
/*
Returns the current state of the scheduler
SYNOPSIS
Event_scheduler::get_state()
RETURN VALUE
The state of the scheduler (INITIALIZED | RUNNING | STOPPING)
*/
enum
Event_scheduler
::
enum_state
Event_scheduler
::
get_state
()
{
enum
Event_scheduler
::
enum_state
ret
;
DBUG_ENTER
(
"Event_scheduler::get_state"
);
LOCK_DATA
();
ret
=
state
;
UNLOCK_DATA
();
DBUG_RETURN
(
ret
);
}
}
/*
REMOVE THIS COMMENT AFTER PATCH REVIEW. USED TO HELP DIFF
Returns whether the scheduler was initialized.
*/
/*
/*
Dumps the internal status of the scheduler
Dumps the internal status of the scheduler
...
@@ -805,80 +801,82 @@ Event_scheduler::dump_internal_status(THD *thd)
...
@@ -805,80 +801,82 @@ Event_scheduler::dump_internal_status(THD *thd)
tmp_string
.
length
(
0
);
tmp_string
.
length
(
0
);
int_string
.
length
(
0
);
int_string
.
length
(
0
);
protocol
->
prepare_for_resend
();
do
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler state"
),
scs
);
{
protocol
->
store
(
scheduler_states_names
[
state
].
str
,
protocol
->
prepare_for_resend
();
scheduler_states_names
[
state
].
length
,
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler state"
),
scs
);
protocol
->
store
(
scheduler_states_names
[
state
].
str
,
scheduler_states_names
[
state
].
length
,
scs
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* thread_id */
/* thread_id */
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"thread_id"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"thread_id"
),
scs
);
if
(
thread_id
)
if
(
thread_id
)
{
{
int_string
.
set
((
longlong
)
thread_id
,
scs
);
int_string
.
set
((
longlong
)
thread_id
,
scs
);
protocol
->
store
(
&
int_string
);
protocol
->
store
(
&
int_string
);
}
}
else
else
protocol
->
store_null
();
protocol
->
store_null
();
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* last locked at*/
/* last locked at*/
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler last locked at"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler last locked at"
),
scs
);
tmp_string
.
length
(
scs
->
cset
->
snprintf
(
scs
,
(
char
*
)
tmp_string
.
ptr
(),
tmp_string
.
length
(
scs
->
cset
->
snprintf
(
scs
,
(
char
*
)
tmp_string
.
ptr
(),
tmp_string
.
alloced_length
(),
"%s::%d"
,
tmp_string
.
alloced_length
(),
"%s::%d"
,
mutex_last_locked_in_func
,
mutex_last_locked_in_func
,
mutex_last_locked_at_line
));
mutex_last_locked_at_line
));
protocol
->
store
(
&
tmp_string
);
protocol
->
store
(
&
tmp_string
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* last unlocked at*/
/* last unlocked at*/
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler last unlocked at"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler last unlocked at"
),
scs
);
tmp_string
.
length
(
scs
->
cset
->
snprintf
(
scs
,
(
char
*
)
tmp_string
.
ptr
(),
tmp_string
.
length
(
scs
->
cset
->
snprintf
(
scs
,
(
char
*
)
tmp_string
.
ptr
(),
tmp_string
.
alloced_length
(),
"%s::%d"
,
tmp_string
.
alloced_length
(),
"%s::%d"
,
mutex_last_unlocked_in_func
,
mutex_last_unlocked_in_func
,
mutex_last_unlocked_at_line
));
mutex_last_unlocked_at_line
));
protocol
->
store
(
&
tmp_string
);
protocol
->
store
(
&
tmp_string
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* waiting on */
/* waiting on */
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler waiting on condition"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler waiting on condition"
),
scs
);
int_string
.
set
((
longlong
)
waiting_on_cond
,
scs
);
int_string
.
set
((
longlong
)
waiting_on_cond
,
scs
);
protocol
->
store
(
&
int_string
);
protocol
->
store
(
&
int_string
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* workers_count */
/* workers_count */
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler workers count"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler workers count"
),
scs
);
int_string
.
set
((
longlong
)
workers_count
(),
scs
);
int_string
.
set
((
longlong
)
workers_count
(),
scs
);
protocol
->
store
(
&
int_string
);
protocol
->
store
(
&
int_string
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* workers_count */
/* workers_count */
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler executed events"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler executed events"
),
scs
);
int_string
.
set
((
longlong
)
started_events
,
scs
);
int_string
.
set
((
longlong
)
started_events
,
scs
);
protocol
->
store
(
&
int_string
);
protocol
->
store
(
&
int_string
);
if
((
ret
=
protocol
->
write
()))
if
((
ret
=
protocol
->
write
()))
goto
end
;
break
;
/* scheduler_data_locked */
/* scheduler_data_locked */
protocol
->
prepare_for_resend
();
protocol
->
prepare_for_resend
();
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler data locked"
),
scs
);
protocol
->
store
(
STRING_WITH_LEN
(
"scheduler data locked"
),
scs
);
int_string
.
set
((
longlong
)
mutex_scheduler_data_locked
,
scs
);
int_string
.
set
((
longlong
)
mutex_scheduler_data_locked
,
scs
);
protocol
->
store
(
&
int_string
);
protocol
->
store
(
&
int_string
);
ret
=
protocol
->
write
();
ret
=
protocol
->
write
();
end:
}
while
(
0
);
#endif
#endif
DBUG_RETURN
(
ret
);
DBUG_RETURN
(
ret
);
...
...
sql/event_scheduler.h
View file @
3f6de6c5
...
@@ -56,7 +56,7 @@ class Event_scheduler
...
@@ -56,7 +56,7 @@ class Event_scheduler
bool
bool
run
(
THD
*
thd
);
run
(
THD
*
thd
);
bool
void
init_scheduler
(
Event_queue
*
queue
);
init_scheduler
(
Event_queue
*
queue
);
void
void
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment