dirsql 0.4.92__tar.gz → 0.4.94__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. {dirsql-0.4.92 → dirsql-0.4.94}/Cargo.lock +2 -2
  2. {dirsql-0.4.92 → dirsql-0.4.94}/PKG-INFO +1 -1
  3. {dirsql-0.4.92 → dirsql-0.4.94}/docs/.vitepress/config.ts +1 -0
  4. {dirsql-0.4.92/packages/rust → dirsql-0.4.94}/docs/reference/config.md +7 -8
  5. dirsql-0.4.94/docs/reference/glob.md +140 -0
  6. {dirsql-0.4.92/packages/rust → dirsql-0.4.94}/docs/reference/path-tables.md +2 -10
  7. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/Cargo.toml +1 -1
  8. dirsql-0.4.94/packages/python/changelog.d/2026-10-06-config-links.md +3 -0
  9. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/.vitepress/config.ts +1 -0
  10. {dirsql-0.4.92 → dirsql-0.4.94/packages/python}/docs/reference/config.md +7 -8
  11. dirsql-0.4.94/packages/python/docs/reference/glob.md +140 -0
  12. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/path-tables.md +2 -10
  13. dirsql-0.4.94/packages/python/e2e-attestations/bot-1334-listing-exemptions.json +7 -0
  14. dirsql-0.4.94/packages/python/e2e-attestations/bot-1415-server-speed.json +7 -0
  15. dirsql-0.4.94/packages/python/e2e-attestations/claude-1258-config-links.json +7 -0
  16. dirsql-0.4.94/packages/python/migrations.d/2026-10-06-config-links.md +43 -0
  17. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/Cargo.toml +1 -1
  18. {dirsql-0.4.92/packages/python → dirsql-0.4.94/packages/rust}/docs/reference/config.md +7 -8
  19. dirsql-0.4.94/packages/rust/docs/reference/glob.md +140 -0
  20. {dirsql-0.4.92 → dirsql-0.4.94/packages/rust}/docs/reference/path-tables.md +2 -10
  21. dirsql-0.4.94/packages/rust/src/listing.rs +357 -0
  22. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/matcher.rs +53 -9
  23. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/scanner.rs +36 -25
  24. dirsql-0.4.92/packages/rust/src/listing.rs +0 -217
  25. {dirsql-0.4.92 → dirsql-0.4.94}/Cargo.toml +0 -0
  26. {dirsql-0.4.92 → dirsql-0.4.94}/README.md +0 -0
  27. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/__init__.py +0 -0
  28. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/_async.py +0 -0
  29. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/_dirsql.pyi +0 -0
  30. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/__init__.py +0 -0
  31. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/discover_plugins/__init__.py +0 -0
  32. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/discover_plugins/discovered_fragments.py +0 -0
  33. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/discover_plugins/discovery_disabled.py +0 -0
  34. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/discover_plugins/fragment_path.py +0 -0
  35. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/discover_plugins/with_discovered_plugins.py +0 -0
  36. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/main.py +0 -0
  37. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/cli/resolve_config_extensions.py +0 -0
  38. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/plan_entry_path.py +0 -0
  39. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/py.typed +0 -0
  40. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/read_config.py +0 -0
  41. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/resolve_configs_extension_specs.py +0 -0
  42. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/resolve_extension.py +0 -0
  43. {dirsql-0.4.92 → dirsql-0.4.94}/dirsql/resolve_package.py +0 -0
  44. {dirsql-0.4.92 → dirsql-0.4.94}/docs/.claude/CLAUDE.md +0 -0
  45. {dirsql-0.4.92 → dirsql-0.4.94}/docs/.vitepress/theme/index.ts +0 -0
  46. {dirsql-0.4.92 → dirsql-0.4.94}/docs/.vitepress/theme/lang.ts +0 -0
  47. {dirsql-0.4.92 → dirsql-0.4.94}/docs/AGENTS.md +0 -0
  48. {dirsql-0.4.92 → dirsql-0.4.94}/docs/context/.gitattributes +0 -0
  49. {dirsql-0.4.92 → dirsql-0.4.94}/docs/context/recipes.md +0 -0
  50. {dirsql-0.4.92 → dirsql-0.4.94}/docs/context/troubleshooting.md +0 -0
  51. {dirsql-0.4.92 → dirsql-0.4.94}/docs/context/usage.md +0 -0
  52. {dirsql-0.4.92 → dirsql-0.4.94}/docs/explanation.md +0 -0
  53. {dirsql-0.4.92 → dirsql-0.4.94}/docs/getting-started.md +0 -0
  54. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/agent-skill.md +0 -0
  55. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/columns-from-paths.md +0 -0
  56. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/define-tables.md +0 -0
  57. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/embed.md +0 -0
  58. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/extract-from-contents.md +0 -0
  59. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/load-extension.md +0 -0
  60. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/parse-files-into-columns.md +0 -0
  61. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/persist.md +0 -0
  62. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/query-json.md +0 -0
  63. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/query-without-config.md +0 -0
  64. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/react-to-changes.md +0 -0
  65. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/search-by-meaning.md +0 -0
  66. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/search-indexes.md +0 -0
  67. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/skip-files.md +0 -0
  68. {dirsql-0.4.92 → dirsql-0.4.94}/docs/howto/write-a-plugin.md +0 -0
  69. {dirsql-0.4.92 → dirsql-0.4.94}/docs/index.md +0 -0
  70. {dirsql-0.4.92 → dirsql-0.4.94}/docs/package.json +0 -0
  71. {dirsql-0.4.92 → dirsql-0.4.94}/docs/plugins.md +0 -0
  72. {dirsql-0.4.92 → dirsql-0.4.94}/docs/pnpm-lock.yaml +0 -0
  73. {dirsql-0.4.92 → dirsql-0.4.94}/docs/pnpm-workspace.yaml +0 -0
  74. {dirsql-0.4.92 → dirsql-0.4.94}/docs/reference/cli.md +0 -0
  75. {dirsql-0.4.92 → dirsql-0.4.94}/docs/reference/columns.md +0 -0
  76. {dirsql-0.4.92 → dirsql-0.4.94}/docs/reference/hooks.md +0 -0
  77. {dirsql-0.4.92 → dirsql-0.4.94}/docs/reference/http-api.md +0 -0
  78. {dirsql-0.4.92 → dirsql-0.4.94}/docs/reference/sdk.md +0 -0
  79. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/CHANGELOG.md +0 -0
  80. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/MIGRATIONS.md +0 -0
  81. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/README.md +0 -0
  82. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  83. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-13-plugin-discovery.md +0 -0
  84. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  85. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-13-repeatable-config.md +0 -0
  86. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  87. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-20-drop-implicit-files-table.md +0 -0
  88. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-21-remove-glob-captures.md +0 -0
  89. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-24-hookless-table-config-error.md +0 -0
  90. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  91. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-07-29-restore-python-310.md +0 -0
  92. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-02-release-profile.md +0 -0
  93. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-02-scan-failures.md +0 -0
  94. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-03-discovery-ext-resolution.md +0 -0
  95. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-03-manylinux-dynamic-binary.md +0 -0
  96. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-03-python-no-ignore.md +0 -0
  97. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-04-cast-lints.md +0 -0
  98. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-04-cli-in-process.md +0 -0
  99. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-20-curtaincall-dev-dependency.md +0 -0
  100. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-08-20-declared-table-name.md +0 -0
  101. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-04-config-paths-from-argv-module.md +0 -0
  102. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-05-config-extension-loader-split.md +0 -0
  103. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-05-resolve-config-extensions-split.md +0 -0
  104. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-05-resolve-extension-split.md +0 -0
  105. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-09-launcher-config-path-scan.md +0 -0
  106. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-17-extension-resolution-via-core.md +0 -0
  107. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-18-export-scan-failure.md +0 -0
  108. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-18-flatten-row-event-in-core.md +0 -0
  109. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-18-programmatic-extension-plan.md +0 -0
  110. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  111. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  112. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-02-readme-docs-host.md +0 -0
  113. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  114. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-03-path-table-directory-one-level.md +0 -0
  115. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  116. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  117. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-cli-context.md +0 -0
  118. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-gitignore-requires-repo.md +0 -0
  119. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-path-table-node-modules-named.md +0 -0
  120. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-path-table-symlinks.md +0 -0
  121. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-path-table-trailing-slash.md +0 -0
  122. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  123. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-config-braces.md +0 -0
  124. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-config-directory.md +0 -0
  125. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-config-dotnames.md +0 -0
  126. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-config-gitignore.md +0 -0
  127. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  128. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-one-glob-compiler.md +0 -0
  129. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-plugin-no-default-records.md +0 -0
  130. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-watch-broadcast.md +0 -0
  131. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  132. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/changelog.d/README.md +0 -0
  133. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/conftest.py +0 -0
  134. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/.claude/CLAUDE.md +0 -0
  135. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/.vitepress/theme/index.ts +0 -0
  136. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/.vitepress/theme/lang.ts +0 -0
  137. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/AGENTS.md +0 -0
  138. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/context/.gitattributes +0 -0
  139. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/context/recipes.md +0 -0
  140. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/context/troubleshooting.md +0 -0
  141. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/context/usage.md +0 -0
  142. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/explanation.md +0 -0
  143. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/getting-started.md +0 -0
  144. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/agent-skill.md +0 -0
  145. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/columns-from-paths.md +0 -0
  146. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/define-tables.md +0 -0
  147. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/embed.md +0 -0
  148. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/extract-from-contents.md +0 -0
  149. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/load-extension.md +0 -0
  150. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/parse-files-into-columns.md +0 -0
  151. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/persist.md +0 -0
  152. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/query-json.md +0 -0
  153. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/query-without-config.md +0 -0
  154. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/react-to-changes.md +0 -0
  155. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/search-by-meaning.md +0 -0
  156. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/search-indexes.md +0 -0
  157. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/skip-files.md +0 -0
  158. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/howto/write-a-plugin.md +0 -0
  159. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/index.md +0 -0
  160. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/package.json +0 -0
  161. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/plugins.md +0 -0
  162. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/pnpm-lock.yaml +0 -0
  163. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/pnpm-workspace.yaml +0 -0
  164. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/cli.md +0 -0
  165. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/columns.md +0 -0
  166. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/hooks.md +0 -0
  167. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/http-api.md +0 -0
  168. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/docs/reference/sdk.md +0 -0
  169. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/bot-1397-watch-broadcast.json +0 -0
  170. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/bot-1398-inotify-error.json +0 -0
  171. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/bot-1399-server-cors.json +0 -0
  172. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/bot-1401-watch-scope.json +0 -0
  173. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/bot-1407-child-place-depth.json +0 -0
  174. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/cc-keen-knuth-f11gyq.json +0 -0
  175. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1056-py-ofpf9.json +0 -0
  176. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1066-p1-resolve-extension.json +0 -0
  177. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1078-argv-config-paths-core.json +0 -0
  178. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1079-p2-resolve-config-extensions.json +0 -0
  179. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1080-share-vtab-scaffolding.json +0 -0
  180. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1081-indicatif-progress.json +0 -0
  181. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1096-watch-moved-dir.json +0 -0
  182. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1109-watch-moved-out.json +0 -0
  183. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1119-ext-plan.json +0 -0
  184. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1120-py-ext.json +0 -0
  185. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1122-ext-cleanup.json +0 -0
  186. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1130-codec-crates.json +0 -0
  187. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1131-flatten-row-event.json +0 -0
  188. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1139-sse-flatten.json +0 -0
  189. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1140-scan-failure-export.json +0 -0
  190. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1148-clippy-all-targets.json +0 -0
  191. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1164-sigint-fatal.json +0 -0
  192. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1170-projection-order.json +0 -0
  193. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1172-on-file-path.json +0 -0
  194. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1173-py-projection-order.json +0 -0
  195. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1184-win-rel-paths.json +0 -0
  196. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1185-win-abs-table-names.json +0 -0
  197. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1186-win-test-harness.json +0 -0
  198. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1196-join-index.json +0 -0
  199. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1199-glob-prefix.json +0 -0
  200. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1201-single-walk.json +0 -0
  201. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1204-embed-batch.json +0 -0
  202. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1207-win-argv-quote.json +0 -0
  203. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1208-win-nonverbatim-paths.json +0 -0
  204. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1215-on-file-batch.json +0 -0
  205. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1216-on-file-cleanup.json +0 -0
  206. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1223-config-glob-rule.json +0 -0
  207. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1223-dir-one-level.json +0 -0
  208. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1225-plugin-no-default.json +0 -0
  209. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1226-stale-docs.json +0 -0
  210. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1232-anchor-plumbing.json +0 -0
  211. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1232-config-anchor.json +0 -0
  212. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1232-multi-watch.json +0 -0
  213. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1232-zero-match.json +0 -0
  214. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1238-parallel-walk.json +0 -0
  215. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1241-content-prefetch.json +0 -0
  216. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1243-ingest-perf.json +0 -0
  217. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1249-dotfiles.json +0 -0
  218. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1256-symlinks.json +0 -0
  219. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1257-trailing-slash.json +0 -0
  220. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1258-config-braces.json +0 -0
  221. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1258-config-directory.json +0 -0
  222. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1258-config-dotnames.json +0 -0
  223. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1258-config-gitignore.json +0 -0
  224. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1258-one-pattern.json +0 -0
  225. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1262-brace-literal.json +0 -0
  226. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1264-context.json +0 -0
  227. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1267-posix-classes.json +0 -0
  228. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1268-unbalanced-brackets.json +0 -0
  229. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1269-utf8-chars.json +0 -0
  230. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1271-node-modules-named.json +0 -0
  231. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1272-ancestor-gitignore.json +0 -0
  232. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1273-walk-prune.json +0 -0
  233. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1285-ingest-fast.json +0 -0
  234. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1286-nested-repo.json +0 -0
  235. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1305-glob-speed.json +0 -0
  236. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1308-glob-speed.json +0 -0
  237. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1310-glob-speed.json +0 -0
  238. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1311-glob-speed.json +0 -0
  239. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1312-glob-speed.json +0 -0
  240. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1318-lazy-stat.json +0 -0
  241. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1320-walk-speed.json +0 -0
  242. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1322-walk-readdir.json +0 -0
  243. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1325-parallel-walk.json +0 -0
  244. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1326-stream-rows.json +0 -0
  245. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-python-dirsql-patch.json +0 -0
  246. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-python-extensions-patch.json +0 -0
  247. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-scanner-effects.json +0 -0
  248. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-scanner-gitignore.json +0 -0
  249. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-vtab-prefetch-flag.json +0 -0
  250. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1330-vtab-read.json +0 -0
  251. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-1351-dot-dirs.json +0 -0
  252. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-819-oneshot-timeout.json +0 -0
  253. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-827-unquote-doubled-quotes.json +0 -0
  254. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-epic-953-slice2-reedline.json +0 -0
  255. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-epic-953-slice3-format.json +0 -0
  256. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-epic-953-stacked-prs-x59wm3.json +0 -0
  257. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-github-issue-825-e4mhhp.json +0 -0
  258. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-issue-951-0eease.json +0 -0
  259. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-issue-962-0jjrfv.json +0 -0
  260. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-issue-986-red-test-e7sjrb.json +0 -0
  261. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-1034-cachesplit.json +0 -0
  262. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-1042-py12.json +0 -0
  263. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-956-xzen74.json +0 -0
  264. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6-worker-calls.json +0 -0
  265. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-957-lrm0z6.json +0 -0
  266. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/e2e-attestations/claude-tackle-975-n8mc2h.json +0 -0
  267. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-13-drop-cwd-config-auto-detect.md +0 -0
  268. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-13-rename-extract-to-on-file.md +0 -0
  269. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-13-sdk-default-baked-in-config.md +0 -0
  270. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-20-drop-implicit-files-table.md +0 -0
  271. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-21-remove-glob-captures.md +0 -0
  272. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-24-hookless-table-config-error.md +0 -0
  273. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-24-remove-stat-fact-injection.md +0 -0
  274. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-07-29-restore-python-310.md +0 -0
  275. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-08-04-cli-in-process.md +0 -0
  276. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-08-20-declared-table-name.md +0 -0
  277. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-09-20-sigint-ends-a-run-in-progress.md +0 -0
  278. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-09-24-query-rows-in-projection-order.md +0 -0
  279. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-02-readme-docs-host.md +0 -0
  280. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-03-one-glob-rule-for-config-globs.md +0 -0
  281. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-03-path-table-directory-one-level.md +0 -0
  282. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-04-path-table-dotfiles-hidden.md +0 -0
  283. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-brace-groups-follow-bash.md +0 -0
  284. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-cli-context.md +0 -0
  285. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-gitignore-requires-repo.md +0 -0
  286. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-path-table-node-modules-named.md +0 -0
  287. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-path-table-symlinks.md +0 -0
  288. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-path-table-trailing-slash.md +0 -0
  289. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-05-unbalanced-brackets-literal.md +0 -0
  290. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-config-braces.md +0 -0
  291. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-config-directory.md +0 -0
  292. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-config-dotnames.md +0 -0
  293. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-config-gitignore.md +0 -0
  294. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-config-globs-anchor-at-the-config.md +0 -0
  295. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-one-glob-compiler.md +0 -0
  296. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-plugin-no-default-records.md +0 -0
  297. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-watch-broadcast.md +0 -0
  298. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/2026-10-06-zero-match-config-table-warning.md +0 -0
  299. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/migrations.d/README.md +0 -0
  300. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/src/lib.rs +0 -0
  301. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/testing-conventions.toml +0 -0
  302. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/__init__.py +0 -0
  303. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/conftest.py +0 -0
  304. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/e2e/__init__.py +0 -0
  305. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/__init__.py +0 -0
  306. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/e2e/fixtures/dirsql_plugin_fixture/dirsql.toml +0 -0
  307. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/e2e/speed_of_light.py +0 -0
  308. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/integration/__init__.py +0 -0
  309. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/integration/binding/__init__.py +0 -0
  310. {dirsql-0.4.92 → dirsql-0.4.94}/packages/python/tests/integration/hermetic/__init__.py +0 -0
  311. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/CHANGELOG.md +0 -0
  312. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/MIGRATIONS.md +0 -0
  313. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/README.md +0 -0
  314. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/benches/db_bench.rs +0 -0
  315. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/benches/differ_bench.rs +0 -0
  316. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/benches/matcher_bench.rs +0 -0
  317. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/benches/scanner_bench.rs +0 -0
  318. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/context/.gitattributes +0 -0
  319. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/context/recipes.md +0 -0
  320. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/context/troubleshooting.md +0 -0
  321. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/context/usage.md +0 -0
  322. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/explanation.md +0 -0
  323. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/getting-started.md +0 -0
  324. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/agent-skill.md +0 -0
  325. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/columns-from-paths.md +0 -0
  326. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/define-tables.md +0 -0
  327. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/embed.md +0 -0
  328. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/extract-from-contents.md +0 -0
  329. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/load-extension.md +0 -0
  330. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/parse-files-into-columns.md +0 -0
  331. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/persist.md +0 -0
  332. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/query-json.md +0 -0
  333. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/query-without-config.md +0 -0
  334. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/react-to-changes.md +0 -0
  335. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/search-by-meaning.md +0 -0
  336. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/search-indexes.md +0 -0
  337. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/skip-files.md +0 -0
  338. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/howto/write-a-plugin.md +0 -0
  339. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/index.md +0 -0
  340. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/plugins.md +0 -0
  341. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/reference/cli.md +0 -0
  342. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/reference/columns.md +0 -0
  343. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/reference/hooks.md +0 -0
  344. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/reference/http-api.md +0 -0
  345. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/docs/reference/sdk.md +0 -0
  346. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/bin/dirsql.rs +0 -0
  347. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/brace.rs +0 -0
  348. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/context.rs +0 -0
  349. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/execute.rs +0 -0
  350. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/init.rs +0 -0
  351. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/mod.rs +0 -0
  352. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/repl.rs +0 -0
  353. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/router.rs +0 -0
  354. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/run.rs +0 -0
  355. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/serialize.rs +0 -0
  356. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/server.rs +0 -0
  357. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/cli/table.rs +0 -0
  358. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/command.rs +0 -0
  359. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/config.rs +0 -0
  360. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/db.rs +0 -0
  361. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/default_config.toml +0 -0
  362. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/differ.rs +0 -0
  363. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/extension_resolution.rs +0 -0
  364. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/functions.rs +0 -0
  365. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/infer.rs +0 -0
  366. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/launcher.rs +0 -0
  367. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/lib.rs +0 -0
  368. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/on_file.rs +0 -0
  369. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/parsed_vtab.rs +0 -0
  370. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/path_table.rs +0 -0
  371. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/persist.rs +0 -0
  372. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/posix_class.rs +0 -0
  373. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/progress.rs +0 -0
  374. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/row_event_flat.rs +0 -0
  375. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/sql_literal.rs +0 -0
  376. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/tree_walk.rs +0 -0
  377. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/vtab.rs +0 -0
  378. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/vtab_scaffold.rs +0 -0
  379. {dirsql-0.4.92 → dirsql-0.4.94}/packages/rust/src/watcher.rs +0 -0
  380. {dirsql-0.4.92 → dirsql-0.4.94}/pyproject.toml +0 -0
