Commit 73e69d0f authored by Chaithra Gopalareddy's avatar Chaithra Gopalareddy

Bug#13344643:Format function in view looses locale information

Problem description:
When a view is created using function FORMAT and if FORMAT function uses locale
option,definition of view saved into server doesn't contain that locale information,
Ex:
create  table test2 (bb decimal (10,2));
insert into test2 values (10.32),(10009.2),(12345678.21);
create view test3 as select format(bb,1,'sk_SK') as cc from test2;
select * from test3;
+--------------+
| cc           |
+--------------+
| 10.3         |
| 10,009.2     |
| 12,345,678.2 |
+--------------+
3 rows in set (0.02 sec)

show create view test3
                View: test3
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER VIEW `test3` AS select format(`test2`.`bb`,1) AS `cc`
from `test2`
character_set_client: latin1
collation_connection: latin1_swedish_ci
1 row in set (0.02 sec)

Problem Analysis:
The function Item_func_format::print() which prints the query string to create
the view does not print the third argument (i.e the locale information). Hence
 view is created without locale information. 

Problem Solution:
If argument count is more than 2 we now print the third argument onto the query string.

Files changed:
sql/item_strfunc.cc
Function call changes: Item_func_format::print()
mysql-test/t/select.test
Added test case to test the bug
mysql-test/r/select.result
Result of the test case appended here
parent 6370e1cc
...@@ -4970,3 +4970,21 @@ avg(distinct(t1.a)) ...@@ -4970,3 +4970,21 @@ avg(distinct(t1.a))
0 0
DROP TABLE t1; DROP TABLE t1;
# End of test BUG#57203 # End of test BUG#57203
#
# Bug#63020: Function "format"'s 'locale' argument is not considered
# when creating a "view'
#
CREATE TABLE t1 (f1 DECIMAL(10,2));
INSERT INTO t1 VALUES (11.67),(17865.3),(12345678.92);
CREATE VIEW view_t1 AS SELECT FORMAT(f1,1,'sk_SK') AS f1 FROM t1;
SHOW CREATE VIEW view_t1;
View Create View character_set_client collation_connection
view_t1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_t1` AS select format(`t1`.`f1`,1,'sk_SK') AS `f1` from `t1` latin1 latin1_swedish_ci
SELECT * FROM view_t1;
f1
11,7
17 865,3
12 345 678,9
DROP TABLE t1;
DROP VIEW view_t1;
# End of test BUG#63020
...@@ -4236,3 +4236,20 @@ GROUP BY t2.a ORDER BY t1.a; ...@@ -4236,3 +4236,20 @@ GROUP BY t2.a ORDER BY t1.a;
DROP TABLE t1; DROP TABLE t1;
--echo # End of test BUG#57203 --echo # End of test BUG#57203
--echo #
--echo # Bug#63020: Function "format"'s 'locale' argument is not considered
--echo # when creating a "view'
--echo #
CREATE TABLE t1 (f1 DECIMAL(10,2));
INSERT INTO t1 VALUES (11.67),(17865.3),(12345678.92);
CREATE VIEW view_t1 AS SELECT FORMAT(f1,1,'sk_SK') AS f1 FROM t1;
SHOW CREATE VIEW view_t1;
SELECT * FROM view_t1;
DROP TABLE t1;
DROP VIEW view_t1;
--echo # End of test BUG#63020
...@@ -2385,6 +2385,11 @@ void Item_func_format::print(String *str, enum_query_type query_type) ...@@ -2385,6 +2385,11 @@ void Item_func_format::print(String *str, enum_query_type query_type)
args[0]->print(str, query_type); args[0]->print(str, query_type);
str->append(','); str->append(',');
args[1]->print(str, query_type); args[1]->print(str, query_type);
if(arg_count > 2)
{
str->append(',');
args[2]->print(str,query_type);
}
str->append(')'); str->append(')');
} }
......
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