<ol>

 <li>  Add support for a SHARD KEY in the table definition.  This is passed
     down into the storage engine as a hint.  The storage engine is free to
     ignore the hint.

 <li>  Add a COVERING clause to CREATE INDEX.  The value of the key/value entry
     for each index row is the union of the indexed columns and the covering
     columns.  Short-hand notation "COVERING ALL" generates a covering index.

 <li>  Send PRAGMA commands into the storage engine as is done with SQLite3.

 <li>  Forward port all query optimizer enhancements implemented in SQLite3
     over the previous year into SQLite4.

 <li>  Review all other changes made to SQLite over the previous year and
     forward port all that seem appropriate.

 <li>  Use decimal arithmetic everywhere within the code.  Avoid the use of
     IEEE 754 binary floating point, except for APIs that have "double"
     parameters or return values.

 <li>  Carefully review the entire API and look for other ways to make it
     simpler and more robust.

 <li>  Add an extra "unsigned int flags" parameter to sqlite4_close().
     Currently unused.  Reserved for future features.

 <li>  Change the callback of sqlite4_exec() to pass down an array of
     sqlite4_value pointers rather than an array of strings.

<li>  Change memory allocation routines to be methods of sqlite4_mm instead
     of methods of sqlite4_env.
     <ol>
        <li> sqlite4_mprintf()
        <LI> sqlite4_vmprintf()
        <li> sqlite4_malloc()
        <li> sqlite4_free()
        <li> sqlite4_realloc()
     </ol>

<li>  Provide a new routine: sqlite4_msize().

<li>  In sqlite4_prepare(), instead of returning a pointer to the first
     character past the end of the parse, return the number of bytes of
     SQL text consumed by the parser.

<li>  Remove the sqlite4_memory_used and sqlite4_memory_highwater
     interfaces.  The functionality is subsumed by sqlite4_mm_stat().

<li>  Get rid of sqlite4_create_function_v2().  Let there be just a single
     interface for creating functions.

<li>  Rename some poorly named interfaces:
  <ol>
       <li>  sqlite4_user_data      ->  sqlite4_context_appdata
       <li>  sqlite4_get_auxdata    ->  sqlite4_auxdata_fetch
       <li>  sqlite4_set_auxdata    ->  sqlite4_auxdata_store
       <li>  sqlite4_get_autocommit ->  sqlite4_db_transaction_status
       <li>  sqlite4_sql            ->  sqlite4_stmt_sql
  </ol>
     Maybe suggest different alternative names
<li>  For routines like sqlite4_column_text, sqlite4_value_text(),
     sqlite4_column_blob(), sqlite4_value_blob(), and so forth, add an
     extra OUT parameter which returns the number of bytes in the string
     or blob.

<li>  Change the type of text values in places like "sqlite4_column_text()"
     to "char*" instead of "unsigned char*".

<li>  sqlite3_set_authorizer() needs to be two routines: sqlite4_authorizer_push()
      and sqlite4_authorizer_pop() and there needs to be a destructor.

<li>  Add a new extended error code for every error where doing so makes
      any sense at all.

</ol>