pyturso 0.4.3rc2__tar.gz → 0.4.4__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 (272) hide show
  1. {pyturso-0.4.3rc2 → pyturso-0.4.4}/Cargo.lock +50 -47
  2. {pyturso-0.4.3rc2 → pyturso-0.4.4}/Cargo.toml +12 -12
  3. {pyturso-0.4.3rc2 → pyturso-0.4.4}/PKG-INFO +1 -1
  4. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/src/turso.rs +7 -0
  5. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/Cargo.toml +1 -1
  6. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/busy.rs +19 -40
  7. pyturso-0.4.3rc2/core/lib.rs → pyturso-0.4.4/core/connection.rs +66 -1294
  8. pyturso-0.4.4/core/io/clock.rs +150 -0
  9. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/generic.rs +8 -3
  10. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/io_uring.rs +7 -3
  11. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/memory.rs +8 -5
  12. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/mod.rs +1 -1
  13. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/unix.rs +7 -3
  14. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/vfs.rs +7 -3
  15. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/windows.rs +8 -5
  16. pyturso-0.4.4/core/lib.rs +1270 -0
  17. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/database/checkpoint_state_machine.rs +71 -2
  18. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/database/mod.rs +13 -1
  19. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/statement.rs +2 -2
  20. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/pager.rs +139 -79
  21. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/sqlite3_ondisk.rs +14 -3
  22. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/wal.rs +269 -247
  23. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/mod.rs +3 -5
  24. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/schema.rs +3 -0
  25. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/util.rs +269 -152
  26. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/bloom_filter.rs +3 -2
  27. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/execute.rs +286 -293
  28. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/mod.rs +19 -42
  29. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/sorter.rs +19 -1
  30. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/value.rs +8 -1
  31. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/parser.rs +8 -0
  32. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/src/bindings.rs +1 -0
  33. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/src/rsapi.rs +6 -0
  34. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_sync_engine.rs +4 -4
  35. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/sparse_io.rs +8 -3
  36. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/types.rs +1 -1
  37. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/capi.rs +0 -3
  38. pyturso-0.4.3rc2/core/io/clock.rs +0 -103
  39. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/Cargo.toml +0 -0
  40. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/README.md +0 -0
  41. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/build.rs +0 -0
  42. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/example.py +0 -0
  43. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-db-aio.mdx +0 -0
  44. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-db.mdx +0 -0
  45. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-sync-aio.mdx +0 -0
  46. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-sync.mdx +0 -0
  47. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-tests-aio.mdx +0 -0
  48. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/py-bindings-tests.mdx +0 -0
  49. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/requirements-dev.txt +0 -0
  50. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/requirements.txt +0 -0
  51. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/src/lib.rs +0 -0
  52. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/src/turso_sync.rs +0 -0
  53. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/__init__.py +0 -0
  54. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/test_database.py +0 -0
  55. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/test_database_aio.py +0 -0
  56. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/test_database_sync.py +0 -0
  57. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/test_database_sync_aio.py +0 -0
  58. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/tests/utils.py +0 -0
  59. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/__init__.py +0 -0
  60. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/aio/__init__.py +0 -0
  61. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/aio/sync/__init__.py +0 -0
  62. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/lib.py +0 -0
  63. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/lib_aio.py +0 -0
  64. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/lib_sync.py +0 -0
  65. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/lib_sync_aio.py +0 -0
  66. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/py.typed +0 -0
  67. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/sync/__init__.py +0 -0
  68. {pyturso-0.4.3rc2 → pyturso-0.4.4}/bindings/python/turso/worker.py +0 -0
  69. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/assert.rs +0 -0
  70. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/benches/benchmark.rs +0 -0
  71. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/benches/json_benchmark.rs +0 -0
  72. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/benches/mvcc_benchmark.rs +0 -0
  73. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/benches/tpc_h_benchmark.rs +0 -0
  74. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/build.rs +0 -0
  75. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/error.rs +0 -0
  76. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/ext/dynamic.rs +0 -0
  77. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/ext/mod.rs +0 -0
  78. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/ext/vtab_xconnect.rs +0 -0
  79. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/fast_lock.rs +0 -0
  80. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/function.rs +0 -0
  81. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/functions/datetime.rs +0 -0
  82. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/functions/mod.rs +0 -0
  83. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/functions/printf.rs +0 -0
  84. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/functions/strftime.rs +0 -0
  85. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/aggregate_operator.rs +0 -0
  86. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/compiler.rs +0 -0
  87. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/cursor.rs +0 -0
  88. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/dbsp.rs +0 -0
  89. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/expr_compiler.rs +0 -0
  90. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/filter_operator.rs +0 -0
  91. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/input_operator.rs +0 -0
  92. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/join_operator.rs +0 -0
  93. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/merge_operator.rs +0 -0
  94. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/mod.rs +0 -0
  95. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/operator.rs +0 -0
  96. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/persistence.rs +0 -0
  97. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/project_operator.rs +0 -0
  98. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/incremental/view.rs +0 -0
  99. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/index_method/backing_btree.rs +0 -0
  100. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/index_method/mod.rs +0 -0
  101. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/index_method/toy_vector_sparse_ivf.rs +0 -0
  102. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/info.rs +0 -0
  103. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/common.rs +0 -0
  104. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/io/completions.rs +0 -0
  105. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/cache.rs +0 -0
  106. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/error.rs +0 -0
  107. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/jsonb.rs +0 -0
  108. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/mod.rs +0 -0
  109. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/ops.rs +0 -0
  110. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/path.rs +0 -0
  111. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/json/vtab.rs +0 -0
  112. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/clock.rs +0 -0
  113. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/cursor.rs +0 -0
  114. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/database/tests.rs +0 -0
  115. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/mod.rs +0 -0
  116. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/persistent_storage/logical_log.rs +0 -0
  117. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/mvcc/persistent_storage/mod.rs +0 -0
  118. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/numeric/mod.rs +0 -0
  119. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/numeric/nonnan.rs +0 -0
  120. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/parameters.rs +0 -0
  121. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/pragma.rs +0 -0
  122. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/pseudo.rs +0 -0
  123. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/schema.rs +0 -0
  124. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/series.rs +0 -0
  125. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/state_machine.rs +0 -0
  126. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/stats.rs +0 -0
  127. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/btree.rs +0 -0
  128. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/buffer_pool.rs +0 -0
  129. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/checksum.rs +0 -0
  130. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/database.rs +0 -0
  131. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/encryption.rs +0 -0
  132. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/journal_mode.rs +0 -0
  133. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/mod.rs +0 -0
  134. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/page_cache.rs +0 -0
  135. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/slot_bitmap.rs +0 -0
  136. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/state_machines.rs +0 -0
  137. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/storage/subjournal.rs +0 -0
  138. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/time/internal.rs +0 -0
  139. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/time/mod.rs +0 -0
  140. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/aggregation.rs +0 -0
  141. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/alter.rs +0 -0
  142. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/analyze.rs +0 -0
  143. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/attach.rs +0 -0
  144. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/collate.rs +0 -0
  145. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/compound_select.rs +0 -0
  146. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/delete.rs +0 -0
  147. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/display.rs +0 -0
  148. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/emitter.rs +0 -0
  149. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/expr.rs +0 -0
  150. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/expression_index.rs +0 -0
  151. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/fkeys.rs +0 -0
  152. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/group_by.rs +0 -0
  153. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/index.rs +0 -0
  154. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/insert.rs +0 -0
  155. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/integrity_check.rs +0 -0
  156. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/logical.rs +0 -0
  157. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/main_loop.rs +0 -0
  158. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/mod.rs +0 -0
  159. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/OPTIMIZER.md +0 -0
  160. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/access_method.rs +0 -0
  161. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/constraints.rs +0 -0
  162. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/cost.rs +0 -0
  163. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/join.rs +0 -0
  164. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/lift_common_subexpressions.rs +0 -0
  165. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/optimizer/order.rs +0 -0
  166. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/order_by.rs +0 -0
  167. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/plan.rs +0 -0
  168. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/planner.rs +0 -0
  169. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/pragma.rs +0 -0
  170. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/result_row.rs +0 -0
  171. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/rollback.rs +0 -0
  172. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/select.rs +0 -0
  173. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/subquery.rs +0 -0
  174. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/transaction.rs +0 -0
  175. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/trigger.rs +0 -0
  176. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/trigger_exec.rs +0 -0
  177. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/update.rs +0 -0
  178. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/upsert.rs +0 -0
  179. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/values.rs +0 -0
  180. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/view.rs +0 -0
  181. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/translate/window.rs +0 -0
  182. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/types.rs +0 -0
  183. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/uuid.rs +0 -0
  184. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/affinity.rs +0 -0
  185. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/builder.rs +0 -0
  186. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/explain.rs +0 -0
  187. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/hash_table.rs +0 -0
  188. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/insn.rs +0 -0
  189. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/likeop.rs +0 -0
  190. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/metrics.rs +0 -0
  191. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vdbe/rowset.rs +0 -0
  192. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/mod.rs +0 -0
  193. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/concat.rs +0 -0
  194. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/convert.rs +0 -0
  195. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/distance_cos.rs +0 -0
  196. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/distance_dot.rs +0 -0
  197. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/distance_l2.rs +0 -0
  198. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/jaccard.rs +0 -0
  199. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/mod.rs +0 -0
  200. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/serialize.rs +0 -0
  201. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/slice.rs +0 -0
  202. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/operations/text.rs +0 -0
  203. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vector/vector_types.rs +0 -0
  204. {pyturso-0.4.3rc2 → pyturso-0.4.4}/core/vtab.rs +0 -0
  205. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/Cargo.toml +0 -0
  206. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/README.md +0 -0
  207. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/build.rs +0 -0
  208. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/src/functions.rs +0 -0
  209. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/src/lib.rs +0 -0
  210. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/src/types.rs +0 -0
  211. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/src/vfs_modules.rs +0 -0
  212. {pyturso-0.4.3rc2 → pyturso-0.4.4}/extensions/core/src/vtabs.rs +0 -0
  213. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/Cargo.toml +0 -0
  214. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/atomic_enum.rs +0 -0
  215. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/agg_derive.rs +0 -0
  216. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/match_ignore_ascii_case.rs +0 -0
  217. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/mod.rs +0 -0
  218. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/scalars.rs +0 -0
  219. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/vfs_derive.rs +0 -0
  220. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/ext/vtab_derive.rs +0 -0
  221. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/lib.rs +0 -0
  222. {pyturso-0.4.3rc2 → pyturso-0.4.4}/macros/src/test.rs +0 -0
  223. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/Cargo.toml +0 -0
  224. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/README.md +0 -0
  225. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/benches/parser_benchmark.rs +0 -0
  226. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/ast/check.rs +0 -0
  227. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/ast/fmt.rs +0 -0
  228. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/ast.rs +0 -0
  229. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/error.rs +0 -0
  230. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/lexer.rs +0 -0
  231. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/lib.rs +0 -0
  232. {pyturso-0.4.3rc2 → pyturso-0.4.4}/parser/src/token.rs +0 -0
  233. {pyturso-0.4.3rc2 → pyturso-0.4.4}/pyproject.toml +0 -0
  234. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/Cargo.toml +0 -0
  235. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/README.md +0 -0
  236. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/bindgen.sh +0 -0
  237. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/readme-sdk-kit.mdx +0 -0
  238. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/src/capi.rs +0 -0
  239. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/src/lib.rs +0 -0
  240. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit/turso.h +0 -0
  241. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit-macros/Cargo.toml +0 -0
  242. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sdk-kit-macros/src/lib.rs +0 -0
  243. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/.gitignore +0 -0
  244. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/Cargo.toml +0 -0
  245. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_replay_generator.rs +0 -0
  246. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_sync_engine_io.rs +0 -0
  247. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_sync_lazy_storage.rs +0 -0
  248. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_sync_operations.rs +0 -0
  249. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/database_tape.rs +0 -0
  250. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/errors.rs +0 -0
  251. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/io_operations.rs +0 -0
  252. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/lib.rs +0 -0
  253. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/server_proto.rs +0 -0
  254. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/engine/src/wal_session.rs +0 -0
  255. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/Cargo.toml +0 -0
  256. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/bindgen.sh +0 -0
  257. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/bindings.rs +0 -0
  258. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/lib.rs +0 -0
  259. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/rsapi.rs +0 -0
  260. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/sync_engine_io.rs +0 -0
  261. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/src/turso_async_operation.rs +0 -0
  262. {pyturso-0.4.3rc2 → pyturso-0.4.4}/sync/sdk-kit/turso_sync.h +0 -0
  263. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/__init__.py +0 -0
  264. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/aio/__init__.py +0 -0
  265. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/aio/sync/__init__.py +0 -0
  266. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/lib.py +0 -0
  267. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/lib_aio.py +0 -0
  268. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/lib_sync.py +0 -0
  269. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/lib_sync_aio.py +0 -0
  270. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/py.typed +0 -0
  271. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/sync/__init__.py +0 -0
  272. {pyturso-0.4.3rc2 → pyturso-0.4.4}/turso/worker.py +0 -0
