dirsql 0.4.124__tar.gz → 0.4.125__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.124 → dirsql-0.4.125}/Cargo.lock +2 -2
- {dirsql-0.4.124 → dirsql-0.4.125}/PKG-INFO +1 -1
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/Cargo.toml +1 -1
- dirsql-0.4.125/packages/python/e2e-attestations/bot-1562-watch-speed-1102.json +7 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/Cargo.toml +1 -1
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/db.rs +124 -23
- {dirsql-0.4.124 → dirsql-0.4.125}/Cargo.toml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/README.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/_async.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/_dirsql.pyi +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/discover_plugins/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/main.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/cli/resolve_config_extensions.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/plan_entry_path.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/py.typed +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/read_config.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/resolve_configs_extension_specs.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/resolve_extension.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/dirsql/resolve_package.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/AGENTS.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/context/.gitattributes +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/context/recipes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/context/usage.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/explanation.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/getting-started.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/embed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/persist.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/query-json.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/index.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/package.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/plugins.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/cli.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/glob.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/hooks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/http-api.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/reference/sdk.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/docs/speed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/CHANGELOG.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/MIGRATIONS.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/README.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-11-02-watch-dirs-created-mid-registration.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-11-02-watch-live-on-return.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/README.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/conftest.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/.claude/CLAUDE.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/.vitepress/config.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/.vitepress/theme/index.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/AGENTS.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/context/.gitattributes +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/context/recipes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/context/usage.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/explanation.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/getting-started.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/embed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/persist.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/query-json.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/index.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/package.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/plugins.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/pnpm-lock.yaml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/pnpm-workspace.yaml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/cli.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/glob.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/hooks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/http-api.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/reference/sdk.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/docs/speed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1406-watch-no-tables-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1414-stat-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1415-server-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1416-watch-speed-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1418-node-modules.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1419-dotdot-slashes.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1420-bracket-slash.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1421-posix-unicode.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1422-literal-gitignore.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1426-walk-spawn-threshold-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1428-ndjson-hooks.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1429-parallel-hooks.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1430-dotdot-as-written.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1431-persist-cache-dir.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1437-test-cache-isolation.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1440-fix-main-build.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1448-wildcard-ignored-prefix.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1451-named-dir-never-hidden.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1454-split-few-files.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1457-incremental-refresh-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1459-rescan-on-overflow-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1461-chunked-read-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1461-row-footprint-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1461-step3-1020.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1461-wide-read-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1462-paired-speed-harness-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1464-fastest-native-1008.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1469-ci-speed-sanity-1009.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1470-perf-suite-1009.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1470-speed-page-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1474-vtab-speed-1014.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1475-rowpath-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1477-onelevel-speed-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1478-perdir-walk-1020.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1480-matcher-speed-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1481-gitrepo-speed-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1483-fm-speed-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1484-jsonl-speed-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1487-frontend-query-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1488-frontend-metadata-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1489-frontend-browse-1013.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1503-bench-watch-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1504-bench-names-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1514-watch-rerun-inline-1015.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1524-path-eq-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1526-main-red-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1532-gitignore-fastest-bar-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1534-fm-native-1016.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1534-fm-native-1102.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1538-onfile-order-1019.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1540-update-in-place-1019.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1541-defer-fk-1019.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1544-perfile-update-1020.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1552-watch-gap-1102.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-1557-watch-rename-1102.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-fix-main-place-depth-20261007.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-issue-1486-frontend-20261009.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-gap-childpath-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-parse-overlap-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-parse-paths-1009.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-parse-pragmas-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-sql-valueref-1013.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-walk-components-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-walk-rowpath-1011.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-walk-rows-1013.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/bot-speed-walk-sched-1009.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-config-links.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-config-links.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-bracket-slash-literal.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-dotdot-and-double-slashes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-dotdot-as-written.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-glob-walks-node-modules.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-literal-gitignore.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-on-file-ndjson.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-parallel-hooks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-persist-cache-outside-root.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-posix-classes-unicode.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-07-spread-few-large-files.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-08-small-walks-stay-on-one-thread.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-10-08-watch-requires-named-table.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-11-02-watch-dirs-created-mid-registration.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/2026-11-02-watch-live-on-return.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/migrations.d/README.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/src/lib.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/testing-conventions.toml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/conftest.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/bench_report.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/bench_suite.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/e2e/speed_of_light.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/integration/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/integration/binding/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/python/tests/integration/hermetic/__init__.py +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/CHANGELOG.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/MIGRATIONS.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/README.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/benches/db_bench.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/benches/differ_bench.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/benches/matcher_bench.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/benches/scanner_bench.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/context/.gitattributes +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/context/recipes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/context/troubleshooting.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/context/usage.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/explanation.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/getting-started.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/agent-skill.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/columns-from-paths.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/define-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/embed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/extract-from-contents.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/load-extension.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/persist.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/query-json.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/query-without-config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/react-to-changes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/search-by-meaning.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/search-indexes.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/skip-files.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/howto/write-a-plugin.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/index.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/plugins.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/cli.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/columns.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/config.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/glob.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/hooks.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/http-api.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/path-tables.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/reference/sdk.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/speed.json +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/docs/speed.md +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/bin/dirsql.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/brace.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/context.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/execute.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/frontend.html +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/frontend.js +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/init.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/mod.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/repl.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/router.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/run.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/serialize.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/server.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/cli/table.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/command.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/config.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/default_config.toml +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/differ.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/extension_resolution.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/foreign_key.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/functions.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/gitignore_frame.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/infer.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/launcher.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/lib.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/listing.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/matcher.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/on_file.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/parsed_vtab.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/path_table.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/per_thread.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/persist.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/posix_class.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/progress.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/row_event_flat.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/row_stream.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/scanner.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/sql_literal.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/tree_walk.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/vtab.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/vtab_scaffold.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/packages/rust/src/watcher.rs +0 -0
- {dirsql-0.4.124 → dirsql-0.4.125}/pyproject.toml +0 -0
|
@@ -573,7 +573,7 @@ dependencies = [
|
|
|
573
573
|
|
|
574
574
|
[[package]]
|
|
575
575
|
name = "dirsql"
|
|
576
|
-
version = "0.4.
|
|
576
|
+
version = "0.4.125"
|
|
577
577
|
dependencies = [
|
|
578
578
|
"assert_cmd",
|
|
579
579
|
"axum",
|
|
@@ -625,7 +625,7 @@ dependencies = [
|
|
|
625
625
|
|
|
626
626
|
[[package]]
|
|
627
627
|
name = "dirsql-py-ext"
|
|
628
|
-
version = "0.4.
|
|
628
|
+
version = "0.4.125"
|
|
629
629
|
dependencies = [
|
|
630
630
|
"dirsql",
|
|
631
631
|
"pyo3",
|
|
@@ -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.125"
|
|
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,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"command": "uv run python -m pytest tests/e2e/on_file_query_test.py tests/e2e/query_contract_test.py tests/e2e/declared_table_name_test.py tests/e2e/fanout_test.py tests/e2e/use_case_dossier_test.py tests/e2e/use_case_join_test.py tests/e2e/use_case_notebook_test.py tests/e2e/use_case_transcripts_test.py tests/e2e/watch_speed_test.py -q -p no:cacheprovider",
|
|
3
|
+
"ran_at": 1793662313,
|
|
4
|
+
"exit_code": 0,
|
|
5
|
+
"commit": "900d89821767c1af609f1c1b2f21bf87c97c2332",
|
|
6
|
+
"branch": "bot/1562-watch-speed-1102"
|
|
7
|
+
}
|
|
@@ -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.125"
|
|
10
10
|
edition.workspace = true
|
|
11
11
|
# Literal `license` (not `license.workspace = true`) because
|
|
12
12
|
# putitoutthere's preflight check reads `[package].license` directly
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
use rusqlite::Connection;
|
|
2
2
|
use rusqlite::types::{ToSql, ToSqlOutput, ValueRef};
|
|
3
|
+
use std::cell::RefCell;
|
|
3
4
|
use std::collections::{HashMap, HashSet};
|
|
4
5
|
use std::path::{Path, PathBuf};
|
|
5
6
|
use std::sync::Arc;
|
|
@@ -468,8 +469,15 @@ pub struct Db {
|
|
|
468
469
|
/// The declared functions that batch. Every statement opens a collect
|
|
469
470
|
/// pass on each of them; empty, a statement runs exactly once.
|
|
470
471
|
batched: Vec<Arc<Worker>>,
|
|
472
|
+
/// Each table's key candidates (see [`Self::row_key`]) as of a schema
|
|
473
|
+
/// version: reading them takes three pragma queries, and a watched
|
|
474
|
+
/// change would otherwise pay for them every time.
|
|
475
|
+
keys: RefCell<HashMap<String, (i64, KeyCandidates)>>,
|
|
471
476
|
}
|
|
472
477
|
|
|
478
|
+
/// A table's `PRIMARY KEY` column names, then each plain `UNIQUE` index's.
|
|
479
|
+
type KeyCandidates = Vec<Vec<Option<String>>>;
|
|
480
|
+
|
|
473
481
|
/// Drops every batching worker's gathered replies when the statement that
|
|
474
482
|
/// gathered them is done, whichever way it left.
|
|
475
483
|
struct ClearOnDrop<'a>(&'a [Arc<Worker>]);
|
|
@@ -521,6 +529,7 @@ impl Db {
|
|
|
521
529
|
path_table_parser: None,
|
|
522
530
|
calls: CallReporter::new(),
|
|
523
531
|
batched: Vec::new(),
|
|
532
|
+
keys: RefCell::default(),
|
|
524
533
|
})
|
|
525
534
|
}
|
|
526
535
|
|
|
@@ -546,6 +555,7 @@ impl Db {
|
|
|
546
555
|
path_table_parser: None,
|
|
547
556
|
calls: CallReporter::new(),
|
|
548
557
|
batched: Vec::new(),
|
|
558
|
+
keys: RefCell::default(),
|
|
549
559
|
})
|
|
550
560
|
}
|
|
551
561
|
|
|
@@ -657,12 +667,11 @@ impl Db {
|
|
|
657
667
|
/// Return the column names declared in `table`'s DDL.
|
|
658
668
|
pub fn get_table_columns(&self, table: &str) -> Result<Vec<String>> {
|
|
659
669
|
validate_identifier(table)?;
|
|
660
|
-
let mut stmt = self
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
))?;
|
|
670
|
+
let mut stmt = self
|
|
671
|
+
.conn
|
|
672
|
+
.prepare_cached("SELECT name FROM pragma_table_info(?1) ORDER BY cid")?;
|
|
664
673
|
let columns: Vec<String> = stmt
|
|
665
|
-
.query_map([], |row| row.get::<_, String>(
|
|
674
|
+
.query_map([table], |row| row.get::<_, String>(0))?
|
|
666
675
|
.filter_map(|r| r.ok())
|
|
667
676
|
.collect();
|
|
668
677
|
Ok(columns)
|
|
@@ -902,20 +911,19 @@ impl Db {
|
|
|
902
911
|
&mut stored,
|
|
903
912
|
)?;
|
|
904
913
|
let key = self.row_key(table, rows)?;
|
|
905
|
-
let (changes,
|
|
906
|
-
|
|
914
|
+
let (changes, placed) = self.reconcile_rows(table, &stored, rows, key.as_deref())?;
|
|
915
|
+
// An update keeps its rowid, so only a removal or an addition can move
|
|
916
|
+
// the owner's range.
|
|
917
|
+
if changes.removed.is_empty() && changes.added.is_empty() {
|
|
907
918
|
return Ok(changes);
|
|
908
919
|
}
|
|
909
|
-
self.conn
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|r| Ok((r.get(0)?, r.get(1)?)),
|
|
917
|
-
)?;
|
|
918
|
-
if let (Some(first), Some(last)) = (first, last) {
|
|
920
|
+
self.conn
|
|
921
|
+
.prepare_cached(
|
|
922
|
+
"DELETE FROM _dirsql_internal_ranges WHERE table_name = ?1 AND file_path = ?2",
|
|
923
|
+
)?
|
|
924
|
+
.execute(rusqlite::params![table, owner])?;
|
|
925
|
+
// `placed` holds every row the table keeps.
|
|
926
|
+
if let (Some(&first), Some(&last)) = (placed.iter().min(), placed.iter().max()) {
|
|
919
927
|
self.conn
|
|
920
928
|
.prepare_cached(RANGE_INSERT)?
|
|
921
929
|
.execute(rusqlite::params![table, owner, first, last])?;
|
|
@@ -1135,12 +1143,10 @@ impl Db {
|
|
|
1135
1143
|
Ok((changes, placed))
|
|
1136
1144
|
}
|
|
1137
1145
|
|
|
1138
|
-
///
|
|
1139
|
-
///
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
fn row_key(&self, table: &str, rows: &ShapedRows) -> Result<Option<Vec<usize>>> {
|
|
1143
|
-
let mut candidates: Vec<Vec<Option<String>>> = vec![
|
|
1146
|
+
/// `table`'s `PRIMARY KEY` column names, then each plain `UNIQUE`
|
|
1147
|
+
/// index's, as the schema declares them now.
|
|
1148
|
+
fn key_candidates(&self, table: &str) -> Result<KeyCandidates> {
|
|
1149
|
+
let mut candidates: KeyCandidates = vec![
|
|
1144
1150
|
self.conn
|
|
1145
1151
|
.prepare_cached("SELECT name FROM pragma_table_info(?1) WHERE pk > 0 ORDER BY pk")?
|
|
1146
1152
|
.query_map([table], |r| r.get(0))?
|
|
@@ -1164,6 +1170,34 @@ impl Db {
|
|
|
1164
1170
|
.collect::<rusqlite::Result<_>>()?,
|
|
1165
1171
|
);
|
|
1166
1172
|
}
|
|
1173
|
+
Ok(candidates)
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/// The positions in `rows.columns` of `table`'s key: its `PRIMARY KEY`,
|
|
1177
|
+
/// else the first `UNIQUE` index whose columns `rows` emits non-NULL in
|
|
1178
|
+
/// every row. A key the rows leave unset (a generated `INTEGER PRIMARY
|
|
1179
|
+
/// KEY`) cannot match anything, so it is passed over.
|
|
1180
|
+
fn row_key(&self, table: &str, rows: &ShapedRows) -> Result<Option<Vec<usize>>> {
|
|
1181
|
+
let version: i64 = self
|
|
1182
|
+
.conn
|
|
1183
|
+
.prepare_cached("PRAGMA schema_version")?
|
|
1184
|
+
.query_row([], |r| r.get(0))?;
|
|
1185
|
+
let cached = self
|
|
1186
|
+
.keys
|
|
1187
|
+
.borrow()
|
|
1188
|
+
.get(table)
|
|
1189
|
+
.filter(|(at, _)| *at == version)
|
|
1190
|
+
.map(|(_, candidates)| candidates.clone());
|
|
1191
|
+
let candidates = match cached {
|
|
1192
|
+
Some(candidates) => candidates,
|
|
1193
|
+
None => {
|
|
1194
|
+
let candidates = self.key_candidates(table)?;
|
|
1195
|
+
self.keys
|
|
1196
|
+
.borrow_mut()
|
|
1197
|
+
.insert(table.to_string(), (version, candidates.clone()));
|
|
1198
|
+
candidates
|
|
1199
|
+
}
|
|
1200
|
+
};
|
|
1167
1201
|
Ok(candidates.into_iter().find_map(|names| {
|
|
1168
1202
|
let at = names
|
|
1169
1203
|
.iter()
|
|
@@ -4176,6 +4210,73 @@ mod tests {
|
|
|
4176
4210
|
assert_eq!(changes.added.len(), 1, "got: {:?}", changes.added);
|
|
4177
4211
|
}
|
|
4178
4212
|
|
|
4213
|
+
#[test]
|
|
4214
|
+
fn reconcile_batch_rows_writes_only_the_update_when_rows_change_in_place() {
|
|
4215
|
+
let db = experiments_db();
|
|
4216
|
+
let next = shaped(
|
|
4217
|
+
&db,
|
|
4218
|
+
"experiments",
|
|
4219
|
+
serde_json::json!([
|
|
4220
|
+
{"folder_name":"a","name":"Alpha"},
|
|
4221
|
+
{"folder_name":"b","name":"Renamed"}
|
|
4222
|
+
]),
|
|
4223
|
+
);
|
|
4224
|
+
let before = db.conn().total_changes();
|
|
4225
|
+
|
|
4226
|
+
db.reconcile_batch_rows("experiments", "", &next).unwrap();
|
|
4227
|
+
|
|
4228
|
+
assert_eq!(db.conn().total_changes() - before, 1);
|
|
4229
|
+
assert_eq!(range_rows(&db, "experiments"), vec![(String::new(), 1, 2)]);
|
|
4230
|
+
}
|
|
4231
|
+
|
|
4232
|
+
#[test]
|
|
4233
|
+
fn reconcile_batch_rows_keys_by_an_index_created_after_an_earlier_reconcile() {
|
|
4234
|
+
let changes = |db: &Db, v: &str| {
|
|
4235
|
+
let next = shaped(db, "t", serde_json::json!([{"k":"a","v":v}]));
|
|
4236
|
+
db.reconcile_batch_rows("t", "", &next).unwrap()
|
|
4237
|
+
};
|
|
4238
|
+
let db = Db::new().unwrap();
|
|
4239
|
+
db.create_table("t", "CREATE TABLE t (k TEXT, v TEXT)")
|
|
4240
|
+
.unwrap();
|
|
4241
|
+
db.insert_rows(
|
|
4242
|
+
"t",
|
|
4243
|
+
&shaped(&db, "t", serde_json::json!([{"k":"a","v":"0"}])),
|
|
4244
|
+
"",
|
|
4245
|
+
)
|
|
4246
|
+
.unwrap();
|
|
4247
|
+
assert!(!changes(&db, "1").keyed);
|
|
4248
|
+
|
|
4249
|
+
db.conn()
|
|
4250
|
+
.execute_batch("CREATE UNIQUE INDEX t_k ON t(k)")
|
|
4251
|
+
.unwrap();
|
|
4252
|
+
|
|
4253
|
+
assert!(changes(&db, "2").keyed);
|
|
4254
|
+
}
|
|
4255
|
+
|
|
4256
|
+
#[test]
|
|
4257
|
+
fn reconcile_batch_rows_reuses_the_key_read_at_the_same_schema_version() {
|
|
4258
|
+
let db = experiments_db();
|
|
4259
|
+
let version: i64 = db
|
|
4260
|
+
.conn()
|
|
4261
|
+
.query_row("PRAGMA schema_version", [], |r| r.get(0))
|
|
4262
|
+
.unwrap();
|
|
4263
|
+
db.keys
|
|
4264
|
+
.borrow_mut()
|
|
4265
|
+
.insert("experiments".into(), (version, Vec::new()));
|
|
4266
|
+
let next = shaped(
|
|
4267
|
+
&db,
|
|
4268
|
+
"experiments",
|
|
4269
|
+
serde_json::json!([
|
|
4270
|
+
{"folder_name":"a","name":"Alpha"},
|
|
4271
|
+
{"folder_name":"b","name":"Renamed"}
|
|
4272
|
+
]),
|
|
4273
|
+
);
|
|
4274
|
+
|
|
4275
|
+
let changes = db.reconcile_batch_rows("experiments", "", &next).unwrap();
|
|
4276
|
+
|
|
4277
|
+
assert!(!changes.keyed);
|
|
4278
|
+
}
|
|
4279
|
+
|
|
4179
4280
|
#[test]
|
|
4180
4281
|
fn reconcile_batch_rows_writes_nothing_for_an_unchanged_keyed_table() {
|
|
4181
4282
|
let db = experiments_db();
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-plugin-discovery.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-13-repeatable-config.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-07-29-restore-python-310.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md
RENAMED
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md
RENAMED
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-03-python-no-ignore.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-08-20-declared-table-name.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-09-18-export-scan-failure.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-02-readme-docs-host.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-directory.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-config-gitignore.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-bracket-slash-literal.md
RENAMED
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-dotdot-as-written.md
RENAMED
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-glob-walks-node-modules.md
RENAMED
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-literal-gitignore.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-posix-classes-unicode.md
RENAMED
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-10-07-spread-few-large-files.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dirsql-0.4.124 → dirsql-0.4.125}/packages/python/changelog.d/2026-11-02-watch-live-on-return.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|