From 704fb6daf749e66d39a7155c1e7f9465733ec140 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Sep 2004 15:18:40 +0300 Subject: CHECK OPTIONs added (WL#1983) include/mysqld_error.h: new error messages mysql-test/r/view.result: test of CHECK OPTION in a views mysql-test/t/view.test: test of CHECK OPTION in a views sql/share/czech/errmsg.txt: new error messages sql/share/danish/errmsg.txt: new error messages sql/share/dutch/errmsg.txt: new error messages sql/share/english/errmsg.txt: new error messages sql/share/estonian/errmsg.txt: new error messages sql/share/french/errmsg.txt: new error messages sql/share/german/errmsg.txt: new error messages sql/share/greek/errmsg.txt: new error messages sql/share/hungarian/errmsg.txt: new error messages sql/share/italian/errmsg.txt: new error messages sql/share/japanese/errmsg.txt: new error messages sql/share/korean/errmsg.txt: new error messages sql/share/norwegian-ny/errmsg.txt: new error messages sql/share/norwegian/errmsg.txt: new error messages sql/share/polish/errmsg.txt: new error messages sql/share/portuguese/errmsg.txt: new error messages sql/share/romanian/errmsg.txt: new error messages sql/share/russian/errmsg.txt: new error messages sql/share/serbian/errmsg.txt: new error messages sql/share/slovak/errmsg.txt: new error messages sql/share/spanish/errmsg.txt: new error messages sql/share/swedish/errmsg.txt: new error messages sql/share/ukrainian/errmsg.txt: new error messages sql/sql_insert.cc: CHECK OPTIONs added sql/sql_lex.h: CHECK OPTIONs added sql/sql_update.cc: CHECK OPTIONs added sql/sql_view.cc: new parameter added returnrd values fixed sql/sql_yacc.yy: CHECK OPTIONs added sql/table.cc: CHECK OPTIONs added sql/table.h: CHECK OPTIONs added --- sql/sql_view.cc | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'sql/sql_view.cc') diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 3f0e0db1724..31e5796d946 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -327,6 +327,7 @@ static char *view_field_names[]= (char*)"md5", (char*)"updatable", (char*)"algorithm", + (char*)"with_check_option", (char*)"revision", (char*)"timestamp", (char*)"create-version", @@ -343,13 +344,15 @@ static File_option view_parameters[]= FILE_OPTIONS_ULONGLONG}, {{view_field_names[3], 9}, offsetof(TABLE_LIST, algorithm), FILE_OPTIONS_ULONGLONG}, - {{view_field_names[4], 8}, offsetof(TABLE_LIST, revision), + {{view_field_names[4], 17}, offsetof(TABLE_LIST, with_check), + FILE_OPTIONS_ULONGLONG}, + {{view_field_names[5], 8}, offsetof(TABLE_LIST, revision), FILE_OPTIONS_REV}, - {{view_field_names[5], 9}, offsetof(TABLE_LIST, timestamp), + {{view_field_names[6], 9}, offsetof(TABLE_LIST, timestamp), FILE_OPTIONS_TIMESTAMP}, - {{view_field_names[6], 14}, offsetof(TABLE_LIST, file_version), + {{view_field_names[7], 14}, offsetof(TABLE_LIST, file_version), FILE_OPTIONS_ULONGLONG}, - {{view_field_names[7], 6}, offsetof(TABLE_LIST, source), + {{view_field_names[8], 6}, offsetof(TABLE_LIST, source), FILE_OPTIONS_ESTRING}, {{NULL, 0}, 0, FILE_OPTIONS_STRING} @@ -421,7 +424,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, if (mode == VIEW_CREATE_NEW) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), view->alias); - DBUG_RETURN(1); + DBUG_RETURN(-1); } File_parser *parser= sql_parse_prepare(&path, &thd->mem_root, 0); @@ -439,14 +442,14 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, if (parser->parse((gptr)view, &thd->mem_root, view_parameters + revision_number_position, 1)) { - DBUG_RETURN(1); + DBUG_RETURN(thd->net.report_error? -1 : 1); } } else { my_error(ER_WRONG_OBJECT, MYF(0), (view->db?view->db:thd->db), view->real_name, "VIEW"); - DBUG_RETURN(1); + DBUG_RETURN(-1); } } else @@ -459,7 +462,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, if (mode == VIEW_ALTER) { my_error(ER_NO_SUCH_TABLE, MYF(0), view->db, view->alias); - DBUG_RETURN(1); + DBUG_RETURN(-1); } } } @@ -481,6 +484,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, thd->lex->create_view_algorithm= VIEW_ALGORITHM_UNDEFINED; } view->algorithm= thd->lex->create_view_algorithm; + view->with_check= thd->lex->create_view_check; if ((view->updatable_view= (can_be_merged && view->algorithm != VIEW_ALGORITHM_TMEPTABLE))) { @@ -496,10 +500,18 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, } } } + + if (view->with_check != VIEW_CHECK_NONE && + !view->updatable_view) + { + my_error(ER_VIEW_NONUPD_CHECK, MYF(0)); + DBUG_RETURN(-1); + } + if (sql_create_definition_file(&dir, &file, view_file_type, (gptr)view, view_parameters, 3)) { - DBUG_RETURN(1); + DBUG_RETURN(thd->net.report_error? -1 : 1); } DBUG_RETURN(0); } @@ -551,7 +563,7 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table) TODO: when VIEWs will be stored in cache, table mem_root should be used here */ - if (parser->parse((gptr)table, &thd->mem_root, view_parameters, 6)) + if (parser->parse((gptr)table, &thd->mem_root, view_parameters, 7)) goto err; /* @@ -706,6 +718,7 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table) DBUG_PRINT("info", ("algorithm: TEMPORARY TABLE")); lex->select_lex.linkage= DERIVED_TABLE_TYPE; table->updatable= 0; + table->with_check= VIEW_CHECK_NONE; /* SELECT tree link */ lex->unit.include_down(table->select_lex); -- cgit v1.2.1 From e05e18606be069b79d44ca004315293cd1ac5ed8 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 29 Sep 2004 16:35:01 +0300 Subject: post review changes: CHECK OPTION moved to one function view name added to error messages mysql-test/r/view.result: error messages changed sql/share/czech/errmsg.txt: view name added sql/share/danish/errmsg.txt: view name added sql/share/dutch/errmsg.txt: view name added sql/share/english/errmsg.txt: view name added sql/share/estonian/errmsg.txt: view name added sql/share/french/errmsg.txt: view name added sql/share/german/errmsg.txt: view name added sql/share/greek/errmsg.txt: view name added sql/share/hungarian/errmsg.txt: view name added sql/share/italian/errmsg.txt: view name added sql/share/japanese/errmsg.txt: view name added sql/share/korean/errmsg.txt: view name added sql/share/norwegian-ny/errmsg.txt: view name added sql/share/norwegian/errmsg.txt: view name added sql/share/polish/errmsg.txt: view name added sql/share/portuguese/errmsg.txt: view name added sql/share/romanian/errmsg.txt: view name added sql/share/russian/errmsg.txt: view name added sql/share/serbian/errmsg.txt: view name added sql/share/slovak/errmsg.txt: view name added sql/share/spanish/errmsg.txt: view name added sql/share/swedish/errmsg.txt: view name added sql/share/ukrainian/errmsg.txt: view name added sql/sql_class.h: view reference saved sql/sql_insert.cc: CHECK OPTION moved to one function sql/sql_update.cc: CHECK OPTION moved to one function sql/sql_view.cc: view name added to error message sql/table.cc: CHECK OPTION moved to one function sql/table.h: CHECK OPTION moved to one function --- sql/sql_view.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sql/sql_view.cc') diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 2877d6177ea..c94cc9acb44 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -398,7 +398,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, char path_buff[FN_REFLEN]; LEX_STRING path; File_parser *parser; - + path.str= path_buff; fn_format(path_buff, file.str, dir.str, 0, MY_UNPACK_FILENAME); path.length= strlen(path_buff); @@ -424,7 +424,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, /* read revision number - + TODO: read dependense list, too, to process cascade/restrict TODO: special cascade/restrict procedure for alter? */ @@ -481,7 +481,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, if (view->with_check != VIEW_CHECK_NONE && !view->updatable_view) { - my_error(ER_VIEW_NONUPD_CHECK, MYF(0)); + my_error(ER_VIEW_NONUPD_CHECK, MYF(0), view->db, view->real_name); DBUG_RETURN(-1); } -- cgit v1.2.1