@@ -418,12 +418,6 @@ dependencies = [
418
418
  "which",
419
419
  ]
420
420
 
421
- [[package]]
422
- name = "bit-vec"
423
- version = "0.4.4"
424
- source = "registry+https://github.com/rust-lang/crates.io-index"
425
- checksum = "02b4ff8b16e6076c3e14220b39fbc1fabb6737522281a388998046859400895f"
426
-
427
421
  [[package]]
428
422
  name = "bitflags"
429
423
  version = "1.3.2"
@@ -467,15 +461,6 @@ dependencies = [
467
461
  "generic-array",
468
462
  ]
469
463
 
470
- [[package]]
471
- name = "bloom"
472
- version = "0.3.2"
473
- source = "registry+https://github.com/rust-lang/crates.io-index"
474
- checksum = "d00ac8e5056d6d65376a3c1aa5c7c34850d6949ace17f0266953a254eb3d6fe8"
475
- dependencies = [
476
- "bit-vec",
477
- ]
478
-
479
464
  [[package]]
480
465
  name = "branches"
481
466
  version = "0.4.3"
@@ -896,7 +881,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
896
881
 
897
882
  [[package]]
898
883
  name = "core_tester"
899
- version = "0.4.3-pre.2"
884
+ version = "0.4.4"
900
885
  dependencies = [
901
886
  "anyhow",
902
887
  "assert_cmd",
@@ -1592,6 +1577,18 @@ version = "0.1.9"
1592
1577
  source = "registry+https://github.com/rust-lang/crates.io-index"
1593
1578
  checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
1594
1579
 
1580
+ [[package]]
1581
+ name = "fastbloom"
1582
+ version = "0.14.1"
1583
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1584
+ checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4"
1585
+ dependencies = [
1586
+ "getrandom 0.3.2",
1587
+ "libm",
1588
+ "rand 0.9.2",
1589
+ "siphasher",
1590
+ ]
1591
+
1595
1592
  [[package]]
1596
1593
  name = "fastrand"
1597
1594
  version = "2.3.0"
@@ -2729,7 +2726,7 @@ dependencies = [
2729
2726
 
2730
2727
  [[package]]
2731
2728
  name = "limbo_completion"
2732
- version = "0.4.3-pre.2"
2729
+ version = "0.4.4"
2733
2730
  dependencies = [
2734
2731
  "mimalloc",
2735
2732
  "turso_ext",
@@ -2737,7 +2734,7 @@ dependencies = [
2737
2734
 
2738
2735
  [[package]]
2739
2736
  name = "limbo_crypto"
2740
- version = "0.4.3-pre.2"
2737
+ version = "0.4.4"
2741
2738
  dependencies = [
2742
2739
  "blake3",
2743
2740
  "data-encoding",
@@ -2750,7 +2747,7 @@ dependencies = [
2750
2747
 
2751
2748
  [[package]]
2752
2749
  name = "limbo_csv"
2753
- version = "0.4.3-pre.2"
2750
+ version = "0.4.4"
2754
2751
  dependencies = [
2755
2752
  "csv",
2756
2753
  "mimalloc",
@@ -2760,7 +2757,7 @@ dependencies = [
2760
2757
 
2761
2758
  [[package]]
2762
2759
  name = "limbo_fuzzy"
2763
- version = "0.4.3-pre.2"
2760
+ version = "0.4.4"
2764
2761
  dependencies = [
2765
2762
  "mimalloc",
2766
2763
  "turso_ext",
@@ -2768,7 +2765,7 @@ dependencies = [
2768
2765
 
2769
2766
  [[package]]
2770
2767
  name = "limbo_ipaddr"
2771
- version = "0.4.3-pre.2"
2768
+ version = "0.4.4"
2772
2769
  dependencies = [
2773
2770
  "ipnetwork",
2774
2771
  "mimalloc",
@@ -2777,7 +2774,7 @@ dependencies = [
2777
2774
 
2778
2775
  [[package]]
2779
2776
  name = "limbo_percentile"
2780
- version = "0.4.3-pre.2"
2777
+ version = "0.4.4"
2781
2778
  dependencies = [
2782
2779
  "mimalloc",
2783
2780
  "turso_ext",
@@ -2785,7 +2782,7 @@ dependencies = [
2785
2782
 
2786
2783
  [[package]]
2787
2784
  name = "limbo_regexp"
2788
- version = "0.4.3-pre.2"
2785
+ version = "0.4.4"
2789
2786
  dependencies = [
2790
2787
  "mimalloc",
2791
2788
  "regex",
@@ -2794,7 +2791,7 @@ dependencies = [
2794
2791
 
2795
2792
  [[package]]
2796
2793
  name = "limbo_sim"
2797
- version = "0.4.3-pre.2"
2794
+ version = "0.4.4"
2798
2795
  dependencies = [
2799
2796
  "anyhow",
2800
2797
  "bitflags 2.9.4",
@@ -2831,7 +2828,7 @@ dependencies = [
2831
2828
 
2832
2829
  [[package]]
2833
2830
  name = "limbo_sqlite_test_ext"
2834
- version = "0.4.3-pre.2"
2831
+ version = "0.4.4"
2835
2832
  dependencies = [
2836
2833
  "cc",
2837
2834
  ]
@@ -3718,7 +3715,7 @@ dependencies = [
3718
3715
 
3719
3716
  [[package]]
3720
3717
  name = "py-turso"
3721
- version = "0.4.3-pre.2"
3718
+ version = "0.4.4"
3722
3719
  dependencies = [
3723
3720
  "anyhow",
3724
3721
  "pyo3",
@@ -4543,6 +4540,12 @@ dependencies = [
4543
4540
  "cc",
4544
4541
  ]
4545
4542
 
4543
+ [[package]]
4544
+ name = "siphasher"
4545
+ version = "1.0.1"
4546
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4547
+ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
4548
+
4546
4549
  [[package]]
4547
4550
  name = "slab"
4548
4551
  version = "0.4.9"
@@ -4595,7 +4598,7 @@ checksum = "d372029cb5195f9ab4e4b9aef550787dce78b124fcaee8d82519925defcd6f0d"
4595
4598
 
4596
4599
  [[package]]
4597
4600
  name = "sql_generation"
4598
- version = "0.4.3-pre.2"
4601
+ version = "0.4.4"
4599
4602
  dependencies = [
4600
4603
  "anarchist-readable-name-generator-lib",
4601
4604
  "anyhow",
@@ -5299,7 +5302,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
5299
5302
 
5300
5303
  [[package]]
5301
5304
  name = "turso"
5302
- version = "0.4.3-pre.2"
5305
+ version = "0.4.4"
5303
5306
  dependencies = [
5304
5307
  "anyhow",
5305
5308
  "bytes",
@@ -5323,14 +5326,14 @@ dependencies = [
5323
5326
 
5324
5327
  [[package]]
5325
5328
  name = "turso-dotnet"
5326
- version = "0.4.3-pre.2"
5329
+ version = "0.4.4"
5327
5330
  dependencies = [
5328
5331
  "turso_core",
5329
5332
  ]
5330
5333
 
5331
5334
  [[package]]
5332
5335
  name = "turso-java"
5333
- version = "0.4.3-pre.2"
5336
+ version = "0.4.4"
5334
5337
  dependencies = [
5335
5338
  "jni",
5336
5339
  "thiserror 2.0.16",
@@ -5339,7 +5342,7 @@ dependencies = [
5339
5342
 
5340
5343
  [[package]]
5341
5344
  name = "turso_cli"
5342
- version = "0.4.3-pre.2"
5345
+ version = "0.4.4"
5343
5346
  dependencies = [
5344
5347
  "anyhow",
5345
5348
  "bytes",
@@ -5380,7 +5383,7 @@ dependencies = [
5380
5383
 
5381
5384
  [[package]]
5382
5385
  name = "turso_core"
5383
- version = "0.4.3-pre.2"
5386
+ version = "0.4.4"
5384
5387
  dependencies = [
5385
5388
  "aegis",
5386
5389
  "aes",
@@ -5388,7 +5391,6 @@ dependencies = [
5388
5391
  "antithesis_sdk",
5389
5392
  "arc-swap",
5390
5393
  "bitflags 2.9.4",
5391
- "bloom",
5392
5394
  "branches",
5393
5395
  "built",
5394
5396
  "bumpalo",
@@ -5400,6 +5402,7 @@ dependencies = [
5400
5402
  "either",
5401
5403
  "env_logger 0.11.7",
5402
5404
  "fallible-iterator",
5405
+ "fastbloom",
5403
5406
  "hex",
5404
5407
  "intrusive-collections",
5405
5408
  "io-uring",
@@ -5447,7 +5450,7 @@ dependencies = [
5447
5450
 
5448
5451
  [[package]]
5449
5452
  name = "turso_dart"
5450
- version = "0.4.3-pre.2"
5453
+ version = "0.4.4"
5451
5454
  dependencies = [
5452
5455
  "flutter_rust_bridge",
5453
5456
  "turso_core",
@@ -5455,7 +5458,7 @@ dependencies = [
5455
5458
 
5456
5459
  [[package]]
5457
5460
  name = "turso_ext"
5458
- version = "0.4.3-pre.2"
5461
+ version = "0.4.4"
5459
5462
  dependencies = [
5460
5463
  "chrono",
5461
5464
  "getrandom 0.3.2",
@@ -5464,7 +5467,7 @@ dependencies = [
5464
5467
 
5465
5468
  [[package]]
5466
5469
  name = "turso_ext_tests"
5467
- version = "0.4.3-pre.2"
5470
+ version = "0.4.4"
5468
5471
  dependencies = [
5469
5472
  "env_logger 0.11.7",
5470
5473
  "lazy_static",
@@ -5475,7 +5478,7 @@ dependencies = [
5475
5478
 
5476
5479
  [[package]]
5477
5480
  name = "turso_macros"
5478
- version = "0.4.3-pre.2"
5481
+ version = "0.4.4"
5479
5482
  dependencies = [
5480
5483
  "proc-macro2",
5481
5484
  "quote",
@@ -5484,7 +5487,7 @@ dependencies = [
5484
5487
 
5485
5488
  [[package]]
5486
5489
  name = "turso_node"
5487
- version = "0.4.3-pre.2"
5490
+ version = "0.4.4"
5488
5491
  dependencies = [
5489
5492
  "chrono",
5490
5493
  "napi",
@@ -5497,7 +5500,7 @@ dependencies = [
5497
5500
 
5498
5501
  [[package]]
5499
5502
  name = "turso_parser"
5500
- version = "0.4.3-pre.2"
5503
+ version = "0.4.4"
5501
5504
  dependencies = [
5502
5505
  "bitflags 2.9.4",
5503
5506
  "criterion",
@@ -5514,7 +5517,7 @@ dependencies = [
5514
5517
 
5515
5518
  [[package]]
5516
5519
  name = "turso_sdk_kit"
5517
- version = "0.4.3-pre.2"
5520
+ version = "0.4.4"
5518
5521
  dependencies = [
5519
5522
  "bindgen",
5520
5523
  "env_logger 0.11.7",
@@ -5527,7 +5530,7 @@ dependencies = [
5527
5530
 
5528
5531
  [[package]]
5529
5532
  name = "turso_sdk_kit_macros"
5530
- version = "0.4.3-pre.2"
5533
+ version = "0.4.4"
5531
5534
  dependencies = [
5532
5535
  "proc-macro2",
5533
5536
  "quote",
@@ -5536,7 +5539,7 @@ dependencies = [
5536
5539
 
5537
5540
  [[package]]
5538
5541
  name = "turso_sqlite3"
5539
- version = "0.4.3-pre.2"
5542
+ version = "0.4.4"
5540
5543
  dependencies = [
5541
5544
  "env_logger 0.11.7",
5542
5545
  "libc",
@@ -5549,7 +5552,7 @@ dependencies = [
5549
5552
 
5550
5553
  [[package]]
5551
5554
  name = "turso_stress"
5552
- version = "0.4.3-pre.2"
5555
+ version = "0.4.4"
5553
5556
  dependencies = [
5554
5557
  "antithesis_sdk",
5555
5558
  "clap",
@@ -5565,7 +5568,7 @@ dependencies = [
5565
5568
 
5566
5569
  [[package]]
5567
5570
  name = "turso_sync_engine"
5568
- version = "0.4.3-pre.2"
5571
+ version = "0.4.4"
5569
5572
  dependencies = [
5570
5573
  "base64 0.22.1",
5571
5574
  "bytes",
@@ -5592,7 +5595,7 @@ dependencies = [
5592
5595
 
5593
5596
  [[package]]
5594
5597
  name = "turso_sync_js"
5595
- version = "0.4.3-pre.2"
5598
+ version = "0.4.4"
5596
5599
  dependencies = [
5597
5600
  "genawaiter",
5598
5601
  "napi",
@@ -5607,7 +5610,7 @@ dependencies = [
5607
5610
 
5608
5611
  [[package]]
5609
5612
  name = "turso_sync_sdk_kit"
5610
- version = "0.4.3-pre.2"
5613
+ version = "0.4.4"
5611
5614
  dependencies = [
5612
5615
  "bindgen",
5613
5616
  "env_logger 0.11.7",
@@ -5624,7 +5627,7 @@ dependencies = [
5624
5627
 
5625
5628
  [[package]]
5626
5629
  name = "turso_whopper"
5627
- version = "0.4.3-pre.2"
5630
+ version = "0.4.4"
5628
5631
  dependencies = [
5629
5632
  "anyhow",
5630
5633
  "clap",
@@ -6,24 +6,24 @@ members = ["bindings/python"]
6
6
  exclude = ["perf/latency/limbo", "turso-test-runner"]
7
7
 
8
8
  [workspace.package]
9
- version = "0.4.3-pre.2"
9
+ version = "0.4.4"
10
10
  authors = ["the Limbo authors"]
11
11
  edition = "2021"
12
12
  license = "MIT"
13
13
  repository = "https://github.com/tursodatabase/turso"
14
14
 
15
15
  [workspace.dependencies]
16
- turso = { path = "bindings/rust", version = "0.4.3-pre.2" }
17
- turso_node = { path = "bindings/javascript", version = "0.4.3-pre.2" }
18
- turso_sdk_kit = { path = "sdk-kit", version = "0.4.3-pre.2" }
19
- turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.3-pre.2" }
20
- turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.3-pre.2" }
21
- limbo_completion = { path = "extensions/completion", version = "0.4.3-pre.2" }
22
- turso_core = { path = "core", version = "0.4.3-pre.2" }
23
- turso_sync_engine = { path = "sync/engine", version = "0.4.3-pre.2" }
24
- turso_ext = { path = "extensions/core", version = "0.4.3-pre.2" }
25
- turso_macros = { path = "macros", version = "0.4.3-pre.2" }
26
- turso_parser = { path = "parser", version = "0.4.3-pre.2" }
16
+ turso = { path = "bindings/rust", version = "0.4.4" }
17
+ turso_node = { path = "bindings/javascript", version = "0.4.4" }
18
+ turso_sdk_kit = { path = "sdk-kit", version = "0.4.4" }
19
+ turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.4" }
20
+ turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.4" }
21
+ limbo_completion = { path = "extensions/completion", version = "0.4.4" }
22
+ turso_core = { path = "core", version = "0.4.4" }
23
+ turso_sync_engine = { path = "sync/engine", version = "0.4.4" }
24
+ turso_ext = { path = "extensions/core", version = "0.4.4" }
25
+ turso_macros = { path = "macros", version = "0.4.4" }
26
+ turso_parser = { path = "parser", version = "0.4.4" }
27
27
  sql_generation = { path = "sql_generation" }
28
28
  strum = { version = "0.26", features = ["derive"] }
29
29
  strum_macros = "0.26"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyturso
3
- Version: 0.4.3rc2
3
+ Version: 0.4.4
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3
@@ -18,6 +18,12 @@ pub enum PyTursoStatusCode {
18
18
  Io = 3,
19
19
  }
20
20
  create_exception!(turso, Busy, PyException, "database is locked");
21
+ create_exception!(
22
+ turso,
23
+ BusySnapshot,
24
+ PyException,
25
+ "database snapshot is stale"
26
+ );
21
27
  create_exception!(turso, Interrupt, PyException, "interrupted");
22
28
  create_exception!(turso, Error, PyException, "generic error");
23
29
  create_exception!(turso, Misuse, PyException, "API misuse");
@@ -31,6 +37,7 @@ create_exception!(turso, IoError, PyException, "I/O error");
31
37
  pub(crate) fn turso_error_to_py_err(err: TursoError) -> PyErr {
32
38
  match err {
33
39
  rsapi::TursoError::Busy(message) => Busy::new_err(message),
40
+ rsapi::TursoError::BusySnapshot(message) => BusySnapshot::new_err(message),
34
41
  rsapi::TursoError::Interrupt(message) => Interrupt::new_err(message),
35
42
  rsapi::TursoError::Error(message) => Error::new_err(message),
36
43
  rsapi::TursoError::Misuse(message) => Misuse::new_err(message),
@@ -86,13 +86,13 @@ intrusive-collections = "0.9.7"
86
86
  roaring = "0.11.2"
87
87
  simsimd = "6.5.3"
88
88
  arc-swap = "1.7"
89
- bloom = "0.3.2"
90
89
  rustc-hash = "2.0"
91
90
  either = { workspace = true }
92
91
  tracing-subscriber.workspace = true
93
92
  rapidhash = "4.1.1"
94
93
  branches = { version = "0.4.3", default-features = false }
95
94
  bumpalo = { version = "3", features = ["collections"] }
95
+ fastbloom = "0.14.1"
96
96
 
97
97
  # Use pure-rust for Android to avoid C cross-compilation issues
98
98
  [target.'cfg(target_os = "android")'.dependencies]
@@ -1,4 +1,4 @@
1
- use crate::Instant;
1
+ use crate::MonotonicInstant;
2
2
  use std::time::Duration;
3
3
 
4
4
  /// Type alias for busy handler callback function.
@@ -52,7 +52,7 @@ pub struct BusyHandlerState {
52
52
  /// Number of times the busy handler has been invoked for this locking event
53
53
  invocation_count: i32,
54
54
  /// For timeout-based handlers: the next timeout instant to wait until
55
- timeout: Instant,
55
+ timeout: MonotonicInstant,
56
56
  /// For timeout-based handlers: the current iteration index into DELAYS
57
57
  iteration: usize,
58
58
  }
@@ -91,7 +91,7 @@ impl BusyHandlerState {
91
91
  ];
92
92
 
93
93
  /// Create a new busy handler state
94
- pub fn new(now: Instant) -> Self {
94
+ pub fn new(now: MonotonicInstant) -> Self {
95
95
  Self {
96
96
  invocation_count: 0,
97
97
  timeout: now,
@@ -100,14 +100,14 @@ impl BusyHandlerState {
100
100
  }
101
101
 
102
102
  /// Reset the state for a new locking event
103
- pub fn reset(&mut self, now: Instant) {
103
+ pub fn reset(&mut self, now: MonotonicInstant) {
104
104
  self.invocation_count = 0;
105
105
  self.timeout = now;
106
106
  self.iteration = 0;
107
107
  }
108
108
 
109
109
  /// Get the current timeout instant
110
- pub fn timeout(&self) -> Instant {
110
+ pub fn timeout(&self) -> MonotonicInstant {
111
111
  self.timeout
112
112
  }
113
113
 
@@ -118,7 +118,7 @@ impl BusyHandlerState {
118
118
  ///
119
119
  /// For timeout-based handlers, this also updates the internal timeout instant.
120
120
  /// For custom handlers, this invokes the callback and respects its return value.
121
- pub fn invoke(&mut self, handler: &BusyHandler, now: Instant) -> bool {
121
+ pub fn invoke(&mut self, handler: &BusyHandler, now: MonotonicInstant) -> bool {
122
122
  match handler {
123
123
  BusyHandler::None => {
124
124
  // No handler: return BUSY immediately
@@ -142,7 +142,7 @@ impl BusyHandlerState {
142
142
  /// Implements sqliteDefaultBusyCallback logic for timeout-based handling.
143
143
  ///
144
144
  /// This uses an exponentially increasing delay schedule, capped at 100ms per iteration.
145
- fn invoke_timeout_handler(&mut self, max_duration: Duration, now: Instant) -> bool {
145
+ fn invoke_timeout_handler(&mut self, max_duration: Duration, now: MonotonicInstant) -> bool {
146
146
  let idx = self.iteration.min(11);
147
147
  let mut delay = Self::DELAYS[idx];
148
148
  let mut prior = Self::TOTALS[idx];
@@ -170,21 +170,11 @@ impl BusyHandlerState {
170
170
  ///
171
171
  /// This returns the duration between `now` and the timeout instant.
172
172
  /// Returns `Duration::ZERO` if the timeout has already passed.
173
- pub fn get_delay(&self, now: Instant) -> Duration {
174
- if now.secs > self.timeout.secs
175
- || (now.secs == self.timeout.secs && now.micros >= self.timeout.micros)
176
- {
173
+ pub fn get_delay(&self, now: MonotonicInstant) -> Duration {
174
+ if now >= self.timeout {
177
175
  Duration::ZERO
178
176
  } else {
179
- let secs_diff = (self.timeout.secs - now.secs) as u64;
180
- let micros_diff = if self.timeout.micros >= now.micros {
181
- self.timeout.micros - now.micros
182
- } else {
183
- // Borrow from seconds
184
- return Duration::from_secs(secs_diff.saturating_sub(1))
185
- + Duration::from_micros((1_000_000 + self.timeout.micros - now.micros) as u64);
186
- };
187
- Duration::from_secs(secs_diff) + Duration::from_micros(micros_diff as u64)
177
+ self.timeout.duration_since(now)
188
178
  }
189
179
  }
190
180
  }
@@ -192,8 +182,9 @@ impl BusyHandlerState {
192
182
  #[cfg(test)]
193
183
  mod tests {
194
184
  use super::*;
195
- fn test_instant() -> Instant {
196
- Instant { secs: 0, micros: 0 }
185
+
186
+ fn test_instant() -> MonotonicInstant {
187
+ MonotonicInstant::now()
197
188
  }
198
189
 
199
190
  #[test]
@@ -365,7 +356,7 @@ mod tests {
365
356
  state.invoke(&handler, now);
366
357
 
367
358
  // Reset
368
- let later = Instant { secs: 1, micros: 0 };
359
+ let later = MonotonicInstant::now();
369
360
  state.reset(later);
370
361
 
371
362
  // Should be back to initial state
@@ -377,25 +368,21 @@ mod tests {
377
368
 
378
369
  #[test]
379
370
  fn test_get_delay_when_timeout_passed() {
380
- let now = Instant {
381
- secs: 10,
382
- micros: 0,
383
- };
371
+ let now = MonotonicInstant::now();
384
372
  let state = BusyHandlerState::new(now);
385
373
 
386
374
  // Timeout is at `now`, so any time >= now should return zero delay
387
375
  assert_eq!(state.get_delay(now), Duration::ZERO);
388
376
 
389
- let later = Instant {
390
- secs: 11,
391
- micros: 0,
392
- };
377
+ // A later time should also return zero
378
+ std::thread::sleep(Duration::from_micros(10));
379
+ let later = MonotonicInstant::now();
393
380
  assert_eq!(state.get_delay(later), Duration::ZERO);
394
381
  }
395
382
 
396
383
  #[test]
397
384
  fn test_get_delay_calculates_remaining_time() {
398
- let now = Instant { secs: 0, micros: 0 };
385
+ let now = MonotonicInstant::now();
399
386
  let mut state = BusyHandlerState::new(now);
400
387
 
401
388
  let handler = BusyHandler::Timeout(Duration::from_millis(100));
@@ -404,13 +391,5 @@ mod tests {
404
391
  // Check delay from `now` - should be 1ms
405
392
  let delay = state.get_delay(now);
406
393
  assert_eq!(delay, Duration::from_millis(1));
407
-
408
- // Check delay from half-way point
409
- let half = Instant {
410
- secs: 0,
411
- micros: 500,
412
- };
413
- let delay = state.get_delay(half);
414
- assert_eq!(delay, Duration::from_micros(500));
415
394
  }
416
395
  }