From 17c845bcddcfe929ef57fc081db449c7982926df Mon Sep 17 00:00:00 2001 From: "konstantin@mysql.com" <> Date: Sat, 28 Aug 2004 10:32:27 +0400 Subject: [PATCH] Microsoft VC++ won't compile class C { static const int I=1; }. Putting initialization into .cc will reduce compiler's abilities to optimize this constant away. Defines are not OK as they bloat global namespace. Looking for a way to declare an efficient named constant in reduced namespace (i. e. in a class). Let's try enums: normally they should be implicitly casted to int. Let's see if we really have a compiler which won't do that. --- libmysqld/lib_sql.cc | 4 ++-- sql/protocol.cc | 2 +- sql/protocol.h | 8 +++----- sql/protocol_cursor.cc | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index 1f37b115f6c..b1c0ef57fac 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -568,7 +568,7 @@ err: C_MODE_END -bool Protocol::send_fields(List *list, uint flags) +bool Protocol::send_fields(List *list, int flags) { List_iterator_fast it(*list); Item *item; @@ -615,7 +615,7 @@ bool Protocol::send_fields(List *list, uint flags) if (INTERNAL_NUM_FIELD(client_field)) client_field->flags|= NUM_FLAG; - if (flags & Protocol::SEND_DEFAULTS) + if (flags & (int) Protocol::SEND_DEFAULTS) { char buff[80]; String tmp(buff, sizeof(buff), default_charset_info), *res; diff --git a/sql/protocol.cc b/sql/protocol.cc index 75383001014..e14eafc86a2 100644 --- a/sql/protocol.cc +++ b/sql/protocol.cc @@ -498,7 +498,7 @@ void Protocol::init(THD *thd_arg) */ #ifndef EMBEDDED_LIBRARY -bool Protocol::send_fields(List *list, uint flags) +bool Protocol::send_fields(List *list, int flags) { List_iterator_fast it(*list); Item *item; diff --git a/sql/protocol.h b/sql/protocol.h index 8dc2f506c6c..1a5896a3ae5 100644 --- a/sql/protocol.h +++ b/sql/protocol.h @@ -51,10 +51,8 @@ public: virtual ~Protocol() {} void init(THD* thd_arg); - static const uint SEND_NUM_ROWS= 1; - static const uint SEND_DEFAULTS= 2; - static const uint SEND_EOF= 4; - virtual bool send_fields(List *list, uint flags); + enum { SEND_NUM_ROWS= 1, SEND_DEFAULTS= 2, SEND_EOF= 4 }; + virtual bool send_fields(List *list, int flags); bool send_records_num(List *list, ulonglong records); bool store(I_List *str_list); @@ -168,7 +166,7 @@ public: prev_record= &data; return Protocol_simple::prepare_for_send(item_list); } - bool send_fields(List *list, uint flags); + bool send_fields(List *list, int flags); bool write(); uint get_field_count() { return field_count; } }; diff --git a/sql/protocol_cursor.cc b/sql/protocol_cursor.cc index d2c99dcaebc..31eaa894045 100644 --- a/sql/protocol_cursor.cc +++ b/sql/protocol_cursor.cc @@ -26,7 +26,7 @@ #include "mysql_priv.h" #include -bool Protocol_cursor::send_fields(List *list, uint flags) +bool Protocol_cursor::send_fields(List *list, int flags) { List_iterator_fast it(*list); Item *item; @@ -67,7 +67,7 @@ bool Protocol_cursor::send_fields(List *list, uint flags) if (INTERNAL_NUM_FIELD(client_field)) client_field->flags|= NUM_FLAG; - if (flags & Protocol::SEND_DEFAULTS) + if (flags & (int) Protocol::SEND_DEFAULTS) { char buff[80]; String tmp(buff, sizeof(buff), default_charset_info), *res;