Small. Fast. Reliable.
Choose any three.
*** 144,149 ****
--- 144,158 ----
  cursor opened using xOpen.
  
  ----
+ *xEof*
+ 
+   int (*xEof)(sqlite3_vtab_cursor*);
+ 
+ This method must return true (non-zero) if the specified cursor currently
+ points to a valid row of data, or false (zero) otherwise. It is called by
+ the SQL engine immediately after each xFilter and xNext invocation.
+ 
+ ----
  *xFilter*
  
    int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
***************
*** 164,176 ****
  sqlite3_index_info structure.  Those values are passed
  to xFilter using the argc and argv parameters.
  
! After this method completes, the cursor should be left
! pointing at a row of virtual table.  The xColumn and
  xRowid methods can be used to access that row.  The
  xNext method can be used to advance to the next row.
! If the cursor is already pointing at the last row,
! this routine returns 0 to indicate that no rows remain.
! If there are results available this routine returns 1.
  
  ----
  *xNext*
--- 173,189 ----
  sqlite3_index_info structure.  Those values are passed
  to xFilter using the argc and argv parameters.
  
! If the filtering constraints configured by idxNum and idxStr
! do not match any rows of the virtual table (i.e. no rows of
! data will be returned), then a subsequent call to the
! xEof method of the same table should return non-zero.
! Otherwise, xEof should return zero and the cursor should
! be left pointing at a row of the virtual table. The xColumn and
  xRowid methods can be used to access that row. The
  xNext method can be used to advance to the next row.
! 
! This method should return SQLITE_OK if successful, or an
! sqlite error code if an error occurs.
  
  ----
  *xNext*
***************
*** 180,188 ****
  This method advances a virtual table cursor to the
  next row of a result set initiated by xFilter.
  If the cursor is already pointing at the last row
! this routine returns 0 to indicate that no rows
! remain.  If the cursor was successfully advanced,
! this routine returns 1.
  
  ----
  *xColumn*
--- 193,205 ----
  This method advances a virtual table cursor to the
  next row of a result set initiated by xFilter.
  If the cursor is already pointing at the last row
! when this routine is called, then the cursor no longer
! points to valid data and a subsequent call to the xEof
! method should return non-zero. Otherwise, the xEof
! method returns zero.
! 
! This method should return SQLITE_OK if successful, or an
! sqlite error code if an error occurs.
  
  ----
  *xColumn*