diff options
author | unknown <monty@hundin.mysql.fi> | 2002-01-30 15:32:48 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2002-01-30 15:32:48 +0200 |
commit | 22ab243303fc3b6f66e1951e0d9e3dd06754927d (patch) | |
tree | 0e248240e34cdf714bf85ad1ab61836e1725d64a /sql | |
parent | 5b968bb8ee49008e8adfba898472b20b0cf0524f (diff) | |
download | mariadb-git-22ab243303fc3b6f66e1951e0d9e3dd06754927d.tar.gz |
Added --sql-mode=NO_UNSIGNED_SUBTRACTION
Docs/manual.texi:
More information about UNSIGNED BIGINT arithmetic
sql/slave.cc:
Make binary logs 4G safe
sql/slave.h:
Make binary logs 4G safe
sql/sql_rename.cc:
cleanup
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item_func.cc | 15 | ||||
-rw-r--r-- | sql/item_func.h | 2 | ||||
-rw-r--r-- | sql/mysql_priv.h | 13 | ||||
-rw-r--r-- | sql/mysqld.cc | 6 | ||||
-rw-r--r-- | sql/slave.cc | 3 | ||||
-rw-r--r-- | sql/slave.h | 2 | ||||
-rw-r--r-- | sql/sql_rename.cc | 6 |
7 files changed, 33 insertions, 14 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 209fbea1674..5dcc638235f 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -280,6 +280,21 @@ longlong Item_func_plus::val_int() return (longlong) Item_func_plus::val(); } + +/* + The following function is here to allow the user to force + subtraction of UNSIGNED BIGINT to return negative values. +*/ + +void Item_func_minus::fix_length_and_dec() +{ + Item_num_op::fix_length_and_dec(); + if (unsigned_flag && + (current_thd->sql_mode & MODE_NO_UNSIGNED_SUBTRACTION)) + unsigned_flag=0; +} + + double Item_func_minus::val() { double value=args[0]->val() - args[1]->val(); diff --git a/sql/item_func.h b/sql/item_func.h index 578c3034b32..823bfb44a96 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -233,8 +233,10 @@ public: const char *func_name() const { return "-"; } double val(); longlong val_int(); + void fix_length_and_dec(); }; + class Item_func_mul :public Item_num_op { public: diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 8ccf0de27d6..81604a7ecfd 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -181,12 +181,13 @@ char* query_table_status(THD *thd,const char *db,const char *table_name); #define TMP_TABLE_ALL_COLUMNS (SELECT_NO_UNLOCK*2) -#define MODE_REAL_AS_FLOAT 1 -#define MODE_PIPES_AS_CONCAT 2 -#define MODE_ANSI_QUOTES 4 -#define MODE_IGNORE_SPACE 8 -#define MODE_SERIALIZABLE 16 -#define MODE_ONLY_FULL_GROUP_BY 32 +#define MODE_REAL_AS_FLOAT 1 +#define MODE_PIPES_AS_CONCAT 2 +#define MODE_ANSI_QUOTES 4 +#define MODE_IGNORE_SPACE 8 +#define MODE_SERIALIZABLE 16 +#define MODE_ONLY_FULL_GROUP_BY 32 +#define MODE_NO_UNSIGNED_SUBTRACTION 64 #define RAID_BLOCK_SIZE 1024 diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 983218e42d2..52a1206eab9 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -351,7 +351,7 @@ time_t start_time; ulong opt_sql_mode = 0L; const char *sql_mode_names[] = { "REAL_AS_FLOAT", "PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", - "SERIALIZE","ONLY_FULL_GROUP_BY", NullS }; + "SERIALIZE","ONLY_FULL_GROUP_BY", "NO_UNSIGNED_SUBTRACTION",NullS }; TYPELIB sql_mode_typelib= {array_elements(sql_mode_names)-1,"", sql_mode_names}; @@ -486,7 +486,6 @@ static void close_connections(void) HANDLE hTempPipe = &hPipe; DBUG_PRINT( "quit", ("Closing named pipes") ); hPipe = INVALID_HANDLE_VALUE; - CancelIo( hTempPipe ); DisconnectNamedPipe( hTempPipe ); CloseHandle( hTempPipe ); } @@ -3411,7 +3410,8 @@ static void usage(void) -t, --tmpdir=path Path for temporary files\n\ --sql-mode=option[,option[,option...]] where option can be one of:\n\ REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES,\n\ - IGNORE_SPACE, SERIALIZE, ONLY_FULL_GROUP_BY.\n\ + IGNORE_SPACE, SERIALIZE, ONLY_FULL_GROUP_BY,\n\ + NO_UNSIGNED_SUBTRACTION.\n\ --transaction-isolation\n\ Default transaction isolation level\n\ --temp-pool Use a pool of temporary files\n\ diff --git a/sql/slave.cc b/sql/slave.cc index 16c6751f853..f9dbf4641e6 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1541,7 +1541,7 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) */ /* TODO: I/O thread should not even log events with the same server id */ rli->inc_pos(ev->get_event_len(), - type_code != STOP_EVENT ? ev->log_pos : 0, + type_code != STOP_EVENT ? ev->log_pos : LL(0), 1/* skip lock*/); flush_relay_log_info(rli); if (rli->slave_skip_counter && /* protect against common user error of @@ -2297,7 +2297,6 @@ Log_event* next_event(RELAY_LOG_INFO* rli) DBUG_ASSERT(rli->cur_log_fd >= 0); my_close(rli->cur_log_fd, MYF(MY_WME)); rli->cur_log_fd = -1; - int error; // purge_first_log will properly set up relay log coordinates in rli if (rli->relay_log.purge_first_log(rli)) diff --git a/sql/slave.h b/sql/slave.h index db12ab91618..f60f2ce2954 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -176,7 +176,7 @@ typedef struct st_relay_log_info pending += val; } // TODO: this probably needs to be fixed - inline void inc_pos(ulonglong val, uint32 log_pos, bool skip_lock=0) + inline void inc_pos(ulonglong val, ulonglong log_pos, bool skip_lock=0) { if (!skip_lock) pthread_mutex_lock(&data_lock); diff --git a/sql/sql_rename.cc b/sql/sql_rename.cc index 2c4c6216ab7..f2a0351361b 100644 --- a/sql/sql_rename.cc +++ b/sql/sql_rename.cc @@ -35,8 +35,10 @@ bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list) TABLE_LIST *lock_table,*ren_table=0; DBUG_ENTER("mysql_rename_tables"); - /* Avoid problems with a rename on a table that we have locked or - if the user is trying to to do this in a transcation context */ + /* + Avoid problems with a rename on a table that we have locked or + if the user is trying to to do this in a transcation context + */ if (thd->locked_tables || thd->active_transaction()) { |