Using the writable_schema pragma "only" makes sqlite_master treated like any other table for <user> queries, it doesn't introduce extra logic to check for needed re-parsing or other <system> controlled stuff. So running an UPDATE query on sqlite_master becomes just like any <user> UPDATE on any normal table. It's seen as changing some text or numbers etc in some random table, and that's it. And since normal everyday <user> updates are not seen as changing the format of the schema, the <system> doesn't waste resources in re-parsing the schema, or in updating the file header with a new "schema cookie" value. Only queries that would have the <system> read or alter sqlite_master <in the background as the MASTER table and not as simply the target of a user query> are the things that would trigger the <system> to re-parse and update the file header. So CREATE, DROP, ALTER etc, or analyze sqlite_master.
(Appologies if I used too many <>'s for <emphasis> in plain text) I think that's all correct anyway. Though I have been known to be wrong. (You know, I used to be indecisive, but now I'm not so sure...) -----Original Message----- From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] On Behalf Of sanhua.zh Sent: Friday, October 21, 2016 3:24 AM To: SQLite mailing list Subject: Re: [sqlite] Drop Existing Table Results in 'no such table' Hello Simon, I try it again and I find that I can update the memory of connection itself by changing any other connections' schema_version. This kind of behavior make me confused. Since it can tell other connections’ that the schema is changed, why can’t it tell to itself ? 原始邮件 发件人:sanhua.zhsanhua...@foxmail.com 收件人:SQLite mailing listsqlite-us...@mailinglists.sqlite.org 发送时间:2016年10月21日(周五) 14:48 主题:Re: [sqlite] Drop Existing Table Results in 'no such table' You are changing the details saved on disk but not the copy in memory. Since reopen a new connection is a ugly way, is there any other way to update the memory ? I know that sqlite3InitCallback may update it, but I can’t find a way to invoke it. 原始邮件 发件人:Simon slavinslav...@bigfraud.org 收件人:SQLite mailing listsqlite-us...@mailinglists.sqlite.org 发送时间:2016年10月21日(周五) 14:39 主题:Re: [sqlite] Drop Existing Table Results in 'no such table' On 21 Oct 2016, at 4:42am, sanhua.zh sanhua...@foxmail.com wrote: I am trying to rename a table by editing the sqlite_master directly. I do know there are a ‘ALTER TABLE … RENAME TO …’ syntax to do that. I just want to try it in this way. But I find that the ‘no such table’ error occurs while I try to drop the renamed table. SQLite does not look at the sqlite_master table before executing each command. It has a copy of the database schema in the memory allocated to the connection. You are changing the details saved on disk but not the copy in memory. Only I close the connection or start a new connection, the renamed table can be dropped. That makes sense. Simon. _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users