summaryrefslogtreecommitdiff
path: root/sql/sql_view.cc
diff options
context:
space:
mode:
authorGleb Shchepa <gshchepa@mysql.com>2008-11-28 20:13:12 +0400
committerGleb Shchepa <gshchepa@mysql.com>2008-11-28 20:13:12 +0400
commit41ccbefcc4cbf75c18e37746bd52617f6c9794b9 (patch)
treebf2c3ca1a5b878dcccb42f0500e9d87c875922f9 /sql/sql_view.cc
parentf1a9d567c1535f4829e0b3b078b24c0e8c5c437c (diff)
downloadmariadb-git-41ccbefcc4cbf75c18e37746bd52617f6c9794b9.tar.gz
Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws
an error Even after the fix for bug 28701 visible behaviors of SELECT FROM a view and SELECT FROM a regular table are little bit different: 1. "SELECT FROM regular table USE/FORCE/IGNORE(non existent index)" fails with a "ERROR 1176 (HY000): Key '...' doesn't exist in table '...'" 2. "SELECT FROM view USING/FORCE/IGNORE(any index)" fails with a "ERROR 1221 (HY000): Incorrect usage of USE/IGNORE INDEX and VIEW". OTOH "SHOW INDEX FROM view" always returns empty result set, so from the point of same behaviour view we trying to use/ignore non existent index. To harmonize the behaviour of USE/FORCE/IGNORE(index) clauses in SELECT from a view and from a regular table the "ERROR 1221 (HY000): Incorrect usage of USE/IGNORE INDEX and VIEW" message has been replaced with the "ERROR 1176 (HY000): Key '...' doesn't exist in table '...'" message like for tables and non existent keys. mysql-test/r/view.result: Added test case for bug #33461. Updated test case for bug 28701. mysql-test/t/view.test: Added test case for bug #33461. Updated test case for bug 28701. sql/sql_view.cc: Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error To harmonize the behaviour of USE/FORCE/IGNORE(index) clauses in SELECT from a view and from a regular table the "ERROR 1221 (HY000): Incorrect usage of USE/IGNORE INDEX and VIEW" message has been replaced with the "ERROR 1176 (HY000): Key '...' doesn't exist in table '...'" message like for tables and non existent keys.
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r--sql/sql_view.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index f65a62bed75..5bd3c09a289 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -980,13 +980,14 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
DBUG_RETURN(0);
}
- if (table->use_index || table->ignore_index)
+ List<String> *index_list= table->use_index ? table->use_index
+ : table->ignore_index;
+ if (index_list)
{
- my_error(ER_WRONG_USAGE, MYF(0),
- table->ignore_index ? "IGNORE INDEX" :
- (table->force_index ? "FORCE INDEX" : "USE INDEX"),
- "VIEW");
- DBUG_RETURN(TRUE);
+ DBUG_ASSERT(index_list->head()); // should never fail
+ my_error(ER_KEY_DOES_NOT_EXITS, MYF(0), index_list->head()->c_ptr_safe(),
+ table->table_name);
+ DBUG_RETURN(TRUE);
}
/* check loop via view definition */