pyturso 0.4.0rc17__tar.gz → 0.4.0rc18__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 (279) hide show
  1. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/Cargo.lock +38 -30
  2. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/Cargo.toml +20 -20
  3. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/PKG-INFO +1 -1
  4. pyturso-0.4.0rc18/bindings/rust/src/connection.rs +281 -0
  5. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/src/lib.rs +2 -297
  6. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/tests/integration_tests.rs +31 -0
  7. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/completions.rs +247 -2
  8. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/mod.rs +46 -0
  9. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/jsonb.rs +6 -6
  10. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/mod.rs +101 -7
  11. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/lib.rs +224 -118
  12. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/cursor.rs +19 -0
  13. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/database/checkpoint_state_machine.rs +12 -5
  14. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/database/mod.rs +58 -0
  15. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/database/tests.rs +1 -0
  16. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/btree.rs +77 -66
  17. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/buffer_pool.rs +15 -24
  18. pyturso-0.4.0rc18/core/storage/journal_mode.rs +84 -0
  19. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/mod.rs +1 -0
  20. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/page_cache.rs +183 -40
  21. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/pager.rs +1152 -402
  22. pyturso-0.4.0rc18/core/storage/slot_bitmap.rs +224 -0
  23. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/sqlite3_ondisk.rs +62 -16
  24. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/wal.rs +283 -264
  25. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/join.rs +60 -61
  26. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/mod.rs +61 -8
  27. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/order.rs +53 -11
  28. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/pragma.rs +1 -0
  29. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/trigger_exec.rs +0 -26
  30. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/util.rs +25 -5
  31. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/builder.rs +57 -1
  32. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/execute.rs +286 -126
  33. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/explain.rs +2 -1
  34. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/hash_table.rs +2 -36
  35. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/mod.rs +17 -31
  36. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/sorter.rs +5 -28
  37. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/value.rs +64 -20
  38. pyturso-0.4.0rc17/core/storage/slot_bitmap.rs +0 -626
  39. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/Cargo.toml +0 -0
  40. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/README.md +0 -0
  41. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/build.rs +0 -0
  42. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/example.py +0 -0
  43. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-db-aio.mdx +0 -0
  44. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-db.mdx +0 -0
  45. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-sync-aio.mdx +0 -0
  46. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-sync.mdx +0 -0
  47. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-tests-aio.mdx +0 -0
  48. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/py-bindings-tests.mdx +0 -0
  49. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/requirements-dev.txt +0 -0
  50. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/requirements.txt +0 -0
  51. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/src/lib.rs +0 -0
  52. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/src/turso.rs +0 -0
  53. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/src/turso_sync.rs +0 -0
  54. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/tests/__init__.py +0 -0
  55. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/tests/test_database.py +0 -0
  56. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/tests/test_database_aio.py +0 -0
  57. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/tests/test_database_sync.py +0 -0
  58. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/tests/test_database_sync_aio.py +0 -0
  59. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/__init__.py +0 -0
  60. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/aio/__init__.py +0 -0
  61. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/aio/sync/__init__.py +0 -0
  62. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/lib.py +0 -0
  63. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/lib_aio.py +0 -0
  64. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/lib_sync.py +0 -0
  65. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/lib_sync_aio.py +0 -0
  66. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/py.typed +0 -0
  67. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/sync/__init__.py +0 -0
  68. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/python/turso/worker.py +0 -0
  69. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/Cargo.toml +0 -0
  70. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/README.md +0 -0
  71. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/examples/example.rs +0 -0
  72. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/examples/example_struct.rs +0 -0
  73. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/src/params.rs +0 -0
  74. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/src/rows.rs +0 -0
  75. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/src/transaction.rs +0 -0
  76. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/bindings/rust/src/value.rs +0 -0
  77. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/Cargo.toml +0 -0
  78. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/assert.rs +0 -0
  79. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/benches/benchmark.rs +0 -0
  80. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/benches/json_benchmark.rs +0 -0
  81. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/benches/mvcc_benchmark.rs +0 -0
  82. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/benches/tpc_h_benchmark.rs +0 -0
  83. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/build.rs +0 -0
  84. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/error.rs +0 -0
  85. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/ext/dynamic.rs +0 -0
  86. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/ext/mod.rs +0 -0
  87. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/ext/vtab_xconnect.rs +0 -0
  88. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/fast_lock.rs +0 -0
  89. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/function.rs +0 -0
  90. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/functions/datetime.rs +0 -0
  91. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/functions/mod.rs +0 -0
  92. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/functions/printf.rs +0 -0
  93. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/functions/strftime.rs +0 -0
  94. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/aggregate_operator.rs +0 -0
  95. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/compiler.rs +0 -0
  96. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/cursor.rs +0 -0
  97. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/dbsp.rs +0 -0
  98. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/expr_compiler.rs +0 -0
  99. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/filter_operator.rs +0 -0
  100. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/input_operator.rs +0 -0
  101. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/join_operator.rs +0 -0
  102. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/merge_operator.rs +0 -0
  103. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/mod.rs +0 -0
  104. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/operator.rs +0 -0
  105. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/persistence.rs +0 -0
  106. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/project_operator.rs +0 -0
  107. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/incremental/view.rs +0 -0
  108. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/index_method/backing_btree.rs +0 -0
  109. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/index_method/mod.rs +0 -0
  110. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/index_method/toy_vector_sparse_ivf.rs +0 -0
  111. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/info.rs +0 -0
  112. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/clock.rs +0 -0
  113. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/common.rs +0 -0
  114. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/generic.rs +0 -0
  115. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/io_uring.rs +0 -0
  116. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/memory.rs +0 -0
  117. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/unix.rs +0 -0
  118. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/vfs.rs +0 -0
  119. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/io/windows.rs +0 -0
  120. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/cache.rs +0 -0
  121. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/error.rs +0 -0
  122. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/ops.rs +0 -0
  123. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/path.rs +0 -0
  124. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/json/vtab.rs +0 -0
  125. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/clock.rs +0 -0
  126. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/mod.rs +0 -0
  127. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/persistent_storage/logical_log.rs +0 -0
  128. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/mvcc/persistent_storage/mod.rs +0 -0
  129. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/numeric/mod.rs +0 -0
  130. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/numeric/nonnan.rs +0 -0
  131. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/parameters.rs +0 -0
  132. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/pragma.rs +0 -0
  133. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/pseudo.rs +0 -0
  134. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/schema.rs +0 -0
  135. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/series.rs +0 -0
  136. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/state_machine.rs +0 -0
  137. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/stats.rs +0 -0
  138. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/checksum.rs +0 -0
  139. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/database.rs +0 -0
  140. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/encryption.rs +0 -0
  141. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/state_machines.rs +0 -0
  142. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/storage/subjournal.rs +0 -0
  143. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/time/internal.rs +0 -0
  144. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/time/mod.rs +0 -0
  145. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/aggregation.rs +0 -0
  146. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/alter.rs +0 -0
  147. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/analyze.rs +0 -0
  148. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/attach.rs +0 -0
  149. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/collate.rs +0 -0
  150. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/compound_select.rs +0 -0
  151. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/delete.rs +0 -0
  152. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/display.rs +0 -0
  153. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/emitter.rs +0 -0
  154. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/expr.rs +0 -0
  155. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/expression_index.rs +0 -0
  156. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/fkeys.rs +0 -0
  157. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/group_by.rs +0 -0
  158. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/index.rs +0 -0
  159. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/insert.rs +0 -0
  160. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/integrity_check.rs +0 -0
  161. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/logical.rs +0 -0
  162. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/main_loop.rs +0 -0
  163. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/mod.rs +0 -0
  164. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/OPTIMIZER.md +0 -0
  165. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/access_method.rs +0 -0
  166. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/constraints.rs +0 -0
  167. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/cost.rs +0 -0
  168. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/optimizer/lift_common_subexpressions.rs +0 -0
  169. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/order_by.rs +0 -0
  170. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/plan.rs +0 -0
  171. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/planner.rs +0 -0
  172. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/result_row.rs +0 -0
  173. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/rollback.rs +0 -0
  174. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/schema.rs +0 -0
  175. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/select.rs +0 -0
  176. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/subquery.rs +0 -0
  177. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/transaction.rs +0 -0
  178. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/trigger.rs +0 -0
  179. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/update.rs +0 -0
  180. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/upsert.rs +0 -0
  181. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/values.rs +0 -0
  182. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/view.rs +0 -0
  183. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/translate/window.rs +0 -0
  184. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/types.rs +0 -0
  185. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/uuid.rs +0 -0
  186. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/affinity.rs +0 -0
  187. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/bloom_filter.rs +0 -0
  188. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/insn.rs +0 -0
  189. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/likeop.rs +0 -0
  190. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/metrics.rs +0 -0
  191. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vdbe/rowset.rs +0 -0
  192. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/mod.rs +0 -0
  193. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/concat.rs +0 -0
  194. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/convert.rs +0 -0
  195. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/distance_cos.rs +0 -0
  196. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/distance_dot.rs +0 -0
  197. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/distance_l2.rs +0 -0
  198. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/jaccard.rs +0 -0
  199. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/mod.rs +0 -0
  200. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/serialize.rs +0 -0
  201. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/slice.rs +0 -0
  202. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/operations/text.rs +0 -0
  203. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vector/vector_types.rs +0 -0
  204. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/core/vtab.rs +0 -0
  205. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/Cargo.toml +0 -0
  206. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/README.md +0 -0
  207. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/build.rs +0 -0
  208. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/src/functions.rs +0 -0
  209. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/src/lib.rs +0 -0
  210. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/src/types.rs +0 -0
  211. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/src/vfs_modules.rs +0 -0
  212. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/extensions/core/src/vtabs.rs +0 -0
  213. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/Cargo.toml +0 -0
  214. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/atomic_enum.rs +0 -0
  215. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/agg_derive.rs +0 -0
  216. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/match_ignore_ascii_case.rs +0 -0
  217. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/mod.rs +0 -0
  218. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/scalars.rs +0 -0
  219. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/vfs_derive.rs +0 -0
  220. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/ext/vtab_derive.rs +0 -0
  221. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/lib.rs +0 -0
  222. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/macros/src/test.rs +0 -0
  223. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/Cargo.toml +0 -0
  224. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/README.md +0 -0
  225. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/benches/parser_benchmark.rs +0 -0
  226. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/ast/check.rs +0 -0
  227. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/ast/fmt.rs +0 -0
  228. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/ast.rs +0 -0
  229. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/error.rs +0 -0
  230. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/lexer.rs +0 -0
  231. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/lib.rs +0 -0
  232. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/parser.rs +0 -0
  233. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/parser/src/token.rs +0 -0
  234. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/pyproject.toml +0 -0
  235. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/Cargo.toml +0 -0
  236. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/README.md +0 -0
  237. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/bindgen.sh +0 -0
  238. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/readme-sdk-kit.mdx +0 -0
  239. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/src/bindings.rs +0 -0
  240. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/src/capi.rs +0 -0
  241. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/src/lib.rs +0 -0
  242. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/src/rsapi.rs +0 -0
  243. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit/turso.h +0 -0
  244. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit-macros/Cargo.toml +0 -0
  245. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sdk-kit-macros/src/lib.rs +0 -0
  246. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/.gitignore +0 -0
  247. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/Cargo.toml +0 -0
  248. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_replay_generator.rs +0 -0
  249. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_sync_engine.rs +0 -0
  250. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_sync_engine_io.rs +0 -0
  251. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_sync_lazy_storage.rs +0 -0
  252. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_sync_operations.rs +0 -0
  253. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/database_tape.rs +0 -0
  254. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/errors.rs +0 -0
  255. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/io_operations.rs +0 -0
  256. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/lib.rs +0 -0
  257. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/server_proto.rs +0 -0
  258. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/sparse_io.rs +0 -0
  259. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/types.rs +0 -0
  260. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/engine/src/wal_session.rs +0 -0
  261. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/Cargo.toml +0 -0
  262. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/bindgen.sh +0 -0
  263. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/bindings.rs +0 -0
  264. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/capi.rs +0 -0
  265. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/lib.rs +0 -0
  266. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/rsapi.rs +0 -0
  267. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/sync_engine_io.rs +0 -0
  268. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/src/turso_async_operation.rs +0 -0
  269. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/sync/sdk-kit/turso_sync.h +0 -0
  270. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/__init__.py +0 -0
  271. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/aio/__init__.py +0 -0
  272. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/aio/sync/__init__.py +0 -0
  273. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/lib.py +0 -0
  274. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/lib_aio.py +0 -0
  275. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/lib_sync.py +0 -0
  276. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/lib_sync_aio.py +0 -0
  277. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/py.typed +0 -0
  278. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/sync/__init__.py +0 -0
  279. {pyturso-0.4.0rc17 → pyturso-0.4.0rc18}/turso/worker.py +0 -0
