data-flow-control 0.1.3__tar.gz → 0.1.4__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 (177) hide show
  1. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/Cargo.lock +73 -74
  2. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/Cargo.toml +1 -1
  3. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/PKG-INFO +1 -1
  4. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/actions.rs +11 -0
  5. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/resolution.rs +88 -1
  6. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/select.rs +2 -0
  7. data_flow_control-0.1.4/passant-core/tests/execution/kill.rs +116 -0
  8. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/insert_shapes.rs +74 -0
  9. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/scan.rs +28 -0
  10. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/pyproject.toml +1 -1
  11. data_flow_control-0.1.3/passant-core/tests/execution/kill.rs +0 -48
  12. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/LICENSE +0 -0
  13. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/Cargo.toml +0 -0
  14. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/benches/rewrite_perf.rs +0 -0
  15. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/aggregate_registry.rs +0 -0
  16. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/catalog.rs +0 -0
  17. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/diagnostics.rs +0 -0
  18. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/explain.rs +0 -0
  19. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/full_push.rs +0 -0
  20. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/identifiers.rs +0 -0
  21. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/intern.rs +0 -0
  22. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/ir.rs +0 -0
  23. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/lib.rs +0 -0
  24. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/optimizer.rs +0 -0
  25. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/parser.rs +0 -0
  26. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/partial_push.rs +0 -0
  27. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/planner.rs +0 -0
  28. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy.rs +0 -0
  29. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_compile.rs +0 -0
  30. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_index.rs +0 -0
  31. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_parser.rs +0 -0
  32. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_pgn.pest +0 -0
  33. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/branch.rs +0 -0
  34. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/compiled.rs +0 -0
  35. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/delete.rs +0 -0
  36. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/indexes.rs +0 -0
  37. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/memory.rs +0 -0
  38. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/policy_store/mod.rs +0 -0
  39. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/query_analysis.rs +0 -0
  40. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewrite_stats.rs +0 -0
  41. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewrite_strategy.rs +0 -0
  42. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/aggregates.rs +0 -0
  43. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/columns.rs +0 -0
  44. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/constraint_preprocess.rs +0 -0
  45. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/derived_policy.rs +0 -0
  46. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/dimensions.rs +0 -0
  47. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/exists.rs +0 -0
  48. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/expr.rs +0 -0
  49. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/helpers.rs +0 -0
  50. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/limit.rs +0 -0
  51. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/mod.rs +0 -0
  52. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/applicability.rs +0 -0
  53. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/dominance.rs +0 -0
  54. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/mod.rs +0 -0
  55. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/scope_plan.rs +0 -0
  56. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/plan/write_plan.rs +0 -0
  57. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/policy_expr.rs +0 -0
  58. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/projection.rs +0 -0
  59. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/scope.rs +0 -0
  60. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/types.rs +0 -0
  61. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/rewriter/write_path.rs +0 -0
  62. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/semiring.rs +0 -0
  63. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_set_index.rs +0 -0
  64. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/analysis.rs +0 -0
  65. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/annotations.rs +0 -0
  66. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/branch.rs +0 -0
  67. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/mod.rs +0 -0
  68. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/rewrites.rs +0 -0
  69. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/source_sets/split.rs +0 -0
  70. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/ast_stats.rs +0 -0
  71. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/builders.rs +0 -0
  72. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/columns.rs +0 -0
  73. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/dialect.rs +0 -0
  74. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/expr.rs +0 -0
  75. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/expr_key.rs +0 -0
  76. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/mod.rs +0 -0
  77. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/parse.rs +0 -0
  78. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/sql/render.rs +0 -0
  79. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/statement_tables.rs +0 -0
  80. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/src/threshold.rs +0 -0
  81. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/common/duckdb.rs +0 -0
  82. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/common/mod.rs +0 -0
  83. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/conformance.rs +0 -0
  84. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/main.rs +0 -0
  85. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/partial_push.rs +0 -0
  86. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/pgn.rs +0 -0
  87. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/pgn_unique.rs +0 -0
  88. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/policy_storage.rs +0 -0
  89. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/rewrite_api_parity.rs +0 -0
  90. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/semiring.rs +0 -0
  91. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/source_sets.rs +0 -0
  92. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/symmetric_self_join.rs +0 -0
  93. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/threshold.rs +0 -0
  94. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/completion/unique_not_unique.rs +0 -0
  95. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/dialect.rs +0 -0
  96. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/execution/insert.rs +0 -0
  97. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/execution/main.rs +0 -0
  98. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/execution/oracle.rs +0 -0
  99. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/execution/remove.rs +0 -0
  100. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/execution/update.rs +0 -0
  101. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/expected/duckdb/remove_scan.sql +0 -0
  102. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/expected/postgres/remove_scan.sql +0 -0
  103. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/expected/sqlite/remove_scan.sql +0 -0
  104. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/explain_strategy.rs +0 -0
  105. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/column_propagation.rs +0 -0
  106. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/dimensions.rs +0 -0
  107. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/exists_join.rs +0 -0
  108. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/having_where.rs +0 -0
  109. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/identifiers.rs +0 -0
  110. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/main.rs +0 -0
  111. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/multi_source.rs +0 -0
  112. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/operators.rs +0 -0
  113. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/query_shapes.rs +0 -0
  114. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/gaps/scalar_subquery.rs +0 -0
  115. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/indexed_candidate_differential.rs +0 -0
  116. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/insert_values_body.rs +0 -0
  117. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/paper_examples.rs +0 -0
  118. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/parser.rs +0 -0
  119. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/planner.rs +0 -0
  120. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/policy.rs +0 -0
  121. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/policy_dialect.rs +0 -0
  122. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/policy_store_memory.rs +0 -0
  123. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/derived_policy.rs +0 -0
  124. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/in_semijoin.rs +0 -0
  125. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/insert.rs +0 -0
  126. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/joins.rs +0 -0
  127. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/main.rs +0 -0
  128. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/output.rs +0 -0
  129. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/recursive.rs +0 -0
  130. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite/update.rs +0 -0
  131. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite_candidate_regression.rs +0 -0
  132. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite_fast_paths.rs +0 -0
  133. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite_large_registry.rs +0 -0
  134. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/rewrite_stats_timings.rs +0 -0
  135. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/scan_ready_expr.rs +0 -0
  136. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/source_set_split_no_parse.rs +0 -0
  137. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/sql_builders.rs +0 -0
  138. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/sql_columns.rs +0 -0
  139. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-core/tests/ui_resolution.rs +0 -0
  140. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/Cargo.toml +0 -0
  141. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/catalog.rs +0 -0
  142. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/errors.rs +0 -0
  143. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/mod.rs +0 -0
  144. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/planner.rs +0 -0
  145. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/policy.rs +0 -0
  146. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/bindings/stats.rs +0 -0
  147. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/passant-py/src/lib.rs +0 -0
  148. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/__init__.py +0 -0
  149. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/_rust.py +0 -0
  150. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/__init__.py +0 -0
  151. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/base.py +0 -0
  152. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/clickhouse.py +0 -0
  153. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/datafusion.py +0 -0
  154. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/duckdb.py +0 -0
  155. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/kill.py +0 -0
  156. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/pg_catalog.py +0 -0
  157. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/postgres.py +0 -0
  158. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/registry.py +0 -0
  159. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/sqlite.py +0 -0
  160. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/adapters/umbra.py +0 -0
  161. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/aggregate_introspection.py +0 -0
  162. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/catalog.py +0 -0
  163. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/connection.py +0 -0
  164. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/dialect.py +0 -0
  165. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/__init__.py +0 -0
  166. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/agent.py +0 -0
  167. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/call_tool_with_dataflow.py +0 -0
  168. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/database.py +0 -0
  169. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/middleware.py +0 -0
  170. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/schema.py +0 -0
  171. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/sql_validation.py +0 -0
  172. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/tool_spec.py +0 -0
  173. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/langchain/wrapper.py +0 -0
  174. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/options.py +0 -0
  175. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/planner.py +0 -0
  176. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/policy.py +0 -0
  177. {data_flow_control-0.1.3 → data_flow_control-0.1.4}/python/data_flow_control/ui.py +0 -0
