Backwards incompatible change: Bindings using a dictionary with a missing key now result in a KeyError exception. You can use allow_missing_dict_bindings() to restore the old behaviour. (APSW issue 392)
Virtual table updates:
-
VTTable.BestIndexObject() is now available which provides IndexInfo exposing full control (APSW issue 332, APSW issue 329, APSW issue 278, APSW issue 188)
-
IndexInfo.set_aConstraintUsage_in() can have in values passed all at once to VTCursor.Filter()
-
Exceptions in VTTable.FindFunction() are now reported as an unraisable exception because it isn't possible to tell SQLite about the error.
-
VTTable.FindFunction() can now return (int, callable) to allow for virtual table specific function overloads. (APSW issue 269)
-
Added Connection.vtab_config() and Connection.vtab_on_conflict() (APSW issue 189, APSW issue 190)
-
Connection.createmodule() lets you have eponymous, eponymous_only, and read_only modules. (APSW issue 196)
-
Virtual table updates can avoid having to provide all column values when only a subset are changing. See apsw.no_change, Connection.createmodule() use_no_change parameter, VTCursor.ColumnNoChange() and VTTable.UpdateChangeRow() (APSW issue 402)
-
All virtual table methods are supported - added iVersion 2 and 3. You can specify the iVersion in Connection.createmodule() (APSW issue 128)
-
apsw.ext.make_virtual_module() makes it very easy to turn a Python function into a virtual table module.
-
apsw.ext.generate_series() and apsw.ext.generate_series_sqlite() added. (APSW issue 380)
apsw.format_sql_value() now outputs floating point NaN, positive and negative infinity, and signed zero exactly as SQLite does (APSW issue 398)
Added apsw.ext.format_query_table() for handy table output with auto column sizes, colour, word wrap etc.
Added Connection.is_interrupted().