From bc013072ba8bddac9336da9cf15e7c89b1deb7aa Mon Sep 17 00:00:00 2001
From: Igor Babaev <igor@askmonty.org>
Date: Tue, 13 Jul 2010 07:34:14 -0700
Subject: [PATCH] Fixed bug #604549. There was no error thrown when creating a
 table with a virtual table computed by an expression returning a row. This
 caused a crash when inserting into the table.

Removed periods at the end of the error messages for virtual columns.
Adjusted output in test result files accordingly.
---
 mysql-test/r/plugin.result                    |   6 +-
 mysql-test/r/table_options.result             |  46 +++---
 mysql-test/suite/vcol/r/vcol_archive.result   |   4 +-
 mysql-test/suite/vcol/r/vcol_blackhole.result |   4 +-
 .../r/vcol_blocked_sql_funcs_innodb.result    | 140 ++++++++---------
 .../r/vcol_blocked_sql_funcs_myisam.result    | 142 +++++++++---------
 mysql-test/suite/vcol/r/vcol_csv.result       |   4 +-
 .../suite/vcol/r/vcol_ins_upd_innodb.result   |  20 +--
 .../suite/vcol/r/vcol_ins_upd_myisam.result   |  20 +--
 .../suite/vcol/r/vcol_keys_innodb.result      |  30 ++--
 .../suite/vcol/r/vcol_keys_myisam.result      |  30 ++--
 mysql-test/suite/vcol/r/vcol_memory.result    |   4 +-
 mysql-test/suite/vcol/r/vcol_merge.result     |   2 +-
 mysql-test/suite/vcol/r/vcol_misc.result      |   5 +
 .../r/vcol_non_stored_columns_innodb.result   |   4 +-
 .../r/vcol_non_stored_columns_myisam.result   |   4 +-
 mysql-test/suite/vcol/t/vcol_misc.test        |  14 ++
 sql/share/errmsg.txt                          |  19 ++-
 sql/table.cc                                  |   5 +
 19 files changed, 265 insertions(+), 238 deletions(-)

diff --git a/mysql-test/r/plugin.result b/mysql-test/r/plugin.result
index 8d765945329..8169bd458e8 100644
--- a/mysql-test/r/plugin.result
+++ b/mysql-test/r/plugin.result
@@ -75,9 +75,9 @@ SET SQL_MODE='IGNORE_BAD_TABLE_OPTIONS';
 #illegal value fixed
 CREATE TABLE t1 (a int) ENGINE=example ULL=10000000000000000000 one_or_two='ttt' YESNO=SSS;
 Warnings:
-Warning	1651	Incorrect value '10000000000000000000' for option 'ULL'
-Warning	1651	Incorrect value 'ttt' for option 'one_or_two'
-Warning	1651	Incorrect value 'SSS' for option 'YESNO'
+Warning	1652	Incorrect value '10000000000000000000' for option 'ULL'
+Warning	1652	Incorrect value 'ttt' for option 'one_or_two'
+Warning	1652	Incorrect value 'SSS' for option 'YESNO'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/r/table_options.result b/mysql-test/r/table_options.result
index e5b23ea4a5a..ed6fe4fb3de 100644
--- a/mysql-test/r/table_options.result
+++ b/mysql-test/r/table_options.result
@@ -3,9 +3,9 @@ SET @OLD_SQL_MODE=@@SQL_MODE;
 SET SQL_MODE='IGNORE_BAD_TABLE_OPTIONS';
 create table t1 (a int fkey=vvv, key akey (a) dff=vvv) tkey1='1v1';
 Warnings:
-Warning	1650	Unknown option 'fkey'
-Warning	1650	Unknown option 'dff'
-Warning	1650	Unknown option 'tkey1'
+Warning	1651	Unknown option 'fkey'
+Warning	1651	Unknown option 'dff'
+Warning	1651	Unknown option 'tkey1'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -16,10 +16,10 @@ drop table t1;
 #reassiginig options in the same line
 create table t1 (a int fkey=vvv, key akey (a) dff=vvv) tkey1=1v1 TKEY1=DEFAULT tkey1=1v2 tkey2=2v1;
 Warnings:
