apsw-sqlite3mc 3.53.2.0__tar.gz → 3.53.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/PKG-INFO +2 -2
  2. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/README.rst +1 -1
  3. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/__init__.pyi +139 -15
  4. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/sqlite_extra.json +0 -4
  5. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/__main__.py +160 -56
  6. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/aiotest.py +11 -3
  7. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/async_meta.py +13 -6
  8. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/extratest.py +3 -0
  9. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/ftstests.py +8 -0
  10. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/mctests.py +6 -1
  11. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw_sqlite3mc.egg-info/PKG-INFO +2 -2
  12. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/checksums +5 -1
  13. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/setup.py +7 -3
  14. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/sqlite3/sqlite3.c +1524 -353
  15. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/apsw.c +96 -21
  16. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/apsw.docstrings +58 -6
  17. apsw_sqlite3mc-3.53.4.0/src/apswversion.h +1 -0
  18. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/blob.c +255 -37
  19. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/connection.c +52 -13
  20. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/fts.c +10 -1
  21. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/sqlite_debug.h +20 -0
  22. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/stringconstants.c +16 -0
  23. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/unicode.c +1 -0
  24. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/vfs.c +5 -1
  25. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/tools/vend.py +0 -4
  26. apsw_sqlite3mc-3.53.2.0/src/apswversion.h +0 -1
  27. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/LICENSE +0 -0
  28. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/MANIFEST.in +0 -0
  29. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/__main__.py +0 -0
  30. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/aio.py +0 -0
  31. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/bestpractice.py +0 -0
  32. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/ext.py +0 -0
  33. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/fts5.py +0 -0
  34. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/fts5aux.py +0 -0
  35. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/fts5query.py +0 -0
  36. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/fts_test_strings +0 -0
  37. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/mcall.py +0 -0
  38. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/py.typed +0 -0
  39. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/shell.py +0 -0
  40. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/speedtest.py +0 -0
  41. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/sqlite_extra.py +0 -0
  42. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/sqlite_extra_binaries/README.md +0 -0
  43. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/carray.py +0 -0
  44. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/fork_checker.py +0 -0
  45. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/jsonb.py +0 -0
  46. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/sessiontests.py +0 -0
  47. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/tests/shelltest.py +0 -0
  48. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/trace.py +0 -0
  49. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw/unicode.py +0 -0
  50. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw_sqlite3mc.egg-info/SOURCES.txt +0 -0
  51. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw_sqlite3mc.egg-info/dependency_links.txt +0 -0
  52. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw_sqlite3mc.egg-info/entry_points.txt +0 -0
  53. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/apsw_sqlite3mc.egg-info/top_level.txt +0 -0
  54. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/pyproject.toml +0 -0
  55. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/setup.apsw +0 -0
  56. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/setup.cfg +0 -0
  57. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/_unicodedb.c +0 -0
  58. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/argparse.c +0 -0
  59. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/async.c +0 -0
  60. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/backup.c +0 -0
  61. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/carray.c +0 -0
  62. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/constants.c +0 -0
  63. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/cursor.c +0 -0
  64. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/exceptions.c +0 -0
  65. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/faultinject.c +0 -0
  66. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/faultinject.h +0 -0
  67. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/fileio_win32.c +0 -0
  68. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/jsonb.c +0 -0
  69. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/pyutil.c +0 -0
  70. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/session.c +0 -0
  71. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/statementcache.c +0 -0
  72. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/testextension.c +0 -0
  73. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/traceback.c +0 -0
  74. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/util.c +0 -0
  75. {apsw_sqlite3mc-3.53.2.0 → apsw_sqlite3mc-3.53.4.0}/src/vtable.c +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apsw_sqlite3mc
3
- Version: 3.53.2.0
3
+ Version: 3.53.4.0
4
4
  Summary: SQLite3 Multiple Ciphers combined with Another Python SQLite Wrapper
5
5
  Home-page: https://github.com/utelle/apsw-sqlite3mc
6
6
  Author: Ulrich Telle
