dirsql 0.4.33__tar.gz → 0.4.35__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 (208) hide show
  1. {dirsql-0.4.33 → dirsql-0.4.35}/Cargo.lock +2 -2
  2. {dirsql-0.4.33 → dirsql-0.4.35}/PKG-INFO +1 -1
  3. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/cli.md +36 -0
  4. {dirsql-0.4.33/packages/rust → dirsql-0.4.35}/docs/reference/config.md +14 -0
  5. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/sdk.md +4 -0
  6. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/Cargo.toml +1 -1
  7. {dirsql-0.4.33/packages/rust → dirsql-0.4.35/packages/python}/docs/reference/cli.md +36 -0
  8. {dirsql-0.4.33 → dirsql-0.4.35/packages/python}/docs/reference/config.md +14 -0
  9. {dirsql-0.4.33/packages/rust → dirsql-0.4.35/packages/python}/docs/reference/sdk.md +4 -0
  10. dirsql-0.4.35/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +7 -0
  11. dirsql-0.4.35/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +7 -0
  12. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/testing-conventions.toml +1 -1
  13. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/Cargo.toml +1 -1
  14. {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/cli.md +36 -0
  15. {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/config.md +14 -0
  16. {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/sdk.md +4 -0
  17. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/db.rs +20 -0
  18. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/functions.rs +379 -16
  19. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/lib.rs +2 -1
  20. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/progress.rs +284 -31
  21. {dirsql-0.4.33 → dirsql-0.4.35}/Cargo.toml +0 -0
  22. {dirsql-0.4.33 → dirsql-0.4.35}/README.md +0 -0
  23. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/__init__.py +0 -0
  24. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/_async.py +0 -0
  25. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/_dirsql.pyi +0 -0
  26. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/__init__.py +0 -0
  27. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/__init__.py +0 -0
  28. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  29. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  30. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  31. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
  32. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  33. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/main.py +0 -0
  34. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/resolve_config_extensions.py +0 -0
  35. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/py.typed +0 -0
  36. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/resolve_config_extensions.py +0 -0
  37. {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/resolve_extension.py +0 -0
  38. {dirsql-0.4.33 → dirsql-0.4.35}/docs/.claude/CLAUDE.md +0 -0
  39. {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/config.ts +0 -0
  40. {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/theme/index.ts +0 -0
  41. {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/theme/lang.ts +0 -0
  42. {dirsql-0.4.33 → dirsql-0.4.35}/docs/AGENTS.md +0 -0
  43. {dirsql-0.4.33 → dirsql-0.4.35}/docs/explanation.md +0 -0
  44. {dirsql-0.4.33 → dirsql-0.4.35}/docs/getting-started.md +0 -0
  45. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/columns-from-paths.md +0 -0
  46. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/define-tables.md +0 -0
  47. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/embed.md +0 -0
  48. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/extract-from-contents.md +0 -0
  49. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/load-extension.md +0 -0
  50. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/parse-files-into-columns.md +0 -0
  51. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/persist.md +0 -0
  52. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/query-json.md +0 -0
  53. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/query-without-config.md +0 -0
  54. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/react-to-changes.md +0 -0
  55. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/search-by-meaning.md +0 -0
  56. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/search-indexes.md +0 -0
  57. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/skip-files.md +0 -0
  58. {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/write-a-plugin.md +0 -0
  59. {dirsql-0.4.33 → dirsql-0.4.35}/docs/index.md +0 -0
  60. {dirsql-0.4.33 → dirsql-0.4.35}/docs/package.json +0 -0
  61. {dirsql-0.4.33 → dirsql-0.4.35}/docs/plugins.md +0 -0
  62. {dirsql-0.4.33 → dirsql-0.4.35}/docs/pnpm-lock.yaml +0 -0
  63. {dirsql-0.4.33 → dirsql-0.4.35}/docs/pnpm-workspace.yaml +0 -0
  64. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/columns.md +0 -0
  65. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/hooks.md +0 -0
  66. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/http-api.md +0 -0
  67. {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/path-tables.md +0 -0
  68. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/CHANGELOG.md +0 -0
  69. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/MIGRATIONS.md +0 -0
  70. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/README.md +0 -0
  71. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  72. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  73. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  74. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  75. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  76. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  77. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  78. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  79. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  80. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  81. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  82. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  83. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  84. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  85. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  86. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  87. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  88. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  89. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  90. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/README.md +0 -0
  91. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/conftest.py +0 -0
  92. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.claude/CLAUDE.md +0 -0
  93. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/config.ts +0 -0
  94. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  95. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  96. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/AGENTS.md +0 -0
  97. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/explanation.md +0 -0
  98. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/getting-started.md +0 -0
  99. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/columns-from-paths.md +0 -0
  100. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/define-tables.md +0 -0
  101. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/embed.md +0 -0
  102. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/extract-from-contents.md +0 -0
  103. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/load-extension.md +0 -0
  104. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  105. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/persist.md +0 -0
  106. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/query-json.md +0 -0
  107. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/query-without-config.md +0 -0
  108. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/react-to-changes.md +0 -0
  109. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/search-by-meaning.md +0 -0
  110. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/search-indexes.md +0 -0
  111. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/skip-files.md +0 -0
  112. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/write-a-plugin.md +0 -0
  113. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/index.md +0 -0
  114. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/package.json +0 -0
  115. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/plugins.md +0 -0
  116. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/pnpm-lock.yaml +0 -0
  117. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/pnpm-workspace.yaml +0 -0
  118. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/columns.md +0 -0
  119. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/hooks.md +0 -0
  120. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/http-api.md +0 -0
  121. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/path-tables.md +0 -0
  122. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  123. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  124. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  125. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  126. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  127. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  128. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  129. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  130. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  131. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  132. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  133. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  134. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  135. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  136. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  137. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  138. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  139. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  140. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  141. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  142. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  143. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  144. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  145. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/README.md +0 -0
  146. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/src/lib.rs +0 -0
  147. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/__init__.py +0 -0
  148. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/conftest.py +0 -0
  149. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/__init__.py +0 -0
  150. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  151. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  152. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/__init__.py +0 -0
  153. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/binding/__init__.py +0 -0
  154. {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  155. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/CHANGELOG.md +0 -0
  156. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/MIGRATIONS.md +0 -0
  157. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/README.md +0 -0
  158. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/db_bench.rs +0 -0
  159. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/differ_bench.rs +0 -0
  160. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/matcher_bench.rs +0 -0
  161. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/scanner_bench.rs +0 -0
  162. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/explanation.md +0 -0
  163. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/getting-started.md +0 -0
  164. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  165. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/define-tables.md +0 -0
  166. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/embed.md +0 -0
  167. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  168. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/load-extension.md +0 -0
  169. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  170. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/persist.md +0 -0
  171. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/query-json.md +0 -0
  172. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/query-without-config.md +0 -0
  173. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/react-to-changes.md +0 -0
  174. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  175. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/search-indexes.md +0 -0
  176. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/skip-files.md +0 -0
  177. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  178. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/index.md +0 -0
  179. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/plugins.md +0 -0
  180. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/columns.md +0 -0
  181. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/hooks.md +0 -0
  182. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/http-api.md +0 -0
  183. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/path-tables.md +0 -0
  184. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/bin/dirsql.rs +0 -0
  185. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/execute.rs +0 -0
  186. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/init.rs +0 -0
  187. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/mod.rs +0 -0
  188. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/repl.rs +0 -0
  189. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/router.rs +0 -0
  190. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/run.rs +0 -0
  191. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/serialize.rs +0 -0
  192. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/server.rs +0 -0
  193. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/table.rs +0 -0
  194. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/command.rs +0 -0
  195. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/config.rs +0 -0
  196. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/default_config.toml +0 -0
  197. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/differ.rs +0 -0
  198. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/infer.rs +0 -0
  199. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/matcher.rs +0 -0
  200. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/parsed_cache.rs +0 -0
  201. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/parsed_vtab.rs +0 -0
  202. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/path_table.rs +0 -0
  203. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/persist.rs +0 -0
  204. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/scanner.rs +0 -0
  205. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/sql_literal.rs +0 -0
  206. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/vtab.rs +0 -0
  207. {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/watcher.rs +0 -0
  208. {dirsql-0.4.33 → dirsql-0.4.35}/pyproject.toml +0 -0
@@ -540,7 +540,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
540
540
 
541
541
  [[package]]
542
542
  name = "dirsql"
543
- version = "0.4.33"
543
+ version = "0.4.35"
544
544
  dependencies = [
545
545
  "assert_cmd",
546
546
  "axum",
@@ -583,7 +583,7 @@ dependencies = [
583
583
 
584
584
  [[package]]
585
585
  name = "dirsql-py-ext"
586
- version = "0.4.33"
586
+ version = "0.4.35"
587
587
  dependencies = [
588
588
  "dirsql",
589
589
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.33
3
+ Version: 0.4.35
4
4
  Requires-Dist: tomli>=2 ; python_full_version < '3.11'
5
5
  Requires-Dist: bin-shim>=0.1
6
6
  Summary: Ephemeral SQL index over a local directory
@@ -483,6 +483,42 @@ dirsql: indexed 41231 files in 3m12s
483
483
 
484
484
  stdout is untouched — it carries the query result and nothing else.
485
485
 
486
+ A query gets the same treatment when it calls a
487
+ [worker-backed function](./config.md#dirsql-function). Those cost one round
488
+ trip per row, so a query that calls one over a whole corpus is the slowest
489
+ thing dirsql does:
490
+
491
+ ```
492
+ dirsql: running 9204 worker calls
493
+ ```
494
+
495
+ and, when the query ends:
496
+
497
+ ```
498
+ dirsql: ran 41231 worker calls in 2m41s
499
+ ```
500
+
501
+ A worker that keeps a cache of its own can say so per response
502
+ (`{"meta": {"cached": true}}` — see [Worker
503
+ protocol](./config.md#worker-protocol)), and those round trips are then split
504
+ out, because the number that answers *"will this be fast next time"* is not
505
+ the total:
506
+
507
+ ```
508
+ dirsql: running 9204 worker calls (8811 cached)
509
+ dirsql: ran 41231 worker calls in 2m41s (38104 cached)
510
+ ```
511
+
512
+ Both figures count **worker round trips, not rows**. A function declared
513
+ `deterministic = true` lets SQLite reuse one answer for identical arguments
514
+ within a query, so repeated content never reaches the worker at all and both
515
+ numbers sit below the row count on a corpus with duplicates. The split covers
516
+ only what the worker itself reports serving from cache. A worker that sends no
517
+ `meta` gets the unsplit line above, not a `(0 cached)`.
518
+
519
+ A query that calls no worker prints nothing, whatever the setting — the
520
+ reporting only ever speaks when there is something to report.
521
+
486
522
  By default this is **terminal-only, and only for work slow enough to wonder
487
523
  about**: a phase that finishes in under half a second prints nothing at all,
488
524
  and a run whose stderr is a pipe or a file prints nothing regardless of how
@@ -133,6 +133,11 @@ process alive for the rest of the invocation, sending it every subsequent
133
133
  call — one process total, never one per row or per file. The worker is torn
134
134
  down when the invocation ends.
135
135
 
136
+ A query paying per-row round trips reports them on stderr while it runs
137
+ (`dirsql: running 9204 worker calls`), on the same terms as every other
138
+ [progress line](./cli.md#progress-reporting): terminal-only by default, silent
139
+ on a pipe, and gone before the result is printed.
140
+
136
141
  The `timeout` bounds each **round-trip call**, not the query: a query that
137
142
  calls the function on 10 000 rows is 10 000 individually timed calls. A call
138
143
  that times out, or a worker that crashes or closes its pipes, fails the query
@@ -156,6 +161,15 @@ request line in, one response line out, per call:
156
161
  JSON-text vectors) — or `{"err": "message"}`, which **fails the query**
157
162
  with that message. An `{"err": ...}` response leaves the healthy worker
158
163
  running; only transport failures (timeout, crash) recycle it.
164
+ - **Optional `"meta"`**, alongside `"ok"`: a second top-level object carrying
165
+ facts about how the answer was produced rather than what it is. One key is
166
+ read today — `{"ok": [...], "meta": {"cached": true}}` says the worker
167
+ answered from a cache of its own, which dirsql reports as the `(N cached)`
168
+ split on its [worker-call progress line](./cli.md#progress-reporting). The
169
+ field is **optional and advisory**: a worker that omits it is a worker that
170
+ reports no cache hits, keys dirsql does not recognize are ignored (they
171
+ always have been), and a `meta` of an unexpected shape is ignored too rather
172
+ than failing a query over a progress counter.
159
173
  - **stderr passes through** to `dirsql`'s stderr, so a worker's progress
160
174
  bars and download logs reach the terminal.
161
175
 
@@ -408,6 +408,10 @@ one summary of what each cost:
408
408
  dirsql: indexed 41231 files in 3m12s
409
409
  ```
410
410
 
411
+ A `query` that calls a worker-backed function is reported the same way, as a
412
+ running count of round trips (`dirsql: running 9204 worker calls`) — the shape
413
+ `dirsql-plugin-embeddings` produces when it embeds a corpus one row at a time.
414
+
411
415
  This is terminal-only by default, and only for a phase that runs longer than
412
416
  half a second — a program whose stderr is a pipe, a file, or a log collector
413
417
  sees nothing, whatever the scan costs. Set `DIRSQL_PROGRESS=never` to
@@ -4,7 +4,7 @@ name = "dirsql-py-ext"
4
4
  # pypi/maturin handler can rewrite it via `write-version` before
5
5
  # `maturin build`. `pyproject.toml` declares `dynamic = ["version"]`
6
6
  # and maturin reads this field. Mirrors `packages/rust/Cargo.toml`.
7
- version = "0.4.33"
7
+ version = "0.4.35"
8
8
  # abi3 note: the `abi3-py310` pyo3 feature (below) builds ONE stable-ABI
9
9
  # `cp310-abi3` wheel per platform that loads on every CPython >= 3.10
10
10
  # (matching `pyproject.toml`'s `requires-python = ">=3.10"`), instead of
@@ -483,6 +483,42 @@ dirsql: indexed 41231 files in 3m12s
483
483
 
484
484
  stdout is untouched — it carries the query result and nothing else.
485
485
 
486
+ A query gets the same treatment when it calls a
487
+ [worker-backed function](./config.md#dirsql-function). Those cost one round
488
+ trip per row, so a query that calls one over a whole corpus is the slowest
489
+ thing dirsql does:
490
+
491
+ ```
492
+ dirsql: running 9204 worker calls
493
+ ```
494
+
495
+ and, when the query ends:
496
+
497
+ ```
498
+ dirsql: ran 41231 worker calls in 2m41s
499
+ ```
500
+
501
+ A worker that keeps a cache of its own can say so per response
502
+ (`{"meta": {"cached": true}}` — see [Worker
503
+ protocol](./config.md#worker-protocol)), and those round trips are then split
504
+ out, because the number that answers *"will this be fast next time"* is not
505
+ the total:
506
+
507
+ ```
508
+ dirsql: running 9204 worker calls (8811 cached)
509
+ dirsql: ran 41231 worker calls in 2m41s (38104 cached)
510
+ ```
511
+
512
+ Both figures count **worker round trips, not rows**. A function declared
513
+ `deterministic = true` lets SQLite reuse one answer for identical arguments
514
+ within a query, so repeated content never reaches the worker at all and both
515
+ numbers sit below the row count on a corpus with duplicates. The split covers
516
+ only what the worker itself reports serving from cache. A worker that sends no
517
+ `meta` gets the unsplit line above, not a `(0 cached)`.
518
+
519
+ A query that calls no worker prints nothing, whatever the setting — the
520
+ reporting only ever speaks when there is something to report.
521
+
486
522
  By default this is **terminal-only, and only for work slow enough to wonder
487
523
  about**: a phase that finishes in under half a second prints nothing at all,
488
524
  and a run whose stderr is a pipe or a file prints nothing regardless of how
@@ -133,6 +133,11 @@ process alive for the rest of the invocation, sending it every subsequent
133
133
  call — one process total, never one per row or per file. The worker is torn
134
134
  down when the invocation ends.
135
135
 
136
+ A query paying per-row round trips reports them on stderr while it runs
137
+ (`dirsql: running 9204 worker calls`), on the same terms as every other
138
+ [progress line](./cli.md#progress-reporting): terminal-only by default, silent
139
+ on a pipe, and gone before the result is printed.
140
+
136
141
  The `timeout` bounds each **round-trip call**, not the query: a query that
137
142
  calls the function on 10 000 rows is 10 000 individually timed calls. A call
138
143
  that times out, or a worker that crashes or closes its pipes, fails the query
@@ -156,6 +161,15 @@ request line in, one response line out, per call:
156
161
  JSON-text vectors) — or `{"err": "message"}`, which **fails the query**
157
162
  with that message. An `{"err": ...}` response leaves the healthy worker
158
163
  running; only transport failures (timeout, crash) recycle it.
164
+ - **Optional `"meta"`**, alongside `"ok"`: a second top-level object carrying
165
+ facts about how the answer was produced rather than what it is. One key is
166
+ read today — `{"ok": [...], "meta": {"cached": true}}` says the worker
167
+ answered from a cache of its own, which dirsql reports as the `(N cached)`
168
+ split on its [worker-call progress line](./cli.md#progress-reporting). The
169
+ field is **optional and advisory**: a worker that omits it is a worker that
170
+ reports no cache hits, keys dirsql does not recognize are ignored (they
171
+ always have been), and a `meta` of an unexpected shape is ignored too rather
172
+ than failing a query over a progress counter.
159
173
  - **stderr passes through** to `dirsql`'s stderr, so a worker's progress
160
174
  bars and download logs reach the terminal.
161
175
 
@@ -408,6 +408,10 @@ one summary of what each cost:
408
408
  dirsql: indexed 41231 files in 3m12s
409
409
  ```
410
410
 
411
+ A `query` that calls a worker-backed function is reported the same way, as a
412
+ running count of round trips (`dirsql: running 9204 worker calls`) — the shape
413
+ `dirsql-plugin-embeddings` produces when it embeds a corpus one row at a time.
414
+
411
415
  This is terminal-only by default, and only for a phase that runs longer than
412
416
  half a second — a program whose stderr is a pipe, a file, or a log collector
413
417
  sees nothing, whatever the scan costs. Set `DIRSQL_PROGRESS=never` to
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "just test-e2e",
3
+ "ran_at": 1788557530,
4
+ "exit_code": 0,
5
+ "commit": "97fdc1dfbdf490f71bd2067d8be66a50dce22bcb",
6
+ "branch": "claude/tackle-1034-cachesplit"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/ -x -q",
3
+ "ran_at": 1787263769,
4
+ "exit_code": 0,
5
+ "commit": "bced5b72c85b9c50073fd6326c1528326a1bd9d3",
6
+ "branch": "claude/tackle-957-lrm0z6-worker-calls"
7
+ }
@@ -10,7 +10,7 @@
10
10
  extra_scope = ["packages/rust/src", "packages/python/src"]
11
11
 
12
12
  [python]
13
- one_function_per_file = { max_lines = 100 }
13
+ one_function_per_file = { max_lines = 16 }
14
14
 
15
15
  # Same floor as the root file, which this lane no longer reads.
16
16
  [python.coverage]
@@ -6,7 +6,7 @@ description = "Ephemeral SQL index over a local directory"
6
6
  # version stays for the binding crates (publish = false). The literal
7
7
  # intentionally lags the published version: putitoutthere rewrites it to
8
8
  # the planned release version at build time and never commits it back.
9
- version = "0.4.33"
9
+ version = "0.4.35"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -483,6 +483,42 @@ dirsql: indexed 41231 files in 3m12s
483
483
 
484
484
  stdout is untouched — it carries the query result and nothing else.
485
485
 
486
+ A query gets the same treatment when it calls a
487
+ [worker-backed function](./config.md#dirsql-function). Those cost one round
488
+ trip per row, so a query that calls one over a whole corpus is the slowest
489
+ thing dirsql does:
490
+
491
+ ```
492
+ dirsql: running 9204 worker calls
493
+ ```
494
+
495
+ and, when the query ends:
496
+
497
+ ```
498
+ dirsql: ran 41231 worker calls in 2m41s
499
+ ```
500
+
501
+ A worker that keeps a cache of its own can say so per response
502
+ (`{"meta": {"cached": true}}` — see [Worker
503
+ protocol](./config.md#worker-protocol)), and those round trips are then split
504
+ out, because the number that answers *"will this be fast next time"* is not
505
+ the total:
506
+
507
+ ```
508
+ dirsql: running 9204 worker calls (8811 cached)
509
+ dirsql: ran 41231 worker calls in 2m41s (38104 cached)
510
+ ```
511
+
512
+ Both figures count **worker round trips, not rows**. A function declared
513
+ `deterministic = true` lets SQLite reuse one answer for identical arguments
514
+ within a query, so repeated content never reaches the worker at all and both
515
+ numbers sit below the row count on a corpus with duplicates. The split covers
516
+ only what the worker itself reports serving from cache. A worker that sends no
517
+ `meta` gets the unsplit line above, not a `(0 cached)`.
518
+
519
+ A query that calls no worker prints nothing, whatever the setting — the
520
+ reporting only ever speaks when there is something to report.
521
+
486
522
  By default this is **terminal-only, and only for work slow enough to wonder
487
523
  about**: a phase that finishes in under half a second prints nothing at all,
488
524
  and a run whose stderr is a pipe or a file prints nothing regardless of how
@@ -133,6 +133,11 @@ process alive for the rest of the invocation, sending it every subsequent
133
133
  call — one process total, never one per row or per file. The worker is torn
134
134
  down when the invocation ends.
135
135
 
136
+ A query paying per-row round trips reports them on stderr while it runs
137
+ (`dirsql: running 9204 worker calls`), on the same terms as every other
138
+ [progress line](./cli.md#progress-reporting): terminal-only by default, silent
139
+ on a pipe, and gone before the result is printed.
140
+
136
141
  The `timeout` bounds each **round-trip call**, not the query: a query that
137
142
  calls the function on 10 000 rows is 10 000 individually timed calls. A call
138
143
  that times out, or a worker that crashes or closes its pipes, fails the query
@@ -156,6 +161,15 @@ request line in, one response line out, per call:
156
161
  JSON-text vectors) — or `{"err": "message"}`, which **fails the query**
157
162
  with that message. An `{"err": ...}` response leaves the healthy worker
158
163
  running; only transport failures (timeout, crash) recycle it.
164
+ - **Optional `"meta"`**, alongside `"ok"`: a second top-level object carrying
165
+ facts about how the answer was produced rather than what it is. One key is
166
+ read today — `{"ok": [...], "meta": {"cached": true}}` says the worker
167
+ answered from a cache of its own, which dirsql reports as the `(N cached)`
168
+ split on its [worker-call progress line](./cli.md#progress-reporting). The
169
+ field is **optional and advisory**: a worker that omits it is a worker that
170
+ reports no cache hits, keys dirsql does not recognize are ignored (they
171
+ always have been), and a `meta` of an unexpected shape is ignored too rather
172
+ than failing a query over a progress counter.
159
173
  - **stderr passes through** to `dirsql`'s stderr, so a worker's progress
160
174
  bars and download logs reach the terminal.
161
175
 
@@ -408,6 +408,10 @@ one summary of what each cost:
408
408
  dirsql: indexed 41231 files in 3m12s
409
409
  ```
410
410
 
411
+ A `query` that calls a worker-backed function is reported the same way, as a
412
+ running count of round trips (`dirsql: running 9204 worker calls`) — the shape
413
+ `dirsql-plugin-embeddings` produces when it embeds a corpus one row at a time.
414
+
411
415
  This is terminal-only by default, and only for a phase that runs longer than
412
416
  half a second — a program whose stderr is a pipe, a file, or a log collector
413
417
  sees nothing, whatever the scan costs. Set `DIRSQL_PROGRESS=never` to
@@ -1,8 +1,10 @@
1
1
  use rusqlite::Connection;
2
2
  use std::collections::{HashMap, HashSet};
3
3
  use std::path::{Path, PathBuf};
4
+ use std::sync::Arc;
4
5
  use thiserror::Error;
5
6
 
7
+ use crate::functions::CallReporter;
6
8
  use crate::parsed_vtab;
7
9
  use crate::path_table::{self, PathTable, Resolution};
8
10
  use crate::scanner;
@@ -264,6 +266,10 @@ pub struct Db {
264
266
  /// The persistent cache a parsed path-table reuses across runs. `None` for
265
267
  /// an ephemeral index, which has nowhere to cache to.
266
268
  path_table_cache: Option<PathBuf>,
269
+ /// Counts the worker round trips a query pays for. Shared with every
270
+ /// declared function registered on `conn`; inert until a function is both
271
+ /// declared and called.
272
+ calls: Arc<CallReporter>,
267
273
  }
268
274
 
269
275
  /// The skip rules a fresh `Db` starts with.
@@ -299,6 +305,7 @@ impl Db {
299
305
  path_table_gitignore: true,
300
306
  path_table_parser: None,
301
307
  path_table_cache: None,
308
+ calls: CallReporter::new(),
302
309
  })
303
310
  }
304
311
 
@@ -321,6 +328,7 @@ impl Db {
321
328
  path_table_gitignore: true,
322
329
  path_table_parser: None,
323
330
  path_table_cache: None,
331
+ calls: CallReporter::new(),
324
332
  })
325
333
  }
326
334
 
@@ -365,6 +373,12 @@ impl Db {
365
373
  self.path_table_cache = Some(path);
366
374
  }
367
375
 
376
+ /// The reporter every declared function increments. Handed to
377
+ /// `functions::register_all` at build time.
378
+ pub(crate) fn call_reporter(&self) -> &Arc<CallReporter> {
379
+ &self.calls
380
+ }
381
+
368
382
  /// Borrow the underlying SQLite connection. Internal use only — exposed
369
383
  /// to the `persist` module so it can manage the sidecar tables.
370
384
  #[doc(hidden)]
@@ -687,6 +701,12 @@ impl Db {
687
701
  /// internal writes (`insert_row`, delete-by-file, persist), which never go
688
702
  /// through `query()`, are unaffected.
689
703
  pub fn query(&self, sql: &str) -> Result<Vec<HashMap<String, Value>>> {
704
+ // Bracket the whole statement, prepare included: a worker-backed
705
+ // function called on every row makes this the slowest thing dirsql
706
+ // does, and the guard is what erases the counter before the caller
707
+ // prints the rows.
708
+ let _calls = self.calls.phase();
709
+
690
710
  // Each iteration must register a table no earlier iteration did; a
691
711
  // repeat means the fallback is not making progress, so the SQLite
692
712
  // error stands. That is what bounds the loop.