mammoth-cli 2.2.22__tar.gz → 2.2.23__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 (257) hide show
  1. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/PKG-INFO +1 -1
  2. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/__init__.py +1 -1
  3. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/dataset.py +69 -2
  4. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/view_ops.py +25 -1
  5. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/errors/envelope.py +2 -0
  6. mammoth_cli-2.2.23/mammoth_cli/services/sql_check.py +87 -0
  7. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/pyproject.toml +1 -1
  8. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/.gitignore +0 -0
  9. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/LICENSE +0 -0
  10. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/README.md +0 -0
  11. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/__main__.py +0 -0
  12. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/app.py +0 -0
  13. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/SKILL.md +0 -0
  14. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/about-mammoth.md +0 -0
  15. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/auth.md +0 -0
  16. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities-misc.md +0 -0
  17. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/capabilities.md +0 -0
  18. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/command-index.md +0 -0
  19. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/activity.md +0 -0
  20. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/addon.md +0 -0
  21. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/agent.md +0 -0
  22. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/ai.md +0 -0
  23. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/annotation.md +0 -0
  24. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/auth.md +0 -0
  25. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/automation.md +0 -0
  26. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/batch.md +0 -0
  27. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/billing.md +0 -0
  28. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/browse.md +0 -0
  29. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/calc.md +0 -0
  30. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/capability.md +0 -0
  31. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/client-app.md +0 -0
  32. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/completion.md +0 -0
  33. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/config.md +0 -0
  34. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/connector.md +0 -0
  35. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/context.md +0 -0
  36. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-qa.md +0 -0
  37. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-style.md +0 -0
  38. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard-template.md +0 -0
  39. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dashboard.md +0 -0
  40. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/data-app.md +0 -0
  41. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/dataset.md +0 -0
  42. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/doctor.md +0 -0
  43. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/external-key.md +0 -0
  44. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/file.md +0 -0
  45. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/folder.md +0 -0
  46. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/job.md +0 -0
  47. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/link.md +0 -0
  48. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/log.md +0 -0
  49. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/notification.md +0 -0
  50. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/parameter.md +0 -0
  51. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/project.md +0 -0
  52. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/report.md +0 -0
  53. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schedule.md +0 -0
  54. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/schema.md +0 -0
  55. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/skill.md +0 -0
  56. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/snippet.md +0 -0
  57. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/support.md +0 -0
  58. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/template.md +0 -0
  59. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/trash.md +0 -0
  60. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/upgrade.md +0 -0
  61. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/user.md +0 -0
  62. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/version.md +0 -0
  63. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view-transform.md +0 -0
  64. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/view.md +0 -0
  65. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/webhook.md +0 -0
  66. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workflow.md +0 -0
  67. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/commands/workspace.md +0 -0
  68. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/handoff.md +0 -0
  69. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/input.md +0 -0
  70. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/jobs-drafts.md +0 -0
  71. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/machine-output.md +0 -0
  72. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/operations.md +0 -0
  73. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/auth-scope.md +0 -0
  74. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/cleanup.md +0 -0
  75. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/dashboards.md +0 -0
  76. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/database-import.md +0 -0
  77. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/end-to-end.md +0 -0
  78. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/exports.md +0 -0
  79. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/index.md +0 -0
  80. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/need-action.md +0 -0
  81. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/resources.md +0 -0
  82. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/scheduling.md +0 -0
  83. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/transforms.md +0 -0
  84. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recipes/typed-etl-discovery.md +0 -0
  85. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/recovery.md +0 -0
  86. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/report-checklist.md +0 -0
  87. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/retention.md +0 -0
  88. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/safety.md +0 -0
  89. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/bundled_skill/mammoth-cli/references/task-start.md +0 -0
  90. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/__init__.py +0 -0
  91. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/activity.py +0 -0
  92. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/addon.py +0 -0
  93. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/agent.py +0 -0
  94. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/ai.py +0 -0
  95. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/annotation.py +0 -0
  96. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/auth.py +0 -0
  97. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/automation.py +0 -0
  98. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/batch.py +0 -0
  99. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/billing.py +0 -0
  100. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/browse.py +0 -0
  101. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/calc.py +0 -0
  102. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/capability.py +0 -0
  103. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/client_app.py +0 -0
  104. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/completion.py +0 -0
  105. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/config.py +0 -0
  106. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/connector.py +0 -0
  107. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/context.py +0 -0
  108. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/dashboard.py +0 -0
  109. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/data_app.py +0 -0
  110. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/doctor.py +0 -0
  111. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/external_key.py +0 -0
  112. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/file.py +0 -0
  113. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/folder.py +0 -0
  114. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/job.py +0 -0
  115. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/link.py +0 -0
  116. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/notification.py +0 -0
  117. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/parameter.py +0 -0
  118. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/project.py +0 -0
  119. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/registry.py +0 -0
  120. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/report.py +0 -0
  121. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/schedule.py +0 -0
  122. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/schema.py +0 -0
  123. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/skill.py +0 -0
  124. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/snippet.py +0 -0
  125. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/support.py +0 -0
  126. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/template.py +0 -0
  127. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/trash.py +0 -0
  128. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/upgrade.py +0 -0
  129. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/user.py +0 -0
  130. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/view.py +0 -0
  131. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/view_profile.py +0 -0
  132. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/webhook.py +0 -0
  133. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/workflow.py +0 -0
  134. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/commands/workspace.py +0 -0
  135. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/context/__init__.py +0 -0
  136. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/context/credentials.py +0 -0
  137. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/context/endpoint.py +0 -0
  138. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/context/profiles.py +0 -0
  139. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/context/resolver.py +0 -0
  140. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/contracts/__init__.py +0 -0
  141. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/contracts/auth.py +0 -0
  142. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/embed.py +0 -0
  143. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/errors/__init__.py +0 -0
  144. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/manifest/__init__.py +0 -0
  145. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/manifest/loader.py +0 -0
  146. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/messages/__init__.py +0 -0
  147. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/__init__.py +0 -0
  148. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/envelope.py +0 -0
  149. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/normalize.py +0 -0
  150. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/policy.py +0 -0
  151. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/progress.py +0 -0
  152. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/output/render.py +0 -0
  153. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/py.typed +0 -0
  154. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/__init__.py +0 -0
  155. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/confirm.py +0 -0
  156. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/dataset_health.py +0 -0
  157. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/dryrun.py +0 -0
  158. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/dryrun_targets.py +0 -0
  159. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/embedded.py +0 -0
  160. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/executor.py +0 -0
  161. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/input_loader.py +0 -0
  162. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/intent_only.py +0 -0
  163. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/invocation.py +0 -0
  164. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/new_data.py +0 -0
  165. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/options.py +0 -0
  166. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/parents.py +0 -0
  167. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/runlog.py +0 -0
  168. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/session.py +0 -0
  169. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/state.py +0 -0
  170. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/strict.py +0 -0
  171. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/updates.py +0 -0
  172. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/validate.py +0 -0
  173. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/runtime/verify.py +0 -0
  174. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/__init__.py +0 -0
  175. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/argspec.py +0 -0
  176. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/board_values.py +0 -0
  177. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/coerce.py +0 -0
  178. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/command_contract.py +0 -0
  179. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/conditional_format.py +0 -0
  180. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/conditions.py +0 -0
  181. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/dashboard_filters.py +0 -0
  182. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/dashboard_pages.py +0 -0
  183. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/dashboard_review.py +0 -0
  184. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/data_profile.py +0 -0
  185. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/data_quality.py +0 -0
  186. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/dispatch.py +0 -0
  187. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/factory.py +0 -0
  188. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/input_fields.py +0 -0
  189. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/listing.py +0 -0
  190. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/local_time.py +0 -0
  191. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/mapping.py +0 -0
  192. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/openapi_types.py +0 -0
  193. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/positionals.py +0 -0
  194. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/protocol.py +0 -0
  195. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/read_queries.py +0 -0
  196. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/sdk_service.py +0 -0
  197. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/stored_stats.py +0 -0
  198. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/testing.py +0 -0
  199. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/text_dates.py +0 -0
  200. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/type_system.py +0 -0
  201. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/services/write_impact.py +0 -0
  202. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/skills/__init__.py +0 -0
  203. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/skills/installer.py +0 -0
  204. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/skills/steering.py +0 -0
  205. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/mammoth_cli/testing.py +0 -0
  206. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/activity.yaml +0 -0
  207. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/addon.yaml +0 -0
  208. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/agent.yaml +0 -0
  209. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/ai.yaml +0 -0
  210. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/annotation.yaml +0 -0
  211. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/auth.yaml +0 -0
  212. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/automation.yaml +0 -0
  213. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/batch.yaml +0 -0
  214. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/billing.yaml +0 -0
  215. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/browse.yaml +0 -0
  216. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/calc.yaml +0 -0
  217. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/capability.yaml +0 -0
  218. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/client-app.yaml +0 -0
  219. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/completion.yaml +0 -0
  220. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/config.yaml +0 -0
  221. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/connector.yaml +0 -0
  222. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/context.yaml +0 -0
  223. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/dashboard.yaml +0 -0
  224. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/data-app.yaml +0 -0
  225. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/dataset.yaml +0 -0
  226. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/doctor.yaml +0 -0
  227. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/external-key.yaml +0 -0
  228. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/file.yaml +0 -0
  229. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/folder.yaml +0 -0
  230. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/job.yaml +0 -0
  231. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/link.yaml +0 -0
  232. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/log.yaml +0 -0
  233. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/notification.yaml +0 -0
  234. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/parameter.yaml +0 -0
  235. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/project.yaml +0 -0
  236. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/report.yaml +0 -0
  237. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/schedule.yaml +0 -0
  238. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/schema.yaml +0 -0
  239. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/skill.yaml +0 -0
  240. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/snippet.yaml +0 -0
  241. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/support.yaml +0 -0
  242. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/template.yaml +0 -0
  243. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/trash.yaml +0 -0
  244. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/upgrade.yaml +0 -0
  245. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/user.yaml +0 -0
  246. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/version.yaml +0 -0
  247. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/view.yaml +0 -0
  248. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/webhook.yaml +0 -0
  249. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/workflow.yaml +0 -0
  250. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/commands/workspace.yaml +0 -0
  251. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/edits-target.source.yaml +0 -0
  252. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/openapi-operations.yaml +0 -0
  253. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/schema-v1.json +0 -0
  254. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/sdk-catalog.source.yaml +0 -0
  255. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/manifests/sdk-methods.yaml +0 -0
  256. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/openapi/metadata.json +0 -0
  257. {mammoth_cli-2.2.22 → mammoth_cli-2.2.23}/spec/openapi/openapi.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mammoth-cli
