| 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 2b043ef158b87bb47fb96a0f089e760eeebf839a..067cbb896db5b78c9e7d9012d6cce26351d96596 100644
 | 
| --- a/third_party/sqlite/src/src/alter.c
 | 
| +++ b/third_party/sqlite/src/src/alter.c
 | 
| @@ -229,7 +229,7 @@ static void renameTriggerFunc(
 | 
|  ** Register built-in functions used to help implement ALTER TABLE
 | 
|  */
 | 
|  void sqlite3AlterFunctions(void){
 | 
| -  static SQLITE_WSD FuncDef aAlterTableFuncs[] = {
 | 
| +  static FuncDef aAlterTableFuncs[] = {
 | 
|      FUNCTION(sqlite_rename_table,   2, 0, 0, renameTableFunc),
 | 
|  #ifndef SQLITE_OMIT_TRIGGER
 | 
|      FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc),
 | 
| @@ -238,13 +238,7 @@ void sqlite3AlterFunctions(void){
 | 
|      FUNCTION(sqlite_rename_parent,  3, 0, 0, renameParentFunc),
 | 
|  #endif
 | 
|    };
 | 
| -  int i;
 | 
| -  FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
 | 
| -  FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs);
 | 
| -
 | 
| -  for(i=0; i<ArraySize(aAlterTableFuncs); i++){
 | 
| -    sqlite3FuncDefInsert(pHash, &aFunc[i]);
 | 
| -  }
 | 
| +  sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs));
 | 
|  }
 | 
|  
 | 
|  /*
 | 
| @@ -419,7 +413,7 @@ void sqlite3AlterRenameTable(
 | 
|    pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]);
 | 
|    if( !pTab ) goto exit_rename_table;
 | 
|    iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
 | 
| -  zDb = db->aDb[iDb].zName;
 | 
| +  zDb = db->aDb[iDb].zDbSName;
 | 
|    db->flags |= SQLITE_PreferBuiltin;
 | 
|  
 | 
|    /* Get a NULL terminated version of the new table name. */
 | 
| @@ -510,7 +504,7 @@ void sqlite3AlterRenameTable(
 | 
|        sqlite3NestedParse(pParse, 
 | 
|            "UPDATE \"%w\".%s SET "
 | 
|                "sql = sqlite_rename_parent(sql, %Q, %Q) "
 | 
| -              "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere);
 | 
| +              "WHERE %s;", zDb, MASTER_NAME, zTabName, zName, zWhere);
 | 
|        sqlite3DbFree(db, zWhere);
 | 
|      }
 | 
|    }
 | 
| @@ -534,7 +528,7 @@ void sqlite3AlterRenameTable(
 | 
|              "ELSE name END "
 | 
|        "WHERE tbl_name=%Q COLLATE nocase AND "
 | 
|            "(type='table' OR type='index' OR type='trigger');", 
 | 
| -      zDb, SCHEMA_TABLE(iDb), zName, zName, zName, 
 | 
| +      zDb, MASTER_NAME, zName, zName, zName, 
 | 
|  #ifndef SQLITE_OMIT_TRIGGER
 | 
|        zName,
 | 
|  #endif
 | 
| @@ -588,33 +582,6 @@ exit_rename_table:
 | 
|    db->flags = savedDbFlags;
 | 
|  }
 | 
|  
 | 
| -
 | 
| -/*
 | 
| -** Generate code to make sure the file format number is at least minFormat.
 | 
| -** The generated code will increase the file format number if necessary.
 | 
| -*/
 | 
| -void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
 | 
| -  Vdbe *v;
 | 
| -  v = sqlite3GetVdbe(pParse);
 | 
| -  /* The VDBE should have been allocated before this routine is called.
 | 
| -  ** If that allocation failed, we would have quit before reaching this
 | 
| -  ** point */
 | 
| -  if( ALWAYS(v) ){
 | 
| -    int r1 = sqlite3GetTempReg(pParse);
 | 
| -    int r2 = sqlite3GetTempReg(pParse);
 | 
| -    int addr1;
 | 
| -    sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
 | 
| -    sqlite3VdbeUsesBtree(v, iDb);
 | 
| -    sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
 | 
| -    addr1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
 | 
| -    sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); VdbeCoverage(v);
 | 
| -    sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
 | 
| -    sqlite3VdbeJumpHere(v, addr1);
 | 
| -    sqlite3ReleaseTempReg(pParse, r1);
 | 
| -    sqlite3ReleaseTempReg(pParse, r2);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
|  /*
 | 
|  ** This function is called after an "ALTER TABLE ... ADD" statement
 | 
|  ** has been parsed. Argument pColDef contains the text of the new
 | 
| @@ -633,15 +600,18 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
 | 
|    Column *pCol;             /* The new column */
 | 
|    Expr *pDflt;              /* Default value for the new column */
 | 
|    sqlite3 *db;              /* The database connection; */
 | 
| +  Vdbe *v = pParse->pVdbe;  /* The prepared statement under construction */
 | 
