| Index: third_party/sqlite/src/src/alter.c
|
| diff --git a/third_party/sqlite/src/src/alter.c b/third_party/sqlite/src/src/alter.c
|
| index aa3fa929f82353aeaeb73d61a73c812af0620507..dd060248b8f7a97500426c5ce8acc368943f9123 100644
|
| --- a/third_party/sqlite/src/src/alter.c
|
| +++ b/third_party/sqlite/src/src/alter.c
|
| @@ -77,8 +77,8 @@ static void renameTableFunc(
|
| assert( len>0 );
|
| } while( token!=TK_LP && token!=TK_USING );
|
|
|
| - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql,
|
| - zTableName, tname.z+tname.n);
|
| + zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql),
|
| + zSql, zTableName, tname.z+tname.n);
|
| sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
|
| }
|
| }
|
| @@ -116,6 +116,7 @@ static void renameParentFunc(
|
| int token; /* Type of token */
|
|
|
| UNUSED_PARAMETER(NotUsed);
|
| + if( zInput==0 || zOld==0 ) return;
|
| for(z=zInput; *z; z=z+n){
|
| n = sqlite3GetToken(z, &token);
|
| if( token==TK_REFERENCES ){
|
| @@ -130,7 +131,7 @@ static void renameParentFunc(
|
| sqlite3Dequote(zParent);
|
| if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){
|
| char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"",
|
| - (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew
|
| + (zOutput?zOutput:""), (int)(z-zInput), zInput, (const char *)zNew
|
| );
|
| sqlite3DbFree(db, zOutput);
|
| zOutput = zOut;
|
| @@ -173,8 +174,8 @@ static void renameTriggerFunc(
|
| UNUSED_PARAMETER(NotUsed);
|
|
|
| /* The principle used to locate the table name in the CREATE TRIGGER
|
| - ** statement is that the table name is the first token that is immediatedly
|
| - ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
|
| + ** statement is that the table name is the first token that is immediately
|
| + ** preceded by either TK_ON or TK_DOT and immediately followed by one
|
| ** of TK_WHEN, TK_BEGIN or TK_FOR.
|
| */
|
| if( zSql ){
|
| @@ -216,8 +217,8 @@ static void renameTriggerFunc(
|
| /* Variable tname now contains the token that is the old table-name
|
| ** in the CREATE TRIGGER statement.
|
| */
|
| - zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql,
|
| - zTableName, tname.z+tname.n);
|
| + zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", (int)(((u8*)tname.z) - zSql),
|
| + zSql, zTableName, tname.z+tname.n);
|
| sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
|
| }
|
| }
|
| @@ -358,14 +359,14 @@ static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){
|
| /* Reload the table, index and permanent trigger schemas. */
|
| zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName);
|
| if( !zWhere ) return;
|
| - sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC);
|
| + sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
|
|
|
| #ifndef SQLITE_OMIT_TRIGGER
|
| /* Now, if the table is not stored in the temp database, reload any temp
|
| ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined.
|
| */
|
| if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
|
| - sqlite3VdbeAddOp4(v, OP_ParseSchema, 1, 0, 0, zWhere, P4_DYNAMIC);
|
| + sqlite3VdbeAddParseSchemaOp(v, 1, zWhere);
|
| }
|
| #endif
|
| }
|
| @@ -414,7 +415,7 @@ void sqlite3AlterRenameTable(
|
| assert( pSrc->nSrc==1 );
|
| assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
|
|
|
| - pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
|
| + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]);
|
| if( !pTab ) goto exit_rename_table;
|
| iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
|
| zDb = db->aDb[iDb].zName;
|
| @@ -469,7 +470,7 @@ void sqlite3AlterRenameTable(
|
| }
|
| #endif
|
|
|
| - /* Begin a transaction and code the VerifyCookie for database iDb.
|
| + /* Begin a transaction for database iDb.
|
| ** Then modify the schema cookie (since the ALTER TABLE modifies the
|
| ** schema). Open a statement transaction if the table is a virtual
|
| ** table.
|
| @@ -530,7 +531,7 @@ void sqlite3AlterRenameTable(
|
| "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
|
| "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
|
| "ELSE name END "
|
| - "WHERE tbl_name=%Q AND "
|
| + "WHERE tbl_name=%Q COLLATE nocase AND "
|
| "(type='table' OR type='index' OR type='trigger');",
|
| zDb, SCHEMA_TABLE(iDb), zName, zName, zName,
|
| #ifndef SQLITE_OMIT_TRIGGER
|
| @@ -605,6 +606,7 @@ void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
|
| sqlite3VdbeUsesBtree(v, iDb);
|
| sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
|
| j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
|
| + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); VdbeCoverage(v);
|
| sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
|
| sqlite3VdbeJumpHere(v, j1);
|
| sqlite3ReleaseTempReg(pParse, r1);
|
| @@ -664,7 +666,7 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
|
| ** If there is a NOT NULL constraint, then the default value for the
|
| ** column must not be NULL.
|
| */
|
| - if( pCol->isPrimKey ){
|
| + if( pCol->colFlags & COLFLAG_PRIMKEY ){
|
| sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column");
|
| return;
|
| }
|
| @@ -687,7 +689,7 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
|
| ** can handle (i.e. not CURRENT_TIME etc.)
|
| */
|
| if( pDflt ){
|
| - sqlite3_value *pVal;
|
| + sqlite3_value *pVal = 0;
|
| if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
|
| db->mallocFailed = 1;
|
| return;
|
| @@ -757,7 +759,7 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
|
| assert( pParse->pNewTable==0 );
|
| assert( sqlite3BtreeHoldsAllMutexes(db) );
|
| if( db->mallocFailed ) goto exit_begin_add_column;
|
| - pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
|
| + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]);
|
| if( !pTab ) goto exit_begin_add_column;
|
|
|
| #ifndef SQLITE_OMIT_VIRTUALTABLE
|
|
|