diff options
author | unknown <monty@narttu.mysql.fi> | 2003-03-16 19:17:54 +0200 |
---|---|---|
committer | unknown <monty@narttu.mysql.fi> | 2003-03-16 19:17:54 +0200 |
commit | a821703912e84b6be1f0a686f27e1c81a0040ff8 (patch) | |
tree | 956d20750d7fec498888d037be8d588dab6412f0 /sql/sql_insert.cc | |
parent | 59bf6f6ea5964cb2dab13f19e147c6780cf47860 (diff) | |
parent | bfbb0ad69df21854f2db5fb2b9c708b2a576929e (diff) | |
download | mariadb-git-a821703912e84b6be1f0a686f27e1c81a0040ff8.tar.gz |
Merge with 4.0
BitKeeper/etc/ignore:
auto-union
BitKeeper/etc/logging_ok:
auto-union
BitKeeper/deleted/.del-compile-netware-standard:
Delete: netware/BUILD/compile-netware-standard
BitKeeper/deleted/.del-mwenv:
Delete: netware/BUILD/mwenv
BitKeeper/deleted/.del-nwbootstrap:
Delete: netware/BUILD/nwbootstrap
BitKeeper/deleted/.del-compile-AUTOTOOLS:
Delete: netware/BUILD/compile-AUTOTOOLS
BitKeeper/deleted/.del-compile-linux-tools:
Delete: netware/BUILD/compile-linux-tools
BitKeeper/deleted/.del-compile-netware-END:
Delete: netware/BUILD/compile-netware-END
BitKeeper/deleted/.del-compile-netware-START:
Delete: netware/BUILD/compile-netware-START
BitKeeper/deleted/.del-compile-netware-all:
Delete: netware/BUILD/compile-netware-all
BitKeeper/deleted/.del-compile-netware-debug:
Delete: netware/BUILD/compile-netware-debug
BitKeeper/deleted/.del-mwasmnlm~bc5746809d67feb5:
Auto merged
BitKeeper/deleted/.del-mwenv~35c8b56062f4b6aa:
Auto merged
BitKeeper/deleted/.del-mwccnlm~be63afd25a14c3f:
Auto merged
BitKeeper/deleted/.del-mwldnlm~efb26c57cba3c980:
Auto merged
BitKeeper/deleted/.del-netware.patch~f70a3a965f54d9ee:
Auto merged
Docs/internals.texi:
Auto merged
VC++Files/bdb/bdb.dsp:
Auto merged
VC++Files/bdb/build_win32/Berkeley_DB.dsw:
Auto merged
VC++Files/bdb/build_win32/db_archive.dsp:
Auto merged
VC++Files/bdb/build_win32/db_buildall.dsp:
Auto merged
VC++Files/bdb/build_win32/db_checkpoint.dsp:
Auto merged
VC++Files/bdb/build_win32/db_deadlock.dsp:
Auto merged
VC++Files/bdb/build_win32/db_dll.dsp:
Auto merged
VC++Files/bdb/build_win32/db_dump.dsp:
Auto merged
VC++Files/bdb/build_win32/db_java.dsp:
Auto merged
VC++Files/bdb/build_win32/db_load.dsp:
Auto merged
VC++Files/bdb/build_win32/db_printlog.dsp:
Auto merged
VC++Files/bdb/build_win32/db_recover.dsp:
Auto merged
VC++Files/bdb/build_win32/db_stat.dsp:
Auto merged
VC++Files/bdb/build_win32/db_static.dsp:
Auto merged
VC++Files/bdb/build_win32/db_static1.dsp:
Auto merged
VC++Files/bdb/build_win32/db_tcl.dsp:
Auto merged
VC++Files/bdb/build_win32/db_test.dsp:
Auto merged
VC++Files/bdb/build_win32/db_upgrade.dsp:
Auto merged
VC++Files/bdb/build_win32/db_verify.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_access.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_btrec.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_env.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_lock.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_mpool.dsp:
Auto merged
VC++Files/bdb/build_win32/ex_tpcb.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_access.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_btrec.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_env.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_lock.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_mpool.dsp:
Auto merged
VC++Files/bdb/build_win32/excxx_tpcb.dsp:
Auto merged
VC++Files/client/mysql.dsp:
Auto merged
VC++Files/client/mysqladmin.dsp:
Auto merged
VC++Files/client/mysqlcheck.dsp:
Auto merged
VC++Files/client/mysqlclient.dsp:
Auto merged
VC++Files/client/mysqlclient.dsw:
Auto merged
VC++Files/client/mysqldump.dsp:
Auto merged
VC++Files/client/mysqlimport.dsp:
Auto merged
VC++Files/client/mysqlshow.dsp:
Auto merged
VC++Files/comp_err/comp_err.dsp:
Auto merged
VC++Files/contrib/asm386/zlibvc.dsp:
Auto merged
VC++Files/contrib/asm386/zlibvc.dsw:
Auto merged
VC++Files/contrib/minizip/zlibvc.dsp:
Auto merged
VC++Files/contrib/minizip/zlibvc.dsw:
Auto merged
VC++Files/dbug/dbug.dsp:
Auto merged
VC++Files/dbug/dbug.dsw:
Auto merged
VC++Files/heap/heap.dsp:
Auto merged
VC++Files/innobase/innobase.dsp:
Auto merged
VC++Files/isam/isam.dsp:
Auto merged
VC++Files/isam/isam.dsw:
Auto merged
VC++Files/isamchk/isamchk.dsp:
Auto merged
VC++Files/libmysql/libmysql.dsp:
Auto merged
VC++Files/libmysql/libmysql.dsw:
Auto merged
VC++Files/libmysqld/examples/test_libmysqld.dsp:
Auto merged
VC++Files/libmysqld/libmysqld.dsp:
Auto merged
VC++Files/libmysqltest/myTest.dsp:
Auto merged
VC++Files/libmysqltest/mytest.dsw:
Auto merged
VC++Files/merge/merge.dsp:
Auto merged
VC++Files/merge/merge.dsw:
Auto merged
VC++Files/my_print_defaults/my_print_defaults.dsp:
Auto merged
VC++Files/myisam/myisam.dsp:
Auto merged
VC++Files/myisamchk/myisamchk.dsp:
Auto merged
VC++Files/myisamlog/myisamlog.dsp:
Auto merged
VC++Files/myisammrg/myisammrg.dsp:
Auto merged
VC++Files/mysql.dsp:
Auto merged
VC++Files/mysql.dsw:
Auto merged
VC++Files/myisampack/myisampack.dsp:
Auto merged
VC++Files/mysqlbinlog/mysqlbinlog.dsp:
Auto merged
VC++Files/mysqlcheck/mysqlcheck.dsp:
Auto merged
VC++Files/mysqldemb/mysqldemb.dsp:
Auto merged
VC++Files/mysqlmanager/MySqlManager.dsp:
Auto merged
VC++Files/mysqlmanager/mysqlmanager.dsw:
Auto merged
VC++Files/mysqlserver/mysqlserver.dsp:
Auto merged
VC++Files/mysqlshutdown/myshutdown.dsp:
Auto merged
VC++Files/mysqlshutdown/mysqlshutdown.dsp:
Auto merged
VC++Files/mysqlwatch/mysqlwatch.dsp:
Auto merged
VC++Files/mysys/mysys.dsp:
Auto merged
VC++Files/mysys/mysys.dsw:
Auto merged
VC++Files/pack_isam/pack_isam.dsp:
Auto merged
VC++Files/perror/perror.dsp:
Auto merged
VC++Files/regex/regex.dsp:
Auto merged
VC++Files/regex/regex.dsw:
Auto merged
VC++Files/replace/replace.dsp:
Auto merged
VC++Files/sql/mysqld.dsw:
Auto merged
VC++Files/sql/mysqldmax.dsp:
Auto merged
VC++Files/sql/old/mysqld.dsw:
Auto merged
VC++Files/strings/MASM6x/strings.dsp:
Auto merged
VC++Files/strings/MASM6x/strings.dsw:
Auto merged
VC++Files/strings/backup/strings.dsp:
Auto merged
VC++Files/strings/backup/strings.dsw:
Auto merged
VC++Files/strings/noMASM/strings.dsp:
Auto merged
VC++Files/strings/noMASM/strings.dsw:
Auto merged
VC++Files/strings/strings.dsw:
Auto merged
VC++Files/test1/test1.dsp:
Auto merged
VC++Files/thr_insert_test/thr_insert_test.dsp:
Auto merged
VC++Files/thr_test/thr_test.dsp:
Auto merged
VC++Files/vio/vio.dsp:
Auto merged
VC++Files/zlib/zlib.dsp:
Auto merged
client/mysqlbinlog.cc:
Auto merged
client/mysqlshow.c:
Auto merged
include/my_global.h:
Auto merged
include/my_sys.h:
Auto merged
include/myisam.h:
Auto merged
include/thr_lock.h:
Auto merged
include/violite.h:
Auto merged
innobase/buf/buf0buf.c:
Auto merged
innobase/os/os0file.c:
Auto merged
innobase/row/row0sel.c:
Auto merged
innobase/srv/srv0start.c:
Auto merged
innobase/trx/trx0sys.c:
Auto merged
libmysqld/lib_vio.c:
Auto merged
myisam/mi_create.c:
Auto merged
mysql-test/Makefile.am:
Auto merged
mysql-test/r/create.result:
Auto merged
mysql-test/r/group_by.result:
Auto merged
mysql-test/r/innodb.result:
Auto merged
mysql-test/r/join.result:
Auto merged
mysql-test/r/rpl000001.result:
Auto merged
mysql-test/r/select.result:
Auto merged
mysql-test/t/auto_increment.test:
Auto merged
mysql-test/t/create.test:
Auto merged
mysql-test/t/func_like.test:
Auto merged
mysql-test/t/group_by.test:
Auto merged
mysql-test/t/innodb.test:
Auto merged
mysql-test/t/join.test:
Auto merged
mysql-test/t/type_datetime.test:
Auto merged
mysql-test/t/type_timestamp.test:
Auto merged
mysys/default.c:
Auto merged
mysys/thr_lock.c:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
scripts/mysqld_safe.sh:
Auto merged
sql/filesort.cc:
Auto merged
sql/ha_innodb.h:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/lock.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/mf_iocache.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/net_serv.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/repl_failsafe.h:
Auto merged
sql/slave.cc:
Auto merged
sql/slave.h:
Auto merged
sql/sql_analyse.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql-bench/crash-me.sh:
Auto merged
sql/share/polish/errmsg.txt:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_rename.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_repl.h:
Auto merged
sql/sql_update.cc:
Auto merged
sql/stacktrace.c:
Auto merged
sql/table.cc:
Auto merged
sql/unireg.h:
Auto merged
strings/ctype-tis620.c:
Auto merged
strings/t_ctype.h:
Auto merged
support-files/mysql.spec.sh:
Auto merged
tests/grant.res:
Auto merged
vio/viosocket.c:
Auto merged
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r-- | sql/sql_insert.cc | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 9ca51ebc053..dcb39f8526f 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -23,7 +23,7 @@ static int check_null_fields(THD *thd,TABLE *entry); static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list); static int write_delayed(THD *thd,TABLE *table, enum_duplicates dup, - char *query, uint query_length, bool log_on); + char *query, uint query_length, int log_on); static void end_delayed_insert(THD *thd); extern "C" pthread_handler_decl(handle_delayed_insert,arg); static void unlink_blobs(register TABLE *table); @@ -38,6 +38,8 @@ static void unlink_blobs(register TABLE *table); #define my_safe_afree(ptr, size, min_length) if (size > min_length) my_free(ptr,MYF(0)) #endif +#define DELAYED_LOG_UPDATE 1 +#define DELAYED_LOG_BIN 2 /* Check if insert fields are correct @@ -107,8 +109,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, enum_duplicates duplic) { int error; - bool log_on= ((thd->options & OPTION_UPDATE_LOG) || - !(thd->master_access & SUPER_ACL)); + /* + log_on is about delayed inserts only. + By default, both logs are enabled (this won't cause problems if the server + runs without --log-update or --log-bin). + */ + int log_on= DELAYED_LOG_UPDATE | DELAYED_LOG_BIN ; + bool transactional_table, log_delayed, bulk_insert; uint value_count; ulong counter = 1; @@ -123,6 +130,14 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, thd->lex.select_lex.table_list.first; DBUG_ENTER("mysql_insert"); + if (thd->master_access & SUPER_ACL) + { + if (!(thd->options & OPTION_UPDATE_LOG)) + log_on&= ~(int) DELAYED_LOG_UPDATE; + if (!(thd->options & OPTION_BIN_LOG)) + log_on&= ~(int) DELAYED_LOG_BIN; + } + /* in safe mode or with skip-new change delayed insert to be regular if we are told to replace duplicates, the insert cannot be concurrent @@ -130,7 +145,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, */ if ((lock_type == TL_WRITE_DELAYED && ((specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) || - thd->slave_thread)) || + thd->slave_thread || !max_insert_delayed_threads)) || (lock_type == TL_WRITE_CONCURRENT_INSERT && duplic == DUP_REPLACE) || (duplic == DUP_UPDATE)) lock_type=TL_WRITE; @@ -547,12 +562,13 @@ public: char *record,*query; enum_duplicates dup; time_t start_time; - bool query_start_used,last_insert_id_used,insert_id_used,log_query; + bool query_start_used,last_insert_id_used,insert_id_used; + int log_query; ulonglong last_insert_id; ulong time_stamp; uint query_length; - delayed_row(enum_duplicates dup_arg, bool log_query_arg) + delayed_row(enum_duplicates dup_arg, int log_query_arg) :record(0),query(0),dup(dup_arg),log_query(log_query_arg) {} ~delayed_row() { @@ -855,7 +871,7 @@ TABLE *delayed_insert::get_local_table(THD* client_thd) /* Put a question in queue */ static int write_delayed(THD *thd,TABLE *table,enum_duplicates duplic, - char *query, uint query_length, bool log_on) + char *query, uint query_length, int log_on) { delayed_row *row=0; delayed_insert *di=thd->di; @@ -1242,13 +1258,14 @@ bool delayed_insert::handle_inserts(void) using_ignore=0; table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); } - if (row->query && row->log_query) + if (row->query) { - mysql_update_log.write(&thd,row->query, row->query_length); - if (using_bin_log) + if (row->log_query & DELAYED_LOG_UPDATE) + mysql_update_log.write(&thd,row->query, row->query_length); + if (row->log_query & DELAYED_LOG_BIN && using_bin_log) { - Query_log_event qinfo(&thd, row->query, row->query_length,0); - mysql_bin_log.write(&qinfo); + Query_log_event qinfo(&thd, row->query, row->query_length,0); + mysql_bin_log.write(&qinfo); } } if (table->blob_fields) @@ -1399,6 +1416,14 @@ bool select_insert::send_eof() if (!(error=table->file->extra(HA_EXTRA_NO_CACHE))) error=table->file->activate_all_index(thd); table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); + + /* Write to binlog before commiting transaction */ + if (mysql_bin_log.is_open()) + { + Query_log_event qinfo(thd, thd->query, thd->query_length, + table->file->has_transactions()); + mysql_bin_log.write(&qinfo); + } if ((error2=ha_autocommit_or_rollback(thd,error)) && ! error) error=error2; if (info.copied || info.deleted) @@ -1425,12 +1450,6 @@ bool select_insert::send_eof() thd->insert_id(last_insert_id); // For update log ::send_ok(thd,info.copied,last_insert_id,buff); mysql_update_log.write(thd,thd->query,thd->query_length); - if (mysql_bin_log.is_open()) - { - Query_log_event qinfo(thd, thd->query, thd->query_length, - table->file->has_transactions()); - mysql_bin_log.write(&qinfo); - } return 0; } } |