summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <evgen@moonbone.local>2005-07-12 20:49:43 +0400
committerunknown <evgen@moonbone.local>2005-07-12 20:49:43 +0400
commit9d9ef52dbef834cdc4af1ce76b851259cb33a8c3 (patch)
tree0850fbe0a9c037476709a10750d7c4ae4fa52d4c
parent8115f6df53570260bef834ff7a4bff284f021785 (diff)
parent2ae3cdcf97cdb5a661954651fe3b445c1c5aff8a (diff)
downloadmariadb-git-9d9ef52dbef834cdc4af1ce76b851259cb33a8c3.tar.gz
Merge
sql/sql_base.cc: Auto merged mysql-test/r/view.result: SCCS merged mysql-test/t/view.test: SCCS merged
-rw-r--r--mysql-test/r/view.result8
-rw-r--r--mysql-test/t/view.test10
-rw-r--r--sql/sql_base.cc22
3 files changed, 34 insertions, 6 deletions
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 7bcfaf8bdc3..0935397a8ff 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -1923,6 +1923,14 @@ ERROR HY000: Field of view 'test.v2' underlying table doesn't have a default val
set sql_mode=default;
drop view v2,v1;
drop table t1;
+create table t1 (f1 int);
+insert into t1 values (1);
+create view v1 as select f1 from t1;
+select f1 as alias from v1;
+alias
+1
+drop view v1;
+drop table t1;
CREATE TABLE t1 (s1 int, s2 int);
INSERT INTO t1 VALUES (1,2);
CREATE VIEW v1 AS SELECT s2 AS s1, s1 AS s2 FROM t1;
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 6b6b3d8a00f..9ce5004c51c 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -1763,6 +1763,16 @@ drop view v2,v1;
drop table t1;
#
+# Bug#11399 Use an alias in a select statement on a view
+#
+create table t1 (f1 int);
+insert into t1 values (1);
+create view v1 as select f1 from t1;
+select f1 as alias from v1;
+drop view v1;
+drop table t1;
+
+#
# Test for bug #6120: SP cache to be invalidated when altering a view
#
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 7a7f2292703..a5ca3b393ff 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -2400,9 +2400,11 @@ Field *view_ref_found= (Field*) 0x2;
name name of field
item_name name of item if it will be created (VIEW)
length length of name
- ref expression substituted in VIEW should be
+ ref [in/out] expression substituted in VIEW should be
passed using this reference (return
view_ref_found)
+ (*ref != NULL) only if *ref contains
+ the item that we need to replace.
check_grants_table do check columns grants for table?
check_grants_view do check columns grants for view?
allow_rowid do allow finding of "_rowid" field?
@@ -2440,11 +2442,6 @@ find_field_in_table(THD *thd, TABLE_LIST *table_list,
{
if (!my_strcasecmp(system_charset_info, field_it.name(), name))
{
- Item *item= field_it.create_item(thd);
- if (!item)
- {
- DBUG_RETURN(0);
- }
if (table_list->schema_table_reformed)
{
/*
@@ -2463,6 +2460,19 @@ find_field_in_table(THD *thd, TABLE_LIST *table_list,
name, length))
DBUG_RETURN(WRONG_GRANT);
#endif
+ Item *item= field_it.create_item(thd);
+ if (!item)
+ {
+ DBUG_RETURN(0);
+ }
+ /*
+ *ref != NULL means that *ref contains the item that we need to
+ replace. If the item was aliased by the user, set the alias to
+ the replacing item.
+ */
+ if (*ref && !(*ref)->is_autogenerated_name)
+ item->set_name((*ref)->name, (*ref)->name_length,
+ system_charset_info);
if (register_tree_change)
thd->change_item_tree(ref, item);
else