dirsql 0.4.68__tar.gz → 0.4.69__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.68 → dirsql-0.4.69}/Cargo.lock +3 -2
- {dirsql-0.4.68 → dirsql-0.4.69}/PKG-INFO +1 -1
- {dirsql-0.4.68/packages/rust → dirsql-0.4.69}/docs/context/troubleshooting.md +1 -1
- {dirsql-0.4.68/packages/rust → dirsql-0.4.69}/docs/context/usage.md +1 -1
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/cli.md +1 -1
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/http-api.md +1 -1
- {dirsql-0.4.68/packages/python → dirsql-0.4.69}/docs/reference/path-tables.md +17 -10
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.69/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +5 -0
- {dirsql-0.4.68 → dirsql-0.4.69/packages/python}/docs/context/troubleshooting.md +1 -1
- {dirsql-0.4.68 → dirsql-0.4.69/packages/python}/docs/context/usage.md +1 -1
- {dirsql-0.4.68/packages/rust → dirsql-0.4.69/packages/python}/docs/reference/cli.md +1 -1
- {dirsql-0.4.68/packages/rust → dirsql-0.4.69/packages/python}/docs/reference/http-api.md +1 -1
- {dirsql-0.4.68 → dirsql-0.4.69/packages/python}/docs/reference/path-tables.md +17 -10
- dirsql-0.4.69/packages/python/e2e-attestations/claude-1269-utf8-chars.json +7 -0
- dirsql-0.4.69/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +7 -0
- dirsql-0.4.69/packages/python/e2e-attestations/claude-1273-walk-prune.json +7 -0
- dirsql-0.4.69/packages/python/e2e-attestations/claude-1285-ingest-fast.json +7 -0
- dirsql-0.4.69/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +36 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/Cargo.toml +2 -1
- {dirsql-0.4.68/packages/python → dirsql-0.4.69/packages/rust}/docs/context/troubleshooting.md +1 -1
- {dirsql-0.4.68/packages/python → dirsql-0.4.69/packages/rust}/docs/context/usage.md +1 -1
- {dirsql-0.4.68/packages/python → dirsql-0.4.69/packages/rust}/docs/reference/cli.md +1 -1
- {dirsql-0.4.68/packages/python → dirsql-0.4.69/packages/rust}/docs/reference/http-api.md +1 -1
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/reference/path-tables.md +17 -10
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/db.rs +22 -17
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/lib.rs +228 -22
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/matcher.rs +113 -27
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/on_file.rs +43 -11
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/scanner.rs +195 -51
- {dirsql-0.4.68 → dirsql-0.4.69}/Cargo.toml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/README.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/_async.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/user_passed_config.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/py.typed +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/read_config.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/AGENTS.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/context/recipes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/explanation.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/getting-started.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/embed.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/persist.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/index.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/package.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/plugins.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/README.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/conftest.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/README.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.68 → dirsql-0.4.69}/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.69"
|
|
556
556
|
dependencies = [
|
|
557
557
|
"assert_cmd",
|
|
558
558
|
"axum",
|
|
@@ -574,6 +574,7 @@ dependencies = [
|
|
|
574
574
|
"notify",
|
|
575
575
|
"predicates",
|
|
576
576
|
"reedline",
|
|
577
|
+
"regex",
|
|
577
578
|
"reqwest",
|
|
578
579
|
"rusqlite",
|
|
579
580
|
"serde",
|
|
@@ -600,7 +601,7 @@ dependencies = [
|
|
|
600
601
|
|
|
601
602
|
[[package]]
|
|
602
603
|
name = "dirsql-py-ext"
|
|
603
|
-
version = "0.4.
|
|
604
|
+
version = "0.4.69"
|
|
604
605
|
dependencies = [
|
|
605
606
|
"dirsql",
|
|
606
607
|
"pyo3",
|
|
@@ -45,7 +45,7 @@ uvx dirsql "SELECT path FROM './**'" --format json
|
|
|
45
45
|
### Empty `[]` for files you can see
|
|
46
46
|
|
|
47
47
|
- **You named a directory**, which lists one level only. `'./**'` and `'./docs/**'` are the recursive forms.
|
|
48
|
-
- **The files are gitignored
|
|
48
|
+
- **The files are gitignored**, inside a git repo (outside one, no `.gitignore` applies). `--no-ignore` scans them:
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
uvx dirsql "SELECT path FROM './**'" --format json --no-ignore
|
|
@@ -35,7 +35,7 @@ Every row has `path`, `basename`, `dir`, `ext` (no dot, `NULL` when absent), `si
|
|
|
35
35
|
|
|
36
36
|
### What a scan skips
|
|
37
37
|
|
|
38
|
-
- **`.gitignore` is respected
|
|
38
|
+
- **`.gitignore` is respected inside a git repo**, as git does; outside one (no enclosing `.git`) no `.gitignore` applies. Pass `--no-ignore` to scan gitignored files too, or name the ignored directory outright: `'./build'` scans `build/`.
|
|
39
39
|
- **`node_modules` is skipped** unless the path names it: `'./node_modules/**'`.
|
|
40
40
|
- **`'./**'` does not enter `.git`.** Naming it scans it: `'./.git/**'`.
|
|
41
41
|
- **To match dotfiles, spell the dot:** `'./.github/**'`, `'./**/.env'`.
|
|
@@ -278,7 +278,7 @@ with all seven [stat columns](./columns.md): `path`, `basename`, `dir`, `ext`,
|
|
|
278
278
|
|
|
279
279
|
```bash
|
|
280
280
|
curl -s localhost:7117/query -H 'content-type: application/json' \
|
|
281
|
-
-d
|
|
281
|
+
-d "{\"sql\":\"SELECT basename, size FROM './' ORDER BY size DESC LIMIT 5\"}"
|
|
282
282
|
```
|
|
283
283
|
|
|
284
284
|
Earlier versions served an implicit table named `files` here. It is gone; a
|
|
@@ -27,7 +27,7 @@ The `200` response is a JSON array of row objects keyed by column name:
|
|
|
27
27
|
```bash
|
|
28
28
|
curl -s http://localhost:7117/query \
|
|
29
29
|
-H 'content-type: application/json' \
|
|
30
|
-
-d
|
|
30
|
+
-d "{\"sql\":\"SELECT COUNT(*) AS n FROM './'\"}" \
|
|
31
31
|
| jq
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -55,9 +55,10 @@ A path containing `*`, `?`, `[` or `{` is a glob and is used exactly as
|
|
|
55
55
|
written: `*` matches within a single directory, `**` crosses directories.
|
|
56
56
|
|
|
57
57
|
The scan starts at the last directory named outright before the first glob
|
|
58
|
-
component
|
|
59
|
-
|
|
60
|
-
directories beside
|
|
58
|
+
component, and descends only as deep as the pattern can match --
|
|
59
|
+
`'./small/*.md'` lists `small/` and nothing else -- so a query over one
|
|
60
|
+
directory costs what `ls small` costs, however large the directories beside
|
|
61
|
+
or below it. Only `**` walks a whole subtree.
|
|
61
62
|
|
|
62
63
|
A path naming a single file yields exactly one row. dirsql never splits a file
|
|
63
64
|
into rows on its own — that is what a table's `on_file` hook is for.
|
|
@@ -260,15 +261,21 @@ skipped just like one at the top.
|
|
|
260
261
|
|
|
261
262
|
### `.gitignore`
|
|
262
263
|
|
|
263
|
-
Path-table scans also respect `.gitignore` files by default,
|
|
264
|
-
ripgrep do: a `.gitignore`
|
|
264
|
+
Path-table scans also respect `.gitignore` files by default, inside a git
|
|
265
|
+
repo, the way git, fd and ripgrep do: a `.gitignore` applies below its own
|
|
265
266
|
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
266
267
|
an ignored directory is pruned rather than walked. In a typical repo this
|
|
267
|
-
excludes build output, virtualenvs, and caches with zero ceremony.
|
|
268
|
-
|
|
269
|
-
the built-in defaults above remain as a floor for directories with no
|
|
268
|
+
excludes build output, virtualenvs, and caches with zero ceremony. The
|
|
269
|
+
built-in defaults above remain as a floor for directories with no
|
|
270
270
|
`.gitignore` at all.
|
|
271
271
|
|
|
272
|
+
A `.gitignore` is in force only when a directory holding `.git` encloses it.
|
|
273
|
+
Outside a repo none applies, at the scan's start, above it or below it: a
|
|
274
|
+
`~/.claude` whose `.gitignore` is `*` still lists its files when `~/.claude`
|
|
275
|
+
is not a repo. Inside one, every `.gitignore` from the repo root down
|
|
276
|
+
applies, including those above the directory a scan starts in, so
|
|
277
|
+
`'./docs/*.log'` and `'./**/*.log'` agree about `docs/`.
|
|
278
|
+
|
|
272
279
|
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
273
280
|
determinism switch for scripted use, since results otherwise depend on
|
|
274
281
|
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
@@ -285,8 +292,8 @@ SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
|
285
292
|
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
286
293
|
```
|
|
287
294
|
|
|
288
|
-
|
|
289
|
-
|
|
295
|
+
The `.gitignore` files in force there, including those above it, still
|
|
296
|
+
filter what lies beneath it.
|
|
290
297
|
|
|
291
298
|
### Hidden files
|
|
292
299
|
|
|
@@ -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.69"
|
|
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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
**Changed** A `.gitignore` applies to path-table scans only inside a git
|
|
2
|
+
repo, as in git, fd and ripgrep: one is in force only when a directory
|
|
3
|
+
holding `.git` encloses it. Outside a repo none applies, at the scan's start,
|
|
4
|
+
above it or below it, so a `~/.claude` whose `.gitignore` is `*` lists its
|
|
5
|
+
files. Inside a repo nothing changes. `--no-ignore` is unchanged.
|
|
@@ -45,7 +45,7 @@ uvx dirsql "SELECT path FROM './**'" --format json
|
|
|
45
45
|
### Empty `[]` for files you can see
|
|
46
46
|
|
|
47
47
|
- **You named a directory**, which lists one level only. `'./**'` and `'./docs/**'` are the recursive forms.
|
|
48
|
-
- **The files are gitignored
|
|
48
|
+
- **The files are gitignored**, inside a git repo (outside one, no `.gitignore` applies). `--no-ignore` scans them:
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
uvx dirsql "SELECT path FROM './**'" --format json --no-ignore
|
|
@@ -35,7 +35,7 @@ Every row has `path`, `basename`, `dir`, `ext` (no dot, `NULL` when absent), `si
|
|
|
35
35
|
|
|
36
36
|
### What a scan skips
|
|
37
37
|
|
|
38
|
-
- **`.gitignore` is respected
|
|
38
|
+
- **`.gitignore` is respected inside a git repo**, as git does; outside one (no enclosing `.git`) no `.gitignore` applies. Pass `--no-ignore` to scan gitignored files too, or name the ignored directory outright: `'./build'` scans `build/`.
|
|
39
39
|
- **`node_modules` is skipped** unless the path names it: `'./node_modules/**'`.
|
|
40
40
|
- **`'./**'` does not enter `.git`.** Naming it scans it: `'./.git/**'`.
|
|
41
41
|
- **To match dotfiles, spell the dot:** `'./.github/**'`, `'./**/.env'`.
|
|
@@ -278,7 +278,7 @@ with all seven [stat columns](./columns.md): `path`, `basename`, `dir`, `ext`,
|
|
|
278
278
|
|
|
279
279
|
```bash
|
|
280
280
|
curl -s localhost:7117/query -H 'content-type: application/json' \
|
|
281
|
-
-d
|
|
281
|
+
-d "{\"sql\":\"SELECT basename, size FROM './' ORDER BY size DESC LIMIT 5\"}"
|
|
282
282
|
```
|
|
283
283
|
|
|
284
284
|
Earlier versions served an implicit table named `files` here. It is gone; a
|
|
@@ -27,7 +27,7 @@ The `200` response is a JSON array of row objects keyed by column name:
|
|
|
27
27
|
```bash
|
|
28
28
|
curl -s http://localhost:7117/query \
|
|
29
29
|
-H 'content-type: application/json' \
|
|
30
|
-
-d
|
|
30
|
+
-d "{\"sql\":\"SELECT COUNT(*) AS n FROM './'\"}" \
|
|
31
31
|
| jq
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -55,9 +55,10 @@ A path containing `*`, `?`, `[` or `{` is a glob and is used exactly as
|
|
|
55
55
|
written: `*` matches within a single directory, `**` crosses directories.
|
|
56
56
|
|
|
57
57
|
The scan starts at the last directory named outright before the first glob
|
|
58
|
-
component
|
|
59
|
-
|
|
60
|
-
directories beside
|
|
58
|
+
component, and descends only as deep as the pattern can match --
|
|
59
|
+
`'./small/*.md'` lists `small/` and nothing else -- so a query over one
|
|
60
|
+
directory costs what `ls small` costs, however large the directories beside
|
|
61
|
+
or below it. Only `**` walks a whole subtree.
|
|
61
62
|
|
|
62
63
|
A path naming a single file yields exactly one row. dirsql never splits a file
|
|
63
64
|
into rows on its own — that is what a table's `on_file` hook is for.
|
|
@@ -260,15 +261,21 @@ skipped just like one at the top.
|
|
|
260
261
|
|
|
261
262
|
### `.gitignore`
|
|
262
263
|
|
|
263
|
-
Path-table scans also respect `.gitignore` files by default,
|
|
264
|
-
ripgrep do: a `.gitignore`
|
|
264
|
+
Path-table scans also respect `.gitignore` files by default, inside a git
|
|
265
|
+
repo, the way git, fd and ripgrep do: a `.gitignore` applies below its own
|
|
265
266
|
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
266
267
|
an ignored directory is pruned rather than walked. In a typical repo this
|
|
267
|
-
excludes build output, virtualenvs, and caches with zero ceremony.
|
|
268
|
-
|
|
269
|
-
the built-in defaults above remain as a floor for directories with no
|
|
268
|
+
excludes build output, virtualenvs, and caches with zero ceremony. The
|
|
269
|
+
built-in defaults above remain as a floor for directories with no
|
|
270
270
|
`.gitignore` at all.
|
|
271
271
|
|
|
272
|
+
A `.gitignore` is in force only when a directory holding `.git` encloses it.
|
|
273
|
+
Outside a repo none applies, at the scan's start, above it or below it: a
|
|
274
|
+
`~/.claude` whose `.gitignore` is `*` still lists its files when `~/.claude`
|
|
275
|
+
is not a repo. Inside one, every `.gitignore` from the repo root down
|
|
276
|
+
applies, including those above the directory a scan starts in, so
|
|
277
|
+
`'./docs/*.log'` and `'./**/*.log'` agree about `docs/`.
|
|
278
|
+
|
|
272
279
|
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
273
280
|
determinism switch for scripted use, since results otherwise depend on
|
|
274
281
|
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
@@ -285,8 +292,8 @@ SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
|
285
292
|
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
286
293
|
```
|
|
287
294
|
|
|
288
|
-
|
|
289
|
-
|
|
295
|
+
The `.gitignore` files in force there, including those above it, still
|
|
296
|
+
filter what lies beneath it.
|
|
290
297
|
|
|
291
298
|
### Hidden files
|
|
292
299
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
### Python SDK: `.gitignore` applies only inside a git repo
|
|
2
|
+
|
|
3
|
+
#### Summary
|
|
4
|
+
|
|
5
|
+
Path-tables used to apply `.gitignore` files with no git repo present. Now a
|
|
6
|
+
`.gitignore` is in force only when a directory holding `.git` encloses it,
|
|
7
|
+
as in git, fd and ripgrep. Every surface that resolves a path-table is
|
|
8
|
+
affected: the CLI, the REPL, the HTTP server, the SDKs, and the `--on-file`
|
|
9
|
+
form. No call changes. Outside a repo a query can return more rows; inside
|
|
10
|
+
one nothing changes.
|
|
11
|
+
|
|
12
|
+
#### Required changes
|
|
13
|
+
|
|
14
|
+
_None._
|
|
15
|
+
|
|
16
|
+
#### Deprecations removed
|
|
17
|
+
|
|
18
|
+
_None._
|
|
19
|
+
|
|
20
|
+
#### Behavior changes without code changes
|
|
21
|
+
|
|
22
|
+
- Outside a git repo, files a `.gitignore` names are listed. To hide them,
|
|
23
|
+
add `ignore` patterns in a config file, or run `git init`.
|
|
24
|
+
|
|
25
|
+
#### Verification
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cd "$(mktemp -d)"
|
|
29
|
+
printf '*.log\n' > .gitignore
|
|
30
|
+
touch a.md z.log
|
|
31
|
+
dirsql query "SELECT path FROM './*' ORDER BY path"
|
|
32
|
+
# expected: [{"path":"a.md"},{"path":"z.log"}]
|
|
33
|
+
git init -q
|
|
34
|
+
dirsql query "SELECT path FROM './*' ORDER BY path"
|
|
35
|
+
# expected: [{"path":"a.md"}]
|
|
36
|
+
```
|
|
@@ -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.69"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -73,6 +73,7 @@ hex = { version = "0.4", optional = true }
|
|
|
73
73
|
ignore = "0.4"
|
|
74
74
|
indicatif = "0.18.6"
|
|
75
75
|
notify = "7"
|
|
76
|
+
regex.workspace = true
|
|
76
77
|
# The REPL's interactive line editor (history, Ctrl+R, multi-line entry).
|
|
77
78
|
# CLI-only: a library consumer never pulls crossterm.
|
|
78
79
|
reedline = { version = "0.49", optional = true }
|
{dirsql-0.4.68/packages/python → dirsql-0.4.69/packages/rust}/docs/context/troubleshooting.md
RENAMED
|
@@ -45,7 +45,7 @@ uvx dirsql "SELECT path FROM './**'" --format json
|
|
|
45
45
|
### Empty `[]` for files you can see
|
|
46
46
|
|
|
47
47
|
- **You named a directory**, which lists one level only. `'./**'` and `'./docs/**'` are the recursive forms.
|
|
48
|
-
- **The files are gitignored
|
|
48
|
+
- **The files are gitignored**, inside a git repo (outside one, no `.gitignore` applies). `--no-ignore` scans them:
|
|
49
49
|
|
|
50
50
|
```sh
|
|
51
51
|
uvx dirsql "SELECT path FROM './**'" --format json --no-ignore
|
|
@@ -35,7 +35,7 @@ Every row has `path`, `basename`, `dir`, `ext` (no dot, `NULL` when absent), `si
|
|
|
35
35
|
|
|
36
36
|
### What a scan skips
|
|
37
37
|
|
|
38
|
-
- **`.gitignore` is respected
|
|
38
|
+
- **`.gitignore` is respected inside a git repo**, as git does; outside one (no enclosing `.git`) no `.gitignore` applies. Pass `--no-ignore` to scan gitignored files too, or name the ignored directory outright: `'./build'` scans `build/`.
|
|
39
39
|
- **`node_modules` is skipped** unless the path names it: `'./node_modules/**'`.
|
|
40
40
|
- **`'./**'` does not enter `.git`.** Naming it scans it: `'./.git/**'`.
|
|
41
41
|
- **To match dotfiles, spell the dot:** `'./.github/**'`, `'./**/.env'`.
|
|
@@ -278,7 +278,7 @@ with all seven [stat columns](./columns.md): `path`, `basename`, `dir`, `ext`,
|
|
|
278
278
|
|
|
279
279
|
```bash
|
|
280
280
|
curl -s localhost:7117/query -H 'content-type: application/json' \
|
|
281
|
-
-d
|
|
281
|
+
-d "{\"sql\":\"SELECT basename, size FROM './' ORDER BY size DESC LIMIT 5\"}"
|
|
282
282
|
```
|
|
283
283
|
|
|
284
284
|
Earlier versions served an implicit table named `files` here. It is gone; a
|
|
@@ -27,7 +27,7 @@ The `200` response is a JSON array of row objects keyed by column name:
|
|
|
27
27
|
```bash
|
|
28
28
|
curl -s http://localhost:7117/query \
|
|
29
29
|
-H 'content-type: application/json' \
|
|
30
|
-
-d
|
|
30
|
+
-d "{\"sql\":\"SELECT COUNT(*) AS n FROM './'\"}" \
|
|
31
31
|
| jq
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -55,9 +55,10 @@ A path containing `*`, `?`, `[` or `{` is a glob and is used exactly as
|
|
|
55
55
|
written: `*` matches within a single directory, `**` crosses directories.
|
|
56
56
|
|
|
57
57
|
The scan starts at the last directory named outright before the first glob
|
|
58
|
-
component
|
|
59
|
-
|
|
60
|
-
directories beside
|
|
58
|
+
component, and descends only as deep as the pattern can match --
|
|
59
|
+
`'./small/*.md'` lists `small/` and nothing else -- so a query over one
|
|
60
|
+
directory costs what `ls small` costs, however large the directories beside
|
|
61
|
+
or below it. Only `**` walks a whole subtree.
|
|
61
62
|
|
|
62
63
|
A path naming a single file yields exactly one row. dirsql never splits a file
|
|
63
64
|
into rows on its own — that is what a table's `on_file` hook is for.
|
|
@@ -260,15 +261,21 @@ skipped just like one at the top.
|
|
|
260
261
|
|
|
261
262
|
### `.gitignore`
|
|
262
263
|
|
|
263
|
-
Path-table scans also respect `.gitignore` files by default,
|
|
264
|
-
ripgrep do: a `.gitignore`
|
|
264
|
+
Path-table scans also respect `.gitignore` files by default, inside a git
|
|
265
|
+
repo, the way git, fd and ripgrep do: a `.gitignore` applies below its own
|
|
265
266
|
directory, deeper files override shallower ones, `!pattern` re-includes, and
|
|
266
267
|
an ignored directory is pruned rather than walked. In a typical repo this
|
|
267
|
-
excludes build output, virtualenvs, and caches with zero ceremony.
|
|
268
|
-
|
|
269
|
-
the built-in defaults above remain as a floor for directories with no
|
|
268
|
+
excludes build output, virtualenvs, and caches with zero ceremony. The
|
|
269
|
+
built-in defaults above remain as a floor for directories with no
|
|
270
270
|
`.gitignore` at all.
|
|
271
271
|
|
|
272
|
+
A `.gitignore` is in force only when a directory holding `.git` encloses it.
|
|
273
|
+
Outside a repo none applies, at the scan's start, above it or below it: a
|
|
274
|
+
`~/.claude` whose `.gitignore` is `*` still lists its files when `~/.claude`
|
|
275
|
+
is not a repo. Inside one, every `.gitignore` from the repo root down
|
|
276
|
+
applies, including those above the directory a scan starts in, so
|
|
277
|
+
`'./docs/*.log'` and `'./**/*.log'` agree about `docs/`.
|
|
278
|
+
|
|
272
279
|
Pass [`--no-ignore`](./cli.md#flags) to restore the full walk — the
|
|
273
280
|
determinism switch for scripted use, since results otherwise depend on
|
|
274
281
|
`.gitignore` state. It disables only the `.gitignore` respect; the built-in
|
|
@@ -285,8 +292,8 @@ SELECT path FROM './node_modules/*/package.json'; -- scans it anyway
|
|
|
285
292
|
SELECT path FROM './dist'; -- scans dist/ even when gitignored
|
|
286
293
|
```
|
|
287
294
|
|
|
288
|
-
|
|
289
|
-
|
|
295
|
+
The `.gitignore` files in force there, including those above it, still
|
|
296
|
+
filter what lies beneath it.
|
|
290
297
|
|
|
291
298
|
### Hidden files
|
|
292
299
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
use rusqlite::Connection;
|
|
2
|
+
use rusqlite::types::{ToSql, ToSqlOutput, ValueRef};
|
|
2
3
|
use std::collections::{HashMap, HashSet};
|
|
3
4
|
use std::path::{Path, PathBuf};
|
|
4
5
|
use std::sync::Arc;
|
|
@@ -1191,24 +1192,14 @@ pub enum Value {
|
|
|
1191
1192
|
Blob(Vec<u8>),
|
|
1192
1193
|
}
|
|
1193
1194
|
|
|
1194
|
-
impl
|
|
1195
|
-
fn to_sql(&self) -> rusqlite::Result<
|
|
1195
|
+
impl ToSql for Value {
|
|
1196
|
+
fn to_sql(&self) -> rusqlite::Result<ToSqlOutput<'_>> {
|
|
1196
1197
|
match self {
|
|
1197
|
-
Value::Null => Ok(rusqlite::types::
|
|
1198
|
-
|
|
1199
|
-
)),
|
|
1200
|
-
Value::
|
|
1201
|
-
|
|
1202
|
-
)),
|
|
1203
|
-
Value::Real(f) => Ok(rusqlite::types::ToSqlOutput::Owned(
|
|
1204
|
-
rusqlite::types::Value::Real(*f),
|
|
1205
|
-
)),
|
|
1206
|
-
Value::Text(s) => Ok(rusqlite::types::ToSqlOutput::Owned(
|
|
1207
|
-
rusqlite::types::Value::Text(s.clone()),
|
|
1208
|
-
)),
|
|
1209
|
-
Value::Blob(b) => Ok(rusqlite::types::ToSqlOutput::Owned(
|
|
1210
|
-
rusqlite::types::Value::Blob(b.clone()),
|
|
1211
|
-
)),
|
|
1198
|
+
Value::Null => Ok(ToSqlOutput::Owned(rusqlite::types::Value::Null)),
|
|
1199
|
+
Value::Integer(i) => Ok(ToSqlOutput::Owned(rusqlite::types::Value::Integer(*i))),
|
|
1200
|
+
Value::Real(f) => Ok(ToSqlOutput::Owned(rusqlite::types::Value::Real(*f))),
|
|
1201
|
+
Value::Text(s) => Ok(ToSqlOutput::Borrowed(ValueRef::Text(s.as_bytes()))),
|
|
1202
|
+
Value::Blob(b) => Ok(ToSqlOutput::Borrowed(ValueRef::Blob(b))),
|
|
1212
1203
|
}
|
|
1213
1204
|
}
|
|
1214
1205
|
}
|
|
@@ -1283,6 +1274,20 @@ impl From<rusqlite::types::Value> for Value {
|
|
|
1283
1274
|
mod tests {
|
|
1284
1275
|
use super::*;
|
|
1285
1276
|
|
|
1277
|
+
#[test]
|
|
1278
|
+
fn text_and_blob_values_bind_without_copying() {
|
|
1279
|
+
let text = Value::Text("abc".into());
|
|
1280
|
+
let blob = Value::Blob(vec![1, 2]);
|
|
1281
|
+
assert_eq!(
|
|
1282
|
+
text.to_sql().unwrap(),
|
|
1283
|
+
ToSqlOutput::Borrowed(ValueRef::Text(b"abc"))
|
|
1284
|
+
);
|
|
1285
|
+
assert_eq!(
|
|
1286
|
+
blob.to_sql().unwrap(),
|
|
1287
|
+
ToSqlOutput::Borrowed(ValueRef::Blob(&[1, 2]))
|
|
1288
|
+
);
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1286
1291
|
#[test]
|
|
1287
1292
|
fn create_table_from_ddl() {
|
|
1288
1293
|
let db = Db::new().unwrap();
|