Small. Fast. Reliable.
Choose any three.
*** 252,258 ****
  *xUpdate*
  
    int (*xUpdate)(
!     sqlite3_vtab *pCursor,
      int argc,
      sqlite3_value **argv,
      sqlite_int64 *pRowid
--- 252,258 ----
  *xUpdate*
  
    int (*xUpdate)(
!     sqlite3_vtab *pVtab,
      int argc,
      sqlite3_value **argv,
      sqlite_int64 *pRowid
***************
*** 284,289 ****
--- 284,291 ----
  *: argc > 1 && argv[0] == NULL: a new row is inserted with rowid argv[1]
  *: argc > 1 && argv[0] != NULL && argv[0] == argv[1]: the row with rowid argv[0] is updated with new values in argv[2] and following parameters
  *: argc > 1 && argv[0] != NULL && argv[0] != argv[1]: the row with rowid argv[0] is updated with rowid argv[1] and new values in argv[2] and following parameters.  This will occur when an SQL statement updates a rowid, as in the statement UPDATE table SET rowid=rowid+1 WHERE ...;
+ 
+ It is currently undocumented what effect changes should have on existing cursors.
  
  ----
  *xFindFunction*