@@ -90,7 +90,7 @@ Setting the key on a new database is the only change needed to your code.
90
90
 
91
91
  >>> import apsw
92
92
  >>> print(apsw.mc_version)
93
- SQLite3 Multiple Ciphers 2.3.5
93
+ SQLite3 Multiple Ciphers 2.4.0
94
94
  >>> con = apsw.Connection("database.sqlite3")
95
95
  >>> con.pragma("key", "my secret passphrase")
96
96
  ok
@@ -59,7 +59,7 @@ Setting the key on a new database is the only change needed to your code.
59
59
 
60
60
  >>> import apsw
61
61
  >>> print(apsw.mc_version)
62
- SQLite3 Multiple Ciphers 2.3.5
62
+ SQLite3 Multiple Ciphers 2.4.0
63
63
  >>> con = apsw.Connection("database.sqlite3")
64
64
  >>> con.pragma("key", "my secret passphrase")
65
65
  ok
@@ -856,8 +856,8 @@ class Backup:
856
856
  @final
857
857
  class Blob:
858
858
  """This object is created by :meth:`Connection.blob_open` and provides
859
- access to a blob in the database. It behaves like a Python file.
860
- It wraps a `sqlite3_blob
859
+ access to a blob in the database. It behaves like a Python
860
+ :class:`file <io.RawIOBase>` in binary mode. It wraps a `sqlite3_blob
861
861
  <https://sqlite.org/c3ref/blob.html>`_.
862
862
 
863
863
  .. note::
@@ -893,6 +893,9 @@ class Blob:
893
893
  Calls: `sqlite3_blob_close <https://sqlite.org/c3ref/blob_close.html>`__"""
894
894
  ...
895
895
 
896
+ closed: bool
897
+ """Indicates if the blob has been closed."""
898
+
896
899
  def __enter__(self) -> Blob:
897
900
  """You can use a blob as a `context manager
898
901
  <https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers>`_
@@ -913,6 +916,20 @@ class Blob:
913
916
  *with* block is raised after closing the blob."""
914
917
  ...
915
918
 
919
+ def fileno(self) -> int:
920
+ """Always raises :exc:`OSError` because there is no
921
+ underlying file descriptor."""
922
+ ...
923
+
924
+ def flush(self) -> None:
925
+ """Does nothing. There is no intermediate buffer, and SQLite's overall
926
+ transaction/savepoint handling deals with database commits."""
927
+ ...
928
+
929
+ def isatty(self) -> False:
930
+ """Blobs are never interactive."""
931
+ ...
932
+
916
933
  def length(self) -> int:
917
934
  """Returns the size of the blob in bytes.
918
935
 
@@ -951,6 +968,24 @@ class Blob:
951
968
 
952
969
  readinto = read_into ## OLD-NAME
953
970
 
971
+ def readable(self) -> True:
972
+ """You can always read from a blob"""
973
+ ...
974
+
975
+ def readall(self) -> bytes:
976
+ """Read all data until the end of the blob"""
977
+ ...
978
+
979
+ def readline(self, size: int = -1) -> bytes:
980
+ """Always raises :exc:`io.UnsupportedOperation`.
981
+ You can wrap with :class:`io.BufferedReader`."""
982
+ ...
983
+
984
+ def readlines(self, hint: int = -1) -> list[bytes]:
985
+ """Always raises :exc:`io.UnsupportedOperation`.
986
+ You can wrap with :class:`io.BufferedReader`."""
987
+ ...
988
+
954
989
  def reopen(self, rowid: int) -> None:
955
990
  """Change this blob object to point to a different row. It can be
956
991
  faster than closing an existing blob an opening a new one.
