Loading sql/sql_base.cc +31 −13 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ HASH open_cache; /* Used by mysql_test */ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, const char *name, const char *alias, TABLE_LIST *table_list, MEM_ROOT *mem_root); TABLE_LIST *table_list, MEM_ROOT *mem_root, uint flags); static void free_cache_entry(TABLE *entry); static void mysql_rm_tmp_tables(void); static bool open_new_frm(THD *thd, const char *path, const char *alias, Loading Loading @@ -1108,7 +1109,7 @@ bool reopen_name_locked_table(THD* thd, TABLE_LIST* table_list) key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1; if (open_unireg_entry(thd, table, db, table_name, table_name, 0, thd->mem_root) || thd->mem_root, 0) || !(table->s->table_cache_key= memdup_root(&table->mem_root, (char*) key, key_length))) { Loading Loading @@ -1311,7 +1312,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_lock(&LOCK_open)); if (!open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root)) alias, table_list, mem_root, 0)) { DBUG_ASSERT(table_list->view != 0); VOID(pthread_mutex_unlock(&LOCK_open)); Loading Loading @@ -1391,6 +1392,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, else { TABLE_SHARE *share; int error; /* Free cache if too big */ while (open_cache.records > table_cache_size && unused_tables) VOID(hash_delete(&open_cache,(byte*) unused_tables)); /* purecov: tested */ Loading @@ -1401,9 +1403,12 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(NULL); } if (open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root) || (!table_list->view && error= open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root, (flags & OPEN_VIEW_NO_PARSE)); if ((error > 0) || (!table_list->view && !error && !(table->s->table_cache_key= memdup_root(&table->mem_root, (char*) key, key_length)))) Loading @@ -1413,8 +1418,15 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(NULL); } if (table_list->view) if (table_list->view || error < 0) { /* VIEW not really opened, only frm were read. Set 1 as a flag here */ if (error < 0) table_list->view= (st_lex*)1; my_free((gptr)table, MYF(0)); VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(0); // VIEW Loading Loading @@ -1521,7 +1533,7 @@ bool reopen_table(TABLE *table,bool locked) safe_mutex_assert_owner(&LOCK_open); if (open_unireg_entry(table->in_use, &tmp, db, table_name, table->alias, 0, table->in_use->mem_root)) table->alias, 0, table->in_use->mem_root, 0)) goto end; free_io_cache(table); Loading Loading @@ -1851,6 +1863,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name) alias Alias name table_desc TABLE_LIST descriptor (used with views) mem_root temporary mem_root for parsing flags the OPEN_VIEW_NO_PARSE flag to be passed to openfrm()/open_new_frm() NOTES Extra argument for open is taken from thd->open_options Loading @@ -1861,7 +1875,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name) */ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, const char *name, const char *alias, TABLE_LIST *table_desc, MEM_ROOT *mem_root) TABLE_LIST *table_desc, MEM_ROOT *mem_root, uint flags) { char path[FN_REFLEN]; int error; Loading @@ -1873,14 +1888,16 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX | HA_TRY_READ_ONLY | NO_ERR_ON_NEW_FRM), READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD, READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD | (flags & OPEN_VIEW_NO_PARSE), thd->open_options, entry)) && (error != 5 || (fn_format(path, path, 0, reg_ext, MY_UNPACK_FILENAME), open_new_frm(thd, path, alias, db, name, (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX | HA_TRY_READ_ONLY), READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD, READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD | (flags & OPEN_VIEW_NO_PARSE), thd->open_options, entry, table_desc, mem_root)))) { Loading Loading @@ -1962,7 +1979,7 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, } if (error == 5) DBUG_RETURN(0); // we have just opened VIEW DBUG_RETURN((flags & OPEN_VIEW_NO_PARSE)? -1 : 0); // we have just opened VIEW /* We can't mark all tables in 'mysql' database as system since we don't Loading Loading @@ -5379,7 +5396,8 @@ open_new_frm(THD *thd, const char *path, const char *alias, my_error(ER_WRONG_OBJECT, MYF(0), db, table_name, "BASE TABLE"); goto err; } if (mysql_make_view(thd, parser, table_desc)) if (mysql_make_view(thd, parser, table_desc, (prgflag & OPEN_VIEW_NO_PARSE))) goto err; } else Loading sql/sql_lex.h +1 −1 Original line number Diff line number Diff line Loading @@ -375,7 +375,7 @@ class st_select_lex_node { friend class st_select_lex_unit; friend bool mysql_new_select(struct st_lex *lex, bool move_down); friend bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table); TABLE_LIST *table, uint flags); private: void fast_exclude(); }; Loading sql/sql_view.cc +25 −60 Original line number Diff line number Diff line Loading @@ -179,23 +179,15 @@ static bool fill_defined_view_parts (THD *thd, TABLE_LIST *view) { LEX *lex= thd->lex; bool free_view= 1; bool not_used; TABLE_LIST decoy; if (view->view) free_view= 0; memcpy (&decoy, view, sizeof (TABLE_LIST)); if ((decoy.table= open_table(thd, &decoy, thd->mem_root, NULL, 0))) if (!open_table(thd, &decoy, thd->mem_root, ¬_used, OPEN_VIEW_NO_PARSE) && !decoy.view) { /* It's a table */ my_free((gptr)decoy.table, MYF(0)); my_error(ER_WRONG_OBJECT, MYF(0), view->db, view->table_name, "VIEW"); return TRUE; } if (!decoy.view) /* An error while opening the view occurs, caller will handle it */ return FALSE; if (!lex->definer) { view->definer.host= decoy.definer.host; Loading @@ -207,11 +199,6 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) if (lex->create_view_suid == VIEW_SUID_DEFAULT) lex->create_view_suid= decoy.view_suid ? VIEW_SUID_DEFINER : VIEW_SUID_INVOKER; if (free_view) { delete decoy.view; lex->cleanup_after_one_table_open(); } return FALSE; } Loading Loading @@ -740,10 +727,8 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, view->query.str= (char*)str.ptr(); view->query.length= str.length()-1; // we do not need last \0 view->source.str= thd->query + thd->lex->create_view_select_start; view->source.length= (char *)skip_rear_comments((uchar *)view->source.str, (uchar *)thd->query + thd->query_length) - view->source.str; view->source.length= (thd->query_length - thd->lex->create_view_select_start); view->file_version= 1; view->calc_md5(md5); view->md5.str= md5; Loading Loading @@ -830,13 +815,14 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, thd Thread handler parser parser object table TABLE_LIST structure for filling flags flags RETURN 0 ok 1 error */ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, uint flags) { SELECT_LEX *end, *view_select; LEX *old_lex, *lex; Loading Loading @@ -927,6 +913,10 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) table->db, table->table_name); get_default_definer(thd, &table->definer); } if (flags & OPEN_VIEW_NO_PARSE) { DBUG_RETURN(FALSE); } /* Save VIEW parameters, which will be wiped out by derived table Loading Loading @@ -1297,11 +1287,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) DBUG_ENTER("mysql_drop_view"); char path[FN_REFLEN]; TABLE_LIST *view; frm_type_enum type; bool type= 0; db_type not_used; String non_existant_views; char *wrong_object_db= NULL, *wrong_object_name= NULL; bool error= FALSE; for (view= views; view; view= view->next_local) { Loading @@ -1309,9 +1296,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) view->table_name, reg_ext, NullS); (void) unpack_filename(path, path); VOID(pthread_mutex_lock(&LOCK_open)); type= FRMTYPE_ERROR; if (access(path, F_OK) || FRMTYPE_VIEW != (type= mysql_frm_type(thd, path, ¬_used))) (type= (mysql_frm_type(thd, path, ¬_used) != FRMTYPE_VIEW))) { char name[FN_REFLEN]; my_snprintf(name, sizeof(name), "%s.%s", view->db, view->table_name); Loading @@ -1323,46 +1309,25 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) VOID(pthread_mutex_unlock(&LOCK_open)); continue; } if (type == FRMTYPE_TABLE) { if (!wrong_object_name) { wrong_object_db= view->db; wrong_object_name= view->table_name; } } if (type) my_error(ER_WRONG_OBJECT, MYF(0), view->db, view->table_name, "VIEW"); else { if (non_existant_views.length()) non_existant_views.append(','); non_existant_views.append(String(view->table_name,system_charset_info)); } VOID(pthread_mutex_unlock(&LOCK_open)); continue; my_error(ER_BAD_TABLE_ERROR, MYF(0), name); goto err; } if (my_delete(path, MYF(MY_WME))) error= TRUE; goto err; query_cache_invalidate3(thd, view, 0); sp_cache_invalidate(); VOID(pthread_mutex_unlock(&LOCK_open)); } if (error) { DBUG_RETURN(TRUE); } if (wrong_object_name) { my_error(ER_WRONG_OBJECT, MYF(0), wrong_object_db, wrong_object_name, "VIEW"); DBUG_RETURN(TRUE); } if (non_existant_views.length()) { my_error(ER_BAD_TABLE_ERROR, MYF(0), non_existant_views.c_ptr()); DBUG_RETURN(TRUE); } send_ok(thd); DBUG_RETURN(FALSE); err: VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(TRUE); } Loading sql/sql_view.h +2 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,8 @@ bool mysql_create_view(THD *thd, enum_view_create_mode mode); bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table); bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, uint flags); bool mysql_drop_view(THD *thd, TABLE_LIST *view, enum_drop_mode drop_mode); Loading sql/table.cc +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat, // caller can't process new .frm goto err; } if (prgflag & OPEN_VIEW_NO_PARSE) goto err; share->blob_ptr_size= sizeof(char*); outparam->db_stat= db_stat; Loading Loading
sql/sql_base.cc +31 −13 Original line number Diff line number Diff line Loading @@ -34,7 +34,8 @@ HASH open_cache; /* Used by mysql_test */ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, const char *name, const char *alias, TABLE_LIST *table_list, MEM_ROOT *mem_root); TABLE_LIST *table_list, MEM_ROOT *mem_root, uint flags); static void free_cache_entry(TABLE *entry); static void mysql_rm_tmp_tables(void); static bool open_new_frm(THD *thd, const char *path, const char *alias, Loading Loading @@ -1108,7 +1109,7 @@ bool reopen_name_locked_table(THD* thd, TABLE_LIST* table_list) key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1; if (open_unireg_entry(thd, table, db, table_name, table_name, 0, thd->mem_root) || thd->mem_root, 0) || !(table->s->table_cache_key= memdup_root(&table->mem_root, (char*) key, key_length))) { Loading Loading @@ -1311,7 +1312,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_lock(&LOCK_open)); if (!open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root)) alias, table_list, mem_root, 0)) { DBUG_ASSERT(table_list->view != 0); VOID(pthread_mutex_unlock(&LOCK_open)); Loading Loading @@ -1391,6 +1392,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, else { TABLE_SHARE *share; int error; /* Free cache if too big */ while (open_cache.records > table_cache_size && unused_tables) VOID(hash_delete(&open_cache,(byte*) unused_tables)); /* purecov: tested */ Loading @@ -1401,9 +1403,12 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(NULL); } if (open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root) || (!table_list->view && error= open_unireg_entry(thd, table, table_list->db, table_list->table_name, alias, table_list, mem_root, (flags & OPEN_VIEW_NO_PARSE)); if ((error > 0) || (!table_list->view && !error && !(table->s->table_cache_key= memdup_root(&table->mem_root, (char*) key, key_length)))) Loading @@ -1413,8 +1418,15 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(NULL); } if (table_list->view) if (table_list->view || error < 0) { /* VIEW not really opened, only frm were read. Set 1 as a flag here */ if (error < 0) table_list->view= (st_lex*)1; my_free((gptr)table, MYF(0)); VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(0); // VIEW Loading Loading @@ -1521,7 +1533,7 @@ bool reopen_table(TABLE *table,bool locked) safe_mutex_assert_owner(&LOCK_open); if (open_unireg_entry(table->in_use, &tmp, db, table_name, table->alias, 0, table->in_use->mem_root)) table->alias, 0, table->in_use->mem_root, 0)) goto end; free_io_cache(table); Loading Loading @@ -1851,6 +1863,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name) alias Alias name table_desc TABLE_LIST descriptor (used with views) mem_root temporary mem_root for parsing flags the OPEN_VIEW_NO_PARSE flag to be passed to openfrm()/open_new_frm() NOTES Extra argument for open is taken from thd->open_options Loading @@ -1861,7 +1875,8 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name) */ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, const char *name, const char *alias, TABLE_LIST *table_desc, MEM_ROOT *mem_root) TABLE_LIST *table_desc, MEM_ROOT *mem_root, uint flags) { char path[FN_REFLEN]; int error; Loading @@ -1873,14 +1888,16 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX | HA_TRY_READ_ONLY | NO_ERR_ON_NEW_FRM), READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD, READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD | (flags & OPEN_VIEW_NO_PARSE), thd->open_options, entry)) && (error != 5 || (fn_format(path, path, 0, reg_ext, MY_UNPACK_FILENAME), open_new_frm(thd, path, alias, db, name, (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX | HA_TRY_READ_ONLY), READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD, READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD | (flags & OPEN_VIEW_NO_PARSE), thd->open_options, entry, table_desc, mem_root)))) { Loading Loading @@ -1962,7 +1979,7 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, } if (error == 5) DBUG_RETURN(0); // we have just opened VIEW DBUG_RETURN((flags & OPEN_VIEW_NO_PARSE)? -1 : 0); // we have just opened VIEW /* We can't mark all tables in 'mysql' database as system since we don't Loading Loading @@ -5379,7 +5396,8 @@ open_new_frm(THD *thd, const char *path, const char *alias, my_error(ER_WRONG_OBJECT, MYF(0), db, table_name, "BASE TABLE"); goto err; } if (mysql_make_view(thd, parser, table_desc)) if (mysql_make_view(thd, parser, table_desc, (prgflag & OPEN_VIEW_NO_PARSE))) goto err; } else Loading
sql/sql_lex.h +1 −1 Original line number Diff line number Diff line Loading @@ -375,7 +375,7 @@ class st_select_lex_node { friend class st_select_lex_unit; friend bool mysql_new_select(struct st_lex *lex, bool move_down); friend bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table); TABLE_LIST *table, uint flags); private: void fast_exclude(); }; Loading
sql/sql_view.cc +25 −60 Original line number Diff line number Diff line Loading @@ -179,23 +179,15 @@ static bool fill_defined_view_parts (THD *thd, TABLE_LIST *view) { LEX *lex= thd->lex; bool free_view= 1; bool not_used; TABLE_LIST decoy; if (view->view) free_view= 0; memcpy (&decoy, view, sizeof (TABLE_LIST)); if ((decoy.table= open_table(thd, &decoy, thd->mem_root, NULL, 0))) if (!open_table(thd, &decoy, thd->mem_root, ¬_used, OPEN_VIEW_NO_PARSE) && !decoy.view) { /* It's a table */ my_free((gptr)decoy.table, MYF(0)); my_error(ER_WRONG_OBJECT, MYF(0), view->db, view->table_name, "VIEW"); return TRUE; } if (!decoy.view) /* An error while opening the view occurs, caller will handle it */ return FALSE; if (!lex->definer) { view->definer.host= decoy.definer.host; Loading @@ -207,11 +199,6 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) if (lex->create_view_suid == VIEW_SUID_DEFAULT) lex->create_view_suid= decoy.view_suid ? VIEW_SUID_DEFINER : VIEW_SUID_INVOKER; if (free_view) { delete decoy.view; lex->cleanup_after_one_table_open(); } return FALSE; } Loading Loading @@ -740,10 +727,8 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, view->query.str= (char*)str.ptr(); view->query.length= str.length()-1; // we do not need last \0 view->source.str= thd->query + thd->lex->create_view_select_start; view->source.length= (char *)skip_rear_comments((uchar *)view->source.str, (uchar *)thd->query + thd->query_length) - view->source.str; view->source.length= (thd->query_length - thd->lex->create_view_select_start); view->file_version= 1; view->calc_md5(md5); view->md5.str= md5; Loading Loading @@ -830,13 +815,14 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, thd Thread handler parser parser object table TABLE_LIST structure for filling flags flags RETURN 0 ok 1 error */ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, uint flags) { SELECT_LEX *end, *view_select; LEX *old_lex, *lex; Loading Loading @@ -927,6 +913,10 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table) table->db, table->table_name); get_default_definer(thd, &table->definer); } if (flags & OPEN_VIEW_NO_PARSE) { DBUG_RETURN(FALSE); } /* Save VIEW parameters, which will be wiped out by derived table Loading Loading @@ -1297,11 +1287,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) DBUG_ENTER("mysql_drop_view"); char path[FN_REFLEN]; TABLE_LIST *view; frm_type_enum type; bool type= 0; db_type not_used; String non_existant_views; char *wrong_object_db= NULL, *wrong_object_name= NULL; bool error= FALSE; for (view= views; view; view= view->next_local) { Loading @@ -1309,9 +1296,8 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) view->table_name, reg_ext, NullS); (void) unpack_filename(path, path); VOID(pthread_mutex_lock(&LOCK_open)); type= FRMTYPE_ERROR; if (access(path, F_OK) || FRMTYPE_VIEW != (type= mysql_frm_type(thd, path, ¬_used))) (type= (mysql_frm_type(thd, path, ¬_used) != FRMTYPE_VIEW))) { char name[FN_REFLEN]; my_snprintf(name, sizeof(name), "%s.%s", view->db, view->table_name); Loading @@ -1323,46 +1309,25 @@ bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) VOID(pthread_mutex_unlock(&LOCK_open)); continue; } if (type == FRMTYPE_TABLE) { if (!wrong_object_name) { wrong_object_db= view->db; wrong_object_name= view->table_name; } } if (type) my_error(ER_WRONG_OBJECT, MYF(0), view->db, view->table_name, "VIEW"); else { if (non_existant_views.length()) non_existant_views.append(','); non_existant_views.append(String(view->table_name,system_charset_info)); } VOID(pthread_mutex_unlock(&LOCK_open)); continue; my_error(ER_BAD_TABLE_ERROR, MYF(0), name); goto err; } if (my_delete(path, MYF(MY_WME))) error= TRUE; goto err; query_cache_invalidate3(thd, view, 0); sp_cache_invalidate(); VOID(pthread_mutex_unlock(&LOCK_open)); } if (error) { DBUG_RETURN(TRUE); } if (wrong_object_name) { my_error(ER_WRONG_OBJECT, MYF(0), wrong_object_db, wrong_object_name, "VIEW"); DBUG_RETURN(TRUE); } if (non_existant_views.length()) { my_error(ER_BAD_TABLE_ERROR, MYF(0), non_existant_views.c_ptr()); DBUG_RETURN(TRUE); } send_ok(thd); DBUG_RETURN(FALSE); err: VOID(pthread_mutex_unlock(&LOCK_open)); DBUG_RETURN(TRUE); } Loading
sql/sql_view.h +2 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,8 @@ bool mysql_create_view(THD *thd, enum_view_create_mode mode); bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table); bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, uint flags); bool mysql_drop_view(THD *thd, TABLE_LIST *view, enum_drop_mode drop_mode); Loading
sql/table.cc +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat, // caller can't process new .frm goto err; } if (prgflag & OPEN_VIEW_NO_PARSE) goto err; share->blob_ptr_size= sizeof(char*); outparam->db_stat= db_stat; Loading