From 73328544355f091bf6a44673adc3e2b7c60335e4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 17 Jul 2006 20:40:41 +0200 Subject: [PATCH 1/2] Changes to make "sql/sql_locale.cc" compile + link on Windows: 1) When initializing a boolean variable, do not use string representations '"false"' and '"true"' but rather the boolean values 'false' and 'true'. 2) Add the module to the various Windows description files. VC++Files/libmysqld/libmysqld.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/libmysqld/libmysqld.vcproj: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/libmysqld/libmysqld_ia64.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/mysqldemb/mysqldemb.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/mysqldemb/mysqldemb.vcproj: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/mysqldemb/mysqldemb_ia64.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/sql/mysqld.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/sql/mysqld.vcproj: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/sql/mysqld_ia64.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/sql/mysqldmax.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. VC++Files/sql/mysqldmax_ia64.dsp: Add "sql/sql_locale.cpp" with similar settings as the other files. sql/sql_locale.cc: When initializing a boolean variable, do not use stringrepresentations '"false"' and '"true"' but rather the boolean values 'false' and 'true'. --- VC++Files/libmysqld/libmysqld.dsp | 4 + VC++Files/libmysqld/libmysqld.vcproj | 36 ++++ VC++Files/libmysqld/libmysqld_ia64.dsp | 4 + VC++Files/mysqldemb/mysqldemb.dsp | 4 + VC++Files/mysqldemb/mysqldemb.vcproj | 36 ++++ VC++Files/mysqldemb/mysqldemb_ia64.dsp | 4 + VC++Files/sql/mysqld.dsp | 4 + VC++Files/sql/mysqld.vcproj | 76 +++++++++ VC++Files/sql/mysqld_ia64.dsp | 4 + VC++Files/sql/mysqldmax.dsp | 16 ++ VC++Files/sql/mysqldmax_ia64.dsp | 25 +++ sql/sql_locale.cc | 218 ++++++++++++------------- 12 files changed, 322 insertions(+), 109 deletions(-) diff --git a/VC++Files/libmysqld/libmysqld.dsp b/VC++Files/libmysqld/libmysqld.dsp index 0e3e6af03f0..a07f94ef135 100644 --- a/VC++Files/libmysqld/libmysqld.dsp +++ b/VC++Files/libmysqld/libmysqld.dsp @@ -468,6 +468,10 @@ SOURCE=..\sql\sql_load.cpp # End Source File # Begin Source File +SOURCE=..\sql\sql_locale.cpp +# End Source File +# Begin Source File + SOURCE=..\sql\sql_manager.cpp # End Source File # Begin Source File diff --git a/VC++Files/libmysqld/libmysqld.vcproj b/VC++Files/libmysqld/libmysqld.vcproj index ecbd7383478..a557290117b 100644 --- a/VC++Files/libmysqld/libmysqld.vcproj +++ b/VC++Files/libmysqld/libmysqld.vcproj @@ -2945,6 +2945,42 @@ PreprocessorDefinitions="WIN32;_WINDOWS;USE_SYMDIR;SIGNAL_WITH_VIO_CLOSE;HAVE_DLOPEN;EMBEDDED_LIBRARY;USE_TLS;__WIN__;LICENSE=Commercial;DBUG_OFF;_MBCS;NDEBUG;$(NoInherit)"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Date: Wed, 19 Jul 2006 15:55:04 +0200 Subject: [PATCH 2/2] Bug #21135 Crash in test "func_time" - backport patch from 5.0 - "table" can be NULL in temporary fields used for type conversion sql/field.cc: table can be NULL in temporary fields used for type conversion. Store value in field as if db_low_byte_first was set. sql/field.h: table can be NULL in temporary fields used for type conversion. Store value in field as if db_low_byte_first was set. --- sql/field.cc | 46 +++++++++++++++++++++++----------------------- sql/field.h | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 3cb0c0d3a7c..ec9fb769fad 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3680,7 +3680,7 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs) error= 2; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,tmp); } @@ -3738,7 +3738,7 @@ int Field_timestamp::store(longlong nr) nr, MYSQL_TIMESTAMP_DATETIME, 1); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,timestamp); } @@ -3762,7 +3762,7 @@ longlong Field_timestamp::val_int(void) THD *thd= table->in_use; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) temp=uint4korr(ptr); else #endif @@ -3792,7 +3792,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr) val_buffer->length(field_length); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) temp=uint4korr(ptr); else #endif @@ -3857,7 +3857,7 @@ bool Field_timestamp::get_date(TIME *ltime, uint fuzzydate) long temp; THD *thd= table->in_use; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) temp=uint4korr(ptr); else #endif @@ -3894,7 +3894,7 @@ int Field_timestamp::cmp(const char *a_ptr, const char *b_ptr) { int32 a,b; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { a=sint4korr(a_ptr); b=sint4korr(b_ptr); @@ -3912,7 +3912,7 @@ int Field_timestamp::cmp(const char *a_ptr, const char *b_ptr) void Field_timestamp::sort_string(char *to,uint length __attribute__((unused))) { #ifdef WORDS_BIGENDIAN - if (!table->db_low_byte_first) + if (!table || !table->db_low_byte_first) { to[0] = ptr[0]; to[1] = ptr[1]; @@ -3941,7 +3941,7 @@ void Field_timestamp::set_time() long tmp= (long) table->in_use->query_start(); set_notnull(); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,tmp); } @@ -4329,7 +4329,7 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs) from, len, MYSQL_TIMESTAMP_DATE, 1); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,tmp); } @@ -4357,7 +4357,7 @@ int Field_date::store(double nr) else tmp=(long) rint(nr); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,tmp); } @@ -4385,7 +4385,7 @@ int Field_date::store(longlong nr) else tmp=(long) nr; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int4store(ptr,tmp); } @@ -4411,7 +4411,7 @@ double Field_date::val_real(void) { int32 j; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) j=sint4korr(ptr); else #endif @@ -4423,7 +4423,7 @@ longlong Field_date::val_int(void) { int32 j; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) j=sint4korr(ptr); else #endif @@ -4438,7 +4438,7 @@ String *Field_date::val_str(String *val_buffer, val_buffer->alloc(field_length); int32 tmp; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) tmp=sint4korr(ptr); else #endif @@ -4456,7 +4456,7 @@ int Field_date::cmp(const char *a_ptr, const char *b_ptr) { int32 a,b; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { a=sint4korr(a_ptr); b=sint4korr(b_ptr); @@ -4474,7 +4474,7 @@ int Field_date::cmp(const char *a_ptr, const char *b_ptr) void Field_date::sort_string(char *to,uint length __attribute__((unused))) { #ifdef WORDS_BIGENDIAN - if (!table->db_low_byte_first) + if (!table || !table->db_low_byte_first) { to[0] = ptr[0]; to[1] = ptr[1]; @@ -4698,7 +4698,7 @@ int Field_datetime::store(const char *from,uint len,CHARSET_INFO *cs) from, len, MYSQL_TIMESTAMP_DATETIME, 1); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int8store(ptr,tmp); } @@ -4739,7 +4739,7 @@ int Field_datetime::store(longlong nr) MYSQL_TIMESTAMP_DATETIME, 1); #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int8store(ptr,nr); } @@ -4766,7 +4766,7 @@ void Field_datetime::store_time(TIME *ltime,timestamp_type type) set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1); } #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { int8store(ptr,tmp); } @@ -4792,7 +4792,7 @@ longlong Field_datetime::val_int(void) { longlong j; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) j=sint8korr(ptr); else #endif @@ -4812,7 +4812,7 @@ String *Field_datetime::val_str(String *val_buffer, int part3; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) tmp=sint8korr(ptr); else #endif @@ -4877,7 +4877,7 @@ int Field_datetime::cmp(const char *a_ptr, const char *b_ptr) { longlong a,b; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) { a=sint8korr(a_ptr); b=sint8korr(b_ptr); @@ -4895,7 +4895,7 @@ int Field_datetime::cmp(const char *a_ptr, const char *b_ptr) void Field_datetime::sort_string(char *to,uint length __attribute__((unused))) { #ifdef WORDS_BIGENDIAN - if (!table->db_low_byte_first) + if (!table || !table->db_low_byte_first) { to[0] = ptr[0]; to[1] = ptr[1]; diff --git a/sql/field.h b/sql/field.h index 966549516b1..a33cb0a93aa 100644 --- a/sql/field.h +++ b/sql/field.h @@ -713,7 +713,7 @@ public: if ((*null_value= is_null())) return 0; #ifdef WORDS_BIGENDIAN - if (table->db_low_byte_first) + if (table && table->db_low_byte_first) return sint4korr(ptr); #endif long tmp;