@@ -968,13 +1003,28 @@ class Blob:
968
1003
  :raises ValueError: If the resulting offset is before the beginning (less than zero) or beyond the end of the blob."""
969
1004
  ...
970
1005
 
1006
+ def seekable(self) -> True:
1007
+ """You can always seek in a blob"""
1008
+ ...
1009
+
971
1010
  def tell(self) -> int:
972
1011
  """Returns the current offset."""
973
1012
  ...
974
1013
 
975
- def write(self, data: Buffer) -> None:
1014
+ def truncate(self, size = None) -> None:
1015
+ """Always raises :exc:`io.UnsupportedOperation`.
1016
+ You cannot change the size of a blob."""
1017
+ ...
1018
+
1019
+ def writable(self) -> bool:
1020
+ """Returns True if the blob was open for writing, else False."""
1021
+ ...
1022
+
1023
+ def write(self, data: Buffer) -> int:
976
1024
  """Writes the data to the blob.
977
1025
 
1026
+ Returns the number of bytes written, which will be all of them.
1027
+
978
1028
  :param data: Buffer to write
979
1029
 
980
1030
  :raises TypeError: Wrong data type
@@ -987,6 +1037,11 @@ class Blob:
987
1037
  Calls: `sqlite3_blob_write <https://sqlite.org/c3ref/blob_write.html>`__"""
988
1038
  ...
989
1039
 
1040
+ def writelines(self, lines) -> None:
1041
+ """Always raises :exc:`io.UnsupportedOperation`.
1042
+ You can wrap with :class:`io.BufferedWriter`."""
1043
+ ...
1044
+
990
1045
  @final
991
1046
  class ChangesetBuilder:
992
1047
  """This object wraps a `sqlite3_changegroup <https://sqlite.org/session/changegroup.html>`__
@@ -1748,7 +1803,9 @@ class Connection:
1748
1803
  """If *keep* is *None* then all registered virtual tables are dropped.
1749
1804
 
1750
1805
  Otherwise *keep* is a sequence of strings, naming the virtual tables that
1751
- are kept, dropping all others."""
1806
+ are kept, dropping all others.
1807
+
1808
+ Calls: `sqlite3_drop_modules <https://sqlite.org/c3ref/drop_modules.html>`__"""
1752
1809
  ...
1753
1810
 
1754
1811
  def enable_load_extension(self, enable: bool) -> None:
@@ -1926,7 +1983,9 @@ class Connection:
1926
1983
  ...
1927
1984
 
1928
1985
  def get_autocommit(self) -> bool:
1929
- """Returns if the Connection is in auto commit mode (ie not in a transaction).
1986
+ """Returns if the Connection is in auto commit mode (ie not in a
1987
+ transaction). It is recommended to use :meth:`txn_state` instead
1988
+ which is more reliable.
1930
1989
 
1931
1990
  Calls: `sqlite3_get_autocommit <https://sqlite.org/c3ref/get_autocommit.html>`__"""
1932
1991
  ...
@@ -1993,6 +2052,9 @@ class Connection:
1993
2052
 
1994
2053
  def last_insert_rowid(self) -> int:
1995
2054
  """Returns the integer key of the most recent insert in the database.
2055
+ It is recommended to use SQL `RETURNING <https://sqlite.org/lang_returning.html>`__
2056
+ instead because that ensures you get the rowid directly from the
2057
+ SQL that made the change.
1996
2058
 
1997
2059
  Calls: `sqlite3_last_insert_rowid <https://sqlite.org/c3ref/last_insert_rowid.html>`__"""
1998
2060
  ...
@@ -6050,8 +6112,8 @@ class AsyncBlob:
6050
6112
  """This represents a :class:`Blob` when in async mode.
6051
6113
 
6052
6114
  This object is created by :meth:`Connection.blob_open` and provides
6053
- access to a blob in the database. It behaves like a Python file.
6054
- It wraps a `sqlite3_blob
6115
+ access to a blob in the database. It behaves like a Python
6116
+ :class:`file <io.RawIOBase>` in binary mode. It wraps a `sqlite3_blob
6055
6117
  <https://sqlite.org/c3ref/blob.html>`_.
6056
6118
 
6057
6119
  .. note::
@@ -6096,8 +6158,25 @@ class AsyncBlob:
6096
6158
  Calls: `sqlite3_blob_close <https://sqlite.org/c3ref/blob_close.html>`__"""
