diff options
author | unknown <vva@eagle.mysql.r18.ru> | 2004-03-06 03:00:21 +0400 |
---|---|---|
committer | unknown <vva@eagle.mysql.r18.ru> | 2004-03-06 03:00:21 +0400 |
commit | 17c4d7f36182e58047231472dbeb1a9f2af60560 (patch) | |
tree | 6f0b14624710df2135208a6cedc7fc3e19db1752 | |
parent | c8bfc2324b14584f39dd271fa0dd34b0f181d167 (diff) | |
download | mariadb-git-17c4d7f36182e58047231472dbeb1a9f2af60560.tar.gz |
- added commands --query_vertical and --query_horisontal to client/mysqltest.cc
- get my_strtod to return inf
- get Field_float::store(double) and Field_double::store(float) to set null for
nan value
(as extra serg's recomendations to fix for patch on
Bug #2082 'mysqldump converts "inf" to null')
client/mysqltest.c:
added commands --query_vertical and --query_horisontal
mysql-test/r/insert.result:
converted testcase so as my_strtod can return inf now
mysql-test/r/mysqldump.result:
converted testcase so as my_strtod can return inf now
mysql-test/t/insert.test:
corrected tests to using --query_vertical instead of
pair (vertical_results,horisontal_results)
sql/field.cc:
corrected Field_float::store(double) and Field_double::store(double)
to set null for nan value
strings/strtod.c:
get my_strtod to return inf
-rw-r--r-- | client/mysqltest.c | 25 | ||||
-rw-r--r-- | mysql-test/r/insert.result | 10 | ||||
-rw-r--r-- | mysql-test/r/mysqldump.result | 2 | ||||
-rw-r--r-- | mysql-test/t/insert.test | 47 | ||||
-rw-r--r-- | sql/field.cc | 18 | ||||
-rw-r--r-- | strings/strtod.c | 5 |
6 files changed, 65 insertions, 42 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c index 823b4d8df1b..178e4b11697 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -216,6 +216,7 @@ Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, Q_ENABLE_INFO, Q_DISABLE_INFO, Q_EXEC, Q_DELIMITER, Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORISONTAL_RESULTS, +Q_QUERY_VERTICAL, Q_QUERY_HORISONTAL, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ @@ -291,6 +292,8 @@ const char *command_names[]= "delimiter", "vertical_results", "horisontal_results", + "query_vertical", + "query_horisontal", 0 }; @@ -2586,6 +2589,28 @@ int main(int argc, char **argv) if (q->query == q->query_buf) q->query= q->first_argument; /* fall through */ + case Q_QUERY_VERTICAL: + case Q_QUERY_HORISONTAL: + { + my_bool old_display_result_vertically= display_result_vertically; + if (!q->query[q->first_word_len]) + { + /* This happens when we use 'query_..' on it's own line */ + q_send_flag=1; + break; + } + /* fix up query pointer if this is * first iteration for this line */ + if (q->query == q->query_buf) + q->query += q->first_word_len + 1; + switch(q->type) + { + case Q_QUERY_VERTICAL: display_result_vertically= TRUE; break; + case Q_QUERY_HORISONTAL: display_result_vertically= FALSE; break; + } + error |= run_query(&cur_con->mysql, q, QUERY_REAP|QUERY_SEND); + display_result_vertically= old_display_result_vertically; + break; + } case Q_QUERY: case Q_REAP: { diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result index 9c066d67af1..6602704ccec 100644 --- a/mysql-test/r/insert.result +++ b/mysql-test/r/insert.result @@ -169,6 +169,7 @@ set @value= "1e+1111111111a"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); Warnings: Warning 1265 Data truncated for column 'f_double ' at row 1 +Warning 1264 Data truncated, out of range for column 'f_double ' at row 1 Warning 1265 Data truncated for column 'f_float ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float ' at row 1 Warning 1265 Data truncated for column 'f_double_7_2 ' at row 1 @@ -176,6 +177,7 @@ Warning 1264 Data truncated, out of range for column 'f_double_7_2 ' at row 1 Warning 1265 Data truncated for column 'f_float_4_3 ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_4_3 ' at row 1 Warning 1265 Data truncated for column 'f_double_u ' at row 1 +Warning 1264 Data truncated, out of range for column 'f_double_u ' at row 1 Warning 1265 Data truncated for column 'f_float_u ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_u ' at row 1 Warning 1265 Data truncated for column 'f_double_15_1_u ' at row 1 @@ -197,6 +199,7 @@ set @value= "-1e+1111111111a"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); Warnings: Warning 1265 Data truncated for column 'f_double ' at row 1 +Warning 1264 Data truncated, out of range for column 'f_double ' at row 1 Warning 1265 Data truncated for column 'f_float ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float ' at row 1 Warning 1265 Data truncated for column 'f_double_7_2 ' at row 1 @@ -225,15 +228,17 @@ f_float_3_1_u 0.0 set @value= 1e+1111111111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); Warnings: +Warning 1264 Data truncated, out of range for column 'f_double ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float ' at row 1 Warning 1264 Data truncated, out of range for column 'f_double_7_2 ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_4_3 ' at row 1 +Warning 1264 Data truncated, out of range for column 'f_double_u ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_u ' at row 1 Warning 1264 Data truncated, out of range for column 'f_double_15_1_u ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_3_1_u ' at row 1 select * from t1 where `number `=last_insert_id(); number 6 -original_value 1.7976931348623e+308 +original_value inf f_double 1.79769313486232e+308 f_float 3.40282e+38 f_double_7_2 99999.99 @@ -245,6 +250,7 @@ f_float_3_1_u 99.9 set @value= -1e+1111111111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); Warnings: +Warning 1264 Data truncated, out of range for column 'f_double ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float ' at row 1 Warning 1264 Data truncated, out of range for column 'f_double_7_2 ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_4_3 ' at row 1 @@ -254,7 +260,7 @@ Warning 1264 Data truncated, out of range for column 'f_double_15_1_u ' at row 1 Warning 1264 Data truncated, out of range for column 'f_float_3_1_u ' at row 1 select * from t1 where `number `=last_insert_id(); number 7 -original_value -1.7976931348623e+308 +original_value -inf f_double -1.79769313486232e+308 f_float -3.40282e+38 f_double_7_2 -99999.99 diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index fe1b83a1089..c8fbb504d25 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -46,6 +46,8 @@ UNLOCK TABLES; DROP TABLE t1; CREATE TABLE t1 (a double); INSERT INTO t1 VALUES (-9e999999); +Warnings: +Warning 1264 Data truncated, out of range for column 'a' at row 1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test index b2fafe10192..b3d996c1475 100644 --- a/mysql-test/t/insert.test +++ b/mysql-test/t/insert.test @@ -90,7 +90,8 @@ drop database mysqltest; # # Test of wrong values for float data (bug #2082) -# +# + use test; create table t1( `number ` int auto_increment primary key, @@ -107,68 +108,46 @@ create table t1( set @value= "aa"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= "1aa"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= "aa1"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= "1e+1111111111a"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= "-1e+1111111111a"; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= 1e+1111111111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= -1e+1111111111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= 1e+111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= -1e+111; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= 1; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() set @value= -1; insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); -vertical_results; -select * from t1 where `number `=last_insert_id(); -horisontal_results; +--query_vertical select * from t1 where `number `=last_insert_id() drop table t1; diff --git a/sql/field.cc b/sql/field.cc index a2771dc67e3..32d7149ce63 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2291,7 +2291,14 @@ int Field_float::store(double nr) float j; int error= 0; - if (isnan(nr) || unsigned_flag && nr < 0) + if (isnan(nr)) + { + j= 0; + set_null(); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); + error= 1; + } + else if (unsigned_flag && nr < 0) { j= 0; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); @@ -2581,7 +2588,14 @@ int Field_double::store(double nr) { int error= 0; - if (isnan(nr) || unsigned_flag && nr < 0) + if (isnan(nr)) + { + nr= 0; + set_null(); + set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); + error= 1; + } + else if (unsigned_flag && nr < 0) { nr= 0; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); diff --git a/strings/strtod.c b/strings/strtod.c index 027abe56269..a06b74248cb 100644 --- a/strings/strtod.c +++ b/strings/strtod.c @@ -93,7 +93,7 @@ double my_strtod(const char *str, char **end) if (neg) result= 0.0; else - result= DBL_MAX; + result= DBL_MAX*10; goto done; } while (exp >= 100) @@ -113,9 +113,6 @@ done: if (end) *end = (char *)str; - if (isinf(result)) - result=DBL_MAX; - return negative ? -result : result; } |