@@ -552,7 +552,7 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
552
552
 
553
553
  [[package]]
554
554
  name = "dirsql"
555
- version = "0.4.92"
555
+ version = "0.4.94"
556
556
  dependencies = [
557
557
  "assert_cmd",
558
558
  "axum",
@@ -603,7 +603,7 @@ dependencies = [
603
603
 
604
604
  [[package]]
605
605
  name = "dirsql-py-ext"
606
- version = "0.4.92"
606
+ version = "0.4.94"
607
607
  dependencies = [
608
608
  "dirsql",
609
609
  "pyo3",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dirsql
3
- Version: 0.4.92
3
+ Version: 0.4.94
4
4
  Requires-Dist: bin-shim>=0.1
5
5
  Summary: Ephemeral SQL index over a local directory
6
6
  Keywords: sql,filesystem,directory,sqlite,index
@@ -77,6 +77,7 @@ export default defineConfig({
77
77
  { text: 'Command Hooks', link: '/reference/hooks' },
78
78
  { text: 'Columns', link: '/reference/columns' },
79
79
  { text: 'Path-tables', link: '/reference/path-tables' },
80
+ { text: 'Globs', link: '/reference/glob' },
80
81
  { text: 'HTTP API', link: '/reference/http-api' },
81
82
  { text: 'SDK', link: '/reference/sdk' }
82
83
  ]
@@ -47,13 +47,12 @@ ignore = ["node_modules/**", ".git/**"]
47
47
 
48
48
  ### Glob rule
49
49
 
50
- Every glob in dirsql — `ignore`, a `[[table]]`'s `glob`, and a
51
- [path-table](./path-tables.md#writing-the-path) — reads as the shell does:
52
- `*` and `?` match within one path segment and never cross `/`; `**` matches
53
- any depth. So `ignore = ["*"]` hides only the files directly inside the root,
54
- `ignore = ["build/*"]` hides `build/a.o` but not `build/sub/b.o`, and
55
- `glob = "*.json"` selects only the top-level `.json` files; write
56
- `**/*.json` to select them at every depth.
50
+ Every glob in dirsql, whether `ignore`, a `[[table]]`'s `glob` or a
51
+ [path-table](./path-tables.md#writing-the-path), reads as bash does with
52
+ `globstar` on. The [glob page](./glob.md) has the rules, examples and every
53
+ divergence. In short, `*` and `?` stay within one path segment, `**` crosses
54
+ directories, and `glob = "*.json"` selects only top-level `.json` files; write
55
+ `**/*.json` for every depth.
57
56
 
58
57
  Persistence is not a config key. Keep the SQLite index on disk between runs
59
58
  with the [`--persist [PATH]` CLI flag](./cli.md#dirsql-server) — a machine-local
@@ -232,7 +231,7 @@ what its required `on-file` command emits — dirsql injects nothing (see
232
231
  |---|---|---|
233
232
  | `name` | yes | The table's SQL name — the name you query it by. Declared, never derived from `ddl`: dirsql does not read the DDL text. The `ddl` must create a table by this name; if it doesn't, loading fails. |
234
233
  | `ddl` | yes | A SQL batch, run verbatim — any number of statements. It must create a table called `name`; that table holds the file rows, and only the columns it declares are kept (keys the `on-file` command emits that are not declared are dropped). The rest of the batch is yours: indexes, virtual tables, triggers. See [Batch `ddl`](#batch-ddl). |
235
- | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` segment is rewritten to `*` (it matches one path segment but captures nothing). |
234
+ | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` is a literal, as in bash and a path-table; the [glob page](./glob.md) has the syntax. |
236
235
  | `on-file` | **yes** | A command run once per table, with every matched file's absolute path appended as a trailing argument; its stdout (one JSON array of row objects) is the table's rows. Must be non-empty. A `[[table]]` with no `on-file` is a load error (see [parse errors](#parse-errors)). See [Command hooks](./hooks.md#on-file). |
237
236
  | `strict` | no (default `false`) | When `true`, rows whose keys do not exactly match the declared columns are rejected with an error: extra keys error, and every declared column must be supplied by the `on-file` output. When `false`, extra keys are dropped and missing columns become `NULL`. |
238
237
 
@@ -0,0 +1,140 @@
1
+ # Globs
2
+
3
+ A glob is the string you write where a table name goes (`FROM './docs/*.md'`)
4
+ or in a config `[[table]]`'s `glob`. dirsql reads it the way `bash` does with
5
+ `globstar` on and `dotglob` off, and every place it does not is listed under
6
+ [Divergences from bash](#divergences-from-bash).
7
+
8
+ ## Why bash
9
+
10
+ Bash with `globstar` is the most popular glob behavior. Bash, zsh, node-glob
11
+ and minimatch (npm, ESLint, VS Code, GitHub Actions) and Python's `glob` agree
12
+ on one core: `*`, `?` and `[...]`, recursive `**`, `{a,b}` braces, `*` hiding
13
+ dotfiles, and `**` not entering symlinked directories. Python has no braces
14
+ and follows symlinks; bash breaks that tie. POSIX has no `**` or braces. So
15
+ there is one standard nobody has to learn, the same string works in a
16
+ [path-table](./path-tables.md) and in a [config](./config.md) `glob`, and each
17
+ divergence is a written decision.
18
+
19
+ ## The fixture
20
+
21
+ Every example below runs against this tree. A name ending in `/` is an empty
22
+ directory, `a -> b` is a symlink, and `.gitignore` holds `*.log`.
23
+
24
+ <!-- conformance-tree -->
25
+ ```text
26
+ top.md
27
+ a.md
28
+ b.md
29
+ c.md
30
+ 1.md
31
+ 2.md
32
+ 3.md
33
+ 4.md
34
+ x.txt
35
+ ignored.log
36
+ {q}.md
37
+ [a].md
38
+ [z.md
39
+ my file.md
40
+ .env
41
+ .git/
42
+ .config/app.toml
43
+ .config/.secret
44
+ .config/sub/deep.md
45
+ docs/guide.md
46
+ docs/api.md
47
+ docs/.draft.md
48
+ docs/nested/deep.md
49
+ docs/nested/.cache/x.md
50
+ node_modules/pkg/index.js
51
+ real/r.md
52
+ linkdir -> real
53
+ link.md -> top.md
54
+ broken -> nowhere
55
+ ```
56
+
57
+ ## Examples
58
+
59
+ Each row lists the files the pattern returns, sorted. Every row without a
60
+ divergence was produced by `bash -O globstar -O nullglob` with `dotglob` off,
61
+ run from the fixture's root, keeping only files. The `Divergence` column names
62
+ the rule from [below](#divergences-from-bash) that makes a row differ from
63
+ bash's raw output. `$ROOT` is the fixture's directory and `$BASE` its parent.
64
+
65
+ A test runs every row against dirsql as a path-table and, with the leading
66
+ `./` dropped, as a config `glob`, so this table cannot drift from the code.
67
+
68
+ <!-- conformance-table -->
69
+ | Pattern | Rows | Divergence |
70
+ | --- | --- | --- |
71
+ | `./*.md` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `link.md`, `my file.md`, `top.md`, `{q}.md` | |
72
+ | `./**/*.md` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md`, `link.md`, `linkdir/r.md`, `my file.md`, `real/r.md`, `top.md`, `{q}.md` | |
73
+ | `./**` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md`, `link.md`, `my file.md`, `real/r.md`, `top.md`, `x.txt`, `{q}.md` | |
74
+ | `./?.md` | `1.md`, `2.md`, `3.md`, `4.md`, `a.md`, `b.md`, `c.md` | |
75
+ | `./[ab].md` | `a.md`, `b.md` | |
76
+ | `./[!a].md` | `1.md`, `2.md`, `3.md`, `4.md`, `b.md`, `c.md` | |
77
+ | `./\[a\].md` | `[a].md` | |
78
+ | `./[z.md` | `[z.md` | |
79
+ | `./{a,b}.md` | `a.md`, `b.md` | |
80
+ | `./{q}.md` | `{q}.md` | |
81
+ | `./{a.md` | none | |
82
+ | `./{1..3}.md` | `1.md`, `2.md`, `3.md` | |
83
+ | `./my file.md` | `my file.md` | |
84
+ | `./.*` | `.env`, `.gitignore` | |
85
+ | `./**/.*` | `.env`, `.gitignore`, `docs/.draft.md` | |
86
+ | `./.env` | `.env` | |
87
+ | `./.config/**` | `.config/app.toml`, `.config/sub/deep.md` | |
88
+ | `./docs/.*` | `docs/.draft.md` | |
89
+ | `./link.md` | `link.md` | |
90
+ | `./linkdir/*` | `linkdir/r.md` | |
91
+ | `./*/r.md` | `linkdir/r.md`, `real/r.md` | |
92
+ | `./**/r.md` | `linkdir/r.md`, `real/r.md` | |
93
+ | `./real/**` | `real/r.md` | |
94
+ | `./docs` | `docs/api.md`, `docs/guide.md` | directory-name |
95
+ | `./docs/` | `docs/api.md`, `docs/guide.md` | directory-name |
96
+ | `./*/` | `docs/api.md`, `docs/guide.md`, `linkdir/r.md`, `real/r.md` | directory-name |
97
+ | `./d*` | none | files-only |
98
+ | `./*.log` | none | gitignore |
99
+ | `./**/*.js` | none | node-modules |
100
+ | `./node_modules/*/index.js` | `node_modules/pkg/index.js` | |
101
+ | `./docs/**/*.md` | `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md` | |
102
+ | `./docs/*.md` | `docs/api.md`, `docs/guide.md` | |
103
+ | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
104
+ | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
105
+ | `../proj/docs/*.md` | `$BASE/proj/docs/api.md`, `$BASE/proj/docs/guide.md` | absolute |
106
+
107
+ ## Divergences from bash
108
+
109
+ | Tag | Rule | Why |
110
+ | --- | --- | --- |
111
+ | `gitignore` | Inside a git repo, `.gitignore` files hide matching files and directories. `--no-ignore` turns it off. | A query over a repo should not drown in build output. |
112
+ | `directory-name` | A pattern's last component that names a directory lists the files directly inside it, like `ls docs`. A trailing `/` is `*` appended. | A table is rows of files, and `ls` is the shell habit. |
113
+ | `files-only` | A pattern that matches a directory but no file returns nothing. | Every row is a file. |
114
+ | `node-modules` | A `node_modules` directory is skipped unless the pattern spells its name. | A zero-config `./**` should not walk dependencies. |
115
+ | `absolute` | `/`, `~/` and `../` patterns report absolute `path` values, with `..` folded out textually. | The scanned root is derived from the pattern, so there is no relative base. |
116
+
117
+ `.git` needs no rule of its own: the dotfile rule hides it.
118
+
119
+ ## Where the glob is anchored
120
+
121
+ A path-table pattern is relative to the index root and starts with `./`. A config `[[table]] glob`
122
+ is relative to the directory holding its config file, whatever directory you
123
+ run `dirsql` from, and is written without the `./`: `./docs/*.md` in a path-table
124
+ is `glob = "docs/*.md"` in a config. A config table whose glob matches no files prints
125
+ `dirsql: table 'name': glob 'pattern' matched no files under <anchor>` to
126
+ stderr; the exit code is unchanged. Path-tables never warn.
127
+
128
+ ## Edge cases
129
+
130
+ - A `{`, `}` or `[` with no partner is a literal character.
131
+ - A brace group with no comma and no `..` is literal (`{q}`); `{1..3}` and
132
+ `{a..c}` expand, as do zero-padded
133
+ `{01..10}` and stepped `{1..10..2}` ranges. Groups nest.
134
+ - `\[` is a literal bracket.
135
+ - A dot-named file or directory is listed only where a component spells the
136
+ dot at that depth: `./**/.*` finds `docs/.draft.md` but does not enter
137
+ `.config/`.
138
+ - A symlinked file is a file. A symlinked directory is entered by any component
139
+ except `**`.
140
+ - A broken link lists nothing.
@@ -52,16 +52,8 @@ depth, as in the shell. A trailing `/` is `*` appended, so `'./*/'` is
52
52
  | `'./notes/today.md'` | exactly that one file — one file is one row |
53
53
 
54
54
  A path containing `*`, `?`, `[` or `{` is a glob and is used exactly as
55
- written: `*` matches within a single directory, `**` crosses directories.
56
-
57
- Braces expand as bash expands them. A group holding a comma is an
58
- alternation: `'./docs/{a,b}.md'` is `docs/a.md` and `docs/b.md`, and groups
59
- nest. A group holding a `..` range counts: `'./log/{1..3}.txt'`,
60
- `'./{a..c}.md'`, `'./{01..10}.md'` (zero-padded) and `'./{1..10..2}.md'`
61
- (every second value). Any other brace is literal text, so `'./br/{q}.md'`
62
- names the file `br/{q}.md`, and `\{` is always a literal brace. A `{`, `}`
63
- or `[` with no partner is literal too, in a path-table and in a config
64
- `[[table]] glob`.
55
+ written. The [glob page](./glob.md) has the syntax, examples and every
56
+ divergence from bash, including braces and unbalanced brackets.
65
57
 
66
58
  The scan starts at the last directory named outright before the first glob
67
59
  component, and descends only as deep as the pattern can match --
@@ -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.92"
7
+ version = "0.4.94"
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,3 @@
1
+ **Changed** A declared `[[table]] glob` skips `node_modules` unless the glob
2
+ names it, and follows symlinks, as a path-table does. `**/*.js` no longer lists
3
+ `node_modules/...`; `link.md -> top.md` and `linkdir/*` now list their rows.
@@ -77,6 +77,7 @@ export default defineConfig({
77
77
  { text: 'Command Hooks', link: '/reference/hooks' },
78
78
  { text: 'Columns', link: '/reference/columns' },
79
79
  { text: 'Path-tables', link: '/reference/path-tables' },
80
+ { text: 'Globs', link: '/reference/glob' },
80
81
  { text: 'HTTP API', link: '/reference/http-api' },
81
82
  { text: 'SDK', link: '/reference/sdk' }
82
83
  ]
@@ -47,13 +47,12 @@ ignore = ["node_modules/**", ".git/**"]
47
47
 
48
48
  ### Glob rule
49
49
 
50
- Every glob in dirsql — `ignore`, a `[[table]]`'s `glob`, and a
51
- [path-table](./path-tables.md#writing-the-path) — reads as the shell does:
52
- `*` and `?` match within one path segment and never cross `/`; `**` matches
53
- any depth. So `ignore = ["*"]` hides only the files directly inside the root,
54
- `ignore = ["build/*"]` hides `build/a.o` but not `build/sub/b.o`, and
55
- `glob = "*.json"` selects only the top-level `.json` files; write
56
- `**/*.json` to select them at every depth.
50
+ Every glob in dirsql, whether `ignore`, a `[[table]]`'s `glob` or a
51
+ [path-table](./path-tables.md#writing-the-path), reads as bash does with
52
+ `globstar` on. The [glob page](./glob.md) has the rules, examples and every
53
+ divergence. In short, `*` and `?` stay within one path segment, `**` crosses
54
+ directories, and `glob = "*.json"` selects only top-level `.json` files; write
55
+ `**/*.json` for every depth.
57
56
 
58
57
  Persistence is not a config key. Keep the SQLite index on disk between runs
59
58
  with the [`--persist [PATH]` CLI flag](./cli.md#dirsql-server) — a machine-local
@@ -232,7 +231,7 @@ what its required `on-file` command emits — dirsql injects nothing (see
232
231
  |---|---|---|
233
232
  | `name` | yes | The table's SQL name — the name you query it by. Declared, never derived from `ddl`: dirsql does not read the DDL text. The `ddl` must create a table by this name; if it doesn't, loading fails. |
234
233
  | `ddl` | yes | A SQL batch, run verbatim — any number of statements. It must create a table called `name`; that table holds the file rows, and only the columns it declares are kept (keys the `on-file` command emits that are not declared are dropped). The rest of the batch is yours: indexes, virtual tables, triggers. See [Batch `ddl`](#batch-ddl). |
235
- | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` segment is rewritten to `*` (it matches one path segment but captures nothing). |
234
+ | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` is a literal, as in bash and a path-table; the [glob page](./glob.md) has the syntax. |
236
235
  | `on-file` | **yes** | A command run once per table, with every matched file's absolute path appended as a trailing argument; its stdout (one JSON array of row objects) is the table's rows. Must be non-empty. A `[[table]]` with no `on-file` is a load error (see [parse errors](#parse-errors)). See [Command hooks](./hooks.md#on-file). |
237
236
  | `strict` | no (default `false`) | When `true`, rows whose keys do not exactly match the declared columns are rejected with an error: extra keys error, and every declared column must be supplied by the `on-file` output. When `false`, extra keys are dropped and missing columns become `NULL`. |
238
237
 
@@ -0,0 +1,140 @@
1
+ # Globs
2
+
3
+ A glob is the string you write where a table name goes (`FROM './docs/*.md'`)
4
+ or in a config `[[table]]`'s `glob`. dirsql reads it the way `bash` does with
5
+ `globstar` on and `dotglob` off, and every place it does not is listed under
6
+ [Divergences from bash](#divergences-from-bash).
7
+
8
+ ## Why bash
9
+
10
+ Bash with `globstar` is the most popular glob behavior. Bash, zsh, node-glob
11
+ and minimatch (npm, ESLint, VS Code, GitHub Actions) and Python's `glob` agree
12
+ on one core: `*`, `?` and `[...]`, recursive `**`, `{a,b}` braces, `*` hiding
13
+ dotfiles, and `**` not entering symlinked directories. Python has no braces
14
+ and follows symlinks; bash breaks that tie. POSIX has no `**` or braces. So
15
+ there is one standard nobody has to learn, the same string works in a
16
+ [path-table](./path-tables.md) and in a [config](./config.md) `glob`, and each
17
+ divergence is a written decision.
18
+
19
+ ## The fixture
20
+
21
+ Every example below runs against this tree. A name ending in `/` is an empty
22
+ directory, `a -> b` is a symlink, and `.gitignore` holds `*.log`.
23
+
24
+ <!-- conformance-tree -->
25
+ ```text
26
+ top.md
27
+ a.md
28
+ b.md
29
+ c.md
30
+ 1.md
31
+ 2.md
32
+ 3.md
33
+ 4.md
34
+ x.txt
35
+ ignored.log
36
+ {q}.md
37
+ [a].md
38
+ [z.md
39
+ my file.md
40
+ .env
41
+ .git/
42
+ .config/app.toml
43
+ .config/.secret
44
+ .config/sub/deep.md
45
+ docs/guide.md
46
+ docs/api.md
47
+ docs/.draft.md
48
+ docs/nested/deep.md
49
+ docs/nested/.cache/x.md
50
+ node_modules/pkg/index.js
51
+ real/r.md
52
+ linkdir -> real
53
+ link.md -> top.md
54
+ broken -> nowhere
55
+ ```
56
+
57
+ ## Examples
58
+
59
+ Each row lists the files the pattern returns, sorted. Every row without a
60
+ divergence was produced by `bash -O globstar -O nullglob` with `dotglob` off,
61
+ run from the fixture's root, keeping only files. The `Divergence` column names
62
+ the rule from [below](#divergences-from-bash) that makes a row differ from
63
+ bash's raw output. `$ROOT` is the fixture's directory and `$BASE` its parent.
64
+
65
+ A test runs every row against dirsql as a path-table and, with the leading
66
+ `./` dropped, as a config `glob`, so this table cannot drift from the code.
67
+
68
+ <!-- conformance-table -->
69
+ | Pattern | Rows | Divergence |
70
+ | --- | --- | --- |
71
+ | `./*.md` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `link.md`, `my file.md`, `top.md`, `{q}.md` | |
72
+ | `./**/*.md` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md`, `link.md`, `linkdir/r.md`, `my file.md`, `real/r.md`, `top.md`, `{q}.md` | |
73
+ | `./**` | `1.md`, `2.md`, `3.md`, `4.md`, `[a].md`, `[z.md`, `a.md`, `b.md`, `c.md`, `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md`, `link.md`, `my file.md`, `real/r.md`, `top.md`, `x.txt`, `{q}.md` | |
74
+ | `./?.md` | `1.md`, `2.md`, `3.md`, `4.md`, `a.md`, `b.md`, `c.md` | |
75
+ | `./[ab].md` | `a.md`, `b.md` | |
76
+ | `./[!a].md` | `1.md`, `2.md`, `3.md`, `4.md`, `b.md`, `c.md` | |
77
+ | `./\[a\].md` | `[a].md` | |
78
+ | `./[z.md` | `[z.md` | |
79
+ | `./{a,b}.md` | `a.md`, `b.md` | |
80
+ | `./{q}.md` | `{q}.md` | |
81
+ | `./{a.md` | none | |
82
+ | `./{1..3}.md` | `1.md`, `2.md`, `3.md` | |
83
+ | `./my file.md` | `my file.md` | |
84
+ | `./.*` | `.env`, `.gitignore` | |
85
+ | `./**/.*` | `.env`, `.gitignore`, `docs/.draft.md` | |
86
+ | `./.env` | `.env` | |
87
+ | `./.config/**` | `.config/app.toml`, `.config/sub/deep.md` | |
88
+ | `./docs/.*` | `docs/.draft.md` | |
89
+ | `./link.md` | `link.md` | |
90
+ | `./linkdir/*` | `linkdir/r.md` | |
91
+ | `./*/r.md` | `linkdir/r.md`, `real/r.md` | |
92
+ | `./**/r.md` | `linkdir/r.md`, `real/r.md` | |
93
+ | `./real/**` | `real/r.md` | |
94
+ | `./docs` | `docs/api.md`, `docs/guide.md` | directory-name |
95
+ | `./docs/` | `docs/api.md`, `docs/guide.md` | directory-name |
96
+ | `./*/` | `docs/api.md`, `docs/guide.md`, `linkdir/r.md`, `real/r.md` | directory-name |
97
+ | `./d*` | none | files-only |
98
+ | `./*.log` | none | gitignore |
99
+ | `./**/*.js` | none | node-modules |
100
+ | `./node_modules/*/index.js` | `node_modules/pkg/index.js` | |
101
+ | `./docs/**/*.md` | `docs/api.md`, `docs/guide.md`, `docs/nested/deep.md` | |
102
+ | `./docs/*.md` | `docs/api.md`, `docs/guide.md` | |
103
+ | `$ROOT/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
104
+ | `~/docs/*.md` | `$ROOT/docs/api.md`, `$ROOT/docs/guide.md` | absolute |
105
+ | `../proj/docs/*.md` | `$BASE/proj/docs/api.md`, `$BASE/proj/docs/guide.md` | absolute |
106
+
107
+ ## Divergences from bash
108
+
109
+ | Tag | Rule | Why |
110
+ | --- | --- | --- |
111
+ | `gitignore` | Inside a git repo, `.gitignore` files hide matching files and directories. `--no-ignore` turns it off. | A query over a repo should not drown in build output. |
112
+ | `directory-name` | A pattern's last component that names a directory lists the files directly inside it, like `ls docs`. A trailing `/` is `*` appended. | A table is rows of files, and `ls` is the shell habit. |
113
+ | `files-only` | A pattern that matches a directory but no file returns nothing. | Every row is a file. |
114
+ | `node-modules` | A `node_modules` directory is skipped unless the pattern spells its name. | A zero-config `./**` should not walk dependencies. |
115
+ | `absolute` | `/`, `~/` and `../` patterns report absolute `path` values, with `..` folded out textually. | The scanned root is derived from the pattern, so there is no relative base. |
116
+
117
+ `.git` needs no rule of its own: the dotfile rule hides it.
118
+
119
+ ## Where the glob is anchored
120
+
121
+ A path-table pattern is relative to the index root and starts with `./`. A config `[[table]] glob`
122
+ is relative to the directory holding its config file, whatever directory you
123
+ run `dirsql` from, and is written without the `./`: `./docs/*.md` in a path-table
124
+ is `glob = "docs/*.md"` in a config. A config table whose glob matches no files prints
125
+ `dirsql: table 'name': glob 'pattern' matched no files under <anchor>` to
126
+ stderr; the exit code is unchanged. Path-tables never warn.
127
+
128
+ ## Edge cases
129
+
130
+ - A `{`, `}` or `[` with no partner is a literal character.
131
+ - A brace group with no comma and no `..` is literal (`{q}`); `{1..3}` and
132
+ `{a..c}` expand, as do zero-padded
133
+ `{01..10}` and stepped `{1..10..2}` ranges. Groups nest.
134
+ - `\[` is a literal bracket.
135
+ - A dot-named file or directory is listed only where a component spells the
136
+ dot at that depth: `./**/.*` finds `docs/.draft.md` but does not enter
137
+ `.config/`.
138
+ - A symlinked file is a file. A symlinked directory is entered by any component
139
+ except `**`.
140
+ - A broken link lists nothing.
@@ -52,16 +52,8 @@ depth, as in the shell. A trailing `/` is `*` appended, so `'./*/'` is
52
52
  | `'./notes/today.md'` | exactly that one file — one file is one row |
53
53
 
54
54
  A path containing `*`, `?`, `[` or `{` is a glob and is used exactly as
55
- written: `*` matches within a single directory, `**` crosses directories.
56
-
57
- Braces expand as bash expands them. A group holding a comma is an
58
- alternation: `'./docs/{a,b}.md'` is `docs/a.md` and `docs/b.md`, and groups
59
- nest. A group holding a `..` range counts: `'./log/{1..3}.txt'`,
60
- `'./{a..c}.md'`, `'./{01..10}.md'` (zero-padded) and `'./{1..10..2}.md'`
61
- (every second value). Any other brace is literal text, so `'./br/{q}.md'`
62
- names the file `br/{q}.md`, and `\{` is always a literal brace. A `{`, `}`
63
- or `[` with no partner is literal too, in a path-table and in a config
64
- `[[table]] glob`.
55
+ written. The [glob page](./glob.md) has the syntax, examples and every
56
+ divergence from bash, including braces and unbalanced brackets.
65
57
 
66
58
  The scan starts at the last directory named outright before the first glob
67
59
  component, and descends only as deep as the pattern can match --
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/query_contract_test.py tests/e2e/fanout_test.py tests/e2e/glob_speed_recursive_test.py tests/e2e/glob_speed_symlink_test.py tests/e2e/glob_speed_one_level_test.py -q",
3
+ "ran_at": 1791338095,
4
+ "exit_code": 0,
5
+ "commit": "31cfc164741af4a61694788ed23b8956401f87fb",
6
+ "branch": "bot/1334-listing-exemptions"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/server_speed_test.py -x -q",
3
+ "ran_at": 1791386395,
4
+ "exit_code": 0,
5
+ "commit": "54e44f7f16d84278a20a8530cc6127e868898eb6",
6
+ "branch": "bot/1415-server-speed"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "command": "uv run python -m pytest tests/e2e/glob_speed_symlink_test.py tests/e2e/glob_speed_node_modules_test.py tests/e2e/glob_speed_dotfiles_test.py tests/e2e/glob_speed_matchers_test.py tests/e2e/query_contract_test.py -x -q",
3
+ "ran_at": 1791338642,
4
+ "exit_code": 0,
5
+ "commit": "81890d53f01c2d6e6e833e0748a6ff952e3382c5",
6
+ "branch": "claude/1258-config-links"
7
+ }
@@ -0,0 +1,43 @@
1
+ ### Config globs skip node_modules unless named, and follow symlinks
2
+
3
+ #### Summary
4
+
5
+ `glob = "**/*.js"` used to list files under any `node_modules`; it now does
6
+ not, unless a component of the glob is `node_modules`. Symlinked files and
7
+ directories, which a config glob used to ignore, are now followed as in a
8
+ path-table and in bash.
9
+
10
+ #### Required changes
11
+
12
+ | Before | After |
13
+ | --- | --- |
14
+ | `glob = "**/*.js"` (included `node_modules/`) | `glob = "node_modules/**/*.js"` to list it |
15
+
16
+ #### Deprecations removed
17
+
18
+ _None._
19
+
20
+ #### Behavior changes without code changes
21
+
22
+ - A glob with no `node_modules` component never matches under one.
23
+ - A symlinked file or directory the glob reaches now yields rows.
24
+
25
+ #### Verification
26
+
27
+ ```bash
28
+ cd "$(mktemp -d)"
29
+ mkdir real node_modules
30
+ echo '[{"p":"r"}]' > real/r.json
31
+ echo '[{"p":"n"}]' > node_modules/n.json
32
+ ln -s real linkdir
33
+ cat > .dirsql.toml <<'TOML'
34
+ [[table]]
35
+ name = "t"
36
+ glob = "**/*.json"
37
+ ddl = "CREATE TABLE t (p TEXT)"
38
+ on-file = "jq -sc add"
39
+ TOML
40
+ dirsql query "SELECT p FROM t" -c .dirsql.toml
41
+ # expected: no row from node_modules; rows for real/ (symlinked linkdir/ is
42
+ # reached by `linkdir/*.json`, not by `**`)
43
+ ```
@@ -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.92"
9
+ version = "0.4.94"
10
10
  edition.workspace = true
11
11
  # Literal `license` (not `license.workspace = true`) because
12
12
  # putitoutthere's preflight check reads `[package].license` directly
@@ -47,13 +47,12 @@ ignore = ["node_modules/**", ".git/**"]
47
47
 
48
48
  ### Glob rule
49
49
 
50
- Every glob in dirsql — `ignore`, a `[[table]]`'s `glob`, and a
51
- [path-table](./path-tables.md#writing-the-path) — reads as the shell does:
52
- `*` and `?` match within one path segment and never cross `/`; `**` matches
53
- any depth. So `ignore = ["*"]` hides only the files directly inside the root,
54
- `ignore = ["build/*"]` hides `build/a.o` but not `build/sub/b.o`, and
55
- `glob = "*.json"` selects only the top-level `.json` files; write
56
- `**/*.json` to select them at every depth.
50
+ Every glob in dirsql, whether `ignore`, a `[[table]]`'s `glob` or a
51
+ [path-table](./path-tables.md#writing-the-path), reads as bash does with
52
+ `globstar` on. The [glob page](./glob.md) has the rules, examples and every
53
+ divergence. In short, `*` and `?` stay within one path segment, `**` crosses
54
+ directories, and `glob = "*.json"` selects only top-level `.json` files; write
55
+ `**/*.json` for every depth.
57
56
 
58
57
  Persistence is not a config key. Keep the SQLite index on disk between runs
59
58
  with the [`--persist [PATH]` CLI flag](./cli.md#dirsql-server) — a machine-local
@@ -232,7 +231,7 @@ what its required `on-file` command emits — dirsql injects nothing (see
232
231
  |---|---|---|
233
232
  | `name` | yes | The table's SQL name — the name you query it by. Declared, never derived from `ddl`: dirsql does not read the DDL text. The `ddl` must create a table by this name; if it doesn't, loading fails. |
234
233
  | `ddl` | yes | A SQL batch, run verbatim — any number of statements. It must create a table called `name`; that table holds the file rows, and only the columns it declares are kept (keys the `on-file` command emits that are not declared are dropped). The rest of the batch is yours: indexes, virtual tables, triggers. See [Batch `ddl`](#batch-ddl). |
235
- | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` segment is rewritten to `*` (it matches one path segment but captures nothing). |
234
+ | `glob` | yes | Glob pattern, [anchored](#glob-anchor) at the config file's directory, under the [one glob rule](#glob-rule): `*` matches one level, `**` any depth. Every table whose glob matches a file receives that file's rows — a file can populate multiple tables. A `{name}` is a literal, as in bash and a path-table; the [glob page](./glob.md) has the syntax. |
236
235
  | `on-file` | **yes** | A command run once per table, with every matched file's absolute path appended as a trailing argument; its stdout (one JSON array of row objects) is the table's rows. Must be non-empty. A `[[table]]` with no `on-file` is a load error (see [parse errors](#parse-errors)). See [Command hooks](./hooks.md#on-file). |
237
236
  | `strict` | no (default `false`) | When `true`, rows whose keys do not exactly match the declared columns are rejected with an error: extra keys error, and every declared column must be supplied by the `on-file` output. When `false`, extra keys are dropped and missing columns become `NULL`. |
238
237