summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-01-15 17:38:43 +0200
committerunknown <monty@mysql.com>2005-01-15 17:38:43 +0200
commit6ead860060ebeae29f46d6c89f0bf7a45e748819 (patch)
tree9532a0d754f20c628deab518965a132839dbb1cb /sql
parent2f246d2ff62ff284f035208fa9de98f1508d94ec (diff)
downloadmariadb-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.cc6
-rw-r--r--sql/item.h10
-rw-r--r--sql/item_func.h14
-rw-r--r--sql/item_sum.h10
-rw-r--r--sql/procedure.h17
-rw-r--r--sql/sql_base.cc14
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, &not_used);
+ return my_strntod(cs, blob, length, &end_not_used, &not_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);
}