mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fix so that INSERT DELAYED cares about SQL_LOG_BIN=0 (bug #104)
This commit is contained in:
@@ -23,7 +23,7 @@
|
|||||||
static int check_null_fields(THD *thd,TABLE *entry);
|
static int check_null_fields(THD *thd,TABLE *entry);
|
||||||
static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list);
|
static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list);
|
||||||
static int write_delayed(THD *thd,TABLE *table, enum_duplicates dup,
|
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);
|
static void end_delayed_insert(THD *thd);
|
||||||
extern "C" pthread_handler_decl(handle_delayed_insert,arg);
|
extern "C" pthread_handler_decl(handle_delayed_insert,arg);
|
||||||
static void unlink_blobs(register TABLE *table);
|
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))
|
#define my_safe_afree(ptr, size, min_length) if (size > min_length) my_free(ptr,MYF(0))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DELAYED_LOG_UPDATE 1
|
||||||
|
#define DELAYED_LOG_BIN 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Check if insert fields are correct
|
Check if insert fields are correct
|
||||||
@@ -103,8 +105,13 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
|
|||||||
List<List_item> &values_list,enum_duplicates duplic)
|
List<List_item> &values_list,enum_duplicates duplic)
|
||||||
{
|
{
|
||||||
int error;
|
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;
|
bool transactional_table, log_delayed, bulk_insert;
|
||||||
uint value_count;
|
uint value_count;
|
||||||
ulong counter = 1;
|
ulong counter = 1;
|
||||||
@@ -117,6 +124,14 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
|
|||||||
thr_lock_type lock_type = table_list->lock_type;
|
thr_lock_type lock_type = table_list->lock_type;
|
||||||
DBUG_ENTER("mysql_insert");
|
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
|
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
|
if we are told to replace duplicates, the insert cannot be concurrent
|
||||||
@@ -494,12 +509,13 @@ public:
|
|||||||
char *record,*query;
|
char *record,*query;
|
||||||
enum_duplicates dup;
|
enum_duplicates dup;
|
||||||
time_t start_time;
|
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;
|
ulonglong last_insert_id;
|
||||||
ulong time_stamp;
|
ulong time_stamp;
|
||||||
uint query_length;
|
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) {}
|
:record(0),query(0),dup(dup_arg),log_query(log_query_arg) {}
|
||||||
~delayed_row()
|
~delayed_row()
|
||||||
{
|
{
|
||||||
@@ -802,7 +818,7 @@ TABLE *delayed_insert::get_local_table(THD* client_thd)
|
|||||||
/* Put a question in queue */
|
/* Put a question in queue */
|
||||||
|
|
||||||
static int write_delayed(THD *thd,TABLE *table,enum_duplicates duplic,
|
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_row *row=0;
|
||||||
delayed_insert *di=thd->di;
|
delayed_insert *di=thd->di;
|
||||||
@@ -1189,10 +1205,11 @@ bool delayed_insert::handle_inserts(void)
|
|||||||
using_ignore=0;
|
using_ignore=0;
|
||||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||||
}
|
}
|
||||||
if (row->query && row->log_query)
|
if (row->query)
|
||||||
{
|
{
|
||||||
|
if (row->log_query & DELAYED_LOG_UPDATE)
|
||||||
mysql_update_log.write(&thd,row->query, row->query_length);
|
mysql_update_log.write(&thd,row->query, row->query_length);
|
||||||
if (using_bin_log)
|
if (row->log_query & DELAYED_LOG_BIN && using_bin_log)
|
||||||
{
|
{
|
||||||
Query_log_event qinfo(&thd, row->query, row->query_length,0);
|
Query_log_event qinfo(&thd, row->query, row->query_length,0);
|
||||||
mysql_bin_log.write(&qinfo);
|
mysql_bin_log.write(&qinfo);
|
||||||
|
Reference in New Issue
Block a user