pyturso 0.4.0rc14__tar.gz → 0.4.0rc16__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 (282) hide show
  1. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/Cargo.lock +30 -30
  2. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/Cargo.toml +20 -20
  3. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/PKG-INFO +5 -2
  4. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/README.md +4 -1
  5. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/src/turso_sync.rs +8 -8
  6. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/tests/test_database_sync.py +1 -1
  7. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/tests/test_database_sync_aio.py +1 -1
  8. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/functions/datetime.rs +31 -2
  9. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/expr_compiler.rs +1 -1
  10. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/cursor.rs +2 -0
  11. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/database/checkpoint_state_machine.rs +7 -9
  12. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/schema.rs +8 -0
  13. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/expr.rs +1 -1
  14. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/insert.rs +33 -23
  15. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/mod.rs +1 -1
  16. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/join.rs +209 -0
  17. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/trigger_exec.rs +2 -1
  18. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/builder.rs +66 -57
  19. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/execute.rs +46 -15
  20. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/value.rs +9 -0
  21. pyturso-0.4.0rc16/sdk-kit/src/bindings.rs +376 -0
  22. pyturso-0.4.0rc16/sdk-kit/src/capi.rs +1116 -0
  23. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/src/rsapi.rs +154 -132
  24. pyturso-0.4.0rc16/sdk-kit/turso.h +292 -0
  25. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/bindgen.sh +5 -0
  26. pyturso-0.4.0rc16/sync/sdk-kit/src/bindings.rs +461 -0
  27. pyturso-0.4.0rc16/sync/sdk-kit/src/capi.rs +670 -0
  28. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/src/rsapi.rs +37 -34
  29. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/src/sync_engine_io.rs +57 -42
  30. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/src/turso_async_operation.rs +79 -72
  31. pyturso-0.4.0rc16/sync/sdk-kit/turso_sync.h +336 -0
  32. pyturso-0.4.0rc14/sdk-kit/src/bindings.rs +0 -701
  33. pyturso-0.4.0rc14/sdk-kit/src/capi.rs +0 -1319
  34. pyturso-0.4.0rc14/sdk-kit/turso.h +0 -306
  35. pyturso-0.4.0rc14/sync/sdk-kit/src/bindings.rs +0 -730
  36. pyturso-0.4.0rc14/sync/sdk-kit/src/capi.rs +0 -615
  37. pyturso-0.4.0rc14/sync/sdk-kit/turso_sync.h +0 -324
  38. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/Cargo.toml +0 -0
  39. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/build.rs +0 -0
  40. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/example.py +0 -0
  41. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-db-aio.mdx +0 -0
  42. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-db.mdx +0 -0
  43. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-sync-aio.mdx +0 -0
  44. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-sync.mdx +0 -0
  45. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-tests-aio.mdx +0 -0
  46. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/py-bindings-tests.mdx +0 -0
  47. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/requirements-dev.txt +0 -0
  48. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/requirements.txt +0 -0
  49. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/src/lib.rs +0 -0
  50. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/src/turso.rs +0 -0
  51. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/tests/__init__.py +0 -0
  52. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/tests/test_database.py +0 -0
  53. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/tests/test_database_aio.py +0 -0
  54. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/__init__.py +0 -0
  55. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/aio/__init__.py +0 -0
  56. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/aio/sync/__init__.py +0 -0
  57. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/lib.py +0 -0
  58. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/lib_aio.py +0 -0
  59. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/lib_sync.py +0 -0
  60. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/lib_sync_aio.py +0 -0
  61. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/py.typed +0 -0
  62. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/sync/__init__.py +0 -0
  63. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/python/turso/worker.py +0 -0
  64. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/Cargo.toml +0 -0
  65. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/README.md +0 -0
  66. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/examples/example.rs +0 -0
  67. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/examples/example_struct.rs +0 -0
  68. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/src/lib.rs +0 -0
  69. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/src/params.rs +0 -0
  70. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/src/rows.rs +0 -0
  71. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/src/transaction.rs +0 -0
  72. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/src/value.rs +0 -0
  73. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/bindings/rust/tests/integration_tests.rs +0 -0
  74. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/Cargo.toml +0 -0
  75. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/assert.rs +0 -0
  76. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/benches/benchmark.rs +0 -0
  77. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/benches/json_benchmark.rs +0 -0
  78. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/benches/mvcc_benchmark.rs +0 -0
  79. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/benches/tpc_h_benchmark.rs +0 -0
  80. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/build.rs +0 -0
  81. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/error.rs +0 -0
  82. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/ext/dynamic.rs +0 -0
  83. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/ext/mod.rs +0 -0
  84. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/ext/vtab_xconnect.rs +0 -0
  85. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/fast_lock.rs +0 -0
  86. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/function.rs +0 -0
  87. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/functions/mod.rs +0 -0
  88. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/functions/printf.rs +0 -0
  89. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/functions/strftime.rs +0 -0
  90. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/aggregate_operator.rs +0 -0
  91. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/compiler.rs +0 -0
  92. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/cursor.rs +0 -0
  93. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/dbsp.rs +0 -0
  94. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/filter_operator.rs +0 -0
  95. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/input_operator.rs +0 -0
  96. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/join_operator.rs +0 -0
  97. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/merge_operator.rs +0 -0
  98. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/mod.rs +0 -0
  99. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/operator.rs +0 -0
  100. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/persistence.rs +0 -0
  101. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/project_operator.rs +0 -0
  102. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/incremental/view.rs +0 -0
  103. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/index_method/backing_btree.rs +0 -0
  104. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/index_method/mod.rs +0 -0
  105. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/index_method/toy_vector_sparse_ivf.rs +0 -0
  106. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/info.rs +0 -0
  107. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/clock.rs +0 -0
  108. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/common.rs +0 -0
  109. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/completions.rs +0 -0
  110. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/generic.rs +0 -0
  111. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/io_uring.rs +0 -0
  112. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/memory.rs +0 -0
  113. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/mod.rs +0 -0
  114. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/unix.rs +0 -0
  115. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/vfs.rs +0 -0
  116. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/io/windows.rs +0 -0
  117. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/cache.rs +0 -0
  118. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/error.rs +0 -0
  119. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/jsonb.rs +0 -0
  120. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/mod.rs +0 -0
  121. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/ops.rs +0 -0
  122. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/path.rs +0 -0
  123. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/json/vtab.rs +0 -0
  124. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/lib.rs +0 -0
  125. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/clock.rs +0 -0
  126. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/database/mod.rs +0 -0
  127. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/database/tests.rs +0 -0
  128. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/mod.rs +0 -0
  129. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/persistent_storage/logical_log.rs +0 -0
  130. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/mvcc/persistent_storage/mod.rs +0 -0
  131. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/numeric/mod.rs +0 -0
  132. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/numeric/nonnan.rs +0 -0
  133. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/parameters.rs +0 -0
  134. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/pragma.rs +0 -0
  135. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/pseudo.rs +0 -0
  136. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/series.rs +0 -0
  137. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/state_machine.rs +0 -0
  138. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/stats.rs +0 -0
  139. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/btree.rs +0 -0
  140. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/buffer_pool.rs +0 -0
  141. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/checksum.rs +0 -0
  142. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/database.rs +0 -0
  143. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/encryption.rs +0 -0
  144. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/mod.rs +0 -0
  145. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/page_cache.rs +0 -0
  146. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/pager.rs +0 -0
  147. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/slot_bitmap.rs +0 -0
  148. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/sqlite3_ondisk.rs +0 -0
  149. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/state_machines.rs +0 -0
  150. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/subjournal.rs +0 -0
  151. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/storage/wal.rs +0 -0
  152. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/time/internal.rs +0 -0
  153. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/time/mod.rs +0 -0
  154. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/aggregation.rs +0 -0
  155. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/alter.rs +0 -0
  156. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/analyze.rs +0 -0
  157. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/attach.rs +0 -0
  158. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/collate.rs +0 -0
  159. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/compound_select.rs +0 -0
  160. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/delete.rs +0 -0
  161. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/display.rs +0 -0
  162. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/emitter.rs +0 -0
  163. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/expression_index.rs +0 -0
  164. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/fkeys.rs +0 -0
  165. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/group_by.rs +0 -0
  166. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/index.rs +0 -0
  167. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/integrity_check.rs +0 -0
  168. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/logical.rs +0 -0
  169. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/main_loop.rs +0 -0
  170. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/OPTIMIZER.md +0 -0
  171. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/access_method.rs +0 -0
  172. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/constraints.rs +0 -0
  173. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/cost.rs +0 -0
  174. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/lift_common_subexpressions.rs +0 -0
  175. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/mod.rs +0 -0
  176. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/optimizer/order.rs +0 -0
  177. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/order_by.rs +0 -0
  178. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/plan.rs +0 -0
  179. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/planner.rs +0 -0
  180. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/pragma.rs +0 -0
  181. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/result_row.rs +0 -0
  182. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/rollback.rs +0 -0
  183. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/schema.rs +0 -0
  184. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/select.rs +0 -0
  185. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/subquery.rs +0 -0
  186. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/transaction.rs +0 -0
  187. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/trigger.rs +0 -0
  188. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/update.rs +0 -0
  189. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/upsert.rs +0 -0
  190. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/values.rs +0 -0
  191. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/view.rs +0 -0
  192. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/translate/window.rs +0 -0
  193. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/types.rs +0 -0
  194. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/util.rs +0 -0
  195. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/uuid.rs +0 -0
  196. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/affinity.rs +0 -0
  197. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/bloom_filter.rs +0 -0
  198. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/explain.rs +0 -0
  199. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/hash_table.rs +0 -0
  200. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/insn.rs +0 -0
  201. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/likeop.rs +0 -0
  202. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/metrics.rs +0 -0
  203. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/mod.rs +0 -0
  204. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/rowset.rs +0 -0
  205. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vdbe/sorter.rs +0 -0
  206. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/mod.rs +0 -0
  207. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/concat.rs +0 -0
  208. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/convert.rs +0 -0
  209. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/distance_cos.rs +0 -0
  210. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/distance_dot.rs +0 -0
  211. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/distance_l2.rs +0 -0
  212. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/jaccard.rs +0 -0
  213. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/mod.rs +0 -0
  214. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/serialize.rs +0 -0
  215. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/slice.rs +0 -0
  216. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/operations/text.rs +0 -0
  217. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vector/vector_types.rs +0 -0
  218. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/core/vtab.rs +0 -0
  219. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/Cargo.toml +0 -0
  220. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/README.md +0 -0
  221. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/build.rs +0 -0
  222. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/src/functions.rs +0 -0
  223. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/src/lib.rs +0 -0
  224. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/src/types.rs +0 -0
  225. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/src/vfs_modules.rs +0 -0
  226. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/extensions/core/src/vtabs.rs +0 -0
  227. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/Cargo.toml +0 -0
  228. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/atomic_enum.rs +0 -0
  229. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/agg_derive.rs +0 -0
  230. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/match_ignore_ascii_case.rs +0 -0
  231. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/mod.rs +0 -0
  232. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/scalars.rs +0 -0
  233. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/vfs_derive.rs +0 -0
  234. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/ext/vtab_derive.rs +0 -0
  235. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/lib.rs +0 -0
  236. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/macros/src/test.rs +0 -0
  237. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/Cargo.toml +0 -0
  238. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/README.md +0 -0
  239. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/benches/parser_benchmark.rs +0 -0
  240. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/ast/check.rs +0 -0
  241. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/ast/fmt.rs +0 -0
  242. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/ast.rs +0 -0
  243. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/error.rs +0 -0
  244. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/lexer.rs +0 -0
  245. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/lib.rs +0 -0
  246. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/parser.rs +0 -0
  247. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/parser/src/token.rs +0 -0
  248. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/pyproject.toml +0 -0
  249. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/Cargo.toml +0 -0
  250. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/README.md +0 -0
  251. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/bindgen.sh +0 -0
  252. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/readme-sdk-kit.mdx +0 -0
  253. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit/src/lib.rs +0 -0
  254. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit-macros/Cargo.toml +0 -0
  255. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sdk-kit-macros/src/lib.rs +0 -0
  256. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/.gitignore +0 -0
  257. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/Cargo.toml +0 -0
  258. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_replay_generator.rs +0 -0
  259. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_sync_engine.rs +0 -0
  260. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_sync_engine_io.rs +0 -0
  261. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_sync_lazy_storage.rs +0 -0
  262. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_sync_operations.rs +0 -0
  263. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/database_tape.rs +0 -0
  264. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/errors.rs +0 -0
  265. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/io_operations.rs +0 -0
  266. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/lib.rs +0 -0
  267. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/server_proto.rs +0 -0
  268. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/sparse_io.rs +0 -0
  269. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/types.rs +0 -0
  270. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/engine/src/wal_session.rs +0 -0
  271. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/Cargo.toml +0 -0
  272. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/sync/sdk-kit/src/lib.rs +0 -0
  273. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/__init__.py +0 -0
  274. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/aio/__init__.py +0 -0
  275. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/aio/sync/__init__.py +0 -0
  276. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/lib.py +0 -0
  277. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/lib_aio.py +0 -0
  278. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/lib_sync.py +0 -0
  279. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/lib_sync_aio.py +0 -0
  280. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/py.typed +0 -0
  281. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/sync/__init__.py +0 -0
  282. {pyturso-0.4.0rc14 → pyturso-0.4.0rc16}/turso/worker.py +0 -0
@@ -886,7 +886,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
886
886
 
887
887
  [[package]]
888
888
  name = "core_tester"
889
- version = "0.4.0-pre.14"
889
+ version = "0.4.0-pre.16"
890
890
  dependencies = [
891
891
  "anyhow",
892
892
  "assert_cmd",
@@ -2641,7 +2641,7 @@ dependencies = [
2641
2641
 
2642
2642
  [[package]]
2643
2643
  name = "limbo_completion"
2644
- version = "0.4.0-pre.14"
2644
+ version = "0.4.0-pre.16"
2645
2645
  dependencies = [
2646
2646
  "mimalloc",
2647
2647
  "turso_ext",
@@ -2649,7 +2649,7 @@ dependencies = [
2649
2649
 
2650
2650
  [[package]]
2651
2651
  name = "limbo_crypto"
2652
- version = "0.4.0-pre.14"
2652
+ version = "0.4.0-pre.16"
2653
2653
  dependencies = [
2654
2654
  "blake3",
2655
2655
  "data-encoding",
@@ -2662,7 +2662,7 @@ dependencies = [
2662
2662
 
2663
2663
  [[package]]
2664
2664
  name = "limbo_csv"
2665
- version = "0.4.0-pre.14"
2665
+ version = "0.4.0-pre.16"
2666
2666
  dependencies = [
2667
2667
  "csv",
2668
2668
  "mimalloc",
@@ -2672,7 +2672,7 @@ dependencies = [
2672
2672
 
2673
2673
  [[package]]
2674
2674
  name = "limbo_fuzzy"
2675
- version = "0.4.0-pre.14"
2675
+ version = "0.4.0-pre.16"
2676
2676
  dependencies = [
2677
2677
  "mimalloc",
2678
2678
  "turso_ext",
@@ -2680,7 +2680,7 @@ dependencies = [
2680
2680
 
2681
2681
  [[package]]
2682
2682
  name = "limbo_ipaddr"
2683
- version = "0.4.0-pre.14"
2683
+ version = "0.4.0-pre.16"
2684
2684
  dependencies = [
2685
2685
  "ipnetwork",
2686
2686
  "mimalloc",
@@ -2689,7 +2689,7 @@ dependencies = [
2689
2689
 
2690
2690
  [[package]]
2691
2691
  name = "limbo_percentile"
2692
- version = "0.4.0-pre.14"
2692
+ version = "0.4.0-pre.16"
2693
2693
  dependencies = [
2694
2694
  "mimalloc",
2695
2695
  "turso_ext",
@@ -2697,7 +2697,7 @@ dependencies = [
2697
2697
 
2698
2698
  [[package]]
2699
2699
  name = "limbo_regexp"
2700
- version = "0.4.0-pre.14"
2700
+ version = "0.4.0-pre.16"
2701
2701
  dependencies = [
2702
2702
  "mimalloc",
2703
2703
  "regex",
@@ -2706,7 +2706,7 @@ dependencies = [
2706
2706
 
2707
2707
  [[package]]
2708
2708
  name = "limbo_sim"
2709
- version = "0.4.0-pre.14"
2709
+ version = "0.4.0-pre.16"
2710
2710
  dependencies = [
2711
2711
  "anyhow",
2712
2712
  "bitflags 2.9.4",
@@ -2743,7 +2743,7 @@ dependencies = [
2743
2743
 
2744
2744
  [[package]]
2745
2745
  name = "limbo_sqlite_test_ext"
2746
- version = "0.4.0-pre.14"
2746
+ version = "0.4.0-pre.16"
2747
2747
  dependencies = [
2748
2748
  "cc",
2749
2749
  ]
@@ -3569,7 +3569,7 @@ dependencies = [
3569
3569
 
3570
3570
  [[package]]
3571
3571
  name = "py-turso"
3572
- version = "0.4.0-pre.14"
3572
+ version = "0.4.0-pre.16"
3573
3573
  dependencies = [
3574
3574
  "anyhow",
3575
3575
  "pyo3",
@@ -4329,7 +4329,7 @@ checksum = "d372029cb5195f9ab4e4b9aef550787dce78b124fcaee8d82519925defcd6f0d"
4329
4329
 
4330
4330
  [[package]]
4331
4331
  name = "sql_generation"
4332
- version = "0.4.0-pre.14"
4332
+ version = "0.4.0-pre.16"
4333
4333
  dependencies = [
4334
4334
  "anarchist-readable-name-generator-lib 0.2.0",
4335
4335
  "anyhow",
@@ -4957,7 +4957,7 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
4957
4957
 
4958
4958
  [[package]]
4959
4959
  name = "turso"
4960
- version = "0.4.0-pre.14"
4960
+ version = "0.4.0-pre.16"
4961
4961
  dependencies = [
4962
4962
  "mimalloc",
4963
4963
  "rand 0.9.2",
@@ -4972,7 +4972,7 @@ dependencies = [
4972
4972
 
4973
4973
  [[package]]
4974
4974
  name = "turso-java"
4975
- version = "0.4.0-pre.14"
4975
+ version = "0.4.0-pre.16"
4976
4976
  dependencies = [
4977
4977
  "jni",
4978
4978
  "thiserror 2.0.16",
@@ -4981,7 +4981,7 @@ dependencies = [
4981
4981
 
4982
4982
  [[package]]
4983
4983
  name = "turso_cli"
4984
- version = "0.4.0-pre.14"
4984
+ version = "0.4.0-pre.16"
4985
4985
  dependencies = [
4986
4986
  "anyhow",
4987
4987
  "cfg-if",
@@ -5017,7 +5017,7 @@ dependencies = [
5017
5017
 
5018
5018
  [[package]]
5019
5019
  name = "turso_core"
5020
- version = "0.4.0-pre.14"
5020
+ version = "0.4.0-pre.16"
5021
5021
  dependencies = [
5022
5022
  "aegis",
5023
5023
  "aes",
@@ -5082,7 +5082,7 @@ dependencies = [
5082
5082
 
5083
5083
  [[package]]
5084
5084
  name = "turso_dart"
5085
- version = "0.4.0-pre.14"
5085
+ version = "0.4.0-pre.16"
5086
5086
  dependencies = [
5087
5087
  "flutter_rust_bridge",
5088
5088
  "turso_core",
@@ -5090,7 +5090,7 @@ dependencies = [
5090
5090
 
5091
5091
  [[package]]
5092
5092
  name = "turso_ext"
5093
- version = "0.4.0-pre.14"
5093
+ version = "0.4.0-pre.16"
5094
5094
  dependencies = [
5095
5095
  "chrono",
5096
5096
  "getrandom 0.3.2",
@@ -5099,7 +5099,7 @@ dependencies = [
5099
5099
 
5100
5100
  [[package]]
5101
5101
  name = "turso_ext_tests"
5102
- version = "0.4.0-pre.14"
5102
+ version = "0.4.0-pre.16"
5103
5103
  dependencies = [
5104
5104
  "env_logger 0.11.7",
5105
5105
  "lazy_static",
@@ -5110,7 +5110,7 @@ dependencies = [
5110
5110
 
5111
5111
  [[package]]
5112
5112
  name = "turso_macros"
5113
- version = "0.4.0-pre.14"
5113
+ version = "0.4.0-pre.16"
5114
5114
  dependencies = [
5115
5115
  "proc-macro2",
5116
5116
  "quote",
@@ -5119,7 +5119,7 @@ dependencies = [
5119
5119
 
5120
5120
  [[package]]
5121
5121
  name = "turso_node"
5122
- version = "0.4.0-pre.14"
5122
+ version = "0.4.0-pre.16"
5123
5123
  dependencies = [
5124
5124
  "chrono",
5125
5125
  "napi",
@@ -5132,7 +5132,7 @@ dependencies = [
5132
5132
 
5133
5133
  [[package]]
5134
5134
  name = "turso_parser"
5135
- version = "0.4.0-pre.14"
5135
+ version = "0.4.0-pre.16"
5136
5136
  dependencies = [
5137
5137
  "bitflags 2.9.4",
5138
5138
  "criterion",
@@ -5148,7 +5148,7 @@ dependencies = [
5148
5148
 
5149
5149
  [[package]]
5150
5150
  name = "turso_sdk_kit"
5151
- version = "0.4.0-pre.14"
5151
+ version = "0.4.0-pre.16"
5152
5152
  dependencies = [
5153
5153
  "bindgen",
5154
5154
  "env_logger 0.11.7",
@@ -5161,7 +5161,7 @@ dependencies = [
5161
5161
 
5162
5162
  [[package]]
5163
5163
  name = "turso_sdk_kit_macros"
5164
- version = "0.4.0-pre.14"
5164
+ version = "0.4.0-pre.16"
5165
5165
  dependencies = [
5166
5166
  "proc-macro2",
5167
5167
  "quote",
@@ -5170,7 +5170,7 @@ dependencies = [
5170
5170
 
5171
5171
  [[package]]
5172
5172
  name = "turso_sqlite3"
5173
- version = "0.4.0-pre.14"
5173
+ version = "0.4.0-pre.16"
5174
5174
  dependencies = [
5175
5175
  "env_logger 0.11.7",
5176
5176
  "libc",
@@ -5183,7 +5183,7 @@ dependencies = [
5183
5183
 
5184
5184
  [[package]]
5185
5185
  name = "turso_stress"
5186
- version = "0.4.0-pre.14"
5186
+ version = "0.4.0-pre.16"
5187
5187
  dependencies = [
5188
5188
  "anarchist-readable-name-generator-lib 0.1.2",
5189
5189
  "antithesis_sdk",
@@ -5200,7 +5200,7 @@ dependencies = [
5200
5200
 
5201
5201
  [[package]]
5202
5202
  name = "turso_sync_engine"
5203
- version = "0.4.0-pre.14"
5203
+ version = "0.4.0-pre.16"
5204
5204
  dependencies = [
5205
5205
  "base64 0.22.1",
5206
5206
  "bytes",
@@ -5228,7 +5228,7 @@ dependencies = [
5228
5228
 
5229
5229
  [[package]]
5230
5230
  name = "turso_sync_js"
5231
- version = "0.4.0-pre.14"
5231
+ version = "0.4.0-pre.16"
5232
5232
  dependencies = [
5233
5233
  "genawaiter",
5234
5234
  "napi",
@@ -5243,7 +5243,7 @@ dependencies = [
5243
5243
 
5244
5244
  [[package]]
5245
5245
  name = "turso_sync_sdk_kit"
5246
- version = "0.4.0-pre.14"
5246
+ version = "0.4.0-pre.16"
5247
5247
  dependencies = [
5248
5248
  "bindgen",
5249
5249
  "env_logger 0.11.7",
@@ -5260,7 +5260,7 @@ dependencies = [
5260
5260
 
5261
5261
  [[package]]
5262
5262
  name = "turso_whopper"
5263
- version = "0.4.0-pre.14"
5263
+ version = "0.4.0-pre.16"
5264
5264
  dependencies = [
5265
5265
  "anyhow",
5266
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.14"
9
+ version = "0.4.0-pre.16"
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.14" }
17
- turso_node = { path = "bindings/javascript", version = "0.4.0-pre.14" }
18
- turso_sdk_kit = { path = "sdk-kit", version = "0.4.0-pre.14" }
19
- turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.0-pre.14" }
20
- turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.0-pre.14" }
21
- limbo_completion = { path = "extensions/completion", version = "0.4.0-pre.14" }
22
- turso_core = { path = "core", version = "0.4.0-pre.14" }
23
- turso_sync_engine = { path = "sync/engine", version = "0.4.0-pre.14" }
24
- limbo_crypto = { path = "extensions/crypto", version = "0.4.0-pre.14" }
25
- limbo_csv = { path = "extensions/csv", version = "0.4.0-pre.14" }
26
- turso_ext = { path = "extensions/core", version = "0.4.0-pre.14" }
27
- turso_ext_tests = { path = "extensions/tests", version = "0.4.0-pre.14" }
28
- limbo_ipaddr = { path = "extensions/ipaddr", version = "0.4.0-pre.14" }
29
- turso_macros = { path = "macros", version = "0.4.0-pre.14" }
30
- limbo_percentile = { path = "extensions/percentile", version = "0.4.0-pre.14" }
31
- limbo_regexp = { path = "extensions/regexp", version = "0.4.0-pre.14" }
32
- limbo_uuid = { path = "extensions/uuid", version = "0.4.0-pre.14" }
33
- turso_parser = { path = "parser", version = "0.4.0-pre.14" }
34
- limbo_fuzzy = { path = "extensions/fuzzy", version = "0.4.0-pre.14" }
16
+ turso = { path = "bindings/rust", version = "0.4.0-pre.16" }
17
+ turso_node = { path = "bindings/javascript", version = "0.4.0-pre.16" }
18
+ turso_sdk_kit = { path = "sdk-kit", version = "0.4.0-pre.16" }
19
+ turso_sdk_kit_macros = { path = "sdk-kit-macros", version = "0.4.0-pre.16" }
20
+ turso_sync_sdk_kit = { path = "sync/sdk-kit", version = "0.4.0-pre.16" }
21
+ limbo_completion = { path = "extensions/completion", version = "0.4.0-pre.16" }
22
+ turso_core = { path = "core", version = "0.4.0-pre.16" }
23
+ turso_sync_engine = { path = "sync/engine", version = "0.4.0-pre.16" }
24
+ limbo_crypto = { path = "extensions/crypto", version = "0.4.0-pre.16" }
25
+ limbo_csv = { path = "extensions/csv", version = "0.4.0-pre.16" }
26
+ turso_ext = { path = "extensions/core", version = "0.4.0-pre.16" }
27
+ turso_ext_tests = { path = "extensions/tests", version = "0.4.0-pre.16" }
28
+ limbo_ipaddr = { path = "extensions/ipaddr", version = "0.4.0-pre.16" }
29
+ turso_macros = { path = "macros", version = "0.4.0-pre.16" }
30
+ limbo_percentile = { path = "extensions/percentile", version = "0.4.0-pre.16" }
31
+ limbo_regexp = { path = "extensions/regexp", version = "0.4.0-pre.16" }
32
+ limbo_uuid = { path = "extensions/uuid", version = "0.4.0-pre.16" }
33
+ turso_parser = { path = "parser", version = "0.4.0-pre.16" }
34
+ limbo_fuzzy = { path = "extensions/fuzzy", version = "0.4.0-pre.16" }
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.0rc14
3
+ Version: 0.4.0rc16
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3
@@ -163,7 +163,10 @@ import turso.sync
163
163
  conn = turso.sync.connect(
164
164
  "local.db",
165
165
  remote_url="https://<db>.<region>.turso.io",
166
- partial_boostrap_strategy=turso.sync.PartialSyncPrefixBootstrap(128 * 1024), # fetch first 128 KiB upfront
166
+ # fetch first 128 KiB upfront
167
+ partial_sync_opts=turso.sync.PartialSyncOpts(
168
+ bootstrap_strategy=turso.sync.PartialSyncPrefixBootstrap(length=128 * 1024),
169
+ ),
167
170
  )
168
171
  ```
169
172
 
@@ -128,7 +128,10 @@ import turso.sync
128
128
  conn = turso.sync.connect(
129
129
  "local.db",
130
130
  remote_url="https://<db>.<region>.turso.io",
131
- partial_boostrap_strategy=turso.sync.PartialSyncPrefixBootstrap(128 * 1024), # fetch first 128 KiB upfront
131
+ # fetch first 128 KiB upfront
132
+ partial_sync_opts=turso.sync.PartialSyncOpts(
133
+ bootstrap_strategy=turso.sync.PartialSyncPrefixBootstrap(length=128 * 1024),
134
+ ),
132
135
  )
133
136
  ```
134
137
 
@@ -264,13 +264,13 @@ impl PyTursoAsyncOperation {
264
264
  /// If returns Ok(None) - operation is not finished yet and must be resumed after one iteration of sync engine IO
265
265
  /// If returns Ok(Some(...)) - operation is finished and result must be processed accordingly
266
266
  pub fn resume(&self, py: Python) -> PyResult<Option<PyTursoAsyncOperationResult>> {
267
- let mut result = self.operation.resume().map_err(turso_error_to_py_err)?;
268
- if result.status == TursoStatusCode::Io {
267
+ let result = self.operation.resume().map_err(turso_error_to_py_err)?;
268
+ if result == TursoStatusCode::Io {
269
269
  Ok(None)
270
- } else if result.status == TursoStatusCode::Done {
271
- let result = result.result.take();
270
+ } else if result == TursoStatusCode::Done {
271
+ let result = self.operation.take_result();
272
272
  match result {
273
- Some(TursoAsyncOperationResult::Changes { changes }) => {
273
+ Ok(TursoAsyncOperationResult::Changes { changes }) => {
274
274
  Ok(Some(PyTursoAsyncOperationResult {
275
275
  kind: PyTursoAsyncOperationResultKind::Changes,
276
276
  changes: Some(pyo3::Py::new(
@@ -283,7 +283,7 @@ impl PyTursoAsyncOperation {
283
283
  stats: None,
284
284
  }))
285
285
  }
286
- Some(TursoAsyncOperationResult::Connection { connection }) => {
286
+ Ok(TursoAsyncOperationResult::Connection { connection }) => {
287
287
  Ok(Some(PyTursoAsyncOperationResult {
288
288
  kind: PyTursoAsyncOperationResultKind::Connection,
289
289
  changes: None,
@@ -291,7 +291,7 @@ impl PyTursoAsyncOperation {
291
291
  stats: None,
292
292
  }))
293
293
  }
294
- Some(TursoAsyncOperationResult::Stats { stats }) => {
294
+ Ok(TursoAsyncOperationResult::Stats { stats }) => {
295
295
  Ok(Some(PyTursoAsyncOperationResult {
296
296
  kind: PyTursoAsyncOperationResultKind::Stats,
297
297
  changes: None,
@@ -311,7 +311,7 @@ impl PyTursoAsyncOperation {
311
311
  )?),
312
312
  }))
313
313
  }
314
- None => Ok(Some(PyTursoAsyncOperationResult {
314
+ Err(..) => Ok(Some(PyTursoAsyncOperationResult {
315
315
  kind: PyTursoAsyncOperationResultKind::No,
316
316
  changes: None,
317
317
  connection: None,
@@ -170,7 +170,7 @@ def test_partial_sync():
170
170
  ),
171
171
  )
172
172
  assert conn_partial.execute("SELECT LENGTH(x) FROM t LIMIT 1").fetchall() == [(1024,)]
173
- assert conn_partial.stats().network_received_bytes < 256 * 1024 * 1024
173
+ assert conn_partial.stats().network_received_bytes < 256 * (1024 + 10)
174
174
 
175
175
  start = time.time()
176
176
  assert conn_partial.execute("SELECT SUM(LENGTH(x)) FROM t").fetchall() == [(2000 * 1024,)]
@@ -174,7 +174,7 @@ async def test_partial_sync():
174
174
  ),
175
175
  )
176
176
  assert await (await conn_partial.execute("SELECT LENGTH(x) FROM t LIMIT 1")).fetchall() == [(1024,)]
177
- assert (await conn_partial.stats()).network_received_bytes < 256 * 1024 * 1024
177
+ assert (await conn_partial.stats()).network_received_bytes < 256 * (1024 + 10)
178
178
 
179
179
  start = time.time()
180
180
  assert await (await conn_partial.execute("SELECT SUM(LENGTH(x)) FROM t")).fetchall() == [(2000 * 1024,)]
@@ -669,10 +669,16 @@ fn parse_modifier_time(s: &str) -> Result<NaiveTime> {
669
669
  fn parse_modifier(modifier: &str) -> Result<Modifier> {
670
670
  // Small helpers to check string suffix/prefix in a case-insensitive way with no allocation
671
671
  fn ends_with_ignore_ascii_case(s: &str, suffix: &str) -> bool {
672
- s.len() >= suffix.len() && s[s.len() - suffix.len()..].eq_ignore_ascii_case(suffix)
672
+ // suffix is always ASCII, so suffix.len() is the char count
673
+ // But s might have multi-byte UTF-8 chars, so we need to check char boundary
674
+ let start = s.len().saturating_sub(suffix.len());
675
+ s.is_char_boundary(start) && s[start..].eq_ignore_ascii_case(suffix)
673
676
  }
674
677
  fn starts_with_ignore_ascii_case(s: &str, prefix: &str) -> bool {
675
- s.len() >= prefix.len() && s[..prefix.len()].eq_ignore_ascii_case(prefix)
678
+ // prefix is always ASCII, so prefix.len() is the char count
679
+ s.is_char_boundary(prefix.len())
680
+ && s.len() >= prefix.len()
681
+ && s[..prefix.len()].eq_ignore_ascii_case(prefix)
676
682
  }
677
683
 
678
684
  let modifier = modifier.trim();
@@ -1998,4 +2004,27 @@ mod tests {
1998
2004
  "Case insensitivity check failed"
1999
2005
  );
2000
2006
  }
2007
+
2008
+ #[test]
2009
+ fn test_parse_modifier_unicode_no_panic() {
2010
+ // Regression test: parse_modifier should not panic on multi-byte UTF-8 strings
2011
+ // that are shorter than expected modifier suffixes when measured in bytes
2012
+ let unicode_inputs = [
2013
+ "!*\u{ea37}", // <-- this produced a crash in SQLancer :]
2014
+ "\u{1F600}", // Emoji (4 bytes)
2015
+ "日本語", // Japanese text
2016
+ "中", // Single Chinese character
2017
+ "\u{0080}", // 2-byte UTF-8
2018
+ "", // Empty string
2019
+ ];
2020
+
2021
+ for input in unicode_inputs {
2022
+ // Should not panic - just return an error for invalid modifiers
2023
+ let result = parse_modifier(input);
2024
+ assert!(
2025
+ result.is_err(),
2026
+ "Expected error for invalid modifier: {input}"
2027
+ );
2028
+ }
2029
+ }
2001
2030
  }
@@ -404,7 +404,7 @@ impl CompiledExpression {
404
404
  });
405
405
 
406
406
  // Build the program from the compiled expression bytecode
407
- let program = Arc::new(builder.build(connection, false, ""));
407
+ let program = Arc::new(builder.build(connection, false, "")?);
408
408
 
409
409
  Ok(CompiledExpression {
410
410
  executor: ExpressionExecutor::Compiled(program),
@@ -951,6 +951,7 @@ impl<Clock: LogicalClock + 'static> CursorTrait for MvccLazyCursor<Clock> {
951
951
  }
952
952
  }
953
953
  CursorPosition::End => {
954
+ self.state.replace(None);
954
955
  return Ok(IOResult::Done(false));
955
956
  }
956
957
  };
@@ -1047,6 +1048,7 @@ impl<Clock: LogicalClock + 'static> CursorTrait for MvccLazyCursor<Clock> {
1047
1048
  }
1048
1049
  }
1049
1050
  CursorPosition::BeforeFirst => {
1051
+ self.state.replace(None);
1050
1052
  return Ok(IOResult::Done(false));
1051
1053
  }
1052
1054
  };
@@ -205,7 +205,7 @@ impl<Clock: LogicalClock> CheckpointStateMachine<Clock> {
205
205
  begin_ts = Some(b);
206
206
  if self
207
207
  .checkpointed_txid_max_old
208
- .is_some_and(|txid_max_old| b <= txid_max_old.into())
208
+ .is_none_or(|txid_max_old| b <= txid_max_old.into())
209
209
  {
210
210
  exists_in_db_file = true;
211
211
  }
@@ -229,11 +229,9 @@ impl<Clock: LogicalClock> CheckpointStateMachine<Clock> {
229
229
  // We need the `self.checkpointed_txid_max_old.is_none()` check as we may have not checkpointed yet,
230
230
  // and without this check, recovered rows could skipped accidently
231
231
  let is_uncheckpointed_insert = end_ts.is_none()
232
- && (self.checkpointed_txid_max_old.is_none()
233
- || begin_ts.is_some_and(|b| {
234
- self.checkpointed_txid_max_old
235
- .is_some_and(|txid_max_old| b > txid_max_old.into())
236
- }));
232
+ && self
233
+ .checkpointed_txid_max_old
234
+ .is_none_or(|txid_max_old| begin_ts.is_some_and(|b| b > txid_max_old.into()));
237
235
  // - It is a delete, AND some version of the row exists in the database file.
238
236
  let is_delete_and_exists_in_db_file = end_ts.is_some() && exists_in_db_file;
239
237
  let should_checkpoint = is_uncheckpointed_insert || is_delete_and_exists_in_db_file;
@@ -1110,10 +1108,10 @@ impl<Clock: LogicalClock> CheckpointStateMachine<Clock> {
1110
1108
  self.connection.db.with_schema_mut(|schema| {
1111
1109
  for table in schema.tables.values_mut() {
1112
1110
  let table = Arc::get_mut(table).expect("this should be the only reference");
1113
- let Some(mut btree_table) = table.btree() else {
1111
+ let Some(btree_table) = table.btree_mut() else {
1114
1112
  continue;
1115
1113
  };
1116
- let btree_table = Arc::make_mut(&mut btree_table);
1114
+ let btree_table = Arc::make_mut(btree_table);
1117
1115
  if btree_table.root_page < 0 {
1118
1116
  btree_table.root_page = btree_table.root_page.abs();
1119
1117
  }
@@ -1134,7 +1132,7 @@ impl<Clock: LogicalClock> CheckpointStateMachine<Clock> {
1134
1132
  self.mvstore.global_header.write().replace(*header);
1135
1133
  IOResult::Done(())
1136
1134
  })
1137
- });
1135
+ })?;
1138
1136
  Ok(())
1139
1137
  })?;
1140
1138
 
@@ -1448,6 +1448,14 @@ impl Table {
1448
1448
  }
1449
1449
  }
1450
1450
 
1451
+ pub fn btree_mut(&mut self) -> Option<&mut Arc<BTreeTable>> {
1452
+ match self {
1453
+ Self::BTree(table) => Some(table),
1454
+ Self::Virtual(_) => None,
1455
+ Self::FromClauseSubquery(_) => None,
1456
+ }
1457
+ }
1458
+
1451
1459
  pub fn virtual_table(&self) -> Option<Arc<VirtualTable>> {
1452
1460
  match self {
1453
1461
  Self::Virtual(table) => Some(table.clone()),
@@ -806,7 +806,7 @@ pub fn translate_expr(
806
806
  }
807
807
  }
808
808
  ast::Expr::Between { .. } => {
809
- unreachable!("expression should have been rewritten in optmizer")
809
+ crate::bail_parse_error!("expression should have been rewritten in optmizer")
810
810
  }
811
811
  ast::Expr::Binary(e1, op, e2) => {
812
812
  binary_expr_shared(
@@ -972,6 +972,7 @@ fn emit_notnulls(
972
972
  resolver: &Resolver,
973
973
  ) -> Result<Option<BranchOffset>> {
974
974
  let on_replace = matches!(ctx.on_conflict, ResolveType::Replace);
975
+ let on_ignore = matches!(ctx.on_conflict, ResolveType::Ignore);
975
976
  let mut pending_resume_label = None;
976
977
  for column_mapping in insertion
977
978
  .col_mappings
@@ -1024,32 +1025,41 @@ fn emit_notnulls(
1024
1025
  }
1025
1026
  // OR REPLACE but no DEFAULT, fall through to ABORT behavior
1026
1027
  }
1027
- program.emit_insn(Insn::HaltIfNull {
1028
- target_reg: column_mapping.register,
1029
- err_code: SQLITE_CONSTRAINT_NOTNULL,
1030
- description: {
1031
- let mut description = String::with_capacity(
1032
- ctx.table.name.as_str().len()
1033
- + column_mapping
1028
+
1029
+ // For INSERT OR IGNORE, skip to the next row if NULL
1030
+ if on_ignore {
1031
+ program.emit_insn(Insn::IsNull {
1032
+ reg: column_mapping.register,
1033
+ target_pc: ctx.row_done_label,
1034
+ });
1035
+ } else {
1036
+ program.emit_insn(Insn::HaltIfNull {
1037
+ target_reg: column_mapping.register,
1038
+ err_code: SQLITE_CONSTRAINT_NOTNULL,
1039
+ description: {
1040
+ let mut description = String::with_capacity(
1041
+ ctx.table.name.as_str().len()
1042
+ + column_mapping
1043
+ .column
1044
+ .name
1045
+ .as_ref()
1046
+ .expect("Column name must be present")
1047
+ .len()
1048
+ + 2,
1049
+ );
1050
+ description.push_str(ctx.table.name.as_str());
1051
+ description.push('.');
1052
+ description.push_str(
1053
+ column_mapping
1034
1054
  .column
1035
1055
  .name
1036
1056
  .as_ref()
1037
- .expect("Column name must be present")
1038
- .len()
1039
- + 2,
1040
- );
1041
- description.push_str(ctx.table.name.as_str());
1042
- description.push('.');
1043
- description.push_str(
1044
- column_mapping
1045
- .column
1046
- .name
1047
- .as_ref()
1048
- .expect("Column name must be present"),
1049
- );
1050
- description
1051
- },
1052
- });
1057
+ .expect("Column name must be present"),
1058
+ );
1059
+ description
1060
+ },
1061
+ });
1062
+ }
1053
1063
  }
1054
1064
  Ok(pending_resume_label)
1055
1065
  }
@@ -108,7 +108,7 @@ pub fn translate(
108
108
 
109
109
  program.epilogue(schema);
110
110
 
111
- Ok(program.build(connection, change_cnt_on, input))
111
+ program.build(connection, change_cnt_on, input)
112
112
  }
113
113
 
114
114
  // TODO: for now leaving the return value as a Program. But ideally to support nested parsing of arbitraty