diff --git a/src/box/alter.cc b/src/box/alter.cc index 431da12dae8bbd27b45155a2aaf569e5e48688a9..080a72b9f0aa85a92cf0694b6c2c86366db9f7fa 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -1501,13 +1501,8 @@ update_view_references(struct Select *select, int update_value, const char *space_name = sql_src_list_entry_name(list, i); if (space_name == NULL) continue; - uint32_t space_id; - if (schema_find_id(BOX_SPACE_ID, 2, space_name, - strlen(space_name), &space_id) != 0) { - sqlSrcListDelete(sql_get(), list); - return -1; - } - if (space_id == BOX_ID_NIL) { + struct space *space = space_by_name(space_name); + if (space == NULL) { if (! suppress_error) { assert(not_found_space != NULL); *not_found_space = tt_sprintf("%s", space_name); @@ -1516,7 +1511,6 @@ update_view_references(struct Select *select, int update_value, } continue; } - struct space *space = space_by_id(space_id); assert(space->def->view_ref_count > 0 || update_value > 0); space->def->view_ref_count += update_value; } diff --git a/test/sql/view.result b/test/sql/view.result index fd8fe00e3c0b60f4fedc23026b72d4605ccd4e13..e99a9bd7e0beeafb88681f11a716d49bd5770872 100644 --- a/test/sql/view.result +++ b/test/sql/view.result @@ -241,6 +241,34 @@ box.sql.execute("DROP TABLE c;") box.sql.execute("DROP TABLE b;") --- ... +-- gh-3814: make sure that recovery of view processed without +-- unexpected errors. +-- +box.snapshot() +--- +- ok +... +box.sql.execute("CREATE TABLE t2 (id INT PRIMARY KEY);") +--- +... +box.sql.execute("CREATE VIEW v2 AS SELECT * FROM t2;") +--- +... +test_run:cmd('restart server default') +box.sql.execute("DROP TABLE t2;") +--- +- error: 'Can''t drop space ''T2'': other views depend on this space' +... +box.sql.execute("SELECT * FROM v2;") +--- +- [] +... +box.space.V2:drop() +--- +... +box.space.T2:drop() +--- +... -- Cleanup box.sql.execute("DROP VIEW v1;"); --- diff --git a/test/sql/view.test.lua b/test/sql/view.test.lua index d05fb4a8c4b14f06c5d850e31eb7cad58308232f..592d7889c60196313ff7e1c926523707aab8cca6 100644 --- a/test/sql/view.test.lua +++ b/test/sql/view.test.lua @@ -104,6 +104,19 @@ box.space.BCV:drop() box.sql.execute("DROP TABLE c;") box.sql.execute("DROP TABLE b;") +-- gh-3814: make sure that recovery of view processed without +-- unexpected errors. +-- +box.snapshot() +box.sql.execute("CREATE TABLE t2 (id INT PRIMARY KEY);") +box.sql.execute("CREATE VIEW v2 AS SELECT * FROM t2;") +test_run:cmd('restart server default') + +box.sql.execute("DROP TABLE t2;") +box.sql.execute("SELECT * FROM v2;") +box.space.V2:drop() +box.space.T2:drop() + -- Cleanup box.sql.execute("DROP VIEW v1;"); box.sql.execute("DROP TABLE t1;");