Commit 17c4d7f3 authored by unknown's avatar unknown

- 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
parent c8bfc232
...@@ -216,6 +216,7 @@ Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, ...@@ -216,6 +216,7 @@ Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
Q_ENABLE_INFO, Q_DISABLE_INFO, Q_ENABLE_INFO, Q_DISABLE_INFO,
Q_EXEC, Q_DELIMITER, Q_EXEC, Q_DELIMITER,
Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORISONTAL_RESULTS, Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORISONTAL_RESULTS,
Q_QUERY_VERTICAL, Q_QUERY_HORISONTAL,
Q_UNKNOWN, /* Unknown command. */ Q_UNKNOWN, /* Unknown command. */
Q_COMMENT, /* Comments, ignored. */ Q_COMMENT, /* Comments, ignored. */
...@@ -291,6 +292,8 @@ const char *command_names[]= ...@@ -291,6 +292,8 @@ const char *command_names[]=
"delimiter", "delimiter",
"vertical_results", "vertical_results",
"horisontal_results", "horisontal_results",
"query_vertical",
"query_horisontal",
0 0
}; };
...@@ -2586,6 +2589,28 @@ int main(int argc, char **argv) ...@@ -2586,6 +2589,28 @@ int main(int argc, char **argv)
if (q->query == q->query_buf) if (q->query == q->query_buf)
q->query= q->first_argument; q->query= q->first_argument;
/* fall through */ /* 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_QUERY:
case Q_REAP: case Q_REAP:
{ {
......
...@@ -169,6 +169,7 @@ set @value= "1e+1111111111a"; ...@@ -169,6 +169,7 @@ set @value= "1e+1111111111a";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
Warnings: Warnings:
Warning 1265 Data truncated for column 'f_double ' at row 1 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 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 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 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 ...@@ -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 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 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 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 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 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 Warning 1265 Data truncated for column 'f_double_15_1_u ' at row 1
...@@ -197,6 +199,7 @@ set @value= "-1e+1111111111a"; ...@@ -197,6 +199,7 @@ set @value= "-1e+1111111111a";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
Warnings: Warnings:
Warning 1265 Data truncated for column 'f_double ' at row 1 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 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 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 Warning 1265 Data truncated for column 'f_double_7_2 ' at row 1
...@@ -225,15 +228,17 @@ f_float_3_1_u 0.0 ...@@ -225,15 +228,17 @@ f_float_3_1_u 0.0
set @value= 1e+1111111111; set @value= 1e+1111111111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
Warnings: 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_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_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_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_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_double_15_1_u ' at row 1
Warning 1264 Data truncated, out of range for column 'f_float_3_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(); select * from t1 where `number `=last_insert_id();
number 6 number 6
original_value 1.7976931348623e+308 original_value inf
f_double 1.79769313486232e+308 f_double 1.79769313486232e+308
f_float 3.40282e+38 f_float 3.40282e+38
f_double_7_2 99999.99 f_double_7_2 99999.99
...@@ -245,6 +250,7 @@ f_float_3_1_u 99.9 ...@@ -245,6 +250,7 @@ f_float_3_1_u 99.9
set @value= -1e+1111111111; set @value= -1e+1111111111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
Warnings: 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_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_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_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 ...@@ -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 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(); select * from t1 where `number `=last_insert_id();
number 7 number 7
original_value -1.7976931348623e+308 original_value -inf
f_double -1.79769313486232e+308 f_double -1.79769313486232e+308
f_float -3.40282e+38 f_float -3.40282e+38
f_double_7_2 -99999.99 f_double_7_2 -99999.99
......
...@@ -46,6 +46,8 @@ UNLOCK TABLES; ...@@ -46,6 +46,8 @@ UNLOCK TABLES;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a double); CREATE TABLE t1 (a double);
INSERT INTO t1 VALUES (-9e999999); 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 */; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT, CHARACTER_SET_CLIENT=utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
......
...@@ -91,6 +91,7 @@ drop database mysqltest; ...@@ -91,6 +91,7 @@ drop database mysqltest;
# #
# Test of wrong values for float data (bug #2082) # Test of wrong values for float data (bug #2082)
# #
use test; use test;
create table t1( create table t1(
`number ` int auto_increment primary key, `number ` int auto_increment primary key,
...@@ -107,68 +108,46 @@ create table t1( ...@@ -107,68 +108,46 @@ create table t1(
set @value= "aa"; set @value= "aa";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= "1aa"; set @value= "1aa";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= "aa1"; set @value= "aa1";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= "1e+1111111111a"; set @value= "1e+1111111111a";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= "-1e+1111111111a"; set @value= "-1e+1111111111a";
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= 1e+1111111111; set @value= 1e+1111111111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= -1e+1111111111; set @value= -1e+1111111111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= 1e+111; set @value= 1e+111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= -1e+111; set @value= -1e+111;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= 1; set @value= 1;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
set @value= -1; set @value= -1;
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value); insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
vertical_results; --query_vertical select * from t1 where `number `=last_insert_id()
select * from t1 where `number `=last_insert_id();
horisontal_results;
drop table t1; drop table t1;
...@@ -2291,7 +2291,14 @@ int Field_float::store(double nr) ...@@ -2291,7 +2291,14 @@ int Field_float::store(double nr)
float j; float j;
int error= 0; 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; j= 0;
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE);
...@@ -2581,7 +2588,14 @@ int Field_double::store(double nr) ...@@ -2581,7 +2588,14 @@ int Field_double::store(double nr)
{ {
int error= 0; 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; nr= 0;
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE); set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE);
......
...@@ -93,7 +93,7 @@ double my_strtod(const char *str, char **end) ...@@ -93,7 +93,7 @@ double my_strtod(const char *str, char **end)
if (neg) if (neg)
result= 0.0; result= 0.0;
else else
result= DBL_MAX; result= DBL_MAX*10;
goto done; goto done;
} }
while (exp >= 100) while (exp >= 100)
...@@ -113,9 +113,6 @@ double my_strtod(const char *str, char **end) ...@@ -113,9 +113,6 @@ double my_strtod(const char *str, char **end)
if (end) if (end)
*end = (char *)str; *end = (char *)str;
if (isinf(result))
result=DBL_MAX;
return negative ? -result : result; return negative ? -result : result;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment