pyturso 0.3.0rc3__tar.gz → 0.3.0rc5__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.

Potentially problematic release.


This version of pyturso might be problematic. Click here for more details.

Files changed (197) hide show
  1. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/Cargo.lock +58 -41
  2. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/Cargo.toml +18 -18
  3. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/PKG-INFO +1 -1
  4. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/src/lib.rs +1 -1
  5. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/Cargo.toml +6 -6
  6. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/benches/benchmark.rs +113 -1
  7. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/error.rs +1 -0
  8. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/ext/mod.rs +16 -0
  9. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/functions/datetime.rs +86 -32
  10. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/aggregate_operator.rs +1301 -75
  11. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/compiler.rs +113 -53
  12. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/cursor.rs +6 -9
  13. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/operator.rs +596 -116
  14. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/persistence.rs +14 -5
  15. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/project_operator.rs +1 -1
  16. pyturso-0.3.0rc5/core/index_method/backing_btree.rs +45 -0
  17. pyturso-0.3.0rc5/core/index_method/mod.rs +171 -0
  18. pyturso-0.3.0rc5/core/index_method/toy_vector_sparse_ivf.rs +725 -0
  19. pyturso-0.3.0rc3/core/io/mod.rs → pyturso-0.3.0rc5/core/io/completions.rs +16 -327
  20. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/generic.rs +1 -3
  21. pyturso-0.3.0rc5/core/io/mod.rs +328 -0
  22. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/lib.rs +160 -88
  23. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/cursor.rs +81 -26
  24. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/database/checkpoint_state_machine.rs +7 -12
  25. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/database/mod.rs +2 -3
  26. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/database/tests.rs +50 -45
  27. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/mod.rs +5 -5
  28. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/persistent_storage/logical_log.rs +5 -5
  29. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/schema.rs +127 -34
  30. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/btree.rs +92 -196
  31. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/buffer_pool.rs +4 -4
  32. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/encryption.rs +32 -21
  33. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/mod.rs +1 -0
  34. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/page_cache.rs +4 -6
  35. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/pager.rs +383 -72
  36. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/slot_bitmap.rs +9 -7
  37. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/sqlite3_ondisk.rs +45 -6
  38. pyturso-0.3.0rc5/core/storage/subjournal.rs +88 -0
  39. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/wal.rs +278 -255
  40. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/aggregation.rs +1 -1
  41. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/collate.rs +2 -2
  42. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/compound_select.rs +1 -0
  43. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/display.rs +3 -2
  44. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/emitter.rs +29 -24
  45. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/expr.rs +239 -41
  46. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/fkeys.rs +71 -128
  47. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/index.rs +242 -213
  48. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/insert.rs +5 -4
  49. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/main_loop.rs +94 -41
  50. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/mod.rs +3 -17
  51. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/constraints.rs +6 -5
  52. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/join.rs +92 -36
  53. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/mod.rs +19 -5
  54. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/order_by.rs +212 -72
  55. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/plan.rs +145 -13
  56. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/planner.rs +70 -5
  57. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/pragma.rs +39 -0
  58. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/result_row.rs +18 -0
  59. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/select.rs +22 -0
  60. pyturso-0.3.0rc5/core/translate/subquery.rs +560 -0
  61. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/upsert.rs +5 -2
  62. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/values.rs +29 -0
  63. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/window.rs +1 -0
  64. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/util.rs +86 -4
  65. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/builder.rs +51 -0
  66. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/execute.rs +505 -235
  67. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/explain.rs +4 -4
  68. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/insn.rs +2 -2
  69. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/mod.rs +89 -20
  70. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/sorter.rs +0 -17
  71. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/mod.rs +2 -2
  72. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/concat.rs +14 -12
  73. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/convert.rs +12 -8
  74. pyturso-0.3.0rc5/core/vector/operations/distance_cos.rs +217 -0
  75. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/distance_l2.rs +74 -21
  76. pyturso-0.3.0rc5/core/vector/operations/serialize.rs +22 -0
  77. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/slice.rs +9 -5
  78. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/text.rs +11 -7
  79. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/vector_types.rs +78 -33
  80. pyturso-0.3.0rc5/macros/src/atomic_enum.rs +290 -0
  81. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/lib.rs +28 -0
  82. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/ast/fmt.rs +25 -0
  83. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/ast.rs +38 -0
  84. pyturso-0.3.0rc5/parser/src/error.rs +108 -0
  85. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/lexer.rs +125 -33
  86. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/parser.rs +121 -5
  87. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/token.rs +43 -0
  88. pyturso-0.3.0rc3/core/translate/subquery.rs +0 -139
  89. pyturso-0.3.0rc3/core/vector/operations/distance_cos.rs +0 -172
  90. pyturso-0.3.0rc3/core/vector/operations/serialize.rs +0 -19
  91. pyturso-0.3.0rc3/parser/src/error.rs +0 -52
  92. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/Cargo.toml +0 -0
  93. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/build.rs +0 -0
  94. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/example.py +0 -0
  95. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/requirements-dev.txt +0 -0
  96. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/requirements.txt +0 -0
  97. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/src/errors.rs +0 -0
  98. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/tests/__init__.py +0 -0
  99. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/tests/test_database.py +0 -0
  100. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/turso/__init__.py +0 -0
  101. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/bindings/python/turso/py.typed +0 -0
  102. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/assert.rs +0 -0
  103. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/benches/json_benchmark.rs +0 -0
  104. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/benches/mvcc_benchmark.rs +0 -0
  105. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/benches/tpc_h_benchmark.rs +0 -0
  106. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/build.rs +0 -0
  107. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/ext/dynamic.rs +0 -0
  108. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/ext/vtab_xconnect.rs +0 -0
  109. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/fast_lock.rs +0 -0
  110. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/function.rs +0 -0
  111. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/functions/mod.rs +0 -0
  112. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/functions/printf.rs +0 -0
  113. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/functions/strftime.rs +0 -0
  114. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/dbsp.rs +0 -0
  115. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/expr_compiler.rs +0 -0
  116. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/filter_operator.rs +0 -0
  117. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/input_operator.rs +0 -0
  118. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/join_operator.rs +0 -0
  119. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/merge_operator.rs +0 -0
  120. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/mod.rs +0 -0
  121. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/incremental/view.rs +0 -0
  122. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/info.rs +0 -0
  123. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/clock.rs +0 -0
  124. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/common.rs +0 -0
  125. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/io_uring.rs +0 -0
  126. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/memory.rs +0 -0
  127. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/unix.rs +0 -0
  128. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/vfs.rs +0 -0
  129. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/io/windows.rs +0 -0
  130. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/cache.rs +0 -0
  131. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/error.rs +0 -0
  132. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/jsonb.rs +0 -0
  133. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/mod.rs +0 -0
  134. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/ops.rs +0 -0
  135. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/path.rs +0 -0
  136. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/json/vtab.rs +0 -0
  137. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/clock.rs +0 -0
  138. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/mvcc/persistent_storage/mod.rs +0 -0
  139. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/numeric/mod.rs +0 -0
  140. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/numeric/nonnan.rs +0 -0
  141. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/parameters.rs +0 -0
  142. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/pragma.rs +0 -0
  143. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/pseudo.rs +0 -0
  144. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/series.rs +0 -0
  145. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/state_machine.rs +0 -0
  146. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/checksum.rs +0 -0
  147. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/database.rs +0 -0
  148. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/storage/state_machines.rs +0 -0
  149. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/time/internal.rs +0 -0
  150. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/time/mod.rs +0 -0
  151. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/alter.rs +0 -0
  152. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/analyze.rs +0 -0
  153. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/attach.rs +0 -0
  154. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/delete.rs +0 -0
  155. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/group_by.rs +0 -0
  156. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/integrity_check.rs +0 -0
  157. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/logical.rs +0 -0
  158. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/OPTIMIZER.md +0 -0
  159. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/access_method.rs +0 -0
  160. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/cost.rs +0 -0
  161. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/lift_common_subexpressions.rs +0 -0
  162. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/optimizer/order.rs +0 -0
  163. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/rollback.rs +0 -0
  164. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/schema.rs +0 -0
  165. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/transaction.rs +0 -0
  166. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/update.rs +0 -0
  167. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/translate/view.rs +0 -0
  168. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/types.rs +0 -0
  169. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/uuid.rs +0 -0
  170. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/likeop.rs +0 -0
  171. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vdbe/metrics.rs +0 -0
  172. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/jaccard.rs +0 -0
  173. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vector/operations/mod.rs +0 -0
  174. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/core/vtab.rs +0 -0
  175. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/Cargo.toml +0 -0
  176. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/README.md +0 -0
  177. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/build.rs +0 -0
  178. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/src/functions.rs +0 -0
  179. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/src/lib.rs +0 -0
  180. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/src/types.rs +0 -0
  181. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/src/vfs_modules.rs +0 -0
  182. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/extensions/core/src/vtabs.rs +0 -0
  183. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/Cargo.toml +0 -0
  184. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/agg_derive.rs +0 -0
  185. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/match_ignore_ascii_case.rs +0 -0
  186. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/mod.rs +0 -0
  187. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/scalars.rs +0 -0
  188. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/vfs_derive.rs +0 -0
  189. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/macros/src/ext/vtab_derive.rs +0 -0
  190. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/Cargo.toml +0 -0
  191. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/README.md +0 -0
  192. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/benches/parser_benchmark.rs +0 -0
  193. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/ast/check.rs +0 -0
  194. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/parser/src/lib.rs +0 -0
  195. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/pyproject.toml +0 -0
  196. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/turso/__init__.py +0 -0
  197. {pyturso-0.3.0rc3 → pyturso-0.3.0rc5}/turso/py.typed +0 -0
@@ -227,6 +227,12 @@ version = "1.0.98"
227
227
  source = "registry+https://github.com/rust-lang/crates.io-index"
228
228
  checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
229
229
 
230
+ [[package]]
231
+ name = "arc-swap"
232
+ version = "1.7.1"
233
+ source = "registry+https://github.com/rust-lang/crates.io-index"
234
+ checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457"
235
+
230
236
  [[package]]
231
237
  name = "arrayref"
232
238
  version = "0.3.9"
@@ -523,10 +529,11 @@ dependencies = [
523
529
 
524
530
  [[package]]
525
531
  name = "cc"
526
- version = "1.2.17"
532
+ version = "1.2.41"
527
533
  source = "registry+https://github.com/rust-lang/crates.io-index"
528
- checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
534
+ checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7"
529
535
  dependencies = [
536
+ "find-msvc-tools",
530
537
  "jobserver",
531
538
  "libc",
532
539
  "shlex",
@@ -821,7 +828,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
821
828
 
822
829
  [[package]]
823
830
  name = "core_tester"
824
- version = "0.3.0-pre.3"
831
+ version = "0.3.0-pre.5"
825
832
  dependencies = [
826
833
  "anyhow",
827
834
  "assert_cmd",
@@ -831,6 +838,7 @@ dependencies = [
831
838
  "rand 0.9.2",
832
839
  "rand_chacha 0.9.0",
833
840
  "rusqlite",
841
+ "sql_generation",
834
842
  "tempfile",
835
843
  "test-log",
836
844
  "tokio",
@@ -838,6 +846,7 @@ dependencies = [
838
846
  "tracing-subscriber",
839
847
  "turso",
840
848
  "turso_core",
849
+ "turso_parser",
841
850
  "twox-hash",
842
851
  "zerocopy 0.8.26",
843
852
  ]
@@ -1502,6 +1511,12 @@ dependencies = [
1502
1511
  "windows-sys 0.59.0",
1503
1512
  ]
1504
1513
 
1514
+ [[package]]
1515
+ name = "find-msvc-tools"
1516
+ version = "0.1.4"
1517
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1518
+ checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
1519
+
1505
1520
  [[package]]
1506
1521
  name = "findshlibs"
1507
1522
  version = "0.10.2"
@@ -2401,15 +2416,6 @@ dependencies = [
2401
2416
  "serde",
2402
2417
  ]
2403
2418
 
2404
- [[package]]
2405
- name = "julian_day_converter"
2406
- version = "0.4.5"
2407
- source = "registry+https://github.com/rust-lang/crates.io-index"
2408
- checksum = "f2987f71b89b85c812c8484cbf0c5d7912589e77bfdc66fd3e52f760e7859f16"
2409
- dependencies = [
2410
- "chrono",
2411
- ]
2412
-
2413
2419
  [[package]]
2414
2420
  name = "kqueue"
2415
2421
  version = "1.0.8"
@@ -2539,7 +2545,7 @@ dependencies = [
2539
2545
 
2540
2546
  [[package]]
2541
2547
  name = "limbo_completion"
2542
- version = "0.3.0-pre.3"
2548
+ version = "0.3.0-pre.5"
2543
2549
  dependencies = [
2544
2550
  "mimalloc",
2545
2551
  "turso_ext",
@@ -2547,7 +2553,7 @@ dependencies = [
2547
2553
 
2548
2554
  [[package]]
2549
2555
  name = "limbo_crypto"
2550
- version = "0.3.0-pre.3"
2556
+ version = "0.3.0-pre.5"
2551
2557
  dependencies = [
2552
2558
  "blake3",
2553
2559
  "data-encoding",
@@ -2560,7 +2566,7 @@ dependencies = [
2560
2566
 
2561
2567
  [[package]]
2562
2568
  name = "limbo_csv"
2563
- version = "0.3.0-pre.3"
2569
+ version = "0.3.0-pre.5"
2564
2570
  dependencies = [
2565
2571
  "csv",
2566
2572
  "mimalloc",
@@ -2570,7 +2576,7 @@ dependencies = [
2570
2576
 
2571
2577
  [[package]]
2572
2578
  name = "limbo_fuzzy"
2573
- version = "0.3.0-pre.3"
2579
+ version = "0.3.0-pre.5"
2574
2580
  dependencies = [
2575
2581
  "mimalloc",
2576
2582
  "turso_ext",
@@ -2578,7 +2584,7 @@ dependencies = [
2578
2584
 
2579
2585
  [[package]]
2580
2586
  name = "limbo_ipaddr"
2581
- version = "0.3.0-pre.3"
2587
+ version = "0.3.0-pre.5"
2582
2588
  dependencies = [
2583
2589
  "ipnetwork",
2584
2590
  "mimalloc",
@@ -2587,7 +2593,7 @@ dependencies = [
2587
2593
 
2588
2594
  [[package]]
2589
2595
  name = "limbo_percentile"
2590
- version = "0.3.0-pre.3"
2596
+ version = "0.3.0-pre.5"
2591
2597
  dependencies = [
2592
2598
  "mimalloc",
2593
2599
  "turso_ext",
@@ -2595,7 +2601,7 @@ dependencies = [
2595
2601
 
2596
2602
  [[package]]
2597
2603
  name = "limbo_regexp"
2598
- version = "0.3.0-pre.3"
2604
+ version = "0.3.0-pre.5"
2599
2605
  dependencies = [
2600
2606
  "mimalloc",
2601
2607
  "regex",
@@ -2604,7 +2610,7 @@ dependencies = [
2604
2610
 
2605
2611
  [[package]]
2606
2612
  name = "limbo_sim"
2607
- version = "0.3.0-pre.3"
2613
+ version = "0.3.0-pre.5"
2608
2614
  dependencies = [
2609
2615
  "anyhow",
2610
2616
  "bitflags 2.9.4",
@@ -2640,7 +2646,7 @@ dependencies = [
2640
2646
 
2641
2647
  [[package]]
2642
2648
  name = "limbo_sqlite_test_ext"
2643
- version = "0.3.0-pre.3"
2649
+ version = "0.3.0-pre.5"
2644
2650
  dependencies = [
2645
2651
  "cc",
2646
2652
  ]
@@ -3456,7 +3462,7 @@ dependencies = [
3456
3462
 
3457
3463
  [[package]]
3458
3464
  name = "py-turso"
3459
- version = "0.3.0-pre.3"
3465
+ version = "0.3.0-pre.5"
3460
3466
  dependencies = [
3461
3467
  "anyhow",
3462
3468
  "pyo3",
@@ -4141,6 +4147,15 @@ dependencies = [
4141
4147
  "similar",
4142
4148
  ]
4143
4149
 
4150
+ [[package]]
4151
+ name = "simsimd"
4152
+ version = "6.5.3"
4153
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4154
+ checksum = "0e3f209c5a8155b8458b1a0d3a6fc9fa09d201e6086fdaae18e9e283b9274f8f"
4155
+ dependencies = [
4156
+ "cc",
4157
+ ]
4158
+
4144
4159
  [[package]]
4145
4160
  name = "slab"
4146
4161
  version = "0.4.9"
@@ -4193,7 +4208,7 @@ checksum = "d372029cb5195f9ab4e4b9aef550787dce78b124fcaee8d82519925defcd6f0d"
4193
4208
 
4194
4209
  [[package]]
4195
4210
  name = "sql_generation"
4196
- version = "0.3.0-pre.3"
4211
+ version = "0.3.0-pre.5"
4197
4212
  dependencies = [
4198
4213
  "anarchist-readable-name-generator-lib 0.2.0",
4199
4214
  "anyhow",
@@ -4821,8 +4836,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
4821
4836
 
4822
4837
  [[package]]
4823
4838
  name = "turso"
4824
- version = "0.3.0-pre.3"
4839
+ version = "0.3.0-pre.5"
4825
4840
  dependencies = [
4841
+ "mimalloc",
4826
4842
  "rand 0.9.2",
4827
4843
  "rand_chacha 0.9.0",
4828
4844
  "tempfile",
@@ -4835,7 +4851,7 @@ dependencies = [
4835
4851
 
4836
4852
  [[package]]
4837
4853
  name = "turso-java"
4838
- version = "0.3.0-pre.3"
4854
+ version = "0.3.0-pre.5"
4839
4855
  dependencies = [
4840
4856
  "jni",
4841
4857
  "thiserror 2.0.16",
@@ -4844,7 +4860,7 @@ dependencies = [
4844
4860
 
4845
4861
  [[package]]
4846
4862
  name = "turso_cli"
4847
- version = "0.3.0-pre.3"
4863
+ version = "0.3.0-pre.5"
4848
4864
  dependencies = [
4849
4865
  "anyhow",
4850
4866
  "cfg-if",
@@ -4880,12 +4896,13 @@ dependencies = [
4880
4896
 
4881
4897
  [[package]]
4882
4898
  name = "turso_core"
4883
- version = "0.3.0-pre.3"
4899
+ version = "0.3.0-pre.5"
4884
4900
  dependencies = [
4885
4901
  "aegis",
4886
4902
  "aes",
4887
4903
  "aes-gcm",
4888
4904
  "antithesis_sdk",
4905
+ "arc-swap",
4889
4906
  "bitflags 2.9.4",
4890
4907
  "built",
4891
4908
  "bytemuck",
@@ -4895,11 +4912,9 @@ dependencies = [
4895
4912
  "crossbeam-skiplist",
4896
4913
  "env_logger 0.11.7",
4897
4914
  "fallible-iterator",
4898
- "getrandom 0.2.15",
4899
4915
  "hex",
4900
4916
  "intrusive-collections",
4901
4917
  "io-uring",
4902
- "julian_day_converter",
4903
4918
  "libc",
4904
4919
  "libloading",
4905
4920
  "libm",
@@ -4913,16 +4928,18 @@ dependencies = [
4913
4928
  "pprof",
4914
4929
  "quickcheck",
4915
4930
  "quickcheck_macros",
4916
- "rand 0.8.5",
4931
+ "rand 0.9.2",
4917
4932
  "rand_chacha 0.9.0",
4918
4933
  "regex",
4919
4934
  "regex-syntax",
4920
4935
  "roaring",
4921
4936
  "rstest",
4922
4937
  "rusqlite",
4938
+ "rustc-hash",
4923
4939
  "rustix 1.0.7",
4924
4940
  "ryu",
4925
4941
  "serde",
4942
+ "simsimd",
4926
4943
  "sorted-vec",
4927
4944
  "strum",
4928
4945
  "strum_macros",
@@ -4940,7 +4957,7 @@ dependencies = [
4940
4957
 
4941
4958
  [[package]]
4942
4959
  name = "turso_dart"
4943
- version = "0.3.0-pre.3"
4960
+ version = "0.3.0-pre.5"
4944
4961
  dependencies = [
4945
4962
  "flutter_rust_bridge",
4946
4963
  "turso_core",
@@ -4948,7 +4965,7 @@ dependencies = [
4948
4965
 
4949
4966
  [[package]]
4950
4967
  name = "turso_ext"
4951
- version = "0.3.0-pre.3"
4968
+ version = "0.3.0-pre.5"
4952
4969
  dependencies = [
4953
4970
  "chrono",
4954
4971
  "getrandom 0.3.2",
@@ -4957,7 +4974,7 @@ dependencies = [
4957
4974
 
4958
4975
  [[package]]
4959
4976
  name = "turso_ext_tests"
4960
- version = "0.3.0-pre.3"
4977
+ version = "0.3.0-pre.5"
4961
4978
  dependencies = [
4962
4979
  "env_logger 0.11.7",
4963
4980
  "lazy_static",
@@ -4968,7 +4985,7 @@ dependencies = [
4968
4985
 
4969
4986
  [[package]]
4970
4987
  name = "turso_macros"
4971
- version = "0.3.0-pre.3"
4988
+ version = "0.3.0-pre.5"
4972
4989
  dependencies = [
4973
4990
  "proc-macro2",
4974
4991
  "quote",
@@ -4977,7 +4994,7 @@ dependencies = [
4977
4994
 
4978
4995
  [[package]]
4979
4996
  name = "turso_node"
4980
- version = "0.3.0-pre.3"
4997
+ version = "0.3.0-pre.5"
4981
4998
  dependencies = [
4982
4999
  "chrono",
4983
5000
  "napi",
@@ -4990,7 +5007,7 @@ dependencies = [
4990
5007
 
4991
5008
  [[package]]
4992
5009
  name = "turso_parser"
4993
- version = "0.3.0-pre.3"
5010
+ version = "0.3.0-pre.5"
4994
5011
  dependencies = [
4995
5012
  "bitflags 2.9.4",
4996
5013
  "criterion",
@@ -5006,7 +5023,7 @@ dependencies = [
5006
5023
 
5007
5024
  [[package]]
5008
5025
  name = "turso_sqlite3"
5009
- version = "0.3.0-pre.3"
5026
+ version = "0.3.0-pre.5"
5010
5027
  dependencies = [
5011
5028
  "env_logger 0.11.7",
5012
5029
  "libc",
@@ -5019,7 +5036,7 @@ dependencies = [
5019
5036
 
5020
5037
  [[package]]
5021
5038
  name = "turso_stress"
5022
- version = "0.3.0-pre.3"
5039
+ version = "0.3.0-pre.5"
5023
5040
  dependencies = [
5024
5041
  "anarchist-readable-name-generator-lib 0.1.2",
5025
5042
  "antithesis_sdk",
@@ -5036,7 +5053,7 @@ dependencies = [
5036
5053
 
5037
5054
  [[package]]
5038
5055
  name = "turso_sync_engine"
5039
- version = "0.3.0-pre.3"
5056
+ version = "0.3.0-pre.5"
5040
5057
  dependencies = [
5041
5058
  "base64 0.22.1",
5042
5059
  "bytes",
@@ -5063,7 +5080,7 @@ dependencies = [
5063
5080
 
5064
5081
  [[package]]
5065
5082
  name = "turso_sync_js"
5066
- version = "0.3.0-pre.3"
5083
+ version = "0.3.0-pre.5"
5067
5084
  dependencies = [
5068
5085
  "genawaiter",
5069
5086
  "napi",
@@ -5078,7 +5095,7 @@ dependencies = [
5078
5095
 
5079
5096
  [[package]]
5080
5097
  name = "turso_whopper"
5081
- version = "0.3.0-pre.3"
5098
+ version = "0.3.0-pre.5"
5082
5099
  dependencies = [
5083
5100
  "anyhow",
5084
5101
  "clap",
@@ -8,29 +8,29 @@ exclude = [
8
8
  ]
9
9
 
10
10
  [workspace.package]
11
- version = "0.3.0-pre.3"
11
+ version = "0.3.0-pre.5"
12
12
  authors = ["the Limbo authors"]
13
13
  edition = "2021"
14
14
  license = "MIT"
15
15
  repository = "https://github.com/tursodatabase/turso"
16
16
 
17
17
  [workspace.dependencies]
18
- turso = { path = "bindings/rust", version = "0.3.0-pre.3" }
19
- turso_node = { path = "bindings/javascript", version = "0.3.0-pre.3" }
20
- limbo_completion = { path = "extensions/completion", version = "0.3.0-pre.3" }
21
- turso_core = { path = "core", version = "0.3.0-pre.3" }
22
- turso_sync_engine = { path = "sync/engine", version = "0.3.0-pre.3" }
23
- limbo_crypto = { path = "extensions/crypto", version = "0.3.0-pre.3" }
24
- limbo_csv = { path = "extensions/csv", version = "0.3.0-pre.3" }
25
- turso_ext = { path = "extensions/core", version = "0.3.0-pre.3" }
26
- turso_ext_tests = { path = "extensions/tests", version = "0.3.0-pre.3" }
27
- limbo_ipaddr = { path = "extensions/ipaddr", version = "0.3.0-pre.3" }
28
- turso_macros = { path = "macros", version = "0.3.0-pre.3" }
29
- limbo_percentile = { path = "extensions/percentile", version = "0.3.0-pre.3" }
30
- limbo_regexp = { path = "extensions/regexp", version = "0.3.0-pre.3" }
31
- limbo_uuid = { path = "extensions/uuid", version = "0.3.0-pre.3" }
32
- turso_parser = { path = "parser", version = "0.3.0-pre.3" }
33
- limbo_fuzzy = { path = "extensions/fuzzy", version = "0.3.0-pre.3" }
18
+ turso = { path = "bindings/rust", version = "0.3.0-pre.5" }
19
+ turso_node = { path = "bindings/javascript", version = "0.3.0-pre.5" }
20
+ limbo_completion = { path = "extensions/completion", version = "0.3.0-pre.5" }
21
+ turso_core = { path = "core", version = "0.3.0-pre.5" }
22
+ turso_sync_engine = { path = "sync/engine", version = "0.3.0-pre.5" }
23
+ limbo_crypto = { path = "extensions/crypto", version = "0.3.0-pre.5" }
24
+ limbo_csv = { path = "extensions/csv", version = "0.3.0-pre.5" }
25
+ turso_ext = { path = "extensions/core", version = "0.3.0-pre.5" }
26
+ turso_ext_tests = { path = "extensions/tests", version = "0.3.0-pre.5" }
27
+ limbo_ipaddr = { path = "extensions/ipaddr", version = "0.3.0-pre.5" }
28
+ turso_macros = { path = "macros", version = "0.3.0-pre.5" }
29
+ limbo_percentile = { path = "extensions/percentile", version = "0.3.0-pre.5" }
30
+ limbo_regexp = { path = "extensions/regexp", version = "0.3.0-pre.5" }
31
+ limbo_uuid = { path = "extensions/uuid", version = "0.3.0-pre.5" }
32
+ turso_parser = { path = "parser", version = "0.3.0-pre.5" }
33
+ limbo_fuzzy = { path = "extensions/fuzzy", version = "0.3.0-pre.5" }
34
34
  sql_generation = { path = "sql_generation" }
35
35
  strum = { version = "0.26", features = ["derive"] }
36
36
  strum_macros = "0.26"
@@ -59,7 +59,7 @@ fallible-iterator = "0.3.0"
59
59
  criterion = "0.5"
60
60
  chrono = { version = "0.4.42", default-features = false }
61
61
  hex = "0.4"
62
- antithesis_sdk = "0.2"
62
+ antithesis_sdk = { version = "0.2", default-features = false }
63
63
  cfg-if = "1.0.0"
64
64
  tracing-appender = "0.2.3"
65
65
  env_logger = { version = "0.11.6", default-features = false }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyturso
3
- Version: 0.3.0rc3
3
+ Version: 0.3.0rc5
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3
@@ -317,7 +317,7 @@ impl Drop for Connection {
317
317
  #[allow(clippy::arc_with_non_send_sync)]
318
318
  #[pyfunction(signature = (path))]
319
319
  pub fn connect(path: &str) -> Result<Connection> {
320
- match turso_core::Connection::from_uri(path, true, false, false, false, false) {
320
+ match turso_core::Connection::from_uri(path, true, false, false, false, false, false) {
321
321
  Ok((io, conn)) => Ok(Connection { conn, _io: io }),
322
322
  Err(e) => Err(PyErr::new::<ProgrammingError, _>(format!(
323
323
  "Failed to create connection: {e:?}"
@@ -15,7 +15,7 @@ path = "lib.rs"
15
15
 
16
16
  [features]
17
17
  default = ["fs", "uuid", "time", "json", "series", "encryption"]
18
- antithesis = ["dep:antithesis_sdk"]
18
+ antithesis = ["dep:antithesis_sdk", "antithesis_sdk?/full"]
19
19
  tracing_release = ["tracing/release_max_level_info"]
20
20
  conn_raw_api = []
21
21
  fs = ["turso_ext/vfs"]
@@ -52,14 +52,12 @@ cfg_block = "0.1.1"
52
52
  fallible-iterator = { workspace = true }
53
53
  hex = { workspace = true }
54
54
  thiserror = { workspace = true }
55
- getrandom = { version = "0.2.15" }
56
55
  regex = { workspace = true }
57
56
  regex-syntax = { workspace = true, default-features = false, features = [
58
57
  "unicode",
59
58
  ] }
60
59
  chrono = { workspace = true, default-features = false, features = ["clock"] }
61
- julian_day_converter = "0.4.5"
62
- rand = "0.8.5"
60
+ rand = { workspace = true }
63
61
  libm = "0.2"
64
62
  turso_macros = { workspace = true }
65
63
  miette = { workspace = true }
@@ -84,6 +82,9 @@ aegis = "0.9.0"
84
82
  twox-hash = "2.1.1"
85
83
  intrusive-collections = "0.9.7"
86
84
  roaring = "0.11.2"
85
+ simsimd = "6.5.3"
86
+ arc-swap = "1.7"
87
+ rustc-hash = "2.0"
87
88
 
88
89
  [build-dependencies]
89
90
  chrono = { workspace = true, default-features = false }
@@ -100,10 +101,9 @@ criterion = { workspace = true, features = [
100
101
  "async_futures",
101
102
  ] }
102
103
  rstest = "0.18.2"
103
- rusqlite.workspace = true
104
+ rusqlite = { workspace = true, features = ["series"] }
104
105
  quickcheck = { version = "1.0", default-features = false }
105
106
  quickcheck_macros = { version = "1.0", default-features = false }
106
- rand = "0.8.5" # Required for quickcheck
107
107
  rand_chacha = { workspace = true }
108
108
  env_logger = { workspace = true }
109
109
  test-log = { version = "0.2.17", features = ["trace"] }
@@ -2,6 +2,7 @@ use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criteri
2
2
  use pprof::criterion::{Output, PProfProfiler};
3
3
  use regex::Regex;
4
4
  use std::{sync::Arc, time::Instant};
5
+ use tempfile::TempDir;
5
6
  use turso_core::{Database, LimboError, PlatformIO, StepResult};
6
7
 
7
8
  #[cfg(not(target_family = "wasm"))]
@@ -16,6 +17,36 @@ fn rusqlite_open() -> rusqlite::Connection {
16
17
  sqlite_conn
17
18
  }
18
19
 
20
+ fn setup_rusqlite(temp_dir: &TempDir, query: &str) -> rusqlite::Connection {
21
+ let db_path = temp_dir.path().join("bench.db");
22
+ let sqlite_conn = rusqlite::Connection::open(db_path).unwrap();
23
+ sqlite_conn
24
+ .pragma_update(None, "synchronous", "FULL")
25
+ .unwrap();
26
+ sqlite_conn
27
+ .pragma_update(None, "journal_mode", "WAL")
28
+ .unwrap();
29
+ sqlite_conn
30
+ .pragma_update(None, "locking_mode", "EXCLUSIVE")
31
+ .unwrap();
32
+ let journal_mode = sqlite_conn
33
+ .pragma_query_value(None, "journal_mode", |row| row.get::<_, String>(0))
34
+ .unwrap();
35
+ assert_eq!(journal_mode.to_lowercase(), "wal");
36
+ let synchronous = sqlite_conn
37
+ .pragma_query_value(None, "synchronous", |row| row.get::<_, usize>(0))
38
+ .unwrap();
39
+ const FULL: usize = 2;
40
+ assert_eq!(synchronous, FULL);
41
+
42
+ // load the generate_series extension
43
+ rusqlite::vtab::series::load_module(&sqlite_conn).unwrap();
44
+
45
+ // Create test table
46
+ sqlite_conn.execute(query, []).unwrap();
47
+ sqlite_conn
48
+ }
49
+
19
50
  fn bench_open(criterion: &mut Criterion) {
20
51
  // https://github.com/tursodatabase/turso/issues/174
21
52
  // The rusqlite benchmark crashes on Mac M1 when using the flamegraph features
@@ -896,9 +927,90 @@ fn bench_concurrent_writes(criterion: &mut Criterion) {
896
927
  });
897
928
  }
898
929
 
930
+ fn bench_insert_randomblob(criterion: &mut Criterion) {
931
+ // The rusqlite benchmark crashes on Mac M1 when using the flamegraph features
932
+ let enable_rusqlite = std::env::var("DISABLE_RUSQLITE_BENCHMARK").is_err();
933
+
934
+ let mut group = criterion.benchmark_group("Insert rows in batches");
935
+
936
+ // Test different batch sizes
937
+ for batch_size in [1, 10, 100] {
938
+ let temp_dir = tempfile::tempdir().unwrap();
939
+ let db_path = temp_dir.path().join("bench.db");
940
+
941
+ #[allow(clippy::arc_with_non_send_sync)]
942
+ let io = Arc::new(PlatformIO::new().unwrap());
943
+ let db = Database::open_file(io.clone(), db_path.to_str().unwrap(), false, false).unwrap();
944
+ let limbo_conn = db.connect().unwrap();
945
+
946
+ let mut stmt = limbo_conn.query("CREATE TABLE test(x)").unwrap().unwrap();
947
+
948
+ loop {
949
+ match stmt.step().unwrap() {
950
+ turso_core::StepResult::IO => {
951
+ stmt.run_once().unwrap();
952
+ }
953
+ turso_core::StepResult::Done => {
954
+ break;
955
+ }
956
+ turso_core::StepResult::Row => {
957
+ unreachable!();
958
+ }
959
+ turso_core::StepResult::Interrupt | turso_core::StepResult::Busy => {
960
+ unreachable!();
961
+ }
962
+ }
963
+ }
964
+
965
+ let random_blob = format!(
966
+ "INSERT INTO test select randomblob(1024 * 100) from generate_series(1, {batch_size});"
967
+ );
968
+
969
+ group.bench_function(format!("limbo_insert_{batch_size}_randomblob"), |b| {
970
+ let mut stmt = limbo_conn.prepare(&random_blob).unwrap();
971
+ b.iter(|| {
972
+ loop {
973
+ match stmt.step().unwrap() {
974
+ turso_core::StepResult::IO => {
975
+ stmt.run_once().unwrap();
976
+ }
977
+ turso_core::StepResult::Done => {
978
+ break;
979
+ }
980
+ turso_core::StepResult::Row => {
981
+ unreachable!();
982
+ }
983
+ turso_core::StepResult::Interrupt | turso_core::StepResult::Busy => {
984
+ unreachable!();
985
+ }
986
+ }
987
+ }
988
+ stmt.reset();
989
+ });
990
+ });
991
+
992
+ if enable_rusqlite {
993
+ let temp_dir = tempfile::tempdir().unwrap();
994
+ let sqlite_conn = setup_rusqlite(&temp_dir, "CREATE TABLE test(x)");
995
+
996
+ group.bench_function(format!("sqlite_insert_{batch_size}_randomblob"), |b| {
997
+ let mut stmt = sqlite_conn.prepare(&random_blob).unwrap();
998
+ b.iter(|| {
999
+ let mut rows = stmt.raw_query();
1000
+ while let Some(row) = rows.next().unwrap() {
1001
+ black_box(row);
1002
+ }
1003
+ });
1004
+ });
1005
+ }
1006
+ }
1007
+
1008
+ group.finish();
1009
+ }
1010
+
899
1011
  criterion_group! {
900
1012
  name = benches;
901
1013
  config = Criterion::default().with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
902
- targets = bench_open, bench_alter, bench_prepare_query, bench_execute_select_1, bench_execute_select_rows, bench_execute_select_count, bench_insert_rows, bench_concurrent_writes
1014
+ targets = bench_open, bench_alter, bench_prepare_query, bench_execute_select_1, bench_execute_select_rows, bench_execute_select_count, bench_insert_rows, bench_concurrent_writes, bench_insert_randomblob
903
1015
  }
904
1016
  criterion_main!(benches);
@@ -163,6 +163,7 @@ impl From<turso_ext::ResultCode> for LimboError {
163
163
 
164
164
  pub const SQLITE_CONSTRAINT: usize = 19;
165
165
  pub const SQLITE_CONSTRAINT_PRIMARYKEY: usize = SQLITE_CONSTRAINT | (6 << 8);
166
+ #[allow(dead_code)]
166
167
  pub const SQLITE_CONSTRAINT_FOREIGNKEY: usize = SQLITE_CONSTRAINT | (7 << 8);
167
168
  pub const SQLITE_CONSTRAINT_NOTNULL: usize = SQLITE_CONSTRAINT | (5 << 8);
168
169
  pub const SQLITE_FULL: usize = 13; // we want this in autoincrement - incase if user inserts max allowed int
@@ -1,6 +1,11 @@
1
1
  #[cfg(feature = "fs")]
2
2
  mod dynamic;
3
3
  mod vtab_xconnect;
4
+ use crate::index_method::backing_btree::BackingBtreeIndexMethod;
5
+ use crate::index_method::toy_vector_sparse_ivf::VectorSparseInvertedIndexMethod;
6
+ use crate::index_method::{
7
+ BACKING_BTREE_INDEX_METHOD_NAME, TOY_VECTOR_SPARSE_IVF_INDEX_METHOD_NAME,
8
+ };
4
9
  use crate::schema::{Schema, Table};
5
10
  #[cfg(all(target_os = "linux", feature = "io_uring", not(miri)))]
6
11
  use crate::UringIO;
@@ -162,6 +167,17 @@ impl Database {
162
167
  /// Register any built-in extensions that can be stored on the Database so we do not have
163
168
  /// to register these once-per-connection, and the connection can just extend its symbol table
164
169
  pub fn register_global_builtin_extensions(&self) -> Result<(), String> {
170
+ {
171
+ let mut syms = self.builtin_syms.write();
172
+ syms.index_methods.insert(
173
+ TOY_VECTOR_SPARSE_IVF_INDEX_METHOD_NAME.to_string(),
174
+ Arc::new(VectorSparseInvertedIndexMethod),
175
+ );
176
+ syms.index_methods.insert(
177
+ BACKING_BTREE_INDEX_METHOD_NAME.to_string(),
178
+ Arc::new(BackingBtreeIndexMethod),
179
+ );
180
+ }
165
181
  let syms = self.builtin_syms.data_ptr();
166
182
  // Pass the mutex pointer and the appropriate handler
167
183
  let schema_mutex_ptr = &self.schema as *const Mutex<Arc<Schema>> as *mut Mutex<Arc<Schema>>;