| Index: third_party/sqlite/src/src/vdbeInt.h
 | 
| diff --git a/third_party/sqlite/src/src/vdbeInt.h b/third_party/sqlite/src/src/vdbeInt.h
 | 
| index ecf8dcd54f452de0d234193dd42c4af2ee401d83..816fc29a99609ce81de70c3e9b86af6edd224670 100644
 | 
| --- a/third_party/sqlite/src/src/vdbeInt.h
 | 
| +++ b/third_party/sqlite/src/src/vdbeInt.h
 | 
| @@ -14,8 +14,6 @@
 | 
|  ** source code file "vdbe.c".  When that file became too big (over
 | 
|  ** 6000 lines long) it was split up into several smaller files and
 | 
|  ** this header information was factored out.
 | 
| -**
 | 
| -** $Id: vdbeInt.h,v 1.174 2009/06/23 14:15:04 drh Exp $
 | 
|  */
 | 
|  #ifndef _VDBEINT_H_
 | 
|  #define _VDBEINT_H_
 | 
| @@ -59,6 +57,7 @@ struct VdbeCursor {
 | 
|    Bool deferredMoveto;  /* A call to sqlite3BtreeMoveto() is needed */
 | 
|    Bool isTable;         /* True if a table requiring integer keys */
 | 
|    Bool isIndex;         /* True if an index containing keys only - no data */
 | 
| +  Bool isOrdered;       /* True if the underlying table is BTREE_UNORDERED */
 | 
|    i64 movetoTarget;     /* Argument to the deferred sqlite3BtreeMoveto() */
 | 
|    Btree *pBt;           /* Separate file holding temporary table */
 | 
|    int pseudoTableReg;   /* Register holding pseudotable content. */
 | 
| @@ -153,6 +152,10 @@ struct Mem {
 | 
|    u16 flags;          /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
 | 
|    u8  type;           /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
 | 
|    u8  enc;            /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
 | 
| +#ifdef SQLITE_DEBUG
 | 
| +  Mem *pScopyFrom;    /* This Mem is a shallow copy of pScopyFrom */
 | 
| +  void *pFiller;      /* So that sizeof(Mem) is a multiple of 8 */
 | 
| +#endif
 | 
|    void (*xDel)(void *);  /* If not null, call this function to delete Mem.z */
 | 
|    char *zMalloc;      /* Dynamic buffer allocated by sqlite3_malloc() */
 | 
|  };
 | 
| @@ -179,6 +182,7 @@ struct Mem {
 | 
|  #define MEM_Blob      0x0010   /* Value is a BLOB */
 | 
|  #define MEM_RowSet    0x0020   /* Value is a RowSet object */
 | 
|  #define MEM_Frame     0x0040   /* Value is a VdbeFrame object */
 | 
| +#define MEM_Invalid   0x0080   /* Value is undefined */
 | 
|  #define MEM_TypeMask  0x00ff   /* Mask of type bits */
 | 
|  
 | 
|  /* Whenever Mem contains a valid string or blob representation, one of
 | 
| @@ -192,19 +196,25 @@ struct Mem {
 | 
|  #define MEM_Ephem     0x1000   /* Mem.z points to an ephemeral string */
 | 
|  #define MEM_Agg       0x2000   /* Mem.z points to an agg function context */
 | 
|  #define MEM_Zero      0x4000   /* Mem.i contains count of 0s appended to blob */
 | 
| -
 | 
|  #ifdef SQLITE_OMIT_INCRBLOB
 | 
|    #undef MEM_Zero
 | 
|    #define MEM_Zero 0x0000
 | 
|  #endif
 | 
|  
 | 
| -
 | 
|  /*
 | 
|  ** Clear any existing type flags from a Mem and replace them with f
 | 
|  */
 | 
|  #define MemSetTypeFlag(p, f) \
 | 
|     ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
 | 
|  
 | 
| +/*
 | 
| +** Return true if a memory cell is not marked as invalid.  This macro
 | 
| +** is for use inside assert() statements only.
 | 
| +*/
 | 
| +#ifdef SQLITE_DEBUG
 | 
| +#define memIsValid(M)  ((M)->flags & MEM_Invalid)==0
 | 
| +#endif
 | 
| +
 | 
|  
 | 
|  /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
 | 
|  ** additional information about auxiliary information bound to arguments
 | 
| @@ -290,7 +300,7 @@ struct Vdbe {
 | 
|    VdbeCursor **apCsr;     /* One element of this array for each open cursor */
 | 
|    u8 errorAction;         /* Recovery action to do in case of an error */
 | 
|    u8 okVar;               /* True if azVar[] has been initialized */
 | 
| -  u16 nVar;               /* Number of entries in aVar[] */
 | 
| +  ynVar nVar;             /* Number of entries in aVar[] */
 | 
|    Mem *aVar;              /* Values for the OP_Variable opcode. */
 | 
|    char **azVar;           /* Name of variables */
 | 
|    u32 magic;              /* Magic number for sanity checking */
 | 
| @@ -303,6 +313,7 @@ struct Vdbe {
 | 
|    u8 explain;             /* True if EXPLAIN present on SQL command */
 | 
|    u8 changeCntOn;         /* True to update the change-counter */
 | 
|    u8 expired;             /* True if the VM needs to be recompiled */
 | 
| +  u8 runOnlyOnce;         /* Automatically expire on reset */
 | 
|    u8 minWriteFileFormat;  /* Minimum file format for writable database files */
 | 
|    u8 inVtabMethod;        /* See comments above */
 | 
|    u8 usesStmtJournal;     /* True if uses a statement journal */
 | 
| @@ -312,15 +323,19 @@ struct Vdbe {
 | 
|    int btreeMask;          /* Bitmask of db->aDb[] entries referenced */
 | 
|    i64 startTime;          /* Time when query started - used for profiling */
 | 
|    BtreeMutexArray aMutex; /* An array of Btree used here and needing locks */
 | 
| -  int aCounter[2];        /* Counters used by sqlite3_stmt_status() */
 | 
| +  int aCounter[3];        /* Counters used by sqlite3_stmt_status() */
 | 
|    char *zSql;             /* Text of the SQL statement that generated this */
 | 
|    void *pFree;            /* Free this when deleting the vdbe */
 | 
| +  i64 nFkConstraint;      /* Number of imm. FK constraints this VM */
 | 
| +  i64 nStmtDefCons;       /* Number of def. constraints when stmt started */
 | 
|    int iStatement;         /* Statement number (or 0 if has not opened stmt) */
 | 
|  #ifdef SQLITE_DEBUG
 | 
|    FILE *trace;            /* Write an execution trace here, if not NULL */
 | 
|  #endif
 | 
|    VdbeFrame *pFrame;      /* Parent frame */
 | 
|    int nFrame;             /* Number of frames in pFrame list */
 | 
| +  u32 expmask;            /* Binding to these vars invalidates VM */
 | 
| +  SubProgram *pProgram;   /* Linked list of all sub-programs used by VM */
 | 
|  };
 | 
|  
 | 
|  /*
 | 
| @@ -361,7 +376,11 @@ void sqlite3VdbeMemMove(Mem*, Mem*);
 | 
|  int sqlite3VdbeMemNulTerminate(Mem*);
 | 
|  int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*));
 | 
|  void sqlite3VdbeMemSetInt64(Mem*, i64);
 | 
| -void sqlite3VdbeMemSetDouble(Mem*, double);
 | 
| +#ifdef SQLITE_OMIT_FLOATING_POINT
 | 
| +# define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64
 | 
| +#else
 | 
| +  void sqlite3VdbeMemSetDouble(Mem*, double);
 | 
| +#endif
 | 
|  void sqlite3VdbeMemSetNull(Mem*);
 | 
|  void sqlite3VdbeMemSetZeroBlob(Mem*,int);
 | 
|  void sqlite3VdbeMemSetRowSet(Mem*);
 | 
| @@ -378,13 +397,20 @@ void sqlite3VdbeMemRelease(Mem *p);
 | 
|  void sqlite3VdbeMemReleaseExternal(Mem *p);
 | 
|  int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
 | 
|  const char *sqlite3OpcodeName(int);
 | 
| -int sqlite3VdbeOpcodeHasProperty(int, int);
 | 
|  int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
 | 
|  int sqlite3VdbeCloseStatement(Vdbe *, int);
 | 
|  void sqlite3VdbeFrameDelete(VdbeFrame*);
 | 
|  int sqlite3VdbeFrameRestore(VdbeFrame *);
 | 
| -#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
 | 
| -int sqlite3VdbeReleaseBuffers(Vdbe *p);
 | 
| +void sqlite3VdbeMemStoreType(Mem *pMem);
 | 
| +
 | 
| +#ifdef SQLITE_DEBUG
 | 
| +void sqlite3VdbeMemPrepareToChange(Vdbe*,Mem*);
 | 
| +#endif
 | 
| +
 | 
| +#ifndef SQLITE_OMIT_FOREIGN_KEY
 | 
| +int sqlite3VdbeCheckFk(Vdbe *, int);
 | 
| +#else
 | 
| +# define sqlite3VdbeCheckFk(p,i) 0
 | 
|  #endif
 | 
|  
 | 
|  #ifndef SQLITE_OMIT_SHARED_CACHE
 | 
| 
 |