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.
- {dirsql-0.4.33 → dirsql-0.4.35}/Cargo.lock +2 -2
- {dirsql-0.4.33 → dirsql-0.4.35}/PKG-INFO +1 -1
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/cli.md +36 -0
- {dirsql-0.4.33/packages/rust → dirsql-0.4.35}/docs/reference/config.md +14 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/sdk.md +4 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/Cargo.toml +1 -1
- {dirsql-0.4.33/packages/rust → dirsql-0.4.35/packages/python}/docs/reference/cli.md +36 -0
- {dirsql-0.4.33 → dirsql-0.4.35/packages/python}/docs/reference/config.md +14 -0
- {dirsql-0.4.33/packages/rust → dirsql-0.4.35/packages/python}/docs/reference/sdk.md +4 -0
- dirsql-0.4.35/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +7 -0
- dirsql-0.4.35/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +7 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/testing-conventions.toml +1 -1
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/cli.md +36 -0
- {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/config.md +14 -0
- {dirsql-0.4.33/packages/python → dirsql-0.4.35/packages/rust}/docs/reference/sdk.md +4 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/db.rs +20 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/functions.rs +379 -16
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/lib.rs +2 -1
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/progress.rs +284 -31
- {dirsql-0.4.33 → dirsql-0.4.35}/Cargo.toml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/README.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/_async.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/py.typed +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/resolve_config_extensions.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/AGENTS.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/explanation.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/getting-started.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/embed.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/persist.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/index.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/package.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/plugins.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/README.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/conftest.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/README.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/parsed_cache.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/scanner.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.33 → dirsql-0.4.35}/packages/rust/src/watcher.rs +0 -0
- {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.
|
|
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.
|
|
586
|
+
version = "0.4.35"
|
|
587
587
|
dependencies = [
|
|
588
588
|
"dirsql",
|
|
589
589
|
"pyo3",
|
|
@@ -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.
|
|
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
|
|
@@ -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 =
|
|
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.
|
|
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.
|