@@ -323,9 +323,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
323
323
 
324
324
  [[package]]
325
325
  name = "autocfg"
326
- version = "1.5.0"
326
+ version = "1.5.1"
327
327
  source = "registry+https://github.com/rust-lang/crates.io-index"
328
- checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
328
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
329
329
 
330
330
  [[package]]
331
331
  name = "base64"
@@ -335,9 +335,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
335
335
 
336
336
  [[package]]
337
337
  name = "bitflags"
338
- version = "2.11.1"
338
+ version = "2.13.0"
339
339
  source = "registry+https://github.com/rust-lang/crates.io-index"
340
- checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
340
+ checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
341
341
 
342
342
  [[package]]
343
343
  name = "bitvec"
@@ -449,9 +449,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
449
449
 
450
450
  [[package]]
451
451
  name = "cc"
452
- version = "1.2.62"
452
+ version = "1.2.64"
453
453
  source = "registry+https://github.com/rust-lang/crates.io-index"
454
- checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98"
454
+ checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f"
455
455
  dependencies = [
456
456
  "find-msvc-tools",
457
457
  "jobserver",
@@ -473,9 +473,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
473
473
 
474
474
  [[package]]
475
475
  name = "chrono"
476
- version = "0.4.44"
476
+ version = "0.4.45"
477
477
  source = "registry+https://github.com/rust-lang/crates.io-index"
478
- checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
478
+ checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
479
479
  dependencies = [
480
480
  "iana-time-zone",
481
481
  "num-traits",
@@ -511,9 +511,9 @@ dependencies = [
511
511
 
512
512
  [[package]]
513
513
  name = "clap"
514
- version = "4.6.0"
514
+ version = "4.6.1"
515
515
  source = "registry+https://github.com/rust-lang/crates.io-index"
516
- checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
516
+ checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
517
517
  dependencies = [
518
518
  "clap_builder",
519
519
  "clap_derive",
@@ -533,9 +533,9 @@ dependencies = [
533
533
 
534
534
  [[package]]
535
535
  name = "clap_derive"
536
- version = "4.6.0"
536
+ version = "4.6.1"
537
537
  source = "registry+https://github.com/rust-lang/crates.io-index"
538
- checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
538
+ checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
539
539
  dependencies = [
540
540
  "heck",
541
541
  "proc-macro2",
@@ -744,9 +744,9 @@ dependencies = [
744
744
 
745
745
  [[package]]
746
746
  name = "displaydoc"
747
- version = "0.2.5"
747
+ version = "0.2.6"
748
748
  source = "registry+https://github.com/rust-lang/crates.io-index"
749
- checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
749
+ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
750
750
  dependencies = [
751
751
  "proc-macro2",
752
752
  "quote",
@@ -1008,9 +1008,9 @@ checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1008
1008
 
1009
1009
  [[package]]
1010
1010
  name = "http"
1011
- version = "1.4.0"
1011
+ version = "1.4.2"
1012
1012
  source = "registry+https://github.com/rust-lang/crates.io-index"
1013
- checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
1013
+ checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
1014
1014
  dependencies = [
1015
1015
  "bytes",
1016
1016
  "itoa",
@@ -1047,9 +1047,9 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1047
1047
 
1048
1048
  [[package]]
1049
1049
  name = "hyper"
1050
- version = "1.9.0"
1050
+ version = "1.10.1"
1051
1051
  source = "registry+https://github.com/rust-lang/crates.io-index"
1052
- checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca"
1052
+ checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498"
1053
1053
  dependencies = [
1054
1054
  "atomic-waker",
1055
1055
  "bytes",
@@ -1300,13 +1300,12 @@ dependencies = [
1300
1300
 
1301
1301
  [[package]]
1302
1302
  name = "js-sys"
1303
- version = "0.3.99"
1303
+ version = "0.3.102"
1304
1304
  source = "registry+https://github.com/rust-lang/crates.io-index"
1305
- checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11"
1305
+ checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
1306
1306
  dependencies = [
1307
1307
  "cfg-if",
1308
1308
  "futures-util",
1309
- "once_cell",
1310
1309
  "wasm-bindgen",
1311
1310
  ]
1312
1311
 
@@ -1369,9 +1368,9 @@ dependencies = [
1369
1368
 
1370
1369
  [[package]]
1371
1370
  name = "libc"
1372
- version = "0.2.184"
1371
+ version = "0.2.186"
1373
1372
  source = "registry+https://github.com/rust-lang/crates.io-index"
1374
- checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
1373
+ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
1375
1374
 
1376
1375
  [[package]]
1377
1376
  name = "libduckdb-sys"
@@ -1425,9 +1424,9 @@ dependencies = [
1425
1424
 
1426
1425
  [[package]]
1427
1426
  name = "log"
1428
- version = "0.4.29"
1427
+ version = "0.4.32"
1429
1428
  source = "registry+https://github.com/rust-lang/crates.io-index"
1430
- checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
1429
+ checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
1431
1430
 
1432
1431
  [[package]]
1433
1432
  name = "lru-slab"
@@ -1437,9 +1436,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1437
1436
 
1438
1437
  [[package]]
1439
1438
  name = "memchr"
1440
- version = "2.8.0"
1439
+ version = "2.8.2"
1441
1440
  source = "registry+https://github.com/rust-lang/crates.io-index"
1442
- checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
1441
+ checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
1443
1442
 
1444
1443
  [[package]]
1445
1444
  name = "memoffset"
@@ -1462,9 +1461,9 @@ dependencies = [
1462
1461
 
1463
1462
  [[package]]
1464
1463
  name = "mio"
1465
- version = "1.2.0"
1464
+ version = "1.2.1"
1466
1465
  source = "registry+https://github.com/rust-lang/crates.io-index"
1467
- checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
1466
+ checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
1468
1467
  dependencies = [
1469
1468
  "libc",
1470
1469
  "wasi",
@@ -1594,7 +1593,7 @@ dependencies = [
1594
1593
 
1595
1594
  [[package]]
1596
1595
  name = "passant-cli"
1597
- version = "0.1.3"
1596
+ version = "0.1.4"
1598
1597
  dependencies = [
1599
1598
  "anyhow",
1600
1599
  "assert_cmd",
@@ -1606,7 +1605,7 @@ dependencies = [
1606
1605
 
1607
1606
  [[package]]
1608
1607
  name = "passant-core"
1609
- version = "0.1.3"
1608
+ version = "0.1.4"
1610
1609
  dependencies = [
1611
1610
  "anyhow",
1612
1611
  "criterion",
@@ -1624,7 +1623,7 @@ dependencies = [
1624
1623
 
1625
1624
  [[package]]
1626
1625
  name = "passant-py"
1627
- version = "0.1.3"
1626
+ version = "0.1.4"
1628
1627
  dependencies = [
1629
1628
  "passant-core",
1630
1629
  "pyo3",
@@ -2052,9 +2051,9 @@ dependencies = [
2052
2051
 
2053
2052
  [[package]]
2054
2053
  name = "regex"
2055
- version = "1.12.3"
2054
+ version = "1.12.4"
2056
2055
  source = "registry+https://github.com/rust-lang/crates.io-index"
2057
- checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
2056
+ checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
2058
2057
  dependencies = [
2059
2058
  "aho-corasick",
2060
2059
  "memchr",
@@ -2075,9 +2074,9 @@ dependencies = [
2075
2074
 
2076
2075
  [[package]]
2077
2076
  name = "regex-syntax"
2078
- version = "0.8.10"
2077
+ version = "0.8.11"
2079
2078
  source = "registry+https://github.com/rust-lang/crates.io-index"
2080
- checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
2079
+ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
2081
2080
 
2082
2081
  [[package]]
2083
2082
  name = "rend"
@@ -2183,9 +2182,9 @@ dependencies = [
2183
2182
 
2184
2183
  [[package]]
2185
2184
  name = "rust_decimal"
2186
- version = "1.42.0"
2185
+ version = "1.42.1"
2187
2186
  source = "registry+https://github.com/rust-lang/crates.io-index"
2188
- checksum = "0c5108e3d4d903e21aac27f12ba5377b6b34f9f44b325e4894c7924169d06995"
2187
+ checksum = "be2a24f50780bc85f09cc6ac299bdf1424302742d77221106859c9d8b102126a"
2189
2188
  dependencies = [
2190
2189
  "arrayvec",
2191
2190
  "borsh",
@@ -2330,9 +2329,9 @@ dependencies = [
2330
2329
 
2331
2330
  [[package]]
2332
2331
  name = "serde_json"
2333
- version = "1.0.149"
2332
+ version = "1.0.150"
2334
2333
  source = "registry+https://github.com/rust-lang/crates.io-index"
2335
- checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
2334
+ checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
2336
2335
  dependencies = [
2337
2336
  "itoa",
2338
2337
  "memchr",
@@ -2366,9 +2365,9 @@ dependencies = [
2366
2365
 
2367
2366
  [[package]]
2368
2367
  name = "shlex"
2369
- version = "1.3.0"
2368
+ version = "2.0.1"
2370
2369
  source = "registry+https://github.com/rust-lang/crates.io-index"
2371
- checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
2370
+ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
2372
2371
 
2373
2372
  [[package]]
2374
2373
  name = "simd-adler32"
@@ -2390,15 +2389,15 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
2390
2389
 
2391
2390
  [[package]]
2392
2391
  name = "smallvec"
2393
- version = "1.15.1"
2392
+ version = "1.15.2"
2394
2393
  source = "registry+https://github.com/rust-lang/crates.io-index"
2395
- checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
2394
+ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
2396
2395
 
2397
2396
  [[package]]
2398
2397
  name = "socket2"
2399
- version = "0.6.3"
2398
+ version = "0.6.4"
2400
2399
  source = "registry+https://github.com/rust-lang/crates.io-index"
2401
- checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
2400
+ checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
2402
2401
  dependencies = [
2403
2402
  "libc",
2404
2403
  "windows-sys 0.61.2",
@@ -2623,9 +2622,9 @@ dependencies = [
2623
2622
 
2624
2623
  [[package]]
2625
2624
  name = "toml_edit"
2626
- version = "0.25.11+spec-1.1.0"
2625
+ version = "0.25.12+spec-1.1.0"
2627
2626
  source = "registry+https://github.com/rust-lang/crates.io-index"
2628
- checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b"
2627
+ checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7"
2629
2628
  dependencies = [
2630
2629
  "indexmap",
2631
2630
  "toml_datetime",
@@ -2732,9 +2731,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
2732
2731
 
2733
2732
  [[package]]
2734
2733
  name = "unicode-segmentation"
2735
- version = "1.13.2"
2734
+ version = "1.13.3"
2736
2735
  source = "registry+https://github.com/rust-lang/crates.io-index"
2737
- checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
2736
+ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
2738
2737
 
2739
2738
  [[package]]
2740
2739
  name = "unicode-width"
@@ -2780,9 +2779,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
2780
2779
 
2781
2780
  [[package]]
2782
2781
  name = "uuid"
2783
- version = "1.23.1"
2782
+ version = "1.23.3"
2784
2783
  source = "registry+https://github.com/rust-lang/crates.io-index"
2785
- checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76"
2784
+ checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
2786
2785
  dependencies = [
2787
2786
  "js-sys",
2788
2787
  "wasm-bindgen",
@@ -2836,18 +2835,18 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
2836
2835
 
2837
2836
  [[package]]
2838
2837
  name = "wasip2"
2839
- version = "1.0.3+wasi-0.2.9"
2838
+ version = "1.0.4+wasi-0.2.12"
2840
2839
  source = "registry+https://github.com/rust-lang/crates.io-index"
2841
- checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
2840
+ checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
2842
2841
  dependencies = [
2843
2842
  "wit-bindgen",
2844
2843
  ]
2845
2844
 
2846
2845
  [[package]]
2847
2846
  name = "wasm-bindgen"
2848
- version = "0.2.122"
2847
+ version = "0.2.125"
2849
2848
  source = "registry+https://github.com/rust-lang/crates.io-index"
2850
- checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409"
2849
+ checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
2851
2850
  dependencies = [
2852
2851
  "cfg-if",
2853
2852
  "once_cell",
@@ -2859,9 +2858,9 @@ dependencies = [
2859
2858
 
2860
2859
  [[package]]
2861
2860
  name = "wasm-bindgen-futures"
2862
- version = "0.4.72"
2861
+ version = "0.4.75"
2863
2862
  source = "registry+https://github.com/rust-lang/crates.io-index"
2864
- checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f"
2863
+ checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280"
2865
2864
  dependencies = [
2866
2865
  "js-sys",
2867
2866
  "wasm-bindgen",
@@ -2869,9 +2868,9 @@ dependencies = [
2869
2868
 
2870
2869
  [[package]]
2871
2870
  name = "wasm-bindgen-macro"
2872
- version = "0.2.122"
2871
+ version = "0.2.125"
2873
2872
  source = "registry+https://github.com/rust-lang/crates.io-index"
2874
- checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6"
2873
+ checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
2875
2874
  dependencies = [
2876
2875
  "quote",
2877
2876
  "wasm-bindgen-macro-support",
@@ -2879,9 +2878,9 @@ dependencies = [
2879
2878
 
2880
2879
  [[package]]
2881
2880
  name = "wasm-bindgen-macro-support"
2882
- version = "0.2.122"
2881
+ version = "0.2.125"
2883
2882
  source = "registry+https://github.com/rust-lang/crates.io-index"
2884
- checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e"
2883
+ checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
2885
2884
  dependencies = [
2886
2885
  "bumpalo",
2887
2886
  "proc-macro2",
@@ -2892,18 +2891,18 @@ dependencies = [
2892
2891
 
2893
2892
  [[package]]
2894
2893
  name = "wasm-bindgen-shared"
2895
- version = "0.2.122"
2894
+ version = "0.2.125"
2896
2895
  source = "registry+https://github.com/rust-lang/crates.io-index"
2897
- checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437"
2896
+ checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
2898
2897
  dependencies = [
2899
2898
  "unicode-ident",
2900
2899
  ]
2901
2900
 
2902
2901
  [[package]]
2903
2902
  name = "web-sys"
2904
- version = "0.3.99"
2903
+ version = "0.3.102"
2905
2904
  source = "registry+https://github.com/rust-lang/crates.io-index"
2906
- checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436"
2905
+ checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d"
2907
2906
  dependencies = [
2908
2907
  "js-sys",
2909
2908
  "wasm-bindgen",
@@ -3231,9 +3230,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
3231
3230
 
3232
3231
  [[package]]
3233
3232
  name = "yoke"
3234
- version = "0.8.2"
3233
+ version = "0.8.3"
3235
3234
  source = "registry+https://github.com/rust-lang/crates.io-index"
3236
- checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca"
3235
+ checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
3237
3236
  dependencies = [
3238
3237
  "stable_deref_trait",
3239
3238
  "yoke-derive",
@@ -3254,18 +3253,18 @@ dependencies = [
3254
3253
 
3255
3254
  [[package]]
3256
3255
  name = "zerocopy"
3257
- version = "0.8.48"
3256
+ version = "0.8.52"
3258
3257
  source = "registry+https://github.com/rust-lang/crates.io-index"
3259
- checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
3258
+ checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
3260
3259
  dependencies = [
3261
3260
  "zerocopy-derive",
3262
3261
  ]
3263
3262
 
3264
3263
  [[package]]
3265
3264
  name = "zerocopy-derive"
3266
- version = "0.8.48"
3265
+ version = "0.8.52"
3267
3266
  source = "registry+https://github.com/rust-lang/crates.io-index"
3268
- checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
3267
+ checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
3269
3268
  dependencies = [
3270
3269
  "proc-macro2",
3271
3270
  "quote",
@@ -3295,9 +3294,9 @@ dependencies = [
3295
3294
 
3296
3295
  [[package]]
3297
3296
  name = "zeroize"
3298
- version = "1.8.2"
3297
+ version = "1.9.0"
3299
3298
  source = "registry+https://github.com/rust-lang/crates.io-index"
3300
- checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
3299
+ checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
3301
3300
 
3302
3301
  [[package]]
3303
3302
  name = "zerotrie"
@@ -3,7 +3,7 @@ members = ["passant-core", "passant-py"]
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "0.1.3"
6
+ version = "0.1.4"
7
7
  edition = "2024"
8
8
  license = "MIT"
9
9
  authors = ["Charlie Summers"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: data-flow-control
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Requires-Dist: boto3>=1.26.0
5
5
  Requires-Dist: duckdb>=1.3.0
6
6
  Requires-Dist: langchain>=1.3,<2
@@ -235,11 +235,18 @@ pub(crate) fn apply_policy_resolution_actions(
235
235
  ));
236
236
  }
237
237
 
238
+ let mut kill_filters = Vec::new();
239
+
238
240
  for action in actions {
239
241
  match action {
240
242
  PolicyResolutionAction::Filter { filter, .. } => {
241
243
  add_filter(select, filter.clone(), is_aggregation)?;
242
244
  }
245
+ PolicyResolutionAction::TupleUdf {
246
+ filter, udf_name, ..
247
+ } if udf_name.eq_ignore_ascii_case(PASSANT_KILL_UDF) => {
248
+ kill_filters.push(filter.clone());
249
+ }
243
250
  PolicyResolutionAction::TupleUdf {
244
251
  filter, udf_name, ..
245
252
  } => {
@@ -268,6 +275,10 @@ pub(crate) fn apply_policy_resolution_actions(
268
275
  }
269
276
  }
270
277
  }
278
+ if let Some(combined) = kill_filters.into_iter().reduce(and_expr) {
279
+ let inner = std::mem::replace(select, crate::sql::empty_select());
280
+ *select = wrap_select_with_tuple_resolution(inner, combined, PASSANT_KILL_UDF)?;
281
+ }
271
282
  Ok(())
272
283
  }
273
284
 
@@ -33,9 +33,53 @@ pub(crate) const RELATION_INPUT_CTE: &str = "__passant_relation_input";
33
33
  pub(crate) const RELATION_AGG_CTE: &str = "__passant_relation_agg";
34
34
  pub(crate) const RELATION_BATCH_VIOLATION_COLUMN: &str = "__passant_batch_violation";
35
35
  pub(crate) const PASSANT_KILL_UDF: &str = "passant_kill";
36
+ pub(crate) const PASSANT_KILL_WRAPPER: &str = "__passant_kill";
36
37
  pub(crate) const UI_ADDRESS_VIOLATING_ROWS_UDF: &str = "address_violating_rows";
37
38
  pub(crate) const PASSANT_UI_APPROVE_UDF: &str = "passant_ui_approve";
38
39
 
40
+ /// After KILL wrapping, the outer query is `SELECT * FROM __passant_kill` while
41
+ /// `ORDER BY` may still reference the original table aliases. Unqualify them.
42
+ pub(crate) fn remap_query_order_by_after_kill_wrap(query: &mut Query) {
43
+ if query.order_by.is_none() {
44
+ return;
45
+ }
46
+ let SetExpr::Select(select) = query.body.as_mut() else {
47
+ return;
48
+ };
49
+ if !is_kill_wrapped_select(select) {
50
+ return;
51
+ }
52
+ if let Some(order_by) = query.order_by.as_mut() {
53
+ for item in &mut order_by.exprs {
54
+ crate::rewriter::columns::unqualify_columns(&mut item.expr);
55
+ }
56
+ }
57
+ }
58
+
59
+ fn is_kill_wrapped_select(select: &Select) -> bool {
60
+ if select.projection.len() != 1 {
61
+ return false;
62
+ }
63
+ if !matches!(
64
+ select.projection.first(),
65
+ Some(SelectItem::Wildcard(_))
66
+ ) {
67
+ return false;
68
+ }
69
+ let Some(TableWithJoins {
70
+ relation:
71
+ TableFactor::Derived {
72
+ alias: Some(alias), ..
73
+ },
74
+ joins,
75
+ ..
76
+ }) = select.from.first()
77
+ else {
78
+ return false;
79
+ };
80
+ alias.name.value == PASSANT_KILL_WRAPPER && joins.is_empty()
81
+ }
82
+
39
83
  #[derive(Debug, Clone)]
40
84
  pub(crate) struct UiResolutionSpec {
41
85
  pub constraint: String,
@@ -98,7 +142,7 @@ pub(crate) fn wrap_select_with_tuple_resolution(
98
142
  relation: TableFactor::Derived {
99
143
  lateral: false,
100
144
  subquery: Box::new(final_query),
101
- alias: Some(crate::sql::table_alias("__passant_kill")),
145
+ alias: Some(crate::sql::table_alias(PASSANT_KILL_WRAPPER)),
102
146
  },
103
147
  joins: Vec::new(),
104
148
  }];
@@ -673,6 +717,49 @@ mod tests {
673
717
  assert!(sql.contains("__passant_kill"));
674
718
  }
675
719
 
720
+ #[test]
721
+ fn kill_wrap_remaps_qualified_order_by() {
722
+ let mut inner = empty_select();
723
+ inner.projection = vec![alias_expr(qualified_column("receipts", "id"), "id")];
724
+ inner.from = vec![TableWithJoins {
725
+ relation: table_factor("receipts"),
726
+ joins: Vec::new(),
727
+ }];
728
+ let mut query = query_from_select(inner);
729
+ query.order_by = Some(sqlparser::ast::OrderBy {
730
+ exprs: vec![sqlparser::ast::OrderByExpr {
731
+ expr: qualified_column("receipts", "id"),
732
+ asc: None,
733
+ nulls_first: None,
734
+ with_fill: None,
735
+ }],
736
+ interpolate: None,
737
+ });
738
+
739
+ let wrapped = wrap_select_with_tuple_resolution(
740
+ match query.body.as_ref() {
741
+ SetExpr::Select(select) => select.as_ref().clone(),
742
+ _ => unreachable!(),
743
+ },
744
+ binary_comparison(
745
+ qualified_column("receipts", "id"),
746
+ sqlparser::ast::BinaryOperator::Gt,
747
+ crate::sql::int_literal(0),
748
+ ),
749
+ PASSANT_KILL_UDF,
750
+ )
751
+ .expect("wrap");
752
+ query.body = Box::new(SetExpr::Select(Box::new(wrapped)));
753
+ remap_query_order_by_after_kill_wrap(&mut query);
754
+
755
+ let sql = render_statement(&crate::sql::statement_from_query(query), None);
756
+ assert!(sql.contains("ORDER BY id"), "expected unqualified ORDER BY: {sql}");
757
+ assert!(
758
+ !sql.contains("ORDER BY receipts."),
759
+ "qualified ORDER BY should be remapped: {sql}"
760
+ );
761
+ }
762
+
676
763
  #[test]
677
764
  fn tuple_resolution_emits_t1_through_t4_ctes() {
678
765
  let mut inner = empty_select();
@@ -20,6 +20,7 @@ use super::derived_policy::{
20
20
  use super::exists::apply_in_semijoin_policy_filters;
21
21
  use super::helpers::select_output_column_mapping;
22
22
  use super::limit::wrap_limited_policy_query;
23
+ use super::resolution::remap_query_order_by_after_kill_wrap;
23
24
  use super::plan::{apply_select_rewrite_plan, plan_select_rewrite};
24
25
  use super::types::{PassantRewriter, RewriteContext};
25
26
 
@@ -372,6 +373,7 @@ impl PassantRewriter {
372
373
  return Ok(());
373
374
  }
374
375
  self.rewrite_set_expr(query.body.as_mut(), context)?;
376
+ remap_query_order_by_after_kill_wrap(query);
375
377
  if context.sink.is_none() {
376
378
  self.apply_query_relation_resolution(query, context)?;
377
379
  }