| +  int r1;                   /* Temporary registers */
 | 
|  
 | 
|    db = pParse->db;
 | 
|    if( pParse->nErr || db->mallocFailed ) return;
 | 
| +  assert( v!=0 );
 | 
|    pNew = pParse->pNewTable;
 | 
|    assert( pNew );
 | 
|  
 | 
|    assert( sqlite3BtreeHoldsAllMutexes(db) );
 | 
|    iDb = sqlite3SchemaToIndex(db, pNew->pSchema);
 | 
| -  zDb = db->aDb[iDb].zName;
 | 
| +  zDb = db->aDb[iDb].zDbSName;
 | 
|    zTab = &pNew->zName[16];  /* Skip the "sqlite_altertab_" prefix on the name */
 | 
|    pCol = &pNew->aCol[pNew->nCol-1];
 | 
|    pDflt = pCol->pDflt;
 | 
| @@ -659,7 +629,8 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
 | 
|    ** literal NULL, then set pDflt to 0. This simplifies checking
 | 
|    ** for an SQL NULL default below.
 | 
|    */
 | 
| -  if( pDflt && pDflt->op==TK_NULL ){
 | 
| +  assert( pDflt==0 || pDflt->op==TK_SPAN );
 | 
| +  if( pDflt && pDflt->pLeft->op==TK_NULL ){
 | 
|      pDflt = 0;
 | 
|    }
 | 
|  
 | 
| @@ -695,7 +666,7 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
 | 
|      rc = sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_BLOB, &pVal);
 | 
|      assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
 | 
|      if( rc!=SQLITE_OK ){
 | 
| -      db->mallocFailed = 1;
 | 
| +      assert( db->mallocFailed == 1 );
 | 
|        return;
 | 
|      }
 | 
|      if( !pVal ){
 | 
| @@ -718,18 +689,25 @@ void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
 | 
|          "UPDATE \"%w\".%s SET "
 | 
|            "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
 | 
|          "WHERE type = 'table' AND name = %Q", 
 | 
| -      zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1,
 | 
| +      zDb, MASTER_NAME, pNew->addColOffset, zCol, pNew->addColOffset+1,
 | 
|        zTab
 | 
|      );
 | 
|      sqlite3DbFree(db, zCol);
 | 
|      db->flags = savedDbFlags;
 | 
|    }
 | 
|  
 | 
| -  /* If the default value of the new column is NULL, then set the file
 | 
| -  ** format to 2. If the default value of the new column is not NULL,
 | 
| -  ** the file format becomes 3.
 | 
| +  /* Make sure the schema version is at least 3.  But do not upgrade
 | 
| +  ** from less than 3 to 4, as that will corrupt any preexisting DESC
 | 
| +  ** index.
 | 
|    */
 | 
| -  sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2);
 | 
| +  r1 = sqlite3GetTempReg(pParse);
 | 
| +  sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
 | 
| +  sqlite3VdbeUsesBtree(v, iDb);
 | 
| +  sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2);
 | 
| +  sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2);
 | 
| +  VdbeCoverage(v);
 | 
| +  sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3);
 | 
| +  sqlite3ReleaseTempReg(pParse, r1);
 | 
|  
 | 
|    /* Reload the schema of the modified table. */
 | 
|    reloadTableSchema(pParse, pTab, pTab->zName);
 | 
| @@ -795,7 +773,7 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
 | 
|    pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table));
 | 
|    if( !pNew ) goto exit_begin_add_column;
 | 
|    pParse->pNewTable = pNew;
 | 
| -  pNew->nRef = 1;
 | 
| +  pNew->nTabRef = 1;
 | 
|    pNew->nCol = pTab->nCol;
 | 
|    assert( pNew->nCol>0 );
 | 
|    nAlloc = (((pNew->nCol-1)/8)*8)+8;
 | 
| @@ -803,7 +781,7 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
 | 
|    pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc);
 | 
|    pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName);
 | 
|    if( !pNew->aCol || !pNew->zName ){
 | 
| -    db->mallocFailed = 1;
 | 
| +    assert( db->mallocFailed );
 | 
|      goto exit_begin_add_column;
 | 
|    }
 | 
|    memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol);
 | 
| @@ -811,13 +789,11 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
 | 
|      Column *pCol = &pNew->aCol[i];
 | 
|      pCol->zName = sqlite3DbStrDup(db, pCol->zName);
 | 
|      pCol->zColl = 0;
 | 
| -    pCol->zType = 0;
 | 
|      pCol->pDflt = 0;
 | 
| -    pCol->zDflt = 0;
 | 
|    }
 | 
|    pNew->pSchema = db->aDb[iDb].pSchema;
 | 
|    pNew->addColOffset = pTab->addColOffset;
 | 
| -  pNew->nRef = 1;
 | 
| +  pNew->nTabRef = 1;
 | 
|  
 | 
|    /* Begin a transaction and increment the schema cookie.  */
 | 
|    sqlite3BeginWriteOperation(pParse, 0, iDb);
 | 
| 
 |