@@ -877,7 +877,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
877
877
 
878
878
  [[package]]
879
879
  name = "core_tester"
880
- version = "0.4.0-pre.17"
880
+ version = "0.4.0-pre.18"
881
881
  dependencies = [
882
882
  "anyhow",
883
883
  "assert_cmd",
@@ -887,6 +887,7 @@ dependencies = [
887
887
  "rand 0.9.2",
888
888
  "rand_chacha 0.9.0",
889
889
  "rusqlite",
890
+ "similar-asserts",
890
891
  "sql_generation",
891
892
  "tempfile",
892
893
  "test-log",
@@ -2632,7 +2633,7 @@ dependencies = [
2632
2633
 
2633
2634
  [[package]]
2634
2635
  name = "limbo_completion"
2635
- version = "0.4.0-pre.17"
2636
+ version = "0.4.0-pre.18"
2636
2637
  dependencies = [
2637
2638
  "mimalloc",
2638
2639
  "turso_ext",
@@ -2640,7 +2641,7 @@ dependencies = [
2640
2641
 
2641
2642
  [[package]]
2642
2643
  name = "limbo_crypto"
2643
- version = "0.4.0-pre.17"
2644
+ version = "0.4.0-pre.18"
2644
2645
  dependencies = [
2645
2646
  "blake3",
2646
2647
  "data-encoding",
@@ -2653,7 +2654,7 @@ dependencies = [
2653
2654
 
2654
2655
  [[package]]
2655
2656
  name = "limbo_csv"
2656
- version = "0.4.0-pre.17"
2657
+ version = "0.4.0-pre.18"
2657
2658
  dependencies = [
2658
2659
  "csv",
2659
2660
  "mimalloc",
@@ -2663,7 +2664,7 @@ dependencies = [
2663
2664
 
2664
2665
  [[package]]
2665
2666
  name = "limbo_fuzzy"
2666
- version = "0.4.0-pre.17"
2667
+ version = "0.4.0-pre.18"
2667
2668
  dependencies = [
2668
2669
  "mimalloc",
2669
2670
  "turso_ext",
@@ -2671,7 +2672,7 @@ dependencies = [
2671
2672
 
2672
2673
  [[package]]
2673
2674
  name = "limbo_ipaddr"
2674
- version = "0.4.0-pre.17"
2675
+ version = "0.4.0-pre.18"
2675
2676
  dependencies = [
2676
2677
  "ipnetwork",
2677
2678
  "mimalloc",
@@ -2680,7 +2681,7 @@ dependencies = [
2680
2681
 
2681
2682
  [[package]]
2682
2683
  name = "limbo_percentile"
2683
- version = "0.4.0-pre.17"
2684
+ version = "0.4.0-pre.18"
2684
2685
  dependencies = [
2685
2686
  "mimalloc",
2686
2687
  "turso_ext",
@@ -2688,7 +2689,7 @@ dependencies = [
2688
2689
 
2689
2690
  [[package]]
2690
2691
  name = "limbo_regexp"
2691
- version = "0.4.0-pre.17"
2692
+ version = "0.4.0-pre.18"
2692
2693
  dependencies = [
2693
2694
  "mimalloc",
2694
2695
  "regex",
@@ -2697,7 +2698,7 @@ dependencies = [
2697
2698
 
2698
2699
  [[package]]
2699
2700
  name = "limbo_sim"
2700
- version = "0.4.0-pre.17"
2701
+ version = "0.4.0-pre.18"
2701
2702
  dependencies = [
2702
2703
  "anyhow",
2703
2704
  "bitflags 2.9.4",
@@ -2734,7 +2735,7 @@ dependencies = [
2734
2735
 
2735
2736
  [[package]]
2736
2737
  name = "limbo_sqlite_test_ext"
2737
- version = "0.4.0-pre.17"
2738
+ version = "0.4.0-pre.18"
2738
2739
  dependencies = [
2739
2740
  "cc",
2740
2741
  ]
@@ -3560,7 +3561,7 @@ dependencies = [
3560
3561
 
3561
3562
  [[package]]
3562
3563
  name = "py-turso"
3563
- version = "0.4.0-pre.17"
3564
+ version = "0.4.0-pre.18"
3564
3565
  dependencies = [
3565
3566
  "anyhow",
3566
3567
  "pyo3",
@@ -4320,7 +4321,7 @@ checksum = "d372029cb5195f9ab4e4b9aef550787dce78b124fcaee8d82519925defcd6f0d"
4320
4321
 
4321
4322
  [[package]]
4322
4323
  name = "sql_generation"
4323
- version = "0.4.0-pre.17"
4324
+ version = "0.4.0-pre.18"
4324
4325
  dependencies = [
4325
4326
  "anarchist-readable-name-generator-lib",
4326
4327
  "anyhow",
@@ -4948,7 +4949,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
4948
4949
 
4949
4950
  [[package]]
4950
4951
  name = "turso"
4951
- version = "0.4.0-pre.17"
4952
+ version = "0.4.0-pre.18"
4952
4953
  dependencies = [
4953
4954
  "mimalloc",
4954
4955
  "rand 0.9.2",
@@ -4961,9 +4962,16 @@ dependencies = [
4961
4962
  "turso_core",
4962
4963
  ]
4963
4964
 
4965
+ [[package]]
4966
+ name = "turso-dotnet"
4967
+ version = "0.4.0-pre.18"
4968
+ dependencies = [
4969
+ "turso_core",
4970
+ ]
4971
+
4964
4972
  [[package]]
4965
4973
  name = "turso-java"
4966
- version = "0.4.0-pre.17"
4974
+ version = "0.4.0-pre.18"
4967
4975
  dependencies = [
4968
4976
  "jni",
4969
4977
  "thiserror 2.0.16",
@@ -4972,7 +4980,7 @@ dependencies = [
4972
4980
 
4973
4981
  [[package]]
4974
4982
  name = "turso_cli"
4975
- version = "0.4.0-pre.17"
4983
+ version = "0.4.0-pre.18"
4976
4984
  dependencies = [
4977
4985
  "anyhow",
4978
4986
  "cfg-if",
@@ -5009,7 +5017,7 @@ dependencies = [
5009
5017
 
5010
5018
  [[package]]
5011
5019
  name = "turso_core"
5012
- version = "0.4.0-pre.17"
5020
+ version = "0.4.0-pre.18"
5013
5021
  dependencies = [
5014
5022
  "aegis",
5015
5023
  "aes",
@@ -5074,7 +5082,7 @@ dependencies = [
5074
5082
 
5075
5083
  [[package]]
5076
5084
  name = "turso_dart"
5077
- version = "0.4.0-pre.17"
5085
+ version = "0.4.0-pre.18"
5078
5086
  dependencies = [
5079
5087
  "flutter_rust_bridge",
5080
5088
  "turso_core",
@@ -5082,7 +5090,7 @@ dependencies = [
5082
5090
 
5083
5091
  [[package]]
5084
5092
  name = "turso_ext"
5085
- version = "0.4.0-pre.17"
5093
+ version = "0.4.0-pre.18"
5086
5094
  dependencies = [
5087
5095
  "chrono",
5088
5096
  "getrandom 0.3.2",
@@ -5091,7 +5099,7 @@ dependencies = [
5091
5099
 
5092
5100
  [[package]]
5093
5101
  name = "turso_ext_tests"
5094
- version = "0.4.0-pre.17"
5102
+ version = "0.4.0-pre.18"
5095
5103
  dependencies = [
5096
5104
  "env_logger 0.11.7",
5097
5105
  "lazy_static",
@@ -5102,7 +5110,7 @@ dependencies = [
5102
5110
 
5103
5111
  [[package]]
5104
5112
  name = "turso_macros"
5105
- version = "0.4.0-pre.17"
5113
+ version = "0.4.0-pre.18"
5106
5114
  dependencies = [
5107
5115
  "proc-macro2",
5108
5116
  "quote",
@@ -5111,7 +5119,7 @@ dependencies = [
5111
5119
 
5112
5120
  [[package]]
5113
5121
  name = "turso_node"
5114
- version = "0.4.0-pre.17"
5122
+ version = "0.4.0-pre.18"
5115
5123
  dependencies = [
5116
5124
  "chrono",
5117
5125
  "napi",
@@ -5124,7 +5132,7 @@ dependencies = [
5124
5132
 
5125
5133
  [[package]]
5126
5134
  name = "turso_parser"
5127
- version = "0.4.0-pre.17"
5135
+ version = "0.4.0-pre.18"
5128
5136
  dependencies = [
5129
5137
  "bitflags 2.9.4",
5130
5138
  "criterion",
@@ -5140,7 +5148,7 @@ dependencies = [
5140
5148
 
5141
5149
  [[package]]
5142
5150
  name = "turso_sdk_kit"
5143
- version = "0.4.0-pre.17"
5151
+ version = "0.4.0-pre.18"
5144
5152
  dependencies = [
5145
5153
  "bindgen",
5146
5154
  "env_logger 0.11.7",
@@ -5153,7 +5161,7 @@ dependencies = [
5153
5161
 
5154
5162
  [[package]]
5155
5163
  name = "turso_sdk_kit_macros"
5156
- version = "0.4.0-pre.17"
5164
+ version = "0.4.0-pre.18"
5157
5165
  dependencies = [
5158
5166
  "proc-macro2",
5159
5167
  "quote",
@@ -5162,7 +5170,7 @@ dependencies = [
5162
5170
 
5163
5171
  [[package]]
5164
5172
  name = "turso_sqlite3"
5165
- version = "0.4.0-pre.17"
5173
+ version = "0.4.0-pre.18"
5166
5174
  dependencies = [
5167
5175
  "env_logger 0.11.7",
5168
5176
  "libc",
@@ -5175,7 +5183,7 @@ dependencies = [
5175
5183
 
5176
5184
  [[package]]
5177
5185
  name = "turso_stress"
5178
- version = "0.4.0-pre.17"
5186
+ version = "0.4.0-pre.18"
5179
5187
  dependencies = [
5180
5188
  "antithesis_sdk",
5181
5189
  "clap",
@@ -5192,7 +5200,7 @@ dependencies = [
5192
5200
 
5193
5201
  [[package]]
5194
5202
  name = "turso_sync_engine"
5195
- version = "0.4.0-pre.17"
5203
+ version = "0.4.0-pre.18"
5196
5204
  dependencies = [
5197
5205
  "base64 0.22.1",
5198
5206
  "bytes",
@@ -5220,7 +5228,7 @@ dependencies = [
5220
5228
 
5221
5229
  [[package]]
5222
5230
  name = "turso_sync_js"
5223
- version = "0.4.0-pre.17"
5231
+ version = "0.4.0-pre.18"
5224
5232
  dependencies = [
5225
5233
  "genawaiter",
5226
5234
  "napi",
@@ -5235,7 +5243,7 @@ dependencies = [
5235
5243
 
5236
5244
  [[package]]
5237
5245
  name = "turso_sync_sdk_kit"
5238
- version = "0.4.0-pre.17"
5246
+ version = "0.4.0-pre.18"
5239
5247
  dependencies = [
5240
5248
  "bindgen",
5241
5249
  "env_logger 0.11.7",
@@ -5252,7 +5260,7 @@ dependencies = [
5252
5260
 
5253
5261
  [[package]]
5254
5262
  name = "turso_whopper"
5255
- version = "0.4.0-pre.17"
5263
+ version = "0.4.0-pre.18"
5256
5264
  dependencies = [
5257
5265
  "anyhow",
5258
5266
  "clap",
@@ -6,32 +6,32 @@ members = ["bindings/python"]
6
6
  exclude = ["perf/latency/limbo"]
7
7
 
8
8
  [workspace.package]
9
- version = "0.4.0-pre.17"
9
+ version = "0.4.0-pre.18"
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.0-pre.17" }
17
- turso_node = { path = "bindings/javascript", version = "0.4.0-pre.17" }
18
- turso_sdk_kit = { path = "sdk-kit", version = "0.4.0-pre.17" }
19
- turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.0-pre.17" }
20
- turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.0-pre.17" }
21
- limbo_completion = { path = "extensions/completion", version = "0.4.0-pre.17" }
22
- turso_core = { path = "core", version = "0.4.0-pre.17" }
23
- turso_sync_engine = { path = "sync/engine", version = "0.4.0-pre.17" }
24
- limbo_crypto = { path = "extensions/crypto", version = "0.4.0-pre.17" }
25
- limbo_csv = { path = "extensions/csv", version = "0.4.0-pre.17" }
26
- turso_ext = { path = "extensions/core", version = "0.4.0-pre.17" }
27
- turso_ext_tests = { path = "extensions/tests", version = "0.4.0-pre.17" }
28
- limbo_ipaddr = { path = "extensions/ipaddr", version = "0.4.0-pre.17" }
29
- turso_macros = { path = "macros", version = "0.4.0-pre.17" }
30
- limbo_percentile = { path = "extensions/percentile", version = "0.4.0-pre.17" }
31
- limbo_regexp = { path = "extensions/regexp", version = "0.4.0-pre.17" }
32
- limbo_uuid = { path = "extensions/uuid", version = "0.4.0-pre.17" }
33
- turso_parser = { path = "parser", version = "0.4.0-pre.17" }
34
- limbo_fuzzy = { path = "extensions/fuzzy", version = "0.4.0-pre.17" }
16
+ turso = { path = "bindings/rust", version = "0.4.0-pre.18" }
17
+ turso_node = { path = "bindings/javascript", version = "0.4.0-pre.18" }
18
+ turso_sdk_kit = { path = "sdk-kit", version = "0.4.0-pre.18" }
19
+ turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.0-pre.18" }
20
+ turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.0-pre.18" }
21
+ limbo_completion = { path = "extensions/completion", version = "0.4.0-pre.18" }
22
+ turso_core = { path = "core", version = "0.4.0-pre.18" }
23
+ turso_sync_engine = { path = "sync/engine", version = "0.4.0-pre.18" }
24
+ limbo_crypto = { path = "extensions/crypto", version = "0.4.0-pre.18" }
25
+ limbo_csv = { path = "extensions/csv", version = "0.4.0-pre.18" }
26
+ turso_ext = { path = "extensions/core", version = "0.4.0-pre.18" }
27
+ turso_ext_tests = { path = "extensions/tests", version = "0.4.0-pre.18" }
28
+ limbo_ipaddr = { path = "extensions/ipaddr", version = "0.4.0-pre.18" }
29
+ turso_macros = { path = "macros", version = "0.4.0-pre.18" }
30
+ limbo_percentile = { path = "extensions/percentile", version = "0.4.0-pre.18" }
31
+ limbo_regexp = { path = "extensions/regexp", version = "0.4.0-pre.18" }
32
+ limbo_uuid = { path = "extensions/uuid", version = "0.4.0-pre.18" }
33
+ turso_parser = { path = "parser", version = "0.4.0-pre.18" }
34
+ limbo_fuzzy = { path = "extensions/fuzzy", version = "0.4.0-pre.18" }
35
35
  sql_generation = { path = "sql_generation" }
36
36
  strum = { version = "0.26", features = ["derive"] }
37
37
  strum_macros = "0.26"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyturso
3
- Version: 0.4.0rc17
3
+ Version: 0.4.0rc18
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3
@@ -0,0 +1,281 @@
1
+ use crate::transaction::DropBehavior;
2
+ use crate::transaction::TransactionBehavior;
3
+ use crate::Error;
4
+ use crate::IntoParams;
5
+ use crate::Row;
6
+ use crate::Rows;
7
+ use crate::Statement;
8
+ use std::fmt::Debug;
9
+ use std::sync::atomic::AtomicU8;
10
+ use std::sync::atomic::Ordering;
11
+ use std::sync::MutexGuard;
12
+ use std::sync::{Arc, Mutex};
13
+ #[cfg(feature = "conn_raw_api")]
14
+ use turso_core::types::WalFrameInfo;
15
+ pub type Result<T> = std::result::Result<T, Error>;
16
+
17
+ /// Atomic wrapper for [DropBehavior]
18
+ pub(crate) struct AtomicDropBehavior {
19
+ inner: AtomicU8,
20
+ }
21
+
22
+ impl AtomicDropBehavior {
23
+ fn new(behavior: DropBehavior) -> Self {
24
+ Self {
25
+ inner: AtomicU8::new(behavior.into()),
26
+ }
27
+ }
28
+
29
+ fn load(&self, ordering: Ordering) -> DropBehavior {
30
+ self.inner.load(ordering).into()
31
+ }
32
+
33
+ pub(crate) fn store(&self, behavior: DropBehavior, ordering: Ordering) {
34
+ self.inner.store(behavior.into(), ordering);
35
+ }
36
+ }
37
+
38
+ // A database connection.
39
+ pub struct Connection {
40
+ /// Inner is an Option so that when a Connection is dropped we can take the inner
41
+ /// (Actual connection) out of it and put it back into the ConnectionPool
42
+ /// the only time inner will be None is just before the Connection is freed after the
43
+ /// inner connection has been recyled into the connection pool
44
+ inner: Option<Arc<Mutex<Arc<turso_core::Connection>>>>,
45
+ pub(crate) transaction_behavior: TransactionBehavior,
46
+ /// If there is a dangling transaction after it was dropped without being finished,
47
+ /// [Connection::dangling_tx] will be set to the [DropBehavior] of the dangling transaction,
48
+ /// and the corresponding action will be taken when a new transaction is requested
49
+ /// or the connection queries/executes.
50
+ /// We cannot do this eagerly on Drop because drop is not async.
51
+ ///
52
+ /// By default, the value is [DropBehavior::Ignore] which effectively does nothing.
53
+ pub(crate) dangling_tx: AtomicDropBehavior,
54
+ }
55
+
56
+ impl Clone for Connection {
57
+ fn clone(&self) -> Self {
58
+ let i = self.inner.clone();
59
+
60
+ Self {
61
+ inner: i,
62
+ //inner: Arc::clone(&self.inner),
63
+ transaction_behavior: self.transaction_behavior,
64
+ dangling_tx: AtomicDropBehavior::new(self.dangling_tx.load(Ordering::SeqCst)),
65
+ }
66
+ }
67
+ }
68
+
69
+ unsafe impl Send for Connection {}
70
+ unsafe impl Sync for Connection {}
71
+
72
+ impl Connection {
73
+ pub fn create(conn: Arc<turso_core::Connection>) -> Self {
74
+ #[allow(clippy::arc_with_non_send_sync)]
75
+ let connection = Connection {
76
+ inner: Some(Arc::new(Mutex::new(conn))),
77
+ transaction_behavior: TransactionBehavior::Deferred,
78
+ dangling_tx: AtomicDropBehavior::new(DropBehavior::Ignore),
79
+ };
80
+ connection
81
+ }
82
+
83
+ pub(crate) async fn maybe_handle_dangling_tx(&self) -> Result<()> {
84
+ match self.dangling_tx.load(Ordering::SeqCst) {
85
+ DropBehavior::Rollback => {
86
+ let mut stmt = self.prepare("ROLLBACK").await?;
87
+ stmt.execute(()).await?;
88
+ self.dangling_tx
89
+ .store(DropBehavior::Ignore, Ordering::SeqCst);
90
+ }
91
+ DropBehavior::Commit => {
92
+ let mut stmt = self.prepare("COMMIT").await?;
93
+ stmt.execute(()).await?;
94
+ self.dangling_tx
95
+ .store(DropBehavior::Ignore, Ordering::SeqCst);
96
+ }
97
+ DropBehavior::Ignore => {}
98
+ DropBehavior::Panic => {
99
+ panic!("Transaction dropped unexpectedly.");
100
+ }
101
+ }
102
+ Ok(())
103
+ }
104
+
105
+ /// Query the database with SQL.
106
+ pub async fn query(&self, sql: &str, params: impl IntoParams) -> Result<Rows> {
107
+ self.maybe_handle_dangling_tx().await?;
108
+ let mut stmt = self.prepare(sql).await?;
109
+ stmt.query(params).await
110
+ }
111
+
112
+ /// Execute SQL statement on the database.
113
+ pub async fn execute(&self, sql: &str, params: impl IntoParams) -> Result<u64> {
114
+ self.maybe_handle_dangling_tx().await?;
115
+ let mut stmt = self.prepare(sql).await?;
116
+ stmt.execute(params).await
117
+ }
118
+
119
+ /// get the inner connection
120
+ fn get_inner_connection(&self) -> Result<MutexGuard<'_, Arc<turso_core::Connection>>> {
121
+ match &self.inner {
122
+ Some(inner) => Ok(inner.lock().map_err(|e| Error::MutexError(e.to_string()))?),
123
+ None => Err(Error::MutexError(
124
+ "Inner connection can't be none".to_string(),
125
+ )),
126
+ }
127
+ }
128
+
129
+ #[cfg(feature = "conn_raw_api")]
130
+ pub fn wal_frame_count(&self) -> Result<u64> {
131
+ let conn = self.get_inner_connection()?;
132
+ conn.wal_state()
133
+ .map_err(|e| Error::WalOperationError(format!("wal_insert_begin failed: {e}")))
134
+ .map(|state| state.max_frame)
135
+ }
136
+
137
+ #[cfg(feature = "conn_raw_api")]
138
+ pub fn try_wal_watermark_read_page(
139
+ &self,
140
+ page_idx: u32,
141
+ page: &mut [u8],
142
+ frame_watermark: Option<u64>,
143
+ ) -> Result<bool> {
144
+ let conn = self.get_inner_connection()?;
145
+ conn.try_wal_watermark_read_page(page_idx, page, frame_watermark)
146
+ .map_err(|e| {
147
+ Error::WalOperationError(format!("try_wal_watermark_read_page failed: {e}"))
148
+ })
149
+ }
150
+
151
+ #[cfg(feature = "conn_raw_api")]
152
+ pub fn wal_changed_pages_after(&self, frame_watermark: u64) -> Result<Vec<u32>> {
153
+ let conn = self.get_inner_connection()?;
154
+ conn.wal_changed_pages_after(frame_watermark)
155
+ .map_err(|e| Error::WalOperationError(format!("wal_changed_pages_after failed: {e}")))
156
+ }
157
+
158
+ #[cfg(feature = "conn_raw_api")]
159
+ pub fn wal_insert_begin(&self) -> Result<()> {
160
+ let conn = self.get_inner_connection()?;
161
+ conn.wal_insert_begin()
162
+ .map_err(|e| Error::WalOperationError(format!("wal_insert_begin failed: {e}")))
163
+ }
164
+
165
+ #[cfg(feature = "conn_raw_api")]
166
+ pub fn wal_insert_end(&self, force_commit: bool) -> Result<()> {
167
+ let conn = self.get_inner_connection()?;
168
+ conn.wal_insert_end(force_commit)
169
+ .map_err(|e| Error::WalOperationError(format!("wal_insert_end failed: {e}")))
170
+ }
171
+
172
+ #[cfg(feature = "conn_raw_api")]
173
+ pub fn wal_insert_frame(&self, frame_no: u64, frame: &[u8]) -> Result<WalFrameInfo> {
174
+ let conn = self.get_inner_connection()?;
175
+ conn.wal_insert_frame(frame_no, frame)
176
+ .map_err(|e| Error::WalOperationError(format!("wal_insert_frame failed: {e}")))
177
+ }
178
+
179
+ #[cfg(feature = "conn_raw_api")]
180
+ pub fn wal_get_frame(&self, frame_no: u64, frame: &mut [u8]) -> Result<WalFrameInfo> {
181
+ let conn = self.get_inner_connection()?;
182
+ conn.wal_get_frame(frame_no, frame)
183
+ .map_err(|e| Error::WalOperationError(format!("wal_insert_frame failed: {e}")))
184
+ }
185
+
186
+ /// Execute a batch of SQL statements on the database.
187
+ pub async fn execute_batch(&self, sql: &str) -> Result<()> {
188
+ self.maybe_handle_dangling_tx().await?;
189
+ self.prepare_execute_batch(sql).await?;
190
+ Ok(())
191
+ }
192
+
193
+ /// Prepare a SQL statement for later execution.
194
+ pub async fn prepare(&self, sql: &str) -> Result<Statement> {
195
+ let conn = self.get_inner_connection()?;
196
+ let stmt = conn.prepare(sql)?;
197
+
198
+ #[allow(clippy::arc_with_non_send_sync)]
199
+ let statement = Statement {
200
+ inner: Arc::new(Mutex::new(stmt)),
201
+ };
202
+ Ok(statement)
203
+ }
204
+
205
+ async fn prepare_execute_batch(&self, sql: impl AsRef<str>) -> Result<()> {
206
+ self.maybe_handle_dangling_tx().await?;
207
+ let conn = self.get_inner_connection()?;
208
+ conn.prepare_execute_batch(sql)?;
209
+ Ok(())
210
+ }
211
+
212
+ /// Query a pragma.
213
+ pub fn pragma_query<F>(&self, pragma_name: &str, mut f: F) -> Result<()>
214
+ where
215
+ F: FnMut(&Row) -> turso_core::Result<()>,
216
+ {
217
+ let conn = self.get_inner_connection()?;
218
+ let rows: Vec<Row> = conn
219
+ .pragma_query(pragma_name)
220
+ .map_err(|e| Error::SqlExecutionFailure(e.to_string()))?
221
+ .iter()
222
+ .map(|row| row.iter().collect::<Row>())
223
+ .collect();
224
+
225
+ rows.iter().try_for_each(|row| {
226
+ f(row).map_err(|e| {
227
+ Error::SqlExecutionFailure(format!("Error executing user defined function: {e}"))
228
+ })
229
+ })?;
230
+ Ok(())
231
+ }
232
+
233
+ /// Returns the rowid of the last row inserted.
234
+ pub fn last_insert_rowid(&self) -> i64 {
235
+ let conn = self.get_inner_connection().unwrap();
236
+ conn.last_insert_rowid()
237
+ }
238
+
239
+ /// Flush dirty pages to disk.
240
+ /// This will write the dirty pages to the WAL.
241
+ pub fn cacheflush(&self) -> Result<()> {
242
+ let conn = self.get_inner_connection()?;
243
+ let completions = conn.cacheflush()?;
244
+ let pager = conn.get_pager();
245
+ for c in completions {
246
+ pager.io.wait_for_completion(c)?;
247
+ }
248
+ Ok(())
249
+ }
250
+
251
+ pub fn is_autocommit(&self) -> Result<bool> {
252
+ let conn = self.get_inner_connection()?;
253
+ Ok(conn.get_auto_commit())
254
+ }
255
+
256
+ /// Sets maximum total accumuated timeout. If the duration is None or Zero, we unset the busy handler for this Connection
257
+ ///
258
+ /// This api defers slighty from: https://www.sqlite.org/c3ref/busy_timeout.html
259
+ ///
260
+ /// Instead of sleeping for linear amount of time specified by the user,
261
+ /// we will sleep in phases, until the the total amount of time is reached.
262
+ /// This means we first sleep of 1ms, then if we still return busy, we sleep for 2 ms, and repeat until a maximum of 100 ms per phase.
263
+ ///
264
+ /// Example:
265
+ /// 1. Set duration to 5ms
266
+ /// 2. Step through query -> returns Busy -> sleep/yield for 1 ms
267
+ /// 3. Step through query -> returns Busy -> sleep/yield for 2 ms
268
+ /// 4. Step through query -> returns Busy -> sleep/yield for 2 ms (totaling 5 ms of sleep)
269
+ /// 5. Step through query -> returns Busy -> return Busy to user
270
+ pub fn busy_timeout(&self, duration: std::time::Duration) -> Result<()> {
271
+ let conn = self.get_inner_connection()?;
272
+ conn.set_busy_timeout(duration);
273
+ Ok(())
274
+ }
275
+ }
276
+
277
+ impl Debug for Connection {
278
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
279
+ f.debug_struct("Connection").finish()
280
+ }
281
+ }