summaryrefslogtreecommitdiff
path: root/sql/procedure.h
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-02-22 12:51:23 +0200
committerunknown <monty@mysql.com>2005-02-22 12:51:23 +0200
commitcb8d9c3ad40f00018cff05168e731ff2547d6144 (patch)
treeaf26a8ec65a080dd408d6df18990ff71c50577aa /sql/procedure.h
parentae8c3e130a91687839b570f82f6694f81c21dbaf (diff)
downloadmariadb-git-cb8d9c3ad40f00018cff05168e731ff2547d6144.tar.gz
Backport my_strntod() from 5.0
Change string->float conversion to delay division as long as possible. This gives us more exact integer->float conversion for numbers of type '123.45E+02' (Bug #7740) client/mysql.cc: Fix wront usage of charset (found during review of pushed code) include/m_string.h: Backported my_strtod() from 5.0 mysql-test/mysql-test-run.sh: Run also mysql_client_test with --debug mysql-test/r/ps_1general.result: Safety fix (if mysql_client_test.test fails) mysql-test/r/type_float.result: More test mysql-test/t/mysql_client_test.test: Comments for what to do if this test fails mysql-test/t/ps_1general.test: Safety fix (if mysql_client_test.test fails) mysql-test/t/type_float.test: More test to better test new strtod() function Test also bug #7740 (wrong comparsion between integer and float-in-integer-range) sql/field.cc: Backport my_strntod() from 5.0 sql/item.cc: Backport my_strntod() from 5.0 sql/item.h: Backport my_strntod() from 5.0 sql/item_func.h: Backport my_strntod() from 5.0 sql/item_strfunc.cc: Backport my_strntod() from 5.0 sql/item_sum.cc: Backport my_strntod() from 5.0 sql/item_sum.h: Backport my_strntod() from 5.0 sql/procedure.h: Backport my_strntod() from 5.0 strings/ctype-simple.c: Backport my_strntod() from 5.0 strings/ctype-ucs2.c: Backport my_strntod() from 5.0 strings/strtod.c: Backport my_strntod() from 5.0 Change conversion to delay division as long as possible. This gives us more exact integer-> float conversion for numbers of type '123.45E+02'
Diffstat (limited to 'sql/procedure.h')
-rw-r--r--sql/procedure.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/sql/procedure.h b/sql/procedure.h
index 5365b2e1102..abe50bdc0a0 100644
--- a/sql/procedure.h
+++ b/sql/procedure.h
@@ -59,7 +59,11 @@ 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;
+ char *end_not_used;
+ value= my_strntod(cs, (char*) str, length, &end_not_used, &err);
+ }
double val() { return value; }
longlong val_int() { return (longlong) value; }
String *val_str(String *s) { s->set(value,decimals,default_charset()); return s; }
@@ -99,9 +103,10 @@ public:
double val()
{
int err;
- CHARSET_INFO *cs=str_value.charset();
+ CHARSET_INFO *cs= str_value.charset();
+ char *end_not_used;
return my_strntod(cs, (char*) str_value.ptr(), str_value.length(),
- (char**) 0, &err);
+ &end_not_used, &err);
}
longlong val_int()
{