6097
6159
  ...
6098
6160
 
6161
+ closed: bool
6162
+ """Indicates if the blob has been closed."""
6099
6163
 
6100
6164
 
6165
+
6166
+ def fileno(self) -> int:
6167
+ """Always raises :exc:`OSError` because there is no
6168
+ underlying file descriptor."""
6169
+ ...
6170
+
6171
+ async def flush(self) -> None:
6172
+ """Does nothing. There is no intermediate buffer, and SQLite's overall
6173
+ transaction/savepoint handling deals with database commits."""
6174
+ ...
6175
+
6176
+ def isatty(self) -> False:
6177
+ """Blobs are never interactive."""
6178
+ ...
6179
+
6101
6180
  def length(self) -> int:
6102
6181
  """Returns the size of the blob in bytes.
6103
6182
 
@@ -6134,6 +6213,24 @@ class AsyncBlob:
6134
6213
  Calls: `sqlite3_blob_read <https://sqlite.org/c3ref/blob_read.html>`__"""
6135
6214
  ...
6136
6215
 
6216
+ def readable(self) -> True:
6217
+ """You can always read from a blob"""
6218
+ ...
6219
+
6220
+ async def readall(self) -> bytes:
6221
+ """Read all data until the end of the blob"""
6222
+ ...
6223
+
6224
+ async def readline(self, size: int = -1) -> bytes:
6225
+ """Always raises :exc:`io.UnsupportedOperation`.
6226
+ You can wrap with :class:`io.BufferedReader`."""
6227
+ ...
6228
+
6229
+ async def readlines(self, hint: int = -1) -> list[bytes]:
6230
+ """Always raises :exc:`io.UnsupportedOperation`.
6231
+ You can wrap with :class:`io.BufferedReader`."""
6232
+ ...
6233
+
6137
6234
  async def reopen(self, rowid: int) -> None:
6138
6235
  """Change this blob object to point to a different row. It can be
6139
6236
  faster than closing an existing blob an opening a new one.
@@ -6151,13 +6248,28 @@ class AsyncBlob:
6151
6248
  :raises ValueError: If the resulting offset is before the beginning (less than zero) or beyond the end of the blob."""
6152
6249
  ...
6153
6250
 
6251
+ def seekable(self) -> True:
6252
+ """You can always seek in a blob"""
6253
+ ...
6254
+
6154
6255
  def tell(self) -> int:
6155
6256
  """Returns the current offset."""
6156
6257
  ...
6157
6258
 
6158
- async def write(self, data: Buffer) -> None:
6259
+ async def truncate(self, size = None) -> None:
6260
+ """Always raises :exc:`io.UnsupportedOperation`.
6261
+ You cannot change the size of a blob."""
6262
+ ...
6263
+
6264
+ def writable(self) -> bool:
6265
+ """Returns True if the blob was open for writing, else False."""
6266
+ ...
6267
+
6268
+ async def write(self, data: Buffer) -> int:
6159
6269
  """Writes the data to the blob.
6160
6270
 
6271
+ Returns the number of bytes written, which will be all of them.
6272
+
6161
6273
  :param data: Buffer to write
6162
6274
 
6163
6275
  :raises TypeError: Wrong data type
@@ -6170,6 +6282,11 @@ class AsyncBlob:
6170
6282
  Calls: `sqlite3_blob_write <https://sqlite.org/c3ref/blob_write.html>`__"""
6171
6283
  ...
6172
6284
 
6285
+ async def writelines(self, lines) -> None:
6286
+ """Always raises :exc:`io.UnsupportedOperation`.
6287
+ You can wrap with :class:`io.BufferedWriter`."""
6288
+ ...
6289
+
6173
6290
  class AsyncConnection:
6174
6291
  """This represents a :class:`Connection` when in async mode.
6175
6292
 
@@ -6354,7 +6471,7 @@ class AsyncConnection:
6354
6471
  the first statement"""