-Warning	1650	Unknown option 'fkey'
-Warning	1650	Unknown option 'dff'
-Warning	1650	Unknown option 'tkey1'
-Warning	1650	Unknown option 'tkey2'
+Warning	1651	Unknown option 'fkey'
+Warning	1651	Unknown option 'dff'
+Warning	1651	Unknown option 'tkey1'
+Warning	1651	Unknown option 'tkey2'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -29,7 +29,7 @@ t1	CREATE TABLE `t1` (
 #add option
 alter table t1 tkey4=4v1;
 Warnings:
-Warning	1650	Unknown option 'tkey4'
+Warning	1651	Unknown option 'tkey4'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -39,8 +39,8 @@ t1	CREATE TABLE `t1` (
 #remove options 
 alter table t1 tkey3=DEFAULT tkey4=DEFAULT;
 Warnings:
-Warning	1650	Unknown option 'tkey3'
-Warning	1650	Unknown option 'tkey4'
+Warning	1651	Unknown option 'tkey3'
+Warning	1651	Unknown option 'tkey4'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -50,11 +50,11 @@ t1	CREATE TABLE `t1` (
 drop table t1;
 create table t1 (a int fkey1=v1, key akey (a) kkey1=v1) tkey1=1v1 tkey1=1v2 TKEY1=DEFAULT tkey2=2v1 tkey3=3v1;
 Warnings:
-Warning	1650	Unknown option 'fkey1'
-Warning	1650	Unknown option 'kkey1'
-Warning	1650	Unknown option 'TKEY1'
-Warning	1650	Unknown option 'tkey2'
-Warning	1650	Unknown option 'tkey3'
+Warning	1651	Unknown option 'fkey1'
+Warning	1651	Unknown option 'kkey1'
+Warning	1651	Unknown option 'TKEY1'
+Warning	1651	Unknown option 'tkey2'
+Warning	1651	Unknown option 'tkey3'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -64,7 +64,7 @@ t1	CREATE TABLE `t1` (
 #change field with option with the same value
 alter table t1 change a a int `FKEY1`='v1';
 Warnings:
-Warning	1650	Unknown option 'FKEY1'
+Warning	1651	Unknown option 'FKEY1'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -74,7 +74,7 @@ t1	CREATE TABLE `t1` (
 #change field with option with a different value
 alter table t1 change a a int fkey1=v2;
 Warnings:
-Warning	1650	Unknown option 'fkey1'
+Warning	1651	Unknown option 'fkey1'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -93,7 +93,7 @@ t1	CREATE TABLE `t1` (
 #new key with options
 alter table t1 add key bkey (b) kkey2=v1;
 Warnings:
-Warning	1650	Unknown option 'kkey2'
+Warning	1651	Unknown option 'kkey2'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -105,8 +105,8 @@ t1	CREATE TABLE `t1` (
 #new column with options
 alter table t1 add column c int fkey1=v1 fkey2=v2;
 Warnings:
-Warning	1650	Unknown option 'fkey1'
-Warning	1650	Unknown option 'fkey2'
+Warning	1651	Unknown option 'fkey1'
+Warning	1651	Unknown option 'fkey2'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -141,7 +141,7 @@ t1	CREATE TABLE `t1` (
 #add column with options after delete
 alter table t1 add column b int fkey2=v1;
 Warnings:
-Warning	1650	Unknown option 'fkey2'
+Warning	1651	Unknown option 'fkey2'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -154,7 +154,7 @@ t1	CREATE TABLE `t1` (
 #add key 
 alter table t1 add key bkey (b) kkey2=v2;
 Warnings:
-Warning	1650	Unknown option 'kkey2'
+Warning	1651	Unknown option 'kkey2'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -168,7 +168,7 @@ t1	CREATE TABLE `t1` (
 drop table t1;
 create table t1 (a int) tkey1=100;
 Warnings:
-Warning	1650	Unknown option 'tkey1'
+Warning	1651	Unknown option 'tkey1'
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/suite/vcol/r/vcol_archive.result b/mysql-test/suite/vcol/r/vcol_archive.result
index 1a046dc1fe2..83fb78a5592 100644
--- a/mysql-test/suite/vcol/r/vcol_archive.result
+++ b/mysql-test/suite/vcol/r/vcol_archive.result
@@ -1,7 +1,7 @@
 SET @@session.storage_engine = 'archive';
 create table t1 (a int, b int as (a+1));
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 create table t1 (a int);
 alter table t1 add column b int as (a+1);
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 drop table t1;
diff --git a/mysql-test/suite/vcol/r/vcol_blackhole.result b/mysql-test/suite/vcol/r/vcol_blackhole.result
index 3ee9f626aa9..15e7505aebb 100644
--- a/mysql-test/suite/vcol/r/vcol_blackhole.result
+++ b/mysql-test/suite/vcol/r/vcol_blackhole.result
@@ -1,7 +1,7 @@
 SET @@session.storage_engine = 'blackhole';
 create table t1 (a int, b int as (a+1));
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 create table t1 (a int);
 alter table t1 add column b int as (a+1);
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 drop table t1;
diff --git a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_innodb.result b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_innodb.result
index 97991264066..a4099dff381 100644
--- a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_innodb.result
+++ b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_innodb.result
@@ -1,131 +1,131 @@
 SET @@session.storage_engine = 'InnoDB';
 # RAND()
 create table t1 (b double as (rand()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LOAD_FILE()
 create table t1 (a varchar(64), b varchar(1024) as (load_file(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # CURDATE()
 create table t1 (a datetime as (curdate()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_DATE(), CURRENT_DATE
 create table t1 (a datetime as (current_date));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_date()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_TIME(), CURRENT_TIME
 create table t1 (a datetime as (current_time));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_time()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP
 create table t1 (a datetime as (current_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_timestamp));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURTIME()
 create table t1 (a datetime as (curtime()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # LOCALTIME(), LOCALTIME
 create table t1 (a datetime, b varchar(10) as (localtime()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a datetime, b varchar(10) as (localtime));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LOCALTIMESTAMP, LOCALTIMESTAMP()(v4.0.6)
 create table t1 (a datetime, b varchar(10) as (localtimestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a datetime, b varchar(10) as (localtimestamp));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # NOW()
 create table t1 (a datetime, b varchar(10) as (now()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SYSDATE()
 create table t1 (a int, b varchar(10) as (sysdate()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UNIX_TIMESTAMP()
 create table t1 (a datetime, b datetime as (unix_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_DATE()
 create table t1 (a datetime, b datetime as (utc_date()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_TIME()
 create table t1 (a datetime, b datetime as (utc_time()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_TIMESTAMP()
 create table t1 (a datetime, b datetime as (utc_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MATCH()
 # BENCHMARK()
 create table t1 (a varchar(1024), b varchar(1024) as (benchmark(a,3)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # CONNECTION_ID()
 create table t1 (a int as (connection_id()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_USER(), CURRENT_USER
 create table t1 (a varchar(32) as (current_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a varchar(32) as (current_user));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # DATABASE()
 create table t1 (a varchar(1024), b varchar(1024) as (database()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # FOUND_ROWS()
 create table t1 (a varchar(1024), b varchar(1024) as (found_rows()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # GET_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (get_lock(a,10)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # IS_FREE_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (is_free_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # IS_USED_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (is_used_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LAST_INSERT_ID()
 create table t1 (a int as (last_insert_id()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # MASTER_POS_WAIT()
 create table t1 (a varchar(32), b int as (master_pos_wait(a,0,2)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # NAME_CONST()
 create table t1 (a varchar(32) as (name_const('test',1)));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # RELEASE_LOCK()
 create table t1 (a varchar(32), b int as (release_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # ROW_COUNT()
 create table t1 (a int as (row_count()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SCHEMA()
 create table t1 (a varchar(32) as (schema()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SESSION_USER()
 create table t1 (a varchar(32) as (session_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SLEEP()
 create table t1 (a int, b int as (sleep(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SYSTEM_USER()
 create table t1 (a varchar(32) as (system_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # USER()
 create table t1 (a varchar(1024), b varchar(1024) as (user()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UUID_SHORT()
 create table t1 (a varchar(1024) as (uuid_short()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # UUID()
 create table t1 (a varchar(1024) as (uuid()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # VALUES()
 create table t1 (a varchar(1024), b varchar(1024) as (values(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VERSION()
 create table t1 (a varchar(1024), b varchar(1024) as (version()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # ENCRYPT()
 create table t1 (a varchar(1024), b varchar(1024) as (encrypt(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # Stored procedures
 create procedure p1()
 begin
@@ -137,77 +137,77 @@ begin
 return 1;
 end //
 create table t1 (a int as (p1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a int as (f1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 drop procedure p1;
 drop function f1;
 # Unknown functions
 create table t1 (a int as (f1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 #
 # GROUP BY FUNCTIONS
 #
 # AVG()
 create table t1 (a int, b int as (avg(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_AND()
 create table t1 (a int, b int as (bit_and(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_OR()
 create table t1 (a int, b int as (bit_or(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_XOR()
 create table t1 (a int, b int as (bit_xor(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # COUNT(DISTINCT)
 create table t1 (a int, b int as (count(distinct a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # COUNT()
 create table t1 (a int, b int as (count(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # GROUP_CONCAT()
 create table t1 (a varchar(32), b int as (group_concat(a,'')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MAX()
 create table t1 (a int, b int as (max(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MIN()
 create table t1 (a int, b int as (min(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STD()
 create table t1 (a int, b int as (std(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV_POP()
 create table t1 (a int, b int as (stddev_pop(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV_SAMP()
 create table t1 (a int, b int as (stddev_samp(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV()
 create table t1 (a int, b int as (stddev(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SUM()
 create table t1 (a int, b int as (sum(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VAR_POP()
 create table t1 (a int, b int as (var_pop(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VAR_SAMP()
 create table t1 (a int, b int as (var_samp(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VARIANCE()
 create table t1 (a int, b int as (variance(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # XML FUNCTIONS
 #
 # ExtractValue()
 create table t1 (a varchar(1024), b varchar(1024) as (ExtractValue(a,'//b[$@j]')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UpdateXML()
 create table t1 (a varchar(1024), b varchar(1024) as (UpdateXML(a,'/a','<e>fff</e>')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # Sub-selects
 #
@@ -216,9 +216,9 @@ create table t2 (a int, b int as (select count(*) from t1));
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select count(*) from t1))' at line 1
 drop table t1;
 create table t1 (a int, b int as ((select 1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a int, b int as (a+(select 1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # SP functions
 #
@@ -229,7 +229,7 @@ select sub1(1);
 sub1(1)
 2
 create table t1 (a int, b int as (a+sub3(1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 drop function sub1;
 #
 # Long expression
@@ -240,4 +240,4 @@ ERROR HY000: String 'concat(a,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 #
 # Constant expression
 create table t1 (a int as (PI()));
-ERROR HY000: Constant expression in computed column function is not allowed.
+ERROR HY000: Constant expression in computed column function is not allowed
diff --git a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_myisam.result b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_myisam.result
index c3815e991e7..dda222f5e8a 100644
--- a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_myisam.result
+++ b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs_myisam.result
@@ -1,133 +1,133 @@
 SET @@session.storage_engine = 'MyISAM';
 # RAND()
 create table t1 (b double as (rand()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LOAD_FILE()
 create table t1 (a varchar(64), b varchar(1024) as (load_file(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # CURDATE()
 create table t1 (a datetime as (curdate()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_DATE(), CURRENT_DATE
 create table t1 (a datetime as (current_date));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_date()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_TIME(), CURRENT_TIME
 create table t1 (a datetime as (current_time));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_time()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP
 create table t1 (a datetime as (current_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a datetime as (current_timestamp));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURTIME()
 create table t1 (a datetime as (curtime()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # LOCALTIME(), LOCALTIME
 create table t1 (a datetime, b varchar(10) as (localtime()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a datetime, b varchar(10) as (localtime));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LOCALTIMESTAMP, LOCALTIMESTAMP()(v4.0.6)
 create table t1 (a datetime, b varchar(10) as (localtimestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a datetime, b varchar(10) as (localtimestamp));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # NOW()
 create table t1 (a datetime, b varchar(10) as (now()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SYSDATE()
 create table t1 (a int, b varchar(10) as (sysdate()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UNIX_TIMESTAMP()
 create table t1 (a datetime, b datetime as (unix_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_DATE()
 create table t1 (a datetime, b datetime as (utc_date()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_TIME()
 create table t1 (a datetime, b datetime as (utc_time()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UTC_TIMESTAMP()
 create table t1 (a datetime, b datetime as (utc_timestamp()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MATCH()
 create table t1 (a varchar(32), b bool as (match a against ('sample text')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BENCHMARK()
 create table t1 (a varchar(1024), b varchar(1024) as (benchmark(a,3)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # CONNECTION_ID()
 create table t1 (a int as (connection_id()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # CURRENT_USER(), CURRENT_USER
 create table t1 (a varchar(32) as (current_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a varchar(32) as (current_user));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # DATABASE()
 create table t1 (a varchar(1024), b varchar(1024) as (database()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # FOUND_ROWS()
 create table t1 (a varchar(1024), b varchar(1024) as (found_rows()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # GET_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (get_lock(a,10)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # IS_FREE_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (is_free_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # IS_USED_LOCK()
 create table t1 (a varchar(1024), b varchar(1024) as (is_used_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # LAST_INSERT_ID()
 create table t1 (a int as (last_insert_id()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # MASTER_POS_WAIT()
 create table t1 (a varchar(32), b int as (master_pos_wait(a,0,2)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # NAME_CONST()
 create table t1 (a varchar(32) as (name_const('test',1)));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # RELEASE_LOCK()
 create table t1 (a varchar(32), b int as (release_lock(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # ROW_COUNT()
 create table t1 (a int as (row_count()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SCHEMA()
 create table t1 (a varchar(32) as (schema()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SESSION_USER()
 create table t1 (a varchar(32) as (session_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # SLEEP()
 create table t1 (a int, b int as (sleep(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SYSTEM_USER()
 create table t1 (a varchar(32) as (system_user()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # USER()
 create table t1 (a varchar(1024), b varchar(1024) as (user()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UUID_SHORT()
 create table t1 (a varchar(1024) as (uuid_short()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # UUID()
 create table t1 (a varchar(1024) as (uuid()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 # VALUES()
 create table t1 (a varchar(1024), b varchar(1024) as (values(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VERSION()
 create table t1 (a varchar(1024), b varchar(1024) as (version()));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # ENCRYPT()
 create table t1 (a varchar(1024), b varchar(1024) as (encrypt(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # Stored procedures
 create procedure p1()
 begin
@@ -139,77 +139,77 @@ begin
 return 1;
 end //
 create table t1 (a int as (p1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 create table t1 (a int as (f1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 drop procedure p1;
 drop function f1;
 # Unknown functions
 create table t1 (a int as (f1()));
-ERROR HY000: Function or expression is not allowed for column 'a'.
+ERROR HY000: Function or expression is not allowed for column 'a'
 #
 # GROUP BY FUNCTIONS
 #
 # AVG()
 create table t1 (a int, b int as (avg(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_AND()
 create table t1 (a int, b int as (bit_and(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_OR()
 create table t1 (a int, b int as (bit_or(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # BIT_XOR()
 create table t1 (a int, b int as (bit_xor(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # COUNT(DISTINCT)
 create table t1 (a int, b int as (count(distinct a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # COUNT()
 create table t1 (a int, b int as (count(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # GROUP_CONCAT()
 create table t1 (a varchar(32), b int as (group_concat(a,'')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MAX()
 create table t1 (a int, b int as (max(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # MIN()
 create table t1 (a int, b int as (min(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STD()
 create table t1 (a int, b int as (std(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV_POP()
 create table t1 (a int, b int as (stddev_pop(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV_SAMP()
 create table t1 (a int, b int as (stddev_samp(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # STDDEV()
 create table t1 (a int, b int as (stddev(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # SUM()
 create table t1 (a int, b int as (sum(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VAR_POP()
 create table t1 (a int, b int as (var_pop(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VAR_SAMP()
 create table t1 (a int, b int as (var_samp(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # VARIANCE()
 create table t1 (a int, b int as (variance(a)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # XML FUNCTIONS
 #
 # ExtractValue()
 create table t1 (a varchar(1024), b varchar(1024) as (ExtractValue(a,'//b[$@j]')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 # UpdateXML()
 create table t1 (a varchar(1024), b varchar(1024) as (UpdateXML(a,'/a','<e>fff</e>')));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # Sub-selects
 #
@@ -218,9 +218,9 @@ create table t2 (a int, b int as (select count(*) from t1));
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select count(*) from t1))' at line 1
 drop table t1;
 create table t1 (a int, b int as ((select 1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 create table t1 (a int, b int as (a+(select 1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 #
 # SP functions
 #
@@ -231,7 +231,7 @@ select sub1(1);
 sub1(1)
 2
 create table t1 (a int, b int as (a+sub3(1)));
-ERROR HY000: Function or expression is not allowed for column 'b'.
+ERROR HY000: Function or expression is not allowed for column 'b'
 drop function sub1;
 #
 # Long expression
@@ -242,4 +242,4 @@ ERROR HY000: String 'concat(a,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 #
 # Constant expression
 create table t1 (a int as (PI()));
-ERROR HY000: Constant expression in computed column function is not allowed.
+ERROR HY000: Constant expression in computed column function is not allowed
diff --git a/mysql-test/suite/vcol/r/vcol_csv.result b/mysql-test/suite/vcol/r/vcol_csv.result
index 79c1bd2d6f4..97977505696 100644
--- a/mysql-test/suite/vcol/r/vcol_csv.result
+++ b/mysql-test/suite/vcol/r/vcol_csv.result
@@ -1,7 +1,7 @@
 SET @@session.storage_engine = 'CSV';
 create table t1 (a int, b int as (a+1));
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 create table t1 (a int not null);
 alter table t1 add column b int as (a+1);
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 drop table t1;
diff --git a/mysql-test/suite/vcol/r/vcol_ins_upd_innodb.result b/mysql-test/suite/vcol/r/vcol_ins_upd_innodb.result
index 6d1fb0d3526..b996a0108e3 100644
--- a/mysql-test/suite/vcol/r/vcol_ins_upd_innodb.result
+++ b/mysql-test/suite/vcol/r/vcol_ins_upd_innodb.result
@@ -25,8 +25,8 @@ a	b	c
 # INSERT INTO tbl_name VALUES... a non-NULL value is specified against vcols
 insert into t1 values (1,2,3);
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -65,8 +65,8 @@ a	b	c
 # against vcols
 insert into t1 (a,b) values (1,3), (2,4);
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -107,8 +107,8 @@ a	b	c
 create table t2 like t1;
 insert into t2 select * from t1;
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
-Warning	1645	The value specified for computed column 'c' in table 't2' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
+Warning	1645	The value specified for computed column 'c' in table 't2' ignored
 select * from t1;
 a	b	c
 2	-2	-2
@@ -123,8 +123,8 @@ a	b	c
 create table t2 like t1;
 insert into t2 (a,b) select a,b from t1;
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
 select * from t2;
 a	b	c
 2	-2	-2
@@ -159,7 +159,7 @@ a	b	c
 2	-2	-2
 update t1 set c=3 where a=2;
 Warnings:
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -189,7 +189,7 @@ a	b	c
 2	-2	-2
 update t1 set c=3 where b=-2;
 Warnings:
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
diff --git a/mysql-test/suite/vcol/r/vcol_ins_upd_myisam.result b/mysql-test/suite/vcol/r/vcol_ins_upd_myisam.result
index 9aac0086b4a..fa636597536 100644
--- a/mysql-test/suite/vcol/r/vcol_ins_upd_myisam.result
+++ b/mysql-test/suite/vcol/r/vcol_ins_upd_myisam.result
@@ -25,8 +25,8 @@ a	b	c
 # INSERT INTO tbl_name VALUES... a non-NULL value is specified against vcols
 insert into t1 values (1,2,3);
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -65,8 +65,8 @@ a	b	c
 # against vcols
 insert into t1 (a,b) values (1,3), (2,4);
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
-Warning	1645	The value specified for computed column 'b' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
+Warning	1645	The value specified for computed column 'b' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -107,8 +107,8 @@ a	b	c
 create table t2 like t1;
 insert into t2 select * from t1;
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
-Warning	1645	The value specified for computed column 'c' in table 't2' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
+Warning	1645	The value specified for computed column 'c' in table 't2' ignored
 select * from t1;
 a	b	c
 2	-2	-2
@@ -123,8 +123,8 @@ a	b	c
 create table t2 like t1;
 insert into t2 (a,b) select a,b from t1;
 Warnings:
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
-Warning	1645	The value specified for computed column 'b' in table 't2' ignored.
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
+Warning	1645	The value specified for computed column 'b' in table 't2' ignored
 select * from t2;
 a	b	c
 2	-2	-2
@@ -159,7 +159,7 @@ a	b	c
 2	-2	-2
 update t1 set c=3 where a=2;
 Warnings:
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
@@ -189,7 +189,7 @@ a	b	c
 2	-2	-2
 update t1 set c=3 where b=-2;
 Warnings:
-Warning	1645	The value specified for computed column 'c' in table 't1' ignored.
+Warning	1645	The value specified for computed column 'c' in table 't1' ignored
 select * from t1;
 a	b	c
 1	-1	-1
diff --git a/mysql-test/suite/vcol/r/vcol_keys_innodb.result b/mysql-test/suite/vcol/r/vcol_keys_innodb.result
index ee272fb7db8..857dcb8423f 100644
--- a/mysql-test/suite/vcol/r/vcol_keys_innodb.result
+++ b/mysql-test/suite/vcol/r/vcol_keys_innodb.result
@@ -7,7 +7,7 @@ SET @@session.storage_engine = 'InnoDB';
 #            - CHECK (allowed but not used)
 # UNIQUE
 create table t1 (a int, b int as (a*2) unique);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent unique);
 show create table t1;
 Table	Create Table
@@ -22,7 +22,7 @@ a	int(11)	YES		NULL
 b	int(11)	YES	UNI	NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2), unique key (b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent, unique (b));
 show create table t1;
 Table	Create Table
@@ -38,7 +38,7 @@ b	int(11)	YES	UNI	NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2));
 alter table t1 add unique key (b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 create table t1 (a int, b int as (a*2) persistent);
 alter table t1 add unique key (b);
@@ -50,9 +50,9 @@ drop table t1;
 # 
 # INDEX
 create table t1 (a int, b int as (a*2), index (b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2), index (a,b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent, index (b));
 show create table t1;
 Table	Create Table
@@ -81,9 +81,9 @@ b	int(11)	YES		NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2));
 alter table t1 add index (b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 alter table t1 add index (a,b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 create table t1 (a int, b int as (a*2) persistent);
 alter table t1 add index (b);
@@ -103,27 +103,27 @@ drop table t1;
 # Rejected FK options.
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on update set null);
-ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on update cascade);
-ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on delete set null);
-ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column
 create table t1 (a int, b int as (a+1) persistent);
 alter table t1 add foreign key (b) references t2(a) on update set null;
-ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
 alter table t1 add foreign key (b) references t2(a) on update cascade;
-ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column
 alter table t1 add foreign key (b) references t2(a) on delete set null;
-ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column
 drop table t1;
 create table t1 (a int, b int as (a+1),
 foreign key (b) references t2(a));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a+1));
 alter table t1 add foreign key (b) references t2(a);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 # Allowed FK options.
 create table t2 (a int primary key, b char(5));
diff --git a/mysql-test/suite/vcol/r/vcol_keys_myisam.result b/mysql-test/suite/vcol/r/vcol_keys_myisam.result
index 8a11e44f201..af0935affbc 100644
--- a/mysql-test/suite/vcol/r/vcol_keys_myisam.result
+++ b/mysql-test/suite/vcol/r/vcol_keys_myisam.result
@@ -7,7 +7,7 @@ SET @@session.storage_engine = 'MyISAM';
 #            - CHECK (allowed but not used)
 # UNIQUE
 create table t1 (a int, b int as (a*2) unique);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent unique);
 show create table t1;
 Table	Create Table
@@ -22,7 +22,7 @@ a	int(11)	YES		NULL
 b	int(11)	YES	UNI	NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2), unique key (b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent, unique (b));
 show create table t1;
 Table	Create Table
@@ -38,7 +38,7 @@ b	int(11)	YES	UNI	NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2));
 alter table t1 add unique key (b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 create table t1 (a int, b int as (a*2) persistent);
 alter table t1 add unique key (b);
@@ -50,9 +50,9 @@ drop table t1;
 # 
 # INDEX
 create table t1 (a int, b int as (a*2), index (b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2), index (a,b));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a*2) persistent, index (b));
 show create table t1;
 Table	Create Table
@@ -81,9 +81,9 @@ b	int(11)	YES		NULL	VIRTUAL
 drop table t1;
 create table t1 (a int, b int as (a*2));
 alter table t1 add index (b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 alter table t1 add index (a,b);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 create table t1 (a int, b int as (a*2) persistent);
 alter table t1 add index (b);
@@ -110,27 +110,27 @@ drop table t1;
 # Rejected FK options.
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on update set null);
-ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on update cascade);
-ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column
 create table t1 (a int, b int as (a+1) persistent,
 foreign key (b) references t2(a) on delete set null);
-ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column
 create table t1 (a int, b int as (a+1) persistent);
 alter table t1 add foreign key (b) references t2(a) on update set null;
-ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE SET NULL clause on a computed column
 alter table t1 add foreign key (b) references t2(a) on update cascade;
-ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON UPDATE CASCADE clause on a computed column
 alter table t1 add foreign key (b) references t2(a) on delete set null;
-ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column.
+ERROR HY000: Cannot define foreign key with ON DELETE SET NULL clause on a computed column
 drop table t1;
 create table t1 (a int, b int as (a+1),
 foreign key (b) references t2(a));
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 create table t1 (a int, b int as (a+1));
 alter table t1 add foreign key (b) references t2(a);
-ERROR HY000: Key/Index cannot be defined on a non-stored computed column.
+ERROR HY000: Key/Index cannot be defined on a non-stored computed column
 drop table t1;
 # Allowed FK options.
 create table t2 (a int primary key, b char(5));
diff --git a/mysql-test/suite/vcol/r/vcol_memory.result b/mysql-test/suite/vcol/r/vcol_memory.result
index 37154df61e7..30b6bd4a4bf 100644
--- a/mysql-test/suite/vcol/r/vcol_memory.result
+++ b/mysql-test/suite/vcol/r/vcol_memory.result
@@ -1,7 +1,7 @@
 SET @@session.storage_engine = 'memory';
 create table t1 (a int, b int as (a+1));
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 create table t1 (a int);
 alter table t1 add column b int as (a+1);
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 drop table t1;
diff --git a/mysql-test/suite/vcol/r/vcol_merge.result b/mysql-test/suite/vcol/r/vcol_merge.result
index 32f3268329f..03a1e151c2e 100644
--- a/mysql-test/suite/vcol/r/vcol_merge.result
+++ b/mysql-test/suite/vcol/r/vcol_merge.result
@@ -4,5 +4,5 @@ create table t2 (a int, b int as (a % 10));
 insert into t1 values (1,default);
 insert into t2 values (2,default);
 create table t3 (a int, b int as (a % 10)) engine=MERGE UNION=(t1,t2);
-ERROR HY000: 'Specified storage engine' is not yet supported for computed columns.
+ERROR HY000: 'Specified storage engine' is not yet supported for computed columns
 drop table t1,t2;
diff --git a/mysql-test/suite/vcol/r/vcol_misc.result b/mysql-test/suite/vcol/r/vcol_misc.result
index f312527794a..896dd6fa654 100644
--- a/mysql-test/suite/vcol/r/vcol_misc.result
+++ b/mysql-test/suite/vcol/r/vcol_misc.result
@@ -30,3 +30,8 @@ a	b	v
 5	50	6
 8	80	9
 drop table t1;
+CREATE TABLE t1 (
+a int NOT NULL DEFAULT '0',
+v double AS ((1, a)) VIRTUAL
+);
+ERROR HY000: Expression for computed column cannot return a row
diff --git a/mysql-test/suite/vcol/r/vcol_non_stored_columns_innodb.result b/mysql-test/suite/vcol/r/vcol_non_stored_columns_innodb.result
index 0f46abf0054..c638ced4f41 100644
--- a/mysql-test/suite/vcol/r/vcol_non_stored_columns_innodb.result
+++ b/mysql-test/suite/vcol/r/vcol_non_stored_columns_innodb.result
@@ -76,7 +76,7 @@ drop table t1;
 # Case 7. ALTER. Modify virtual stored -> virtual non-stored
 create table t1 (a int, b int as (a % 2) persistent);
 alter table t1 modify b int as (a % 2);
-ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns.
+ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -87,7 +87,7 @@ drop table t1;
 # Case 8. ALTER. Modify virtual non-stored -> virtual stored
 create table t1 (a int, b int as (a % 2));
 alter table t1 modify b int as (a % 2) persistent;
-ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns.
+ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/suite/vcol/r/vcol_non_stored_columns_myisam.result b/mysql-test/suite/vcol/r/vcol_non_stored_columns_myisam.result
index 3c7d29ef6fe..be42b8b76c4 100644
--- a/mysql-test/suite/vcol/r/vcol_non_stored_columns_myisam.result
+++ b/mysql-test/suite/vcol/r/vcol_non_stored_columns_myisam.result
@@ -76,7 +76,7 @@ drop table t1;
 # Case 7. ALTER. Modify virtual stored -> virtual non-stored
 create table t1 (a int, b int as (a % 2) persistent);
 alter table t1 modify b int as (a % 2);
-ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns.
+ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -87,7 +87,7 @@ drop table t1;
 # Case 8. ALTER. Modify virtual non-stored -> virtual stored
 create table t1 (a int, b int as (a % 2));
 alter table t1 modify b int as (a % 2) persistent;
-ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns.
+ERROR HY000: 'Changing the STORED status' is not yet supported for computed columns
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/suite/vcol/t/vcol_misc.test b/mysql-test/suite/vcol/t/vcol_misc.test
index a0e654daa57..06a9313edd3 100644
--- a/mysql-test/suite/vcol/t/vcol_misc.test
+++ b/mysql-test/suite/vcol/t/vcol_misc.test
@@ -19,3 +19,17 @@ update t1 set a=v order by b limit 1;
 select * from t1 order by b;
 
 drop table t1;
+
+#
+# Bug#604549: Expression for virtual column returns row
+#             
+
+-- error ER_ROW_EXPR_FOR_VCOL 
+CREATE TABLE t1 (
+  a int NOT NULL DEFAULT '0',
+  v double AS ((1, a)) VIRTUAL
+);
+
+
+
+
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 117a4b8e1e6..023bd57e14f 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -6211,28 +6211,31 @@ ER_VCOL_BASED_ON_VCOL
         eng "A computed column cannot be based on a computed column"
 
 ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
-        eng "Function or expression is not allowed for column '%s'."
+        eng "Function or expression is not allowed for column '%s'"
 
 ER_DATA_CONVERSION_ERROR_FOR_VIRTUAL_COLUMN
-        eng "Generated value for computed column '%s' cannot be converted to type '%s'."
+        eng "Generated value for computed column '%s' cannot be converted to type '%s'"
 
 ER_PRIMARY_KEY_BASED_ON_VIRTUAL_COLUMN
-        eng "Primary key cannot be defined upon a computed column."
+        eng "Primary key cannot be defined upon a computed column"
 
 ER_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN
-        eng "Key/Index cannot be defined on a non-stored computed column."
+        eng "Key/Index cannot be defined on a non-stored computed column"
 
 ER_WRONG_FK_OPTION_FOR_VIRTUAL_COLUMN
-        eng "Cannot define foreign key with %s clause on a computed column."
+        eng "Cannot define foreign key with %s clause on a computed column"
 
 ER_WARNING_NON_DEFAULT_VALUE_FOR_VIRTUAL_COLUMN
-        eng "The value specified for computed column '%s' in table '%s' ignored."
+        eng "The value specified for computed column '%s' in table '%s' ignored"
 
 ER_UNSUPPORTED_ACTION_ON_VIRTUAL_COLUMN
-        eng "'%s' is not yet supported for computed columns."
+        eng "'%s' is not yet supported for computed columns"
 
 ER_CONST_EXPR_IN_VCOL
-         eng "Constant expression in computed column function is not allowed."
+        eng "Constant expression in computed column function is not allowed"
+
+ER_ROW_EXPR_FOR_VCOL
+        eng "Expression for computed column cannot return a row"
 
 ER_DEBUG_SYNC_TIMEOUT
   eng "debug sync point wait timed out"
diff --git a/sql/table.cc b/sql/table.cc
index b9a2a8be2f1..451515c1262 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1859,6 +1859,11 @@ bool fix_vcol_expr(THD *thd,
     goto end;
   }
   thd->where= save_where;
+  if (unlikely(func_expr->result_type() == ROW_RESULT))
+  {
+     my_error(ER_ROW_EXPR_FOR_VCOL, MYF(0));
+     goto end;
+  }
 #ifdef PARANOID
   /*
     Walk through the Item tree checking if all items are valid
-- 
2.30.9