3
- Version: 2.2.22
3
+ Version: 2.2.23
4
4
  Summary: Command-line interface for the Mammoth Analytics platform
5
5
  Project-URL: homepage, https://mammoth.io
6
6
  Project-URL: repository, https://github.com/EdgeMetric/mammothsdk
@@ -6,7 +6,7 @@ not implement a second HTTP client and does not call private SDK members.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "2.2.22"
9
+ __version__ = "2.2.23"
10
10
 
11
11
  # The versioned machine output envelope contract.
12
12
  SCHEMA_VERSION = 1
@@ -810,6 +810,8 @@ def dataset_create(invocation: Invocation) -> HandlerResult:
810
810
  assert document is not None
811
811
  _forward_optional(document, kwargs, ("folder_resource_id",))
812
812
  with open_service(invocation) as (service, auth):
813
+ if invocation.dry_run:
814
+ _predict_final_name(invocation, service, dataset_spec, project_id)
813
815
  data = service.call(_symbol(invocation), **kwargs)
814
816
  # ``datasets.create`` returns a bare job handle and never waits. Block on
815
817
  # it here (honoring ``--job-timeout``) so the command reports a finished
@@ -845,6 +847,71 @@ def _created_dataset(handle: Any, settled: Any) -> dict[str, Any]:
845
847
  return result
