dirsql 0.4.57__tar.gz → 0.4.59__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.57 → dirsql-0.4.59}/Cargo.lock +9 -2
- {dirsql-0.4.57 → dirsql-0.4.59}/PKG-INFO +1 -1
- {dirsql-0.4.57/packages/python → dirsql-0.4.59}/docs/reference/path-tables.md +6 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/Cargo.toml +1 -1
- {dirsql-0.4.57 → dirsql-0.4.59/packages/python}/docs/reference/path-tables.md +6 -0
- dirsql-0.4.59/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +7 -0
- dirsql-0.4.59/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +7 -0
- dirsql-0.4.59/packages/python/e2e-attestations/claude-1186-win-test-harness.json +7 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/Cargo.toml +2 -1
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/path-tables.md +6 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/db.rs +1 -1
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/lib.rs +12 -23
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/parsed_vtab.rs +10 -7
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/path_table.rs +316 -35
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/scanner.rs +36 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/vtab.rs +14 -4
- {dirsql-0.4.57 → dirsql-0.4.59}/Cargo.toml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/README.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/_async.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/py.typed +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/read_config.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/AGENTS.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/explanation.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/getting-started.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/embed.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/persist.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/index.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/package.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/plugins.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/cli.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/README.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/conftest.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/cli.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/README.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/cli.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/parsed_cache.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.57 → dirsql-0.4.59}/pyproject.toml +0 -0
|
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
|
|
|
552
552
|
|
|
553
553
|
[[package]]
|
|
554
554
|
name = "dirsql"
|
|
555
|
-
version = "0.4.
|
|
555
|
+
version = "0.4.59"
|
|
556
556
|
dependencies = [
|
|
557
557
|
"assert_cmd",
|
|
558
558
|
"axum",
|
|
@@ -584,6 +584,7 @@ dependencies = [
|
|
|
584
584
|
"tokio",
|
|
585
585
|
"tokio-stream",
|
|
586
586
|
"toml",
|
|
587
|
+
"typed-path",
|
|
587
588
|
"walkdir",
|
|
588
589
|
]
|
|
589
590
|
|
|
@@ -600,7 +601,7 @@ dependencies = [
|
|
|
600
601
|
|
|
601
602
|
[[package]]
|
|
602
603
|
name = "dirsql-py-ext"
|
|
603
|
-
version = "0.4.
|
|
604
|
+
version = "0.4.59"
|
|
604
605
|
dependencies = [
|
|
605
606
|
"dirsql",
|
|
606
607
|
"pyo3",
|
|
@@ -2915,6 +2916,12 @@ version = "0.2.5"
|
|
|
2915
2916
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2916
2917
|
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|
2917
2918
|
|
|
2919
|
+
[[package]]
|
|
2920
|
+
name = "typed-path"
|
|
2921
|
+
version = "0.12.3"
|
|
2922
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2923
|
+
checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
|
|
2924
|
+
|
|
2918
2925
|
[[package]]
|
|
2919
2926
|
name = "unicase"
|
|
2920
2927
|
version = "2.9.0"
|
|
@@ -96,6 +96,12 @@ SELECT path FROM '/var/log/*.log';
|
|
|
96
96
|
-- /var/log/syslog
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
On Windows, the absolute forms also include a drive letter
|
|
100
|
+
(`'C:\logs\*.log'` or `'C:/logs/*.log'`), a UNC share
|
|
101
|
+
(`'\\server\share\*.md'`) and `'~\notes'`. `\` and `/` both separate there,
|
|
102
|
+
and the `path` these report uses `/` throughout (`C:/logs/app.log`), matching
|
|
103
|
+
the `/`-separated relative paths.
|
|
104
|
+
|
|
99
105
|
On a system with no home directory, a `~/` path-table reports that it cannot
|
|
100
106
|
resolve rather than guessing.
|
|
101
107
|
|
|
@@ -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.59"
|
|
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
|
|
@@ -96,6 +96,12 @@ SELECT path FROM '/var/log/*.log';
|
|
|
96
96
|
-- /var/log/syslog
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
On Windows, the absolute forms also include a drive letter
|
|
100
|
+
(`'C:\logs\*.log'` or `'C:/logs/*.log'`), a UNC share
|
|
101
|
+
(`'\\server\share\*.md'`) and `'~\notes'`. `\` and `/` both separate there,
|
|
102
|
+
and the `path` these report uses `/` throughout (`C:/logs/app.log`), matching
|
|
103
|
+
the `/`-separated relative paths.
|
|
104
|
+
|
|
99
105
|
On a system with no home directory, a `~/` path-table reports that it cannot
|
|
100
106
|
resolve rather than guessing.
|
|
101
107
|
|
|
@@ -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.59"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -86,6 +86,7 @@ thiserror.workspace = true
|
|
|
86
86
|
tokio.workspace = true
|
|
87
87
|
tokio-stream = { version = "0.1", features = ["sync"], optional = true }
|
|
88
88
|
toml = "0.8"
|
|
89
|
+
typed-path = "0.12"
|
|
89
90
|
walkdir = "2"
|
|
90
91
|
|
|
91
92
|
[lints.rust]
|
|
@@ -96,6 +96,12 @@ SELECT path FROM '/var/log/*.log';
|
|
|
96
96
|
-- /var/log/syslog
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
On Windows, the absolute forms also include a drive letter
|
|
100
|
+
(`'C:\logs\*.log'` or `'C:/logs/*.log'`), a UNC share
|
|
101
|
+
(`'\\server\share\*.md'`) and `'~\notes'`. `\` and `/` both separate there,
|
|
102
|
+
and the `path` these report uses `/` throughout (`C:/logs/app.log`), matching
|
|
103
|
+
the `/`-separated relative paths.
|
|
104
|
+
|
|
99
105
|
On a system with no home directory, a `~/` path-table reports that it cannot
|
|
100
106
|
resolve rather than guessing.
|
|
101
107
|
|
|
@@ -655,7 +655,7 @@ impl Db {
|
|
|
655
655
|
/// Every distinct `(table_name, file_path)` whose file sits beneath the
|
|
656
656
|
/// directory `dir`, ordered by table then path.
|
|
657
657
|
pub fn files_under(&self, dir: &str) -> Result<Vec<(String, String)>> {
|
|
658
|
-
let prefix = format!("{dir}
|
|
658
|
+
let prefix = format!("{dir}/");
|
|
659
659
|
let mut stmt = self.conn.prepare(
|
|
660
660
|
"SELECT DISTINCT table_name, file_path FROM _dirsql_internal_rows \
|
|
661
661
|
WHERE substr(file_path, 1, length(?1)) = ?1 \
|
|
@@ -571,7 +571,7 @@ impl DirSQL {
|
|
|
571
571
|
// unspecified. An `on_file` failure produces an error event for that
|
|
572
572
|
// table only; the other matching tables still process the event.
|
|
573
573
|
let matches = self.inner.matcher.match_all(&rel_path_buf);
|
|
574
|
-
let rel_path = rel_path_buf
|
|
574
|
+
let rel_path = scanner::to_slash(&rel_path_buf);
|
|
575
575
|
|
|
576
576
|
let mut events = Vec::new();
|
|
577
577
|
for m in matches {
|
|
@@ -625,11 +625,7 @@ impl DirSQL {
|
|
|
625
625
|
};
|
|
626
626
|
let mut events = Vec::new();
|
|
627
627
|
for (path, table) in self.inner.fs.scan_subtree(base, dir, &self.inner.matcher) {
|
|
628
|
-
let rel_path = path
|
|
629
|
-
.strip_prefix(base)
|
|
630
|
-
.unwrap_or(&path)
|
|
631
|
-
.to_string_lossy()
|
|
632
|
-
.to_string();
|
|
628
|
+
let rel_path = scanner::to_slash(path.strip_prefix(base).unwrap_or(&path));
|
|
633
629
|
events.extend(self.handle_upsert(&table, &path, &rel_path));
|
|
634
630
|
}
|
|
635
631
|
events
|
|
@@ -1836,10 +1832,7 @@ fn run_channel_loop(db: DirSQL, tx: UnboundedSender<RowEvent>) {
|
|
|
1836
1832
|
}
|
|
1837
1833
|
|
|
1838
1834
|
fn relative_path(root: &Path, path: &Path) -> String {
|
|
1839
|
-
path.strip_prefix(root)
|
|
1840
|
-
.unwrap_or(path)
|
|
1841
|
-
.to_string_lossy()
|
|
1842
|
-
.to_string()
|
|
1835
|
+
scanner::to_slash(path.strip_prefix(root).unwrap_or(path))
|
|
1843
1836
|
}
|
|
1844
1837
|
|
|
1845
1838
|
/// Build [`Table`] objects from a parsed config.
|
|
@@ -4346,15 +4339,13 @@ mod internal_tests {
|
|
|
4346
4339
|
}
|
|
4347
4340
|
|
|
4348
4341
|
/// `{abspath}` is not in the substitution table: it is left literal like any
|
|
4349
|
-
/// unknown `{…}`, so `printf` receives the string `{abspath}` verbatim.
|
|
4350
|
-
/// template references `{path}` so that arg is the real path (and no path is
|
|
4351
|
-
/// appended), isolating the `{abspath}` behavior in the `q` column.
|
|
4342
|
+
/// unknown `{…}`, so `printf` receives the string `{abspath}` verbatim.
|
|
4352
4343
|
#[test]
|
|
4353
4344
|
fn run_on_file_does_not_substitute_abspath() {
|
|
4354
4345
|
let dir = TempDir::new().unwrap();
|
|
4355
4346
|
let abs = dir.path().join("f.txt");
|
|
4356
4347
|
let rows = run_on_file(
|
|
4357
|
-
r#"printf '[{"
|
|
4348
|
+
r#"printf '[{"q":"%s"}]' {abspath}"#,
|
|
4358
4349
|
&abs.to_string_lossy(),
|
|
4359
4350
|
dir.path(),
|
|
4360
4351
|
dir.path(),
|
|
@@ -4365,25 +4356,23 @@ mod internal_tests {
|
|
|
4365
4356
|
}
|
|
4366
4357
|
|
|
4367
4358
|
/// `{path}` interpolates the matched file's **absolute** path (not a
|
|
4368
|
-
/// root-relative one)
|
|
4369
|
-
///
|
|
4370
|
-
/// the
|
|
4371
|
-
/// would have shortened to a bare relative path).
|
|
4359
|
+
/// root-relative one), byte-for-byte, even when the file sits directly
|
|
4360
|
+
/// under `root`. The command writes its argument to a side file rather than
|
|
4361
|
+
/// into the JSON payload, where a Windows path's `\` would need escaping.
|
|
4372
4362
|
#[test]
|
|
4373
4363
|
fn run_on_file_passes_absolute_path_for_path_placeholder() {
|
|
4374
4364
|
let dir = TempDir::new().unwrap();
|
|
4375
4365
|
let abs = dir.path().join("f.txt");
|
|
4376
|
-
|
|
4377
|
-
r#"sh -c
|
|
4366
|
+
run_on_file(
|
|
4367
|
+
r#"sh -c 'printf %s "$1" > seen; echo "[]"' sh {path}"#,
|
|
4378
4368
|
&abs.to_string_lossy(),
|
|
4379
4369
|
dir.path(),
|
|
4380
4370
|
dir.path(),
|
|
4381
4371
|
)
|
|
4382
4372
|
.expect("a well-formed payload parses");
|
|
4383
|
-
assert_eq!(rows.len(), 1);
|
|
4384
4373
|
assert_eq!(
|
|
4385
|
-
|
|
4386
|
-
|
|
4374
|
+
std::fs::read_to_string(dir.path().join("seen")).unwrap(),
|
|
4375
|
+
abs.to_string_lossy()
|
|
4387
4376
|
);
|
|
4388
4377
|
}
|
|
4389
4378
|
|
|
@@ -36,7 +36,7 @@ use crate::matcher::TableMatcher;
|
|
|
36
36
|
use crate::parsed_cache::{self, CachedParse, Entry, RowCache, SqliteRowCache};
|
|
37
37
|
use crate::path_table;
|
|
38
38
|
use crate::persist::{FileStat, hash_file, now_ns};
|
|
39
|
-
use crate::scanner::scan_glob;
|
|
39
|
+
use crate::scanner::{scan_glob, to_slash};
|
|
40
40
|
use crate::vtab_scaffold::{self, TableSource};
|
|
41
41
|
|
|
42
42
|
/// SQL module name a parsed path-table is created with.
|
|
@@ -161,7 +161,7 @@ fn collect_rows_cached(
|
|
|
161
161
|
|
|
162
162
|
let mut seen: Vec<(String, Parsed)> = Vec::with_capacity(rel_paths.len());
|
|
163
163
|
for rel_path in rel_paths {
|
|
164
|
-
let key = rel_path
|
|
164
|
+
let key = to_slash(rel_path);
|
|
165
165
|
let Some(live) = fs.stat(rel_path) else {
|
|
166
166
|
// The file vanished between the scan and the stat. Nothing to
|
|
167
167
|
// parse and nothing to cache; the next run decides afresh.
|
|
@@ -268,7 +268,7 @@ impl ParsedFs for RootedFs<'_> {
|
|
|
268
268
|
fn command_skip_message(rel_path: &Path, error: &str) -> String {
|
|
269
269
|
format!(
|
|
270
270
|
"dirsql: skipping `{}`: on-file command failed: {error}",
|
|
271
|
-
rel_path
|
|
271
|
+
to_slash(rel_path)
|
|
272
272
|
)
|
|
273
273
|
}
|
|
274
274
|
|
|
@@ -276,7 +276,7 @@ fn command_skip_message(rel_path: &Path, error: &str) -> String {
|
|
|
276
276
|
fn parse_skip_message(rel_path: &Path, message: &str) -> String {
|
|
277
277
|
format!(
|
|
278
278
|
"dirsql: skipping `{}`: on-file output was not a JSON array of rows: {message}",
|
|
279
|
-
rel_path
|
|
279
|
+
to_slash(rel_path)
|
|
280
280
|
)
|
|
281
281
|
}
|
|
282
282
|
|
|
@@ -660,9 +660,12 @@ mod tests {
|
|
|
660
660
|
|
|
661
661
|
#[test]
|
|
662
662
|
fn run_parser_substitutes_the_absolute_path_and_the_root() {
|
|
663
|
-
let
|
|
664
|
-
|
|
665
|
-
assert_eq!(
|
|
663
|
+
let root = std::env::temp_dir();
|
|
664
|
+
let payload = run_parser("echo {path} {root}", &root, Path::new("a.json")).unwrap();
|
|
665
|
+
assert_eq!(
|
|
666
|
+
payload,
|
|
667
|
+
format!("{} {}", root.join("a.json").display(), root.display())
|
|
668
|
+
);
|
|
666
669
|
}
|
|
667
670
|
|
|
668
671
|
#[test]
|