6355
6472
  ...
6356
6473
 
6357
- def changes(self) -> int:
6474
+ async def changes(self) -> int:
6358
6475
  """Returns the number of database rows that were changed (or inserted
6359
6476
  or deleted) by the most recently completed INSERT, UPDATE, or DELETE
6360
6477
  statement.
@@ -6677,7 +6794,9 @@ class AsyncConnection:
6677
6794
  """If *keep* is *None* then all registered virtual tables are dropped.
6678
6795
 
6679
6796
  Otherwise *keep* is a sequence of strings, naming the virtual tables that
6680
- are kept, dropping all others."""
6797
+ are kept, dropping all others.
6798
+
6799
+ Calls: `sqlite3_drop_modules <https://sqlite.org/c3ref/drop_modules.html>`__"""
6681
6800
  ...
6682
6801
 
6683
6802
  async def enable_load_extension(self, enable: bool) -> None:
@@ -6819,8 +6938,10 @@ class AsyncConnection:
6819
6938
  * `FTS5 documentation <https://www.sqlite.org/fts5.html#custom_tokenizers>`__"""
6820
6939
  ...
6821
6940
 
6822
- def get_autocommit(self) -> bool:
6823
- """Returns if the Connection is in auto commit mode (ie not in a transaction).
6941
+ async def get_autocommit(self) -> bool:
6942
+ """Returns if the Connection is in auto commit mode (ie not in a
6943
+ transaction). It is recommended to use :meth:`txn_state` instead
6944
+ which is more reliable.
6824
6945
 
6825
6946
  Calls: `sqlite3_get_autocommit <https://sqlite.org/c3ref/get_autocommit.html>`__"""
6826
6947
  ...
@@ -6835,7 +6956,7 @@ class AsyncConnection:
6835
6956
  <Connection.row_trace>`"""
6836
6957
  ...
6837
6958
 
6838
- in_transaction: bool
6959
+ in_transaction: Awaitable[bool]
6839
6960
  """It is recommended to use :meth:`txn_state` instead which is more reliable.
6840
6961
 
6841
6962
  Calls: `sqlite3_get_autocommit <https://sqlite.org/c3ref/get_autocommit.html>`__"""
@@ -6859,8 +6980,11 @@ class AsyncConnection:
6859
6980
 
6860
6981
  Calls: `sqlite3_is_interrupted <https://sqlite.org/c3ref/interrupt.html>`__"""
6861
6982
 
6862
- def last_insert_rowid(self) -> int:
6983
+ async def last_insert_rowid(self) -> int:
6863
6984
  """Returns the integer key of the most recent insert in the database.
6985
+ It is recommended to use SQL `RETURNING <https://sqlite.org/lang_returning.html>`__
6986
+ instead because that ensures you get the rowid directly from the
6987
+ SQL that made the change.
6864
6988
 
6865
6989
  Calls: `sqlite3_last_insert_rowid <https://sqlite.org/c3ref/last_insert_rowid.html>`__"""
6866
6990
  ...
@@ -7288,7 +7412,7 @@ class AsyncConnection:
7288
7412
  Calls: `sqlite3_table_column_metadata <https://sqlite.org/c3ref/table_column_metadata.html>`__"""
7289
7413
  ...
7290
7414
 
7291
- def total_changes(self) -> int:
7415
+ async def total_changes(self) -> int:
7292
7416
  """Returns the total number of database rows that have be modified,
7293
7417
  inserted, or deleted since the database connection was opened.
7294
7418
 
@@ -27,10 +27,6 @@
27
27
  "description": "A VFS shim that writes a checksum on each page of an SQLite database file",
28
28
  "type": "extension"
29
29
  },
30
- "closure": {
31
- "description": "A virtual table that finds the transitive closure of a parent/child relationship in a real table",
32
- "type": "extension"
33
- },
34
30
  "completion": {
35
31
  "description": "A virtual table that returns suggested completions for a partial SQL input",
36
32
  "type": "extension"