846
848
 
847
849
 
850
+ #: Pages (of 100) read to predict a final name; past it the answer is "a suffix may be added".
851
+ _NAME_PROBE_PAGES = 20
852
+
853
+
854
+ def _requested_name(dataset_spec: object) -> str | None:
855
+ """The name the caller asked for: ``ds_name`` (clone, cloud) or ``name`` (sketch)."""
856
+ if not isinstance(dataset_spec, dict):
857
+ return None
858
+ for key in ("ds_name", "name"):
859
+ if isinstance(dataset_spec.get(key), str) and dataset_spec[key]:
860
+ return str(dataset_spec[key])
861
+ return None
862
+
863
+
864
+ def _project_dataset_names(service: _SdkCaller, project_id: int) -> tuple[set[str], bool]:
865
+ """Every dataset name in the project and whether all of them were read."""
866
+ names: set[str] = set()
867
+ for page in range(_NAME_PROBE_PAGES):
868
+ data = service.call(
869
+ "mammoth.api.datasets.DatasetsAPI.list",
870
+ project_id=project_id,
871
+ limit=100,
872
+ offset=page * 100,
873
+ )
874
+ rows = data.get("datasets", []) if isinstance(data, dict) else []
875
+ names.update(r["name"] for r in rows if isinstance(r, dict) and "name" in r)
876
+ if len(rows) < 100:
877
+ return names, True
878
+ return names, False
879
+
880
+
881
+ def _name_impact(requested: str, names: set[str], complete: bool) -> dict[str, Any]:
882
+ """The dry-run prediction for ``requested`` against the project's dataset ``names``."""
883
+ if requested not in names:
884
+ free: dict[str, Any] = {"requested_name": requested, "name_taken": False}
885
+ if complete:
886
+ return {**free, "final_name": requested}
887
+ return {**free, "note": "Not all datasets were read; a numeric suffix is added if taken."}
888
+ impact: dict[str, Any] = {"requested_name": requested, "name_taken": True}
889
+ if not complete:
890
+ impact["note"] = f"'{requested}' is taken; a numeric suffix will be added to the name."
891
+ return impact
892
+ suffix = next(i for i in range(2, len(names) + 3) if f"{requested} {i}" not in names)
893
+ impact["final_name"] = f"{requested} {suffix}"
894
+ impact["note"] = (
895
+ f"'{requested}' is taken; the dataset will be named '{impact['final_name']}'. "
896
+ "Ask the user whether to use a different name."
897
+ )
898
+ return impact
899
+
900
+
901
+ def _predict_final_name(
902
+ invocation: Invocation, service: _SdkCaller, dataset_spec: object, project_id: int
903
+ ) -> None:
904
+ """Dry run: say whether the requested name is taken and what the server will name it.
905
+
906
+ The server (``Datasource.get_unique_name``) tries ``name``, ``name 2``, ``name 3``...
907
+ against the project's live dataset names, so the answer is computed the same way.
908
+ """
909
+ requested = _requested_name(dataset_spec)
910
+ if requested is not None:
911
+ names, complete = _project_dataset_names(service, project_id)
912
+ object.__setattr__(invocation, "predicted_impact", _name_impact(requested, names, complete))
913
+
914
+
848
915
  def _add_final_name(
849
916
  service: _SdkCaller, result: dict[str, Any], dataset_spec: object, project_id: int
850
917
  ) -> None:
