<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 3 Apr 2018, at 20:54, Vladislav Shpilevoy <<a href="mailto:v.shpilevoy@tarantool.org" class="">v.shpilevoy@tarantool.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Hello. See 7 comments below.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">03.04.2018 19:14, Nikita Pettik пишет:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Some of legacy functions seem to be useless, since they serve as<br class="">wrappers around others; the rest rely on capabilities which are no<br class="">longer relevant. This patch provides slight refactoring of such<br class="">functions.<br class=""><br class="">Removed entities:<br class=""> - sqlite3LocateTableItem() - replaced with sqlite3LocateTable();<br class=""> - sqlite3FindTable() - replaced with sqlite3HashFind();<br class=""> - sqlite3ColumnOfIndex() - in Tarantool order of columns always the same;<br class=""> - sqlite3FindIndex() - replaced with sqlite3LocateIndex();<br class=""> - sqlite3CodeVerifySchema();<br class=""> - sqlite3SchemaToIndex();<br class=""> - sqlite3MultiWrite();<br class=""> - Parse->cookieMast;<br class=""> - Vdbe->usesStmtJournal;<br class="">---<br class=""> src/box/sql/alter.c     |  13 ++-<br class=""> src/box/sql/analyze.c   |  25 +++---<br class=""> src/box/sql/build.c     | 213 ++++++++++--------------------------------------<br class=""> src/box/sql/delete.c    |   5 +-<br class=""> src/box/sql/expr.c      |   9 +-<br class=""> src/box/sql/fkey.c      |   3 +-<br class=""> src/box/sql/insert.c    |  10 +--<br class=""> src/box/sql/pragma.c    |  18 ++--<br class=""> src/box/sql/prepare.c   |  29 -------<br class=""> src/box/sql/select.c    |   4 +-<br class=""> src/box/sql/sqliteInt.h |  11 +--<br class=""> src/box/sql/trigger.c   |   7 +-<br class=""> src/box/sql/update.c    |   2 +-<br class=""> src/box/sql/vdbe.c      |   1 -<br class=""> src/box/sql/vdbeInt.h   |   1 -<br class=""> src/box/sql/vdbeaux.c   |   1 -<br class=""> src/box/sql/where.c     |   2 -<br class=""> src/box/sql/wherecode.c |   7 +-<br class=""> 18 files changed, 83 insertions(+), 278 deletions(-)<br class=""><br class="">diff --git a/src/box/sql/alter.c b/src/box/sql/alter.c<br class="">index 054c0856c..a19324ed2 100644<br class="">--- a/src/box/sql/alter.c<br class="">+++ b/src/box/sql/alter.c<br class="">@@ -122,7 +121,7 @@ sqlite3AlterRenameTable(Parse * pParse,<span class="Apple-tab-span" style="white-space: pre;">     </span>/* Parser context. */<br class=""> <span class="Apple-tab-span" style="white-space: pre;">  </span>if (v == 0) {<br class=""> <span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-tab-span" style="white-space: pre;">  </span>goto exit_rename_table;<br class=""> <span class="Apple-tab-span" style="white-space: pre;">        </span>}<br class="">-<span class="Apple-tab-span" style="white-space: pre;">   </span>sqlite3BeginWriteOperation(pParse, false);<br class="">+<span class="Apple-tab-span" style="white-space: pre;">  </span>sql_set_multi_write(pParse, false);<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">1. Can you please alongside with this patch make sql_set_multi_write take boolean as the last</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">argument? Now it sometimes gets true/false, sometimes 1/0. It is strange.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Done.</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">   <span class="Apple-tab-span" style="white-space: pre;">    </span>/* Drop and reload the internal table schema. */<br class=""> <span class="Apple-tab-span" style="white-space: pre;">       </span>reloadTableSchema(pParse, pTab, zName);<br class=""><br class="">diff --git a/src/box/sql/build.c b/src/box/sql/build.c<br class="">index 5e3ed0f39..61194e06b 100644<br class="">--- a/src/box/sql/build.c<br class="">+++ b/src/box/sql/build.c<br class="">@@ -93,23 +93,16 @@ sqlite3FinishCoding(Parse * pParse)<br class=""> <span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-converted-space"> </span>* transaction on each used database and to verify the schema cookie<br class=""> <span class="Apple-tab-span" style="white-space: pre;">     </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-converted-space"> </span>* on each used database.<br class=""> <span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-converted-space"> </span>*/<br class="">-<span class="Apple-tab-span" style="white-space: pre;">   </span><span class="Apple-tab-span" style="white-space: pre;">  </span>if (db->mallocFailed == 0<br class="">-<span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-converted-space"> </span>   && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr)<br class="">-<span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-converted-space"> </span>   ) {<br class="">+<span class="Apple-tab-span" style="white-space: pre;">        </span><span class="Apple-tab-span" style="white-space: pre;">  </span>if (db->mallocFailed == 0 || pParse->pConstExpr) {<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">2. Please, together with cookie mask checking remove or refactor a comment above.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Fixed.</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">@@ -2240,7 +2164,6 @@ sqlite3CodeDropTable(Parse * pParse, Table * pTab, int isView)<br class="">   <span class="Apple-tab-span" style="white-space: pre;">        </span>v = sqlite3GetVdbe(pParse);<br class=""> <span class="Apple-tab-span" style="white-space: pre;">    </span>assert(v != 0);<br class="">-<span class="Apple-tab-span" style="white-space: pre;">     </span>sqlite3BeginWriteOperation(pParse, 1);<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">3. Why did you delete it with no replacement by sql_set_multi_write(false) ?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Because in this particular case is is completely useless:</div><div>table dropping is implemented as hardcoded opcodes sequences.</div><div>AFAIK this mask is used to provide kind of optimisation/checks during</div><div>query compilation. </div><div><br class=""></div><div>Also, removed:</div><div><br class=""></div><div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class="">@@ -2414,8 +2326,7 @@ sqlite3DropTable(Parse * pParse, SrcList * pName, int isView, int noErr)</span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class=""> <span class="Apple-tab-span" style="white-space:pre">    </span> *    space_id from _space.</span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class=""> <span class="Apple-tab-span" style="white-space:pre">     </span> */</span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class=""> </span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class="">-<span class="Apple-tab-span" style="white-space:pre">  </span>sqlite3BeginWriteOperation(pParse, 1);</span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span class="Apple-tab-span" style="white-space:pre">     </span>sql_clear_stat_spaces(pParse, "tbl", pTab->zName);</font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class=""> <span class="Apple-tab-span" style="white-space:pre">        </span>sqlite3FkDropTable(pParse, pName, pTab);</span></font></div><div style="orphans: 2; widows: 2;"><font color="#24292e" face="SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace" class=""><span style="white-space: pre;" class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>sqlite3CodeDropTable(pParse, pTab, isView);</span></font></div></div><br class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">@@ -2376,15 +2299,12 @@ sqlite3DropTable(Parse * pParse, SrcList * pName, int isView, int noErr)<br class=""> <span class="Apple-tab-span" style="white-space: pre;">  </span>if (noErr)<br class=""> <span class="Apple-tab-span" style="white-space: pre;">     </span><span class="Apple-tab-span" style="white-space: pre;">  </span>db->suppressErr++;<br class=""> <span class="Apple-tab-span" style="white-space: pre;">  </span>assert(isView == 0 || isView == LOCATE_VIEW);<br class="">-<span class="Apple-tab-span" style="white-space: pre;">       </span>pTab = sqlite3LocateTableItem(pParse, isView, &pName->a[0]);<br class="">+<span class="Apple-tab-span" style="white-space: pre;"> </span>pTab = sqlite3LocateTable(pParse, isView, pName->a[0].zName);<br class=""> <span class="Apple-tab-span" style="white-space: pre;">       </span>if (noErr)<br class=""> <span class="Apple-tab-span" style="white-space: pre;">     </span><span class="Apple-tab-span" style="white-space: pre;">  </span>db->suppressErr--;<br class=""> -<span class="Apple-tab-span" style="white-space: pre;"> </span>if (pTab == 0) {<br class="">-<span class="Apple-tab-span" style="white-space: pre;">    </span><span class="Apple-tab-span" style="white-space: pre;">  </span>if (noErr)<br class="">-<span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-tab-span" style="white-space: pre;">  </span><span class="Apple-tab-span" style="white-space: pre;">  </span>sqlite3CodeVerifySchema(pParse);<br class="">+<span class="Apple-tab-span" style="white-space: pre;">    </span>if (pTab == 0)<br class=""></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">4. Lets use ==/!= NULL in all new code.</span></div></blockquote><div><br class=""></div><div>Done.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Same about checking sqlite3HashFind results. And if it is</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">possible with not huge diff, can you please rename sqlite3HashFind to sql_hash_find ?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Is it worth doing? It is going to disappear soon.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">5. sqlite3MultiWrite in commit message is listed among deleted functions, but its declaration still exists.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Fixed:</div><div><br class=""></div><div><div>@@ -3718,8 +3689,8 @@ void sqlite3GenerateConstraintChecks(Parse *, Table *, int *, int, int, int,</div><div> void sqlite3CompleteInsertion(Parse *, Table *, int, int *, int, u8);</div><div> int sqlite3OpenTableAndIndices(Parse *, Table *, int, u8, int, u8 *, int *,</div><div>                               int *, u8, u8);</div><div>-void sqlite3BeginWriteOperation(Parse *, int);</div><div>-void sqlite3MultiWrite(Parse *);</div><div>+void</div><div>+sql_set_multi_write(Parse *, bool);</div></div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">6. cookieMast - typo in commit message. And how about do not list deleted functions in a commit body?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">I can not imagine, that somebody except me will search for any of these functions. And the list is deprecated -</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">for example, sqlite3BeginWriteOperation is deleted too, but does not presence in the list.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Ok, fixed commit message. Left only description.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">7. How about remove DbMaskTest, DbMaskZero and other dbmask shit?</span></div></blockquote><br class=""></div><div>As you wish. Done.</div><div><br class=""></div><div>Diff is below:</div><div><br class=""></div><div><div>diff --git a/src/box/sql/alter.c b/src/box/sql/alter.c</div><div>index a19324ed2..129ef823c 100644</div><div>--- a/src/box/sql/alter.c</div><div>+++ b/src/box/sql/alter.c</div><div>@@ -85,7 +85,7 @@ sqlite3AlterRenameTable(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">  </span>/* Parser context. */</div><div> <span class="Apple-tab-span" style="white-space:pre">  </span>assert(pSrc->nSrc == 1);</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!pTab)</div><div>+<span class="Apple-tab-span" style="white-space:pre">  </span>if (pTab == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>goto exit_rename_table;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>user_session->sql_flags |= SQLITE_PreferBuiltin;</div><div>@@ -257,7 +257,7 @@ sqlite3AlterBeginAddColumn(Parse * pParse, SrcList * pSrc)</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>if (db->mallocFailed)</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>goto exit_begin_add_column;</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">  </span>if (!pTab)</div><div>+<span class="Apple-tab-span" style="white-space:pre">  </span>if (pTab == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>goto exit_begin_add_column;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>/* Make sure this is not an attempt to ALTER a view. */</div><div>@@ -304,7 +304,7 @@ sqlite3AlterBeginAddColumn(Parse * pParse, SrcList * pSrc)</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>pNew->nTabRef = 1;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>/* Begin a transaction and increment the schema cookie.  */</div><div>-<span class="Apple-tab-span" style="white-space:pre">    </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, false);</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>v = sqlite3GetVdbe(pParse);</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>if (!v)</div><div> <span class="Apple-tab-span" style="white-space:pre">                </span>goto exit_begin_add_column;</div><div>diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c</div><div>index 25e93aa15..60f4eaac4 100644</div><div>--- a/src/box/sql/analyze.c</div><div>+++ b/src/box/sql/analyze.c</div><div>@@ -157,6 +157,7 @@ openStatTable(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">    </span>/* Parsing context */</div><div> <span class="Apple-tab-span" style="white-space:pre">          </span>Table *pStat;</div><div> <span class="Apple-tab-span" style="white-space:pre">          </span>/* The table already exists, because it is a system space */</div><div> <span class="Apple-tab-span" style="white-space:pre">           </span>pStat = sqlite3HashFind(&db->pSchema->tblHash, zTab);</div><div>+<span class="Apple-tab-span" style="white-space:pre">             </span>assert(pStat != NULL);</div><div> <span class="Apple-tab-span" style="white-space:pre">         </span>aRoot[i] = pStat->tnum;</div><div> <span class="Apple-tab-span" style="white-space:pre">             </span>aCreateTbl[i] = 0;</div><div> <span class="Apple-tab-span" style="white-space:pre">             </span>if (zWhere) {</div><div>@@ -1122,7 +1123,7 @@ analyzeDatabase(Parse * pParse)</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>int iMem;</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>int iTab;</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, false);</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>iStatCur = pParse->nTab;</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>pParse->nTab += 3;</div><div> <span class="Apple-tab-span" style="white-space:pre">  </span>openStatTable(pParse, iStatCur, 0, 0);</div><div>@@ -1146,7 +1147,7 @@ analyzeTable(Parse * pParse, Table * pTab, Index * pOnlyIdx)</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>int iStatCur;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>assert(pTab != 0);</div><div>-<span class="Apple-tab-span" style="white-space:pre">  </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, true);</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>iStatCur = pParse->nTab;</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>pParse->nTab += 3;</div><div> <span class="Apple-tab-span" style="white-space:pre">  </span>if (pOnlyIdx) {</div><div>@@ -1294,9 +1295,8 @@ analysisLoader(void *pData, int argc, char **argv, char **NotUsed)</div><div> <span class="Apple-tab-span" style="white-space:pre">         </span>return 0;</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>pTable = sqlite3HashFind(&pInfo->db->pSchema->tblHash, argv[0]);</div><div>-<span class="Apple-tab-span" style="white-space:pre">       </span>if (pTable == 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">  </span>if (pTable == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>return 0;</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>if (argv[1] == 0) {</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>pIndex = 0;</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>} else if (sqlite3_stricmp(argv[0], argv[1]) == 0) {</div><div>@@ -1631,19 +1631,17 @@ loadStatTbl(sqlite3 * db,<span class="Apple-tab-span" style="white-space:pre">        </span>/* Database handle */</div><div> static int</div><div> loadStat4(sqlite3 * db)</div><div> {</div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>int rc = SQLITE_OK;<span class="Apple-tab-span" style="white-space:pre"> </span>/* Result codes from subroutines */</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>Table *pTab = 0;<span class="Apple-tab-span" style="white-space:pre">    </span>/* Pointer to stat table */</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>assert(db->lookaside.bDisable);</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>pTab = sqlite3HashFind(&db->pSchema->tblHash, "_sql_stat4");</div><div>-<span class="Apple-tab-span" style="white-space:pre">    </span>if (pTab) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">         </span>rc = loadStatTbl(db,</div><div>-<span class="Apple-tab-span" style="white-space:pre">                                </span> pTab,</div><div>-<span class="Apple-tab-span" style="white-space:pre">                              </span> "SELECT \"tbl\",\"idx\",count(*) FROM \"_sql_stat4\" GROUP BY \"tbl\",\"idx\"",</div><div>-<span class="Apple-tab-span" style="white-space:pre">                                </span> "SELECT \"tbl\",\"idx\",\"neq\",\"nlt\",\"ndlt\",\"sample\" FROM \"_sql_stat4\"");</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div>-</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>return rc;</div><div>+<span class="Apple-tab-span" style="white-space:pre">  </span>/* _slq_stat4 is a system space, so it always exists. */</div><div>+<span class="Apple-tab-span" style="white-space:pre">    </span>assert(pTab != NULL);</div><div>+<span class="Apple-tab-span" style="white-space:pre">       </span>return loadStatTbl(db, pTab,</div><div>+<span class="Apple-tab-span" style="white-space:pre">                        </span>   "SELECT \"tbl\",\"idx\",count(*) FROM \"_sql_stat4\""</div><div>+<span class="Apple-tab-span" style="white-space:pre">                       </span>   " GROUP BY \"tbl\",\"idx\"",</div><div>+<span class="Apple-tab-span" style="white-space:pre">                  </span>   "SELECT \"tbl\",\"idx\",\"neq\",\"nlt\",\"ndlt\","</div><div>+<span class="Apple-tab-span" style="white-space:pre">                      </span>   "\"sample\" FROM \"_sql_stat4\"");</div><div> }</div><div> </div><div> /*</div><div>diff --git a/src/box/sql/build.c b/src/box/sql/build.c</div><div>index 61194e06b..c50847a02 100644</div><div>--- a/src/box/sql/build.c</div><div>+++ b/src/box/sql/build.c</div><div>@@ -86,13 +86,6 @@ sqlite3FinishCoding(Parse * pParse)</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>       || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>if (v) {</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>sqlite3VdbeAddOp0(v, OP_Halt);</div><div>-</div><div>-<span class="Apple-tab-span" style="white-space:pre">              </span>/* The cookie mask contains one bit for each database file open.</div><div>-<span class="Apple-tab-span" style="white-space:pre">            </span> * (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are</div><div>-<span class="Apple-tab-span" style="white-space:pre">             </span> * set for each database that is used.  Generate code to start a</div><div>-<span class="Apple-tab-span" style="white-space:pre">               </span> * transaction on each used database and to verify the schema cookie</div><div>-<span class="Apple-tab-span" style="white-space:pre">                </span> * on each used database.</div><div>-<span class="Apple-tab-span" style="white-space:pre">           </span> */</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>if (db->mallocFailed == 0 || pParse->pConstExpr) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                       </span>int i;</div><div> <span class="Apple-tab-span" style="white-space:pre">                 </span>assert(sqlite3VdbeGetOp(v, 0)->opcode == OP_Init);</div><div>@@ -192,7 +185,7 @@ sqlite3LocateTable(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">  </span>/* context in which to report errors */</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>assert(pParse->db->pSchema != NULL);</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>p = sqlite3HashFind(&pParse->db->pSchema->tblHash, zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">     </span>if (p == 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">       </span>if (p == NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>const char *zMsg =</div><div> <span class="Apple-tab-span" style="white-space:pre">             </span>    flags & LOCATE_VIEW ? "no such view" : "no such table";</div><div> <span class="Apple-tab-span" style="white-space:pre">          </span>if ((flags & LOCATE_NOERR) == 0) {</div><div>@@ -212,9 +205,8 @@ sqlite3LocateIndex(sqlite3 * db, const char *zName, const char *zTable)</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">  </span>Table *pTab = sqlite3HashFind(&db->pSchema->tblHash, zTable);</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">        </span>if (pTab == 0) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">            </span>return 0;</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div>+<span class="Apple-tab-span" style="white-space:pre">   </span>if (pTab == NULL)</div><div>+<span class="Apple-tab-span" style="white-space:pre">           </span>return NULL;</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>return sqlite3HashFind(&pTab->idxHash, zName);</div><div> }</div><div>@@ -545,7 +537,7 @@ sqlite3StartTable(Parse *pParse, Token *pName, int noErr)</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>assert(db->pSchema != NULL);</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>pTable = sqlite3HashFind(&db->pSchema->tblHash, zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>if (pTable) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">       </span>if (pTable != NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">          </span>if (!noErr) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                  </span>sqlite3ErrorMsg(pParse,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                        </span>"table %s already exists",</div><div>@@ -583,7 +575,7 @@ sqlite3StartTable(Parse *pParse, Token *pName, int noErr)</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span> * now.</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span> */</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>if (!db->init.busy && (v = sqlite3GetVdbe(pParse)) != 0)</div><div>-<span class="Apple-tab-span" style="white-space:pre">         </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">             </span>sql_set_multi_write(pParse, true);</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>/* Normal (non-error) return. */</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>return;</div><div>@@ -2303,7 +2295,7 @@ sqlite3DropTable(Parse * pParse, SrcList * pName, int isView, int noErr)</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>if (noErr)</div><div> <span class="Apple-tab-span" style="white-space:pre">             </span>db->suppressErr--;</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">  </span>if (pTab == 0)</div><div>+<span class="Apple-tab-span" style="white-space:pre">      </span>if (pTab == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>goto exit_drop_table;</div><div> #ifndef SQLITE_OMIT_VIEW</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>/* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used</div><div>@@ -2334,7 +2326,7 @@ sqlite3DropTable(Parse * pParse, SrcList * pName, int isView, int noErr)</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span> *    space_id from _space.</div><div> <span class="Apple-tab-span" style="white-space:pre">  </span> */</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">    </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, true);</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>sql_clear_stat_spaces(pParse, "tbl", pTab->zName);</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>sqlite3FkDropTable(pParse, pName, pTab);</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>sqlite3CodeDropTable(pParse, pTab, isView);</div><div>@@ -2841,14 +2833,15 @@ sqlite3CreateIndex(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">        </span>/* All information about this parse */</div><div> <span class="Apple-tab-span" style="white-space:pre">                 </span>goto exit_create_index;</div><div> <span class="Apple-tab-span" style="white-space:pre">                </span>assert(pName->z != 0);</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>if (!db->init.busy) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">                    </span>if (sqlite3HashFind(&db->pSchema->tblHash, zName) != 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">                 </span>if (sqlite3HashFind(&db->pSchema->tblHash, zName) !=</div><div>+<span class="Apple-tab-span" style="white-space:pre">                      </span>    NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                          </span>sqlite3ErrorMsg(pParse,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                                </span>"there is already a table named %s",</div><div> <span class="Apple-tab-span" style="white-space:pre">                                         </span>zName);</div><div> <span class="Apple-tab-span" style="white-space:pre">                                </span>goto exit_create_index;</div><div> <span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>}</div><div>-<span class="Apple-tab-span" style="white-space:pre">           </span>if (sqlite3HashFind(&pTab->idxHash, zName) != 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">           </span>if (sqlite3HashFind(&pTab->idxHash, zName) != NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                   </span>if (!ifNotExist) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                             </span>sqlite3ErrorMsg(pParse,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                                </span>"index %s.%s already exists",</div><div>@@ -3107,7 +3100,7 @@ sqlite3CreateIndex(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">      </span>/* All information about this parse */</div><div> <span class="Apple-tab-span" style="white-space:pre">         </span>if (v == 0)</div><div> <span class="Apple-tab-span" style="white-space:pre">                    </span>goto exit_create_index;</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">                </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">             </span>sql_set_multi_write(pParse, true);</div><div> </div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">           </span>sqlite3VdbeAddOp2(v, OP_SIDtoPtr, BOX_INDEX_ID,</div><div>@@ -3853,11 +3846,10 @@ sqlite3Savepoint(Parse * pParse, int op, Token * pName)</div><div>  * execution multiple insertion/updates may occur.</div><div>  */</div><div> void</div><div>-sql_set_multi_write(Parse *pParse, int setStatement)</div><div>+sql_set_multi_write(struct Parse *parse_context, bool is_set)</div><div> {</div><div>-<span class="Apple-tab-span" style="white-space:pre">        </span>Parse *pToplevel = sqlite3ParseToplevel(pParse);</div><div>-<span class="Apple-tab-span" style="white-space:pre">    </span>DbMaskSet(pToplevel->writeMask, 0);</div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>pToplevel->isMultiWrite |= setStatement;</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>Parse *pToplevel = sqlite3ParseToplevel(parse_context);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>pToplevel->isMultiWrite |= is_set;</div><div> }</div><div> </div><div> /*</div><div>@@ -3974,7 +3966,7 @@ reindexTable(Parse * pParse, Table * pTab, char const *zColl)</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>for (pIndex = pTab->pIndex; pIndex; pIndex = pIndex->pNext) {</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>if (zColl == 0 || collationMatch(zColl, pIndex)) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">                  </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">                     </span>sql_set_multi_write(pParse, false);</div><div> <span class="Apple-tab-span" style="white-space:pre">                    </span>sqlite3RefillIndex(pParse, pIndex, -1);</div><div> <span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div>@@ -4050,7 +4042,7 @@ sqlite3Reindex(Parse * pParse, Token * pName1, Token * pName2)</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>if (z == 0)</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>return;</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>pTab = sqlite3HashFind(&db->pSchema->tblHash, z);</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>if (pTab) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (pTab != NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>reindexTable(pParse, pTab, 0);</div><div> <span class="Apple-tab-span" style="white-space:pre">         </span>sqlite3DbFree(db, z);</div><div> <span class="Apple-tab-span" style="white-space:pre">          </span>return;</div><div>@@ -4066,8 +4058,8 @@ sqlite3Reindex(Parse * pParse, Token * pName1, Token * pName2)</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>}</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>pIndex = sqlite3HashFind(&pTab->idxHash, z);</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>if (pIndex) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">               </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>if (pIndex != NULL) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">               </span>sql_set_multi_write(pParse, false);</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>sqlite3RefillIndex(pParse, pIndex, -1);</div><div> <span class="Apple-tab-span" style="white-space:pre">                </span>return;</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c</div><div>index a07ef1980..9f4ce1026 100644</div><div>--- a/src/box/sql/delete.c</div><div>+++ b/src/box/sql/delete.c</div><div>@@ -59,12 +59,10 @@ sqlite3SrcListLookup(Parse * pParse, SrcList * pSrc)</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>pTab = sqlite3LocateTable(pParse, 0, pItem->zName);</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>sqlite3DeleteTable(pParse->db, pItem->pTab);</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>pItem->pTab = pTab;</div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>if (pTab) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (pTab != NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>pTab->nTabRef++;</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>if (sqlite3IndexedByLookup(pParse, pItem)) {</div><div>-<span class="Apple-tab-span" style="white-space:pre">                </span>pTab = 0;</div><div>-<span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div>+<span class="Apple-tab-span" style="white-space:pre">   </span>if (sqlite3IndexedByLookup(pParse, pItem))</div><div>+<span class="Apple-tab-span" style="white-space:pre">          </span>pTab = NULL;</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>return pTab;</div><div> }</div><div> </div><div>@@ -324,7 +322,7 @@ sqlite3DeleteFrom(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre"> </span>/* The parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>if (pParse->nested == 0)</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>sqlite3VdbeCountChanges(v);</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, true);</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>/* If we are trying to delete from a view, realize that view into</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span> * an ephemeral table.</div><div>diff --git a/src/box/sql/insert.c b/src/box/sql/insert.c</div><div>index 2719bbaf4..704e48d9c 100644</div><div>--- a/src/box/sql/insert.c</div><div>+++ b/src/box/sql/insert.c</div><div>@@ -1461,7 +1461,7 @@ sqlite3GenerateConstraintChecks(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">         </span>/* The parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>default: {</div><div> <span class="Apple-tab-span" style="white-space:pre">                             </span>Trigger *pTrigger = 0;</div><div> <span class="Apple-tab-span" style="white-space:pre">                         </span>assert(onError == ON_CONFLICT_ACTION_REPLACE);</div><div>-<span class="Apple-tab-span" style="white-space:pre">                              </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">                             </span>sql_set_multi_write(pParse, true);</div><div> <span class="Apple-tab-span" style="white-space:pre">                             </span>if (user_session-></div><div> <span class="Apple-tab-span" style="white-space:pre">                          </span>    sql_flags & SQLITE_RecTriggers) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                                    </span>pTrigger =</div><div>@@ -1769,9 +1769,8 @@ xferOptimization(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">     </span>/* Parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>int regData, regTupleid;<span class="Apple-tab-span" style="white-space:pre">    </span>/* Registers holding data and tupleid */</div><div> <span class="Apple-tab-span" style="white-space:pre">       </span>struct session *user_session = current_session();</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>if (pSelect == 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre"> </span>if (pSelect == 0)</div><div> <span class="Apple-tab-span" style="white-space:pre">              </span>return 0;<span class="Apple-tab-span" style="white-space:pre">   </span>/* Must be of the form  INSERT INTO ... SELECT ... */</div><div>-<span class="Apple-tab-span" style="white-space:pre">  </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>if (pParse->pWith || pSelect->pWith) {</div><div> <span class="Apple-tab-span" style="white-space:pre">           </span>/* Do not attempt to process this query if there are an WITH clauses</div><div> <span class="Apple-tab-span" style="white-space:pre">           </span> * attached to it. Proceeding may generate a false "no such table: xxx"</div><div>@@ -1833,7 +1832,7 @@ xferOptimization(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">      </span>/* Parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span> */</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>pItem = pSelect->pSrc->a;</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>pSrc = sqlite3LocateTable(pParse, 0, pItem->zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">      </span>if (pSrc == 0) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">    </span>if (pSrc == NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>return 0;<span class="Apple-tab-span" style="white-space:pre">   </span>/* FROM clause does not contain a real table */</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div> <span class="Apple-tab-span" style="white-space:pre">      </span>if (pSrc == pDest) {</div><div>diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c</div><div>index 04b4020dd..c19a811ff 100644</div><div>--- a/src/box/sql/pragma.c</div><div>+++ b/src/box/sql/pragma.c</div><div>@@ -480,7 +480,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,<span class="Apple-tab-span" style="white-space:pre">  </span>/* First part of [schema.]id field */</div><div> <span class="Apple-tab-span" style="white-space:pre">                          </span>int i;</div><div> <span class="Apple-tab-span" style="white-space:pre">                         </span>pTab = sqlite3HashFind(&db->pSchema->tblHash,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                                </span>       zRight);</div><div>-<span class="Apple-tab-span" style="white-space:pre">                              </span>if (pTab) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">                         </span>if (pTab != NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                                    </span>pParse->nMem = 5;</div><div> <span class="Apple-tab-span" style="white-space:pre">                                   </span>for (pIdx = pTab->pIndex, i = 0; pIdx;</div><div> <span class="Apple-tab-span" style="white-space:pre">                                      </span>     pIdx = pIdx->pNext, i++) {</div><div>@@ -540,7 +540,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,<span class="Apple-tab-span" style="white-space:pre">   </span>/* First part of [schema.]id field */</div><div> <span class="Apple-tab-span" style="white-space:pre">                          </span>Table *pTab;</div><div> <span class="Apple-tab-span" style="white-space:pre">                           </span>pTab = sqlite3HashFind(&db->pSchema->tblHash,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                                </span>       zRight);</div><div>-<span class="Apple-tab-span" style="white-space:pre">                              </span>if (pTab) {</div><div>+<span class="Apple-tab-span" style="white-space:pre">                         </span>if (pTab != NULL) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                                    </span>pFK = pTab->pFKey;</div><div> <span class="Apple-tab-span" style="white-space:pre">                                  </span>if (pFK) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                                             </span>int i = 0;</div><div>@@ -617,7 +617,7 @@ sqlite3Pragma(Parse * pParse, Token * pId,<span class="Apple-tab-span" style="white-space:pre">     </span>/* First part of [schema.]id field */</div><div> <span class="Apple-tab-span" style="white-space:pre">                                  </span>pParent =</div><div> <span class="Apple-tab-span" style="white-space:pre">                                              </span>sqlite3HashFind(&db->pSchema->tblHash,</div><div> <span class="Apple-tab-span" style="white-space:pre">                                                               </span>pFK->zTo);</div><div>-<span class="Apple-tab-span" style="white-space:pre">                                       </span>if (pParent == 0)</div><div>+<span class="Apple-tab-span" style="white-space:pre">                                   </span>if (pParent == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">                                           </span>continue;</div><div> <span class="Apple-tab-span" style="white-space:pre">                                      </span>pIdx = 0;</div><div> <span class="Apple-tab-span" style="white-space:pre">                                      </span>x = sqlite3FkLocateIndex(pParse,</div><div>diff --git a/src/box/sql/select.c b/src/box/sql/select.c</div><div>index 6ff8dc25e..679aa2246 100644</div><div>--- a/src/box/sql/select.c</div><div>+++ b/src/box/sql/select.c</div><div>@@ -4746,7 +4746,7 @@ selectExpander(Walker * pWalker, Select * p)</div><div> <span class="Apple-tab-span" style="white-space:pre">                     </span>assert(pFrom->pTab == 0);</div><div> <span class="Apple-tab-span" style="white-space:pre">                   </span>pFrom->pTab = pTab =</div><div> <span class="Apple-tab-span" style="white-space:pre">                        </span>    sqlite3LocateTable(pParse, 0, pFrom->zName);</div><div>-<span class="Apple-tab-span" style="white-space:pre">                       </span>if (pTab == 0)</div><div>+<span class="Apple-tab-span" style="white-space:pre">                      </span>if (pTab == NULL)</div><div> <span class="Apple-tab-span" style="white-space:pre">                              </span>return WRC_Abort;</div><div> <span class="Apple-tab-span" style="white-space:pre">                      </span>if (pTab->nTabRef >= 0xffff) {</div><div> <span class="Apple-tab-span" style="white-space:pre">                           </span>sqlite3ErrorMsg(pParse,</div><div>diff --git a/src/box/sql/sqliteInt.h b/src/box/sql/sqliteInt.h</div><div>index 3234f992b..6d78f791d 100644</div><div>--- a/src/box/sql/sqliteInt.h</div><div>+++ b/src/box/sql/sqliteInt.h</div><div>@@ -2887,25 +2887,6 @@ struct TriggerPrg {</div><div> <span class="Apple-tab-span" style="white-space:pre">  </span>u32 aColmask[2];<span class="Apple-tab-span" style="white-space:pre">    </span>/* Masks of old.*, new.* columns accessed */</div><div> };</div><div> </div><div>-/*</div><div>- * The yDbMask datatype for the bitmask of all attached databases.</div><div>- */</div><div>-#if SQLITE_MAX_ATTACHED>30</div><div>-typedef unsigned char yDbMask[(SQLITE_MAX_ATTACHED + 9) / 8];</div><div>-#define DbMaskTest(M,I)    (((M)[(I)/8]&(1<<((I)&7)))!=0)</div><div>-#define DbMaskZero(M)      memset((M),0,sizeof(M))</div><div>-#define DbMaskSet(M,I)     (M)[(I)/8]|=(1<<((I)&7))</div><div>-#define DbMaskAllZero(M)   sqlite3DbMaskAllZero(M)</div><div>-#define DbMaskNonZero(M)   (sqlite3DbMaskAllZero(M)==0)</div><div>-#else</div><div>-typedef unsigned int yDbMask;</div><div>-#define DbMaskTest(M,I)    (((M)&(((yDbMask)1)<<(I)))!=0)</div><div>-#define DbMaskZero(M)      (M)=0</div><div>-#define DbMaskSet(M,I)     (M)|=(((yDbMask)1)<<(I))</div><div>-#define DbMaskAllZero(M)   (M)==0</div><div>-#define DbMaskNonZero(M)   (M)!=0</div><div>-#endif</div><div>-</div><div> /*</div><div>  * An SQL parser context.  A copy of this structure is passed through</div><div>  * the parser and down into all the parser action routine in order to</div><div>@@ -2946,7 +2927,6 @@ struct Parse {</div><div> <span class="Apple-tab-span" style="white-space:pre">    </span>int *aLabel;<span class="Apple-tab-span" style="white-space:pre">                </span>/* Space to hold the labels */</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span>ExprList *pConstExpr;<span class="Apple-tab-span" style="white-space:pre">       </span>/* Constant expressions */</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>Token constraintName;<span class="Apple-tab-span" style="white-space:pre">       </span>/* Name of the constraint currently being parsed */</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>yDbMask writeMask;<span class="Apple-tab-span" style="white-space:pre">  </span>/* Start a write transaction on these databases */</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>int regRoot;<span class="Apple-tab-span" style="white-space:pre">                </span>/* Register holding root page number for new objects */</div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>int nMaxArg;<span class="Apple-tab-span" style="white-space:pre">                </span>/* Max args passed to user function by sub-program */</div><div> #ifdef SELECTTRACE_ENABLED</div><div>@@ -3585,9 +3565,6 @@ int sqlite3ViewGetColumnNames(Parse *, Table *);</div><div> #define sqlite3ViewGetColumnNames(A,B) 0</div><div> #endif</div><div> </div><div>-#if SQLITE_MAX_ATTACHED>30</div><div>-int sqlite3DbMaskAllZero(yDbMask);</div><div>-#endif</div><div> void sqlite3DropTable(Parse *, SrcList *, int, int);</div><div> void sqlite3DeleteTable(sqlite3 *, Table *);</div><div> void sqlite3Insert(Parse *, SrcList *, Select *, IdList *, int);</div><div>diff --git a/src/box/sql/trigger.c b/src/box/sql/trigger.c</div><div>index decbc8c21..a102c32b6 100644</div><div>--- a/src/box/sql/trigger.c</div><div>+++ b/src/box/sql/trigger.c</div><div>@@ -293,7 +293,7 @@ sqlite3FinishTrigger(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">      </span>/* Parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">           </span>iFirstCol = pParse->nMem + 1;</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>pParse->nMem += 2;</div><div> </div><div>-<span class="Apple-tab-span" style="white-space:pre">          </span>sql_set_multi_write(pParse, 0);</div><div>+<span class="Apple-tab-span" style="white-space:pre">             </span>sql_set_multi_write(pParse, false);</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>sqlite3VdbeAddOp4(v,</div><div> <span class="Apple-tab-span" style="white-space:pre">                           </span>  OP_String8, 0, iFirstCol, 0,</div><div> <span class="Apple-tab-span" style="white-space:pre">                            </span>  zName, P4_STATIC);</div><div>diff --git a/src/box/sql/update.c b/src/box/sql/update.c</div><div>index ad6aad5e6..778519bd6 100644</div><div>--- a/src/box/sql/update.c</div><div>+++ b/src/box/sql/update.c</div><div>@@ -288,7 +288,7 @@ sqlite3Update(Parse * pParse,<span class="Apple-tab-span" style="white-space:pre">          </span>/* The parser context */</div><div> <span class="Apple-tab-span" style="white-space:pre">               </span>goto update_cleanup;</div><div> <span class="Apple-tab-span" style="white-space:pre">   </span>if (pParse->nested == 0)</div><div> <span class="Apple-tab-span" style="white-space:pre">            </span>sqlite3VdbeCountChanges(v);</div><div>-<span class="Apple-tab-span" style="white-space:pre"> </span>sql_set_multi_write(pParse, 1);</div><div>+<span class="Apple-tab-span" style="white-space:pre">     </span>sql_set_multi_write(pParse, true);</div><div> </div><div> <span class="Apple-tab-span" style="white-space:pre">        </span>/* Allocate required registers. */</div><div> <span class="Apple-tab-span" style="white-space:pre">     </span>regOldPk = regNewPk = ++pParse->nMem;</div><div class=""><br class=""></div></div><div><br class=""></div><div><br class=""></div></body></html>