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