@@ -873,8 +940,8 @@ def _add_final_name(
873
940
  if not isinstance(name, str):
874
941
  return
875
942
  result["name"] = name
876
- requested = dataset_spec.get("name") if isinstance(dataset_spec, dict) else None
877
- if isinstance(requested, str) and requested != name:
943
+ requested = _requested_name(dataset_spec)
944
+ if requested is not None and requested != name:
878
945
  result["requested_name"] = requested
879
946
  result["note"] = f"The name '{requested}' was taken, so the dataset is named '{name}'."
880
947
 
@@ -61,6 +61,7 @@ from mammoth_cli.runtime.session import open_service, resolved_project
61
61
  from mammoth_cli.services.command_contract import bind_command_inputs
62
62
  from mammoth_cli.services.conditions import CONDITION_KWARG
63
63
  from mammoth_cli.services.input_fields import TASK_COUNT_FIELD
64
+ from mammoth_cli.services.sql_check import check_sql_binds
64
65
  from mammoth_cli.services.write_impact import (
65
66
  ImpactRead,
66
67
  Measure,
@@ -923,7 +924,30 @@ def view_transform_add_sql(invocation: Invocation) -> HandlerResult:
923
924
  _require_field(document, "query")
924
925
  assert document is not None
925
926
  kwargs = _bind_transform_inputs(invocation, document)
926
- return _dispatch_view(invocation, view_id, "add_sql", **kwargs)
927
+ return _dispatch_view(
928
+ invocation, view_id, "add_sql", prepare=_sql_binding_check(invocation, view_id), **kwargs
929
+ )
930
+
931
+
932
+ def _sql_binding_check(
933
+ invocation: Invocation, view_id: int
934
+ ) -> Callable[[Any, int, dict[str, Any]], Any]:
935
+ """A ``prepare`` hook: a dry run fails with ``would_fail`` when the SQL names a column
936
+ the step cannot bind (see :mod:`mammoth_cli.services.sql_check`). A real run is unchanged."""
937
+
938
+ def check(service: Any, dataset_id: int, kwargs: dict[str, Any]) -> Any:
939
+ if invocation.dry_run:
940
+ view = service.call(
941
+ _DATAVIEW_GET_SYMBOL,
942
+ dataset_id=dataset_id,
943
+ dataview_id=view_id,
944
+ project_id=resolved_project(invocation),
945
+ )
946
+ if isinstance(view, dict):
947
+ check_sql_binds(str(kwargs.get("query", "")), view)
948
+ return None
949
+
950
+ return check
927
951
 
928
952
 
929
953
  def view_transform_ai(invocation: Invocation) -> HandlerResult:
@@ -56,6 +56,7 @@ CODE_JOB_FAILED = "job_failed"
56
56
  CODE_INTERRUPTED = "interrupted"
57
57
  CODE_UNSUPPORTED_CONTRACT = "unsupported_contract"
58
58
  CODE_NO_OP = "no_op"
59
+ CODE_WOULD_FAIL = "would_fail"
59
60
 
60
61
  # User-safe, one-line summaries shown to the customer instead of the model-facing
61
62
  # ``message``/``hint``. Plain language only: no command names, ids, field names
@@ -173,6 +174,7 @@ ERROR_SUMMARIES: dict[str, str] = {
173
174
  "upgrade_failed": "The update didn't complete.",
174
175
  "usage_error": _S_BAD_REQUEST,
175
176
  "view_in_draft": "This view is still a draft and can't be used yet.",
177
+ "would_fail": "This step would fail when it runs, so it was not added.",
176
178
  }
177
179
 
178
180
  #: Shown for a code with no entry (a runtime backstop only; the exhaustiveness
@@ -0,0 +1,87 @@
1
+ """Check a SQL step's column names against what it will bind to, before it is added.
2
+
3
+ ``FROM "view:<id>"`` binds to the names the pipeline produced (the ``metadata`` of the
4
+ view's latest data), not to a display-only rename (``display_properties.COLUMN_NAMES``),
5
+ which ``view get`` shows. A query naming the renamed column is accepted by the CLI and
6
+ fails in the backend's DuckDB with a Binder Error, so a dry run says so first.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import re
12
+ from collections.abc import Mapping
13
+
14
+ from mammoth_cli.errors.envelope import CODE_WOULD_FAIL, EXIT_USAGE, CliError
15
+
16
+ _STRING = re.compile(r"'(?:[^']|'')*'")
17
+ _QUOTED = re.compile(r'"((?:[^"]|"")+)"')
18
+ _ALIAS = re.compile(r'\bAS\s+("(?:[^"]|"")+"|\w+)|("(?:[^"]|"")+"|\w+)\s+AS\s*\(', re.IGNORECASE)
19
+ _TABLE = re.compile(r'\b(?:FROM|JOIN)\s+("(?:[^"]|"")+")', re.IGNORECASE)
20
+ _VIEW_REF = re.compile(r"view:\d+")
21
+
22
+
23
+ def _unquote(name: str) -> str:
24
+ return name[1:-1].replace('""', '"') if name.startswith('"') else name
25
+
26
+
27
+ def _declared(query: str) -> set[str]:
28
+ """Names the query itself introduces (aliases, CTEs) or reads as a table."""
29
+ aliases = {_unquote(a or b) for a, b in _ALIAS.findall(query)}
30
+ tables = {_unquote(t) for t in _TABLE.findall(query)}
31
+ return {name.casefold() for name in aliases | tables}
32
+
33
+
34
+ def _identifiers(query: str, renamed: Mapping[str, str]) -> list[str]:
35
+ """Quoted identifiers, plus any bare word that is a renamed column's new name."""
36
+ found = [m for m in _QUOTED.findall(query) if not _VIEW_REF.fullmatch(m)]
37
+ words = {w.casefold() for w in re.findall(r"\w+", _QUOTED.sub(" ", query))}
38
+ found += [new for new in renamed if new.casefold() in words]
39
+ return list(dict.fromkeys(name.replace('""', '"') for name in found))
40
+
41
+
42
+ def _renames(view: Mapping[str, object]) -> dict[str, str]:
43
+ """``{new name: pipeline name}`` for each display-only rename of the view."""
44
+ display = view.get("display_properties")
45
+ names = display.get("COLUMN_NAMES") if isinstance(display, dict) else None
46
+ metadata = view.get("metadata")
47
+ if not isinstance(names, dict) or not isinstance(metadata, list):
48
+ return {}
49
+ by_internal = {c.get("internal_name"): c.get("display_name") for c in metadata}
50
+ return {new: by_internal[i] for i, new in names.items() if by_internal.get(i)}
51
+
52
+
53
+ def check_sql_binds(query: str, view: Mapping[str, object]) -> None:
54
+ """Raise ``would_fail`` when ``query`` names a column the step cannot bind.
55
+
56
+ Args:
57
+ query: The step's SQL.
58
+ view: The raw ``dataview get`` record (its ``metadata`` is the bindable schema).
59
+
60
+ Raises:
61
+ CliError: ``would_fail``, with the unknown name and the candidate columns.
62
+ """
63
+ metadata = view.get("metadata")
64
+ rows = metadata if isinstance(metadata, list) else []
65
+ columns = [
66
+ str(c["display_name"]) for c in rows if isinstance(c, dict) and c.get("display_name")
67
+ ]
68
+ if not columns:
69
+ return
70
+ renamed = _renames(view)
71
+ text = _STRING.sub("''", query)
72
+ known = {c.casefold() for c in columns} | _declared(text)
73
+ for name in _identifiers(text, renamed):
74
+ if name.casefold() not in known:
75
+ raise _unbound(name, columns, renamed.get(name))
76
+
77
+
78
+ def _unbound(name: str, columns: list[str], was: str | None) -> CliError:
79
+ hint = f'Use "{was}": "{name}" is only a display name for it.' if was else None
80
+ return CliError(
81
+ code=CODE_WOULD_FAIL,
82
+ message=f'Referenced column "{name}" not found. Candidate bindings: '
83
+ + ", ".join(f'"{c}"' for c in columns),
84
+ exit_status=EXIT_USAGE,
85
+ hint=hint or "Use one of the candidate columns; nothing was added.",
86
+ details={"unknown_column": name, "candidate_columns": columns},
87
+ )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mammoth-cli"
3
- version = "2.2.22"
3
+ version = "2.2.23"
4
4
  description = "Command-line interface for the Mammoth Analytics platform"
5
5
  authors = [{name = "Mammoth Analytics", email = "support@mammoth.io"}]
6
6
  readme = "README.md"
File without changes
File without changes
File without changes