diff options
author | unknown <monty@mysql.com> | 2005-01-15 17:38:43 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2005-01-15 17:38:43 +0200 |
commit | 6ead860060ebeae29f46d6c89f0bf7a45e748819 (patch) | |
tree | 9532a0d754f20c628deab518965a132839dbb1cb /sql | |
parent | 2f246d2ff62ff284f035208fa9de98f1508d94ec (diff) | |
download | mariadb-git-6ead860060ebeae29f46d6c89f0bf7a45e748819.tar.gz |
After merge fixes
Fix for BIT(X) field as string
mysql-test/r/func_gconcat.result:
Fix wrong merge
mysql-test/r/func_sapdb.result:
Use results so that dimitry can fix them properly
mysql-test/r/innodb.result:
Update test after fast TRUNCATE in InnoDB
mysql-test/r/ps_1general.result:
After megre fixes
mysql-test/r/type_bit.result:
New test to verify patch for Bit fields
mysql-test/t/ps_1general.test:
After merge fixes
mysql-test/t/type_bit.test:
New test to verify patch for Bit fields
sql/field.cc:
Fix for new my_strntod()
Fix for BIT(X) field as string
sql/item.h:
Fix for new my_strntod()
sql/item_func.h:
Fix for new my_strntod()
sql/item_sum.h:
Fix for new my_strntod()
sql/procedure.h:
Fix for new my_strntod()
sql/sql_base.cc:
Port fix for INSERT DELAYED with prepared statements to 5.0
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 6 | ||||
-rw-r--r-- | sql/item.h | 10 | ||||
-rw-r--r-- | sql/item_func.h | 14 | ||||
-rw-r--r-- | sql/item_sum.h | 10 | ||||
-rw-r--r-- | sql/procedure.h | 17 | ||||
-rw-r--r-- | sql/sql_base.cc | 14 |
6 files changed, 46 insertions, 25 deletions
diff --git a/sql/field.cc b/sql/field.cc index 084232fe2bb..a1dc02eba4a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -5358,7 +5358,7 @@ double Field_blob::val_real(void) return 0.0; length= get_length(ptr); cs= charset(); - return my_strntod(cs,blob,length,(char**)0, ¬_used); + return my_strntod(cs, blob, length, &end_not_used, ¬_used); } @@ -6362,11 +6362,13 @@ longlong Field_bit::val_int(void) String *Field_bit::val_str(String *val_buffer, String *val_ptr __attribute__((unused))) { + char buff[sizeof(longlong)]; uint length= min(pack_length(), sizeof(longlong)); ulonglong bits= val_int(); + mi_int8store(buff,bits); val_buffer->alloc(length); - memcpy_fixed((char*) val_buffer->ptr(), (char*) &bits, length); + memcpy_fixed((char*) val_buffer->ptr(), buff+8-length, length); val_buffer->length(length); val_buffer->set_charset(&my_charset_bin); return val_buffer; diff --git a/sql/item.h b/sql/item.h index 2503f137355..6857b4acf82 100644 --- a/sql/item.h +++ b/sql/item.h @@ -877,9 +877,10 @@ public: double val_real() { DBUG_ASSERT(fixed == 1); - int err; + int err_not_used; + char *end_not_used; return my_strntod(str_value.charset(), (char*) str_value.ptr(), - str_value.length(), (char**) 0, &err); + str_value.length(), &end_not_used, &err_not_used); } longlong val_int() { @@ -1230,10 +1231,11 @@ public: enum_field_types field_type() const { return cached_field_type; } double val_real() { - int err; + int err_not_used; + char *end_not_used; return (null_value ? 0.0 : my_strntod(str_value.charset(), (char*) str_value.ptr(), - str_value.length(),NULL,&err)); + str_value.length(), &end_not_used, &err_not_used)); } longlong val_int() { diff --git a/sql/item_func.h b/sql/item_func.h index 4657ee81dfb..fb8d77d5b83 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -834,15 +834,19 @@ public: String *val_str(String *); double val_real() { - int err; - String *res; res=val_str(&str_value); - return res ? my_strntod(res->charset(),(char*) res->ptr(),res->length(),0,&err) : 0.0; + int err_not_used; + char *end_not_used; + String *res; + res= val_str(&str_value); + return res ? my_strntod(res->charset(),(char*) res->ptr(), + res->length(), &end_not_used, &err_not_used) : 0.0; } longlong val_int() { - int err; + int err_not_used; String *res; res=val_str(&str_value); - return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10,(char**) 0,&err) : (longlong) 0; + return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10, + (char**) 0, &err_not_used) : (longlong) 0; } enum Item_result result_type () const { return STRING_RESULT; } void fix_length_and_dec(); diff --git a/sql/item_sum.h b/sql/item_sum.h index 4d2bfe739c5..7866a9ae913 100644 --- a/sql/item_sum.h +++ b/sql/item_sum.h @@ -643,16 +643,18 @@ public: String *val_str(String *); double val_real() { - int err; + int err_not_used; + char *end_not_used; String *res; res=val_str(&str_value); return res ? my_strntod(res->charset(),(char*) res->ptr(),res->length(), - (char**) 0, &err) : 0.0; + &end_not_used, &err_not_used) : 0.0; } longlong val_int() { - int err; + int err_not_used; String *res; res=val_str(&str_value); - return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10, (char**) 0, &err) : (longlong) 0; + return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10, + (char**) 0, &err_not_used) : (longlong) 0; } enum Item_result result_type () const { return STRING_RESULT; } void fix_length_and_dec(); diff --git a/sql/procedure.h b/sql/procedure.h index 4212a9246a5..33c1288c88e 100644 --- a/sql/procedure.h +++ b/sql/procedure.h @@ -59,10 +59,18 @@ public: void set(double nr) { value=nr; } void set(longlong nr) { value=(double) nr; } void set(const char *str,uint length,CHARSET_INFO *cs) - { int err; value=my_strntod(cs,(char*) str,length,(char**)0,&err); } + { + int err_not_used; + char *end_not_used; + value= my_strntod(cs,(char*) str,length, &end_not_used, &err_not_used); + } double val_real() { return value; } longlong val_int() { return (longlong) value; } - String *val_str(String *s) { s->set(value,decimals,default_charset()); return s; } + String *val_str(String *s) + { + s->set(value,decimals,default_charset()); + return s; + } unsigned int size_of() { return sizeof(*this);} }; @@ -98,10 +106,11 @@ public: { str_value.copy(str,length,cs); } double val_real() { - int err; + int err_not_used; + char *end_not_used; CHARSET_INFO *cs=str_value.charset(); return my_strntod(cs, (char*) str_value.ptr(), str_value.length(), - (char**) 0, &err); + &end_not_used, &err_not_used); } longlong val_int() { diff --git a/sql/sql_base.cc b/sql/sql_base.cc index ab59610f485..d854956325e 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1853,8 +1853,8 @@ int simple_open_n_lock_tables(THD *thd, TABLE_LIST *tables) bool open_and_lock_tables(THD *thd, TABLE_LIST *tables) { - DBUG_ENTER("open_and_lock_tables"); uint counter; + DBUG_ENTER("open_and_lock_tables"); if (open_tables(thd, tables, &counter) || lock_tables(thd, tables, counter) || mysql_handle_derived(thd->lex, &mysql_derived_prepare) || @@ -1883,14 +1883,16 @@ bool open_and_lock_tables(THD *thd, TABLE_LIST *tables) data from the tables. */ -int open_normal_and_derived_tables(THD *thd, TABLE_LIST *tables) +bool open_normal_and_derived_tables(THD *thd, TABLE_LIST *tables) { uint counter; DBUG_ENTER("open_normal_and_derived_tables"); - if (open_tables(thd, tables, &counter)) - DBUG_RETURN(-1); /* purecov: inspected */ - relink_tables_for_derived(thd); - DBUG_RETURN(mysql_handle_derived(thd->lex)); + DBUG_ASSERT(!thd->fill_derived_tables()); + if (open_tables(thd, tables, &counter) || + mysql_handle_derived(thd->lex, &mysql_derived_prepare)) + DBUG_RETURN(TRUE); /* purecov: inspected */ + relink_tables_for_multidelete(thd); // Not really needed, but + DBUG_RETURN(0); } |