mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Use common function 'append_field' to output the value of one field to the result.
Fix for extra zero in exponent of double values on windows. client/mysqltest.c: Write new function 'append_field' which takes care of appending one field to the dynamic string. Use function 'append_field' from both ps and normal execution Add hack to 'append_field' that removes the extra '0' in exponent for double values on Windows. mysql-test/r/type_float.result: One zero too much was removed( I think ) mysql-test/t/insert.test: Remove the "replace_result" for extra zero in exponent mysql-test/t/type_float.test: Remove the "replace_result" for extra zero in exponent mysql-test/t/variables.test: Remove the "replace_result" for extra zero in exponent
This commit is contained in:
parent
db5fe0fc97
commit
db16cfc578
5 changed files with 75 additions and 104 deletions
|
@ -3039,6 +3039,58 @@ static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Append the result for one field to the dynamic string ds
|
||||
*/
|
||||
|
||||
static void append_field(DYNAMIC_STRING *ds, uint col_idx, MYSQL_FIELD* field,
|
||||
const char* val, ulonglong len, bool is_null)
|
||||
{
|
||||
|
||||
char buf[256];
|
||||
if (col_idx < max_replace_column && replace_column[col_idx])
|
||||
{
|
||||
val= replace_column[col_idx];
|
||||
len= strlen(val);
|
||||
}
|
||||
else if (is_null)
|
||||
{
|
||||
val= "NULL";
|
||||
len= 4;
|
||||
}
|
||||
#ifdef __WIN__
|
||||
else if (field->type == MYSQL_TYPE_DOUBLE &&
|
||||
field->decimals >= 31)
|
||||
{
|
||||
/* Convert 1.2e+018 to 1.2e+18 and 1.2e-018 to 1.2e-18 */
|
||||
char *start= strchr(val, 'e');
|
||||
if (start && strlen(start) >= 5 &&
|
||||
(start[1] == '-' || start[1] == '+') && start[2] == '0')
|
||||
{
|
||||
start+=2; /* Now points at first '0' */
|
||||
/* Move all chars after the first '0' one step left */
|
||||
memmove(start, start + 1, strlen(start));
|
||||
len--;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!display_result_vertically)
|
||||
{
|
||||
if (col_idx)
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
}
|
||||
else
|
||||
{
|
||||
dynstr_append(ds, field->name);
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Append all results to the dynamic string separated with '\t'
|
||||
Values may be converted with 'replace_column'
|
||||
|
@ -3048,41 +3100,16 @@ static void append_result(DYNAMIC_STRING *ds, MYSQL_RES *res)
|
|||
{
|
||||
MYSQL_ROW row;
|
||||
uint num_fields= mysql_num_fields(res);
|
||||
MYSQL_FIELD *fields= !display_result_vertically ? 0 : mysql_fetch_fields(res);
|
||||
MYSQL_FIELD *fields= mysql_fetch_fields(res);
|
||||
ulong *lengths;
|
||||
|
||||
while ((row = mysql_fetch_row(res)))
|
||||
{
|
||||
uint i;
|
||||
lengths = mysql_fetch_lengths(res);
|
||||
for (i = 0; i < num_fields; i++)
|
||||
{
|
||||
const char *val= row[i];
|
||||
ulonglong len= lengths[i];
|
||||
|
||||
if (i < max_replace_column && replace_column[i])
|
||||
{
|
||||
val= replace_column[i];
|
||||
len= strlen(val);
|
||||
}
|
||||
if (!val)
|
||||
{
|
||||
val= "NULL";
|
||||
len= 4;
|
||||
}
|
||||
if (!display_result_vertically)
|
||||
{
|
||||
if (i)
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
}
|
||||
else
|
||||
{
|
||||
dynstr_append(ds, fields[i].name);
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
}
|
||||
append_field(ds, i, &fields[i],
|
||||
(const char*)row[i], lengths[i], !row[i]);
|
||||
if (!display_result_vertically)
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
|
@ -3096,13 +3123,12 @@ static void append_result(DYNAMIC_STRING *ds, MYSQL_RES *res)
|
|||
*/
|
||||
|
||||
static void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
|
||||
MYSQL_FIELD *field, uint num_fields)
|
||||
MYSQL_FIELD *fields, uint num_fields)
|
||||
{
|
||||
MYSQL_BIND *bind;
|
||||
my_bool *is_null;
|
||||
ulong *length;
|
||||
ulonglong num_rows;
|
||||
uint col_idx, row_idx;
|
||||
uint i;
|
||||
|
||||
/* Allocate array with bind structs, lengths and NULL flags */
|
||||
bind= (MYSQL_BIND*) my_malloc(num_fields * sizeof(MYSQL_BIND),
|
||||
|
@ -3112,71 +3138,29 @@ static void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
|
|||
is_null= (my_bool*) my_malloc(num_fields * sizeof(my_bool),
|
||||
MYF(MY_WME | MY_FAE));
|
||||
|
||||
for (col_idx= 0; col_idx < num_fields; col_idx++)
|
||||
/* Allocate data for the result of each field */
|
||||
for (i= 0; i < num_fields; i++)
|
||||
{
|
||||
/* Allocate data for output */
|
||||
uint max_length= field[col_idx].max_length + 1;
|
||||
char *str_data= (char *) my_malloc(max_length, MYF(MY_WME | MY_FAE));
|
||||
|
||||
bind[col_idx].buffer_type= MYSQL_TYPE_STRING;
|
||||
bind[col_idx].buffer= (char *)str_data;
|
||||
bind[col_idx].buffer_length= max_length;
|
||||
bind[col_idx].is_null= &is_null[col_idx];
|
||||
bind[col_idx].length= &length[col_idx];
|
||||
uint max_length= fields[i].max_length + 1;
|
||||
bind[i].buffer_type= MYSQL_TYPE_STRING;
|
||||
bind[i].buffer= (char *)my_malloc(max_length, MYF(MY_WME | MY_FAE));
|
||||
bind[i].buffer_length= max_length;
|
||||
bind[i].is_null= &is_null[i];
|
||||
bind[i].length= &length[i];
|
||||
|
||||
DBUG_PRINT("bind", ("col[%d]: buffer_type: %d, buffer_length: %d",
|
||||
col_idx,
|
||||
bind[col_idx].buffer_type,
|
||||
bind[col_idx].buffer_length));
|
||||
i, bind[i].buffer_type, bind[i].buffer_length));
|
||||
}
|
||||
|
||||
/* Fill in the data into the structures created above */
|
||||
if (mysql_stmt_bind_result(stmt, bind))
|
||||
die("mysql_stmt_bind_result failed: %d: %s",
|
||||
mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
|
||||
|
||||
/* Read result from each row */
|
||||
num_rows= mysql_stmt_num_rows(stmt);
|
||||
for (row_idx= 0; row_idx < num_rows; row_idx++)
|
||||
while (mysql_stmt_fetch(stmt) == 0)
|
||||
{
|
||||
if (mysql_stmt_fetch(stmt))
|
||||
die("mysql_stmt_fetch failed: %d %s",
|
||||
mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
|
||||
|
||||
/* Read result from each column */
|
||||
for (col_idx= 0; col_idx < num_fields; col_idx++)
|
||||
{
|
||||
const char *val;
|
||||
ulonglong len;
|
||||
if (col_idx < max_replace_column && replace_column[col_idx])
|
||||
{
|
||||
val= replace_column[col_idx];
|
||||
len= strlen(val);
|
||||
}
|
||||
else if (*bind[col_idx].is_null)
|
||||
{
|
||||
val= "NULL";
|
||||
len= 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
val= (const char *) bind[col_idx].buffer;
|
||||
len= *bind[col_idx].length;
|
||||
}
|
||||
if (!display_result_vertically)
|
||||
{
|
||||
if (col_idx) /* No tab before first col */
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
}
|
||||
else
|
||||
{
|
||||
dynstr_append(ds, field[col_idx].name);
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, (int)len);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
}
|
||||
for (i= 0; i < num_fields; i++)
|
||||
append_field(ds, i, &fields[i], (const char *) bind[i].buffer,
|
||||
*bind[i].length, *bind[i].is_null);
|
||||
if (!display_result_vertically)
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
|
@ -3187,10 +3171,10 @@ static void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
|
|||
|
||||
free_replace_column();
|
||||
|
||||
for (col_idx= 0; col_idx < num_fields; col_idx++)
|
||||
for (i= 0; i < num_fields; i++)
|
||||
{
|
||||
/* Free data for output */
|
||||
my_free((gptr)bind[col_idx].buffer, MYF(MY_WME | MY_FAE));
|
||||
my_free((gptr)bind[i].buffer, MYF(MY_WME | MY_FAE));
|
||||
}
|
||||
/* Free array with bind structs, lengths and NULL flags */
|
||||
my_free((gptr)bind , MYF(MY_WME | MY_FAE));
|
||||
|
|
|
@ -31,14 +31,14 @@ select * from t1;
|
|||
f1 f2
|
||||
10 10
|
||||
100000 100000
|
||||
1.23457e+9 1234567890
|
||||
1.23457e+09 1234567890
|
||||
1e+10 10000000000
|
||||
1e+15 1e+15
|
||||
1e+20 1e+20
|
||||
3.40282e+38 1e+50
|
||||
3.40282e+38 1e+150
|
||||
-10 -10
|
||||
1e-5 1e-5
|
||||
1e-05 1e-05
|
||||
1e-10 1e-10
|
||||
1e-15 1e-15
|
||||
1e-20 1e-20
|
||||
|
|
|
@ -99,27 +99,22 @@ create table t1(number int auto_increment primary key, original_value varchar(50
|
|||
|
||||
set @value= "aa";
|
||||
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--query_vertical select * from t1 where number =last_insert_id()
|
||||
|
||||
--error 1367
|
||||
|
@ -130,22 +125,18 @@ set @value= -1e+1111111111;
|
|||
|
||||
set @value= 1e+111;
|
||||
insert into t1 values(null,@value,@value,@value,@value,@value,@value,@value,@value,@value);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--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);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
--query_vertical select * from t1 where number =last_insert_id()
|
||||
|
||||
drop table t1;
|
||||
|
|
|
@ -6,9 +6,7 @@
|
|||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
--replace_result e-0 e- e+0 e+
|
||||
SELECT 10,10.0,10.,.1e+2,100.0e-1;
|
||||
--replace_result e-00 e-0
|
||||
SELECT 6e-05, -6e-05, --6e-05, -6e-05+1.000000;
|
||||
SELECT 1e1,1.e1,1.0e1,1e+1,1.e+1,1.0e+1,1e-1,1.e-1,1.0e-1;
|
||||
SELECT 0.001e+1,0.001e-1, -0.001e+01,-0.001e-01;
|
||||
|
@ -21,7 +19,6 @@ create table t1 (f1 float(24),f2 float(52));
|
|||
show full columns from t1;
|
||||
insert into t1 values(10,10),(1e+5,1e+5),(1234567890,1234567890),(1e+10,1e+10),(1e+15,1e+15),(1e+20,1e+20),(1e+50,1e+50),(1e+150,1e+150);
|
||||
insert into t1 values(-10,-10),(1e-5,1e-5),(1e-10,1e-10),(1e-15,1e-15),(1e-20,1e-20),(1e-50,1e-50),(1e-150,1e-150);
|
||||
--replace_result e-0 e- e+0 e+
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ select @test, @`test`, @TEST, @`TEST`, @"teSt";
|
|||
set @select=2,@t5=1.23456;
|
||||
select @`select`,@not_used;
|
||||
set @test_int=10,@test_double=1e-10,@test_string="abcdeghi",@test_string2="abcdefghij",@select=NULL;
|
||||
--replace_result e-0 e- e+0 e+
|
||||
select @test_int,@test_double,@test_string,@test_string2,@select;
|
||||
set @test_int="hello",@test_double="hello",@test_string="hello",@test_string2="hello";
|
||||
select @test_int,@test_double,@test_string,@test_string2;
|
||||
|
|
Loading…
Reference in a new issue