sql-code-graph 1.34.1__tar.gz → 1.34.2__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 (587) hide show
  1. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/PKG-INFO +1 -1
  2. sql_code_graph-1.34.2/plan/metrics/createkind_dwh_after.json +31 -0
  3. sql_code_graph-1.34.2/plan/metrics/createkind_dwh_before.json +31 -0
  4. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/pyproject.toml +1 -1
  5. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/__init__.py +1 -1
  6. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/base.py +2 -1
  7. sql_code_graph-1.34.2/tests/integration/test_non_table_create_coverage_no_regression.py +88 -0
  8. sql_code_graph-1.34.2/tests/integration/test_non_table_create_kind_in_graph.py +148 -0
  9. sql_code_graph-1.34.2/tests/unit/test_classify_non_table_create_kind.py +88 -0
  10. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/uv.lock +1 -1
  11. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/api-documenter.md +0 -0
  12. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/architect-planner.md +0 -0
  13. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/architect-reviewer.md +0 -0
  14. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/code-reviewer.md +0 -0
  15. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/developer.md +0 -0
  16. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/plan-reviewer.md +0 -0
  17. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/sprint-planner.md +0 -0
  18. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  19. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  21. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/benchmark.yml +0 -0
  22. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/e2e-tests.yml +0 -0
  23. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/release.yml +0 -0
  24. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/test.yml +0 -0
  25. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.gitignore +0 -0
  26. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.pre-commit-config.yaml +0 -0
  27. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.sqlcgignore +0 -0
  28. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/ARCHITECTURE_REVIEW.md +0 -0
  29. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/ARCHITECTURE_REVIEW_ARCHIVE.md +0 -0
  30. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/CHANGELOG.md +0 -0
  31. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/CLAUDE.md +0 -0
  32. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/README.md +0 -0
  33. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/AIRBNB_PARSE_REPORT.md +0 -0
  34. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/cli.md +0 -0
  35. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/getting-started.md +0 -0
  36. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/releasing-pypi.md +0 -0
  37. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/e2e_firstuser_report.md +0 -0
  38. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/e2e_run_20260528_101413.output +0 -0
  39. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/main.py +0 -0
  40. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/WORKFLOW.md +0 -0
  41. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr2_catalog_load_eval.json +0 -0
  42. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr3_repo_native_plateau.json +0 -0
  43. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr4_transform_kinds.json +0 -0
  44. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr5_extraction_recall_taxonomy.json +0 -0
  45. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/sprint_08_changelogs_fullindex.json +0 -0
  46. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/sprint_08_fullcorpus_index.json +0 -0
  47. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.29.0_05c6943.json +0 -0
  48. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.30.0_2c8ac25.json +0 -0
  49. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.30.1_26271fc.json +0 -0
  50. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.31.0_a40c837.json +0 -0
  51. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.32.0_c1bec3c.json +0 -0
  52. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/lineage5_dwh_after_pr5.json +0 -0
  53. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/lineage5_dwh_before_master.json +0 -0
  54. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_with_schema.json +0 -0
  55. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_without_schema.json +0 -0
  56. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_changelogs_fullindex.json +0 -0
  57. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_fullcorpus_index.json +0 -0
  58. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_pool_300s_plan.json +0 -0
  59. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/column_coverage_diagnostic.md +0 -0
  60. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/column_coverage_findings.md +0 -0
  61. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/dwh_graph_analysis.md +0 -0
  62. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/dwh_positional_insert_column_blindspot.md +0 -0
  63. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/feature_acceptance_dwh.md +0 -0
  64. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/graph_health_sprint_postmortem.md +0 -0
  65. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/island_lever_live_verification.md +0 -0
  66. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/issue38_pr2_live_acceptance.md +0 -0
  67. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/issue38_pr3_live_acceptance.md +0 -0
  68. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/lineage_identity_sprint_postmortem.md +0 -0
  69. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/pr_impact_followups_2026-06-14.md +0 -0
  70. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/sprint_03_v0.3.1_postmortem.md +0 -0
  71. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/sprint_3.1_postmortem.md +0 -0
  72. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/v1_14_dialect_query_config_postmortem.md +0 -0
  73. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/blueprint.md +0 -0
  74. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/coverage_parse_failure_diagnosis.md +0 -0
  75. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/investigation_e5_e4.md +0 -0
  76. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/observed_usage_overlay_query_history_tableau.md +0 -0
  77. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/parse_diagnostics.md +0 -0
  78. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/parsing_errors_experiment.md +0 -0
  79. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/snowflake_en_test_suite.md +0 -0
  80. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/sql_only_coverage_lever_post_pr2.md +0 -0
  81. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/sqlcg.md +0 -0
  82. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/bundle_claude_skill.md +0 -0
  83. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/ci_tests_pool_flake_fix.md +0 -0
  84. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/column_lineage_recall_metric.md +0 -0
  85. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_p1_p3_p4.md +0 -0
  86. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_p1_p5_metric.md +0 -0
  87. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_parse_failures.md +0 -0
  88. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/diff-impact-producer-file.md +0 -0
  89. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/e8_dual_emission.md +0 -0
  90. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_34_unused_presentation_segregation.md +0 -0
  91. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_35_external_downstream_injection.md +0 -0
  92. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_F2_bundle_claude_skill.md +0 -0
  93. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_kuzu_to_duckdb_migration.md +0 -0
  94. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_backward_self_heal_index_at_sha.md +0 -0
  95. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_downstream_sink_location.md +0 -0
  96. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_dynamic_table_parsing.md +0 -0
  97. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_expand_qualify_perf.md +0 -0
  98. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_firstuser_findings.md +0 -0
  99. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_issue29_live_test_followups.md +0 -0
  100. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_schema_case_mismatch.md +0 -0
  101. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/gain_coverage_metrics.md +0 -0
  102. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/graph_health_catalog_and_metrics.md +0 -0
  103. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/hygiene_config_path_and_survivors.md +0 -0
  104. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-backfill-cte-bridge.md +0 -0
  105. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-residual-source-extraction.md +0 -0
  106. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-selects-from-island-lever.md +0 -0
  107. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/living_codebase_resync.md +0 -0
  108. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/mcp_server_self_healing.md +0 -0
  109. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/positional_insert_clone_blindspot.md +0 -0
  110. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_01.md +0 -0
  111. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_01_deployment_pypi.md +0 -0
  112. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_02.md +0 -0
  113. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_02_v0.3.0_core.md +0 -0
  114. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_03.md +0 -0
  115. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_04_column_lineage.md +0 -0
  116. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_04_column_lineage_fix.md +0 -0
  117. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_05_star_resolution.md +0 -0
  118. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_06_lineage_coverage.md +0 -0
  119. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_07_open_ecodes.md +0 -0
  120. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_07_perf_and_live_test.md +0 -0
  121. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_08_perf_upsert.md +0 -0
  122. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_09_lineage_coverage.md +0 -0
  123. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_10_anchor_tools.md +0 -0
  124. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_11_v1.0.2_bugfix.md +0 -0
  125. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_12_v1.1.0.md +0 -0
  126. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_13_v1.1.0_cluster_b.md +0 -0
  127. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_lineage_identity_and_session_context.md +0 -0
  128. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_postmortem_fixes.md +0 -0
  129. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/temp_table_namespacing.md +0 -0
  130. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/trust_layer.md +0 -0
  131. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/unfilled_table_impact.md +0 -0
  132. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.0_cluster_b_provenance_trust.md +0 -0
  133. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.0_live_graph_freshness.md +0 -0
  134. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.1_batch_upsert_perf.md +0 -0
  135. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.14.0_dialect_and_query_config_fixes.md +0 -0
  136. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_1_2_bugfix.md +0 -0
  137. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_1_3_union_cte_star.md +0 -0
  138. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_2_0_read_proxy.md +0 -0
  139. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_2_1_bugfix.md +0 -0
  140. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/version-parity-and-restart.md +0 -0
  141. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/profile.html +0 -0
  142. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/pyrightconfig.json +0 -0
  143. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/collect_parse_errors.py +0 -0
  144. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/column_coverage_check.py +0 -0
  145. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/generate_cli_docs.sh +0 -0
  146. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/__main__.py +0 -0
  147. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/__init__.py +0 -0
  148. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/__init__.py +0 -0
  149. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/analyze.py +0 -0
  150. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/catalog.py +0 -0
  151. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/db.py +0 -0
  152. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/find.py +0 -0
  153. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/gain.py +0 -0
  154. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/git.py +0 -0
  155. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/index.py +0 -0
  156. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/install.py +0 -0
  157. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/mcp.py +0 -0
  158. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/reindex.py +0 -0
  159. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/report.py +0 -0
  160. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/uninstall.py +0 -0
  161. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/watch.py +0 -0
  162. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/coverage.py +0 -0
  163. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/main.py +0 -0
  164. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/__init__.py +0 -0
  165. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/config.py +0 -0
  166. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/duckdb_backend.py +0 -0
  167. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/freshness.py +0 -0
  168. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/graph_db.py +0 -0
  169. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/jobs.py +0 -0
  170. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/noise_match.py +0 -0
  171. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.cypher +0 -0
  172. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.py +0 -0
  173. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.sql +0 -0
  174. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/schema.cypher +0 -0
  175. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/schema.py +0 -0
  176. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/__init__.py +0 -0
  177. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/dbt_adapter.py +0 -0
  178. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/error_classify.py +0 -0
  179. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/git_delta.py +0 -0
  180. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/indexer.py +0 -0
  181. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/pool.py +0 -0
  182. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/walker.py +0 -0
  183. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/watcher.py +0 -0
  184. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/__init__.py +0 -0
  185. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/aggregator.py +0 -0
  186. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/schema_resolver.py +0 -0
  187. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/metrics/__init__.py +0 -0
  188. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/metrics/store.py +0 -0
  189. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/__init__.py +0 -0
  190. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/ansi_parser.py +0 -0
  191. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/bigquery_parser.py +0 -0
  192. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/postgres_parser.py +0 -0
  193. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/registry.py +0 -0
  194. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/snowflake_parser.py +0 -0
  195. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/tsql_parser.py +0 -0
  196. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/__init__.py +0 -0
  197. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/control.py +0 -0
  198. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/exceptions.py +0 -0
  199. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/models.py +0 -0
  200. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/noise_filter.py +0 -0
  201. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/read_client.py +0 -0
  202. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/selfheal.py +0 -0
  203. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/server.py +0 -0
  204. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/skill.py +0 -0
  205. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/tools.py +0 -0
  206. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/writer.py +0 -0
  207. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/__init__.py +0 -0
  208. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/hashing.py +0 -0
  209. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/ignore.py +0 -0
  210. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/logging.py +0 -0
  211. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/__init__.py +0 -0
  212. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/__init__.py +0 -0
  213. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/adversarial/200_join.sql +0 -0
  214. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/adversarial/500_union.sql +0 -0
  215. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/bench_indexer.py +0 -0
  216. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/conftest.py +0 -0
  217. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/case_normalization.sql +0 -0
  218. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/colon_cast.sql +0 -0
  219. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/colon_reserved_word.sql +0 -0
  220. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/copy_into.sql +0 -0
  221. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/create_procedure.sql +0 -0
  222. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/identifier_dynamic.sql +0 -0
  223. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/lateral_flatten.sql +0 -0
  224. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/qualify.sql +0 -0
  225. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/scripting_block.sql +0 -0
  226. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/three_part.sql +0 -0
  227. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q01.sql +0 -0
  228. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q02.sql +0 -0
  229. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q03.sql +0 -0
  230. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q04.sql +0 -0
  231. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q05.sql +0 -0
  232. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/conftest.py +0 -0
  233. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/__init__.py +0 -0
  234. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/conftest.py +0 -0
  235. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_F2_skill_install_e2e.py +0 -0
  236. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_airbnb_e2e.py +0 -0
  237. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_cli_index.py +0 -0
  238. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_empty_impact_cli_e2e.py +0 -0
  239. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_git_hook_install.py +0 -0
  240. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_golden_lineage.py +0 -0
  241. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_mcp_lifecycle.py +0 -0
  242. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_mcp_tools.py +0 -0
  243. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_parse_diagnostics_cli.py +0 -0
  244. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_pr_impact_cli_e2e.py +0 -0
  245. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_selfheal_e2e.py +0 -0
  246. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_star_resolution_e2e.py +0 -0
  247. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_watch.py +0 -0
  248. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/dim_hosts_cleansed.sql +0 -0
  249. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/dim_listings_cleansed.sql +0 -0
  250. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/fct_reviews.sql +0 -0
  251. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/mart_fullmoon_reviews.sql +0 -0
  252. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_hosts.sql +0 -0
  253. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_listings.sql +0 -0
  254. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_reviews.sql +0 -0
  255. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_hosts.sql +0 -0
  256. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_listings.sql +0 -0
  257. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_reviews.sql +0 -0
  258. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/bigquery/.gitkeep +0 -0
  259. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/duckdb_parity/kuzu_reference.json +0 -0
  260. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/customers.sql +0 -0
  261. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/orders.sql +0 -0
  262. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/raw_orders.sql +0 -0
  263. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/base_tables.sql +0 -0
  264. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/reports.sql +0 -0
  265. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/views.sql +0 -0
  266. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/ddl_src.sql +0 -0
  267. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/ddl_tgt.sql +0 -0
  268. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/etl_alias_star.sql +0 -0
  269. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/etl_star.sql +0 -0
  270. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/base_tables.sql +0 -0
  271. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/reports.sql +0 -0
  272. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/views.sql +0 -0
  273. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/__init__.py +0 -0
  274. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/__init__.py +0 -0
  275. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/test_insert_select.py +0 -0
  276. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/test_qualify_bare_tables_command_guard_integration.py +0 -0
  277. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_T34_presentation_segregation.py +0 -0
  278. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_T35_external_consumers.py +0 -0
  279. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_analyze_case_fold.py +0 -0
  280. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_anchor_tools.py +0 -0
  281. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_backfill_impact_consistency.py +0 -0
  282. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_bare_column_cte_lineage.py +0 -0
  283. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_bulk_upsert.py +0 -0
  284. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_case_split_seed_regression.py +0 -0
  285. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_catalog_kind_upgrade.py +0 -0
  286. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_catalog_load_integration.py +0 -0
  287. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cli_index_clear_before_rebuild.py +0 -0
  288. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_column_coverage_patterns.py +0 -0
  289. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_column_lineage_e2e.py +0 -0
  290. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_coverage_metrics_integration.py +0 -0
  291. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cross_file_lineage.py +0 -0
  292. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_key_namespacing_integration.py +0 -0
  293. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_recall_guard.py +0 -0
  294. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_schema_alias_guard.py +0 -0
  295. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_source_node_invariant.py +0 -0
  296. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_dialect_auto_resolution.py +0 -0
  297. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_dialect_matrix.py +0 -0
  298. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_duckdb_parity.py +0 -0
  299. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_e36_xfile_regression_guard.py +0 -0
  300. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_empty_impact_blast_radius.py +0 -0
  301. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_empty_index_rollback_guard.py +0 -0
  302. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_freshness_mcp.py +0 -0
  303. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_gating_join_retrofit.py +0 -0
  304. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_hygiene_config_root_reconciliation.py +0 -0
  305. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_identity_counters_integration.py +0 -0
  306. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_impact_consumer_parity.py +0 -0
  307. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_index_degraded_files_metric.py +0 -0
  308. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_index_filter_node_exclusion.py +0 -0
  309. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_batching.py +0 -0
  310. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_commits.py +0 -0
  311. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_to_graph.py +0 -0
  312. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_issue38_cte_insert_regression.py +0 -0
  313. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_join_col_resolution.py +0 -0
  314. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_key_normalization_chokepoint.py +0 -0
  315. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_live_anchors.py +0 -0
  316. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_mvcc_rebuild.py +0 -0
  317. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_parse_diagnostics.py +0 -0
  318. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr1_confidence_reason.py +0 -0
  319. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr2_source_location.py +0 -0
  320. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr3_kind_tagging.py +0 -0
  321. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr_impact_integration.py +0 -0
  322. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_qualify_failed_persist.py +0 -0
  323. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_read_via_server.py +0 -0
  324. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_readonly_under_lock.py +0 -0
  325. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_reindex_via_server.py +0 -0
  326. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_repo_relative_cte_namespaces.py +0 -0
  327. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_resolvable_write_col_edges_integration.py +0 -0
  328. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_resync.py +0 -0
  329. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_completeness.py +0 -0
  330. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_cte_body_source.py +0 -0
  331. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_subscope_source.py +0 -0
  332. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_single_writer_queue.py +0 -0
  333. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_skip_counts_integration.py +0 -0
  334. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_star_resolution.py +0 -0
  335. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_temp_table_lineage.py +0 -0
  336. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_temp_table_namespacing.py +0 -0
  337. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_tool_version_stamp_integration.py +0 -0
  338. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_union_cte_star_recall_guard.py +0 -0
  339. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_usage_derived_catalog.py +0 -0
  340. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_use_schema_session_context_integration.py +0 -0
  341. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_user_surface_recall_guard.py +0 -0
  342. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_v141_surface_guards.py +0 -0
  343. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_v1_14_0_dialect_and_query_config_fixes.py +0 -0
  344. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_view_kind_in_graph.py +0 -0
  345. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_write_memory_ceiling.py +0 -0
  346. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/perf/__init__.py +0 -0
  347. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/perf/test_perf.py +0 -0
  348. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E10/__init__.py +0 -0
  349. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E11/__init__.py +0 -0
  350. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/__init__.py +0 -0
  351. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/e12_json_path.sql +0 -0
  352. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/e12_lateral_flatten.sql +0 -0
  353. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/test_e12.py +0 -0
  354. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E13/__init__.py +0 -0
  355. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E14/__init__.py +0 -0
  356. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E15/__init__.py +0 -0
  357. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/__init__.py +0 -0
  358. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/e16_merge.sql +0 -0
  359. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/e16_merge_delete.sql +0 -0
  360. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/test_e16.py +0 -0
  361. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E17/__init__.py +0 -0
  362. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/__init__.py +0 -0
  363. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_decode.sql +0 -0
  364. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_iff_decode.sql +0 -0
  365. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_nvl2.sql +0 -0
  366. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/test_e18.py +0 -0
  367. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E19/__init__.py +0 -0
  368. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/__init__.py +0 -0
  369. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_expr_alias.sql +0 -0
  370. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_function_alias.sql +0 -0
  371. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_multiply_alias.sql +0 -0
  372. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/test_e2.py +0 -0
  373. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E20/__init__.py +0 -0
  374. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/__init__.py +0 -0
  375. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/e21_alias_forward_ref.sql +0 -0
  376. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/e21_three_level_chain.sql +0 -0
  377. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/test_e21.py +0 -0
  378. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E22/__init__.py +0 -0
  379. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/__init__.py +0 -0
  380. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/e23_stored_proc.sql +0 -0
  381. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/e23_stored_proc_multi.sql +0 -0
  382. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/test_e23.py +0 -0
  383. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E24/__init__.py +0 -0
  384. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/__init__.py +0 -0
  385. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/e25_cross_db.sql +0 -0
  386. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/e25_two_part.sql +0 -0
  387. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/test_e25.py +0 -0
  388. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/test_e25_full_id.py +0 -0
  389. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E26/__init__.py +0 -0
  390. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/__init__.py +0 -0
  391. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/e27_nested_udf.sql +0 -0
  392. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/e27_udf.sql +0 -0
  393. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/test_e27.py +0 -0
  394. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E28/__init__.py +0 -0
  395. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E29/__init__.py +0 -0
  396. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/__init__.py +0 -0
  397. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_alter_table.sql +0 -0
  398. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_create_sequence.sql +0 -0
  399. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_ddl_only.sql +0 -0
  400. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/test_e3.py +0 -0
  401. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E30/__init__.py +0 -0
  402. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E31/__init__.py +0 -0
  403. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E32/__init__.py +0 -0
  404. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E33/__init__.py +0 -0
  405. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E34/__init__.py +0 -0
  406. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E35/__init__.py +0 -0
  407. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/__init__.py +0 -0
  408. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/e36_temp_multi_use.sql +0 -0
  409. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/e36_temp_table.sql +0 -0
  410. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/test_e36.py +0 -0
  411. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/test_e36_xfile.py +0 -0
  412. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E37/__init__.py +0 -0
  413. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E38/__init__.py +0 -0
  414. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/__init__.py +0 -0
  415. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_execute_immediate.sql +0 -0
  416. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_if_not_exists.sql +0 -0
  417. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_unexpected_token.sql +0 -0
  418. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_unpivot.sql +0 -0
  419. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/test_e4.py +0 -0
  420. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/__init__.py +0 -0
  421. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_cte_missing_source.sql +0 -0
  422. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_multi_cte.sql +0 -0
  423. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_nested_cte.sql +0 -0
  424. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/test_e5.py +0 -0
  425. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/test_e5_cte_projection.py +0 -0
  426. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/__init__.py +0 -0
  427. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_dynamic_sources.sql +0 -0
  428. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_seq_nextval.sql +0 -0
  429. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_uuid.sql +0 -0
  430. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/test_e8.py +0 -0
  431. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E9/__init__.py +0 -0
  432. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/__init__.py +0 -0
  433. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_absent_cross_schema.sql +0 -0
  434. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_case_when.sql +0 -0
  435. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_present_source.sql +0 -0
  436. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/test_e_aggregates.py +0 -0
  437. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/__init__.py +0 -0
  438. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_date_aliased.sql +0 -0
  439. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_date_unaliased.sql +0 -0
  440. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_datediff_unaliased.sql +0 -0
  441. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_year_unaliased.sql +0 -0
  442. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/test_e_date_functions.py +0 -0
  443. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/README.md +0 -0
  444. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/__init__.py +0 -0
  445. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/__init__.py +0 -0
  446. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_etl.sql +0 -0
  447. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_omloopsnelheid.sql +0 -0
  448. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_semantic.sql +0 -0
  449. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_source.sql +0 -0
  450. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/test_anchor_ma_aantal_op_order.py +0 -0
  451. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/test_anchor_omloopsnelheid.py +0 -0
  452. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/conftest.py +0 -0
  453. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/test_plan_review_gates.py +0 -0
  454. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/__init__.py +0 -0
  455. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/__init__.py +0 -0
  456. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/test_qualify_bare_tables_command_guard.py +0 -0
  457. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/test_scripting_noise.py +0 -0
  458. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_BugB_escalation_uses_init_path.py +0 -0
  459. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_BugC_hook_upgrade.py +0 -0
  460. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_install_skill.py +0 -0
  461. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_skill_render.py +0 -0
  462. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_uninstall_skill.py +0 -0
  463. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_01_qualify_once.py +0 -0
  464. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_02_ddl_skip.py +0 -0
  465. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_04_subprocess_isolate.py +0 -0
  466. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_06_log_verbosity.py +0 -0
  467. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T35_config_external_consumers.py +0 -0
  468. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_aggregator.py +0 -0
  469. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_aggregator_skip.py +0 -0
  470. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_analyze_case_fold.py +0 -0
  471. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_base_parser.py +0 -0
  472. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_branch_monitor.py +0 -0
  473. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_bulk_upsert_invariant.py +0 -0
  474. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_canonical_target_resolution.py +0 -0
  475. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_catalog_csv_parsing.py +0 -0
  476. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_catalog_missing_warning.py +0 -0
  477. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli.py +0 -0
  478. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli_doc_flag_staleness.py +0 -0
  479. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli_help.py +0 -0
  480. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_clone_positional_insert_blindspot.py +0 -0
  481. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_closure_depth.py +0 -0
  482. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_column_lineage_wiring.py +0 -0
  483. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_config.py +0 -0
  484. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_coverage_metrics.py +0 -0
  485. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cte_key_namespacing.py +0 -0
  486. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cte_source_gap_metric.py +0 -0
  487. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_data_models.py +0 -0
  488. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_info.py +0 -0
  489. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_info_coverage.py +0 -0
  490. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_path_isolation_fixture.py +0 -0
  491. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_doc_links.py +0 -0
  492. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_doc_markdown_link_existence.py +0 -0
  493. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_dominant_cause.py +0 -0
  494. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_duckdb_backend.py +0 -0
  495. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_duckdb_backend_shared.py +0 -0
  496. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e5_view_alias_resolution.py +0 -0
  497. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e8_dual_emission.py +0 -0
  498. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e8_temp_chain_key_mismatch.py +0 -0
  499. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_empty_propagation_unit.py +0 -0
  500. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_extract_select_output_columns.py +0 -0
  501. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_file_ignore_defaults.py +0 -0
  502. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_find_cmd.py +0 -0
  503. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_firstuser_findings.py +0 -0
  504. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_freshness_helper.py +0 -0
  505. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gain_coverage.py +0 -0
  506. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gain_ratio.py +0 -0
  507. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gating_join_field_docstrings.py +0 -0
  508. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_delta.py +0 -0
  509. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_hooks.py +0 -0
  510. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_hooks_notify.py +0 -0
  511. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_graph_backend.py +0 -0
  512. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_graph_completeness_invariant.py +0 -0
  513. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hard_kill_pool.py +0 -0
  514. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_has_column_precedence_upsert.py +0 -0
  515. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hook_reindex_detach.py +0 -0
  516. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hygiene_config_warning.py +0 -0
  517. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_identity_counters.py +0 -0
  518. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_include_working_tree.py +0 -0
  519. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_cmd.py +0 -0
  520. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_filter_config.py +0 -0
  521. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_flags.py +0 -0
  522. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_progress.py +0 -0
  523. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_summary_degraded_metric.py +0 -0
  524. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_indexer_progress.py +0 -0
  525. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_indexer_quality.py +0 -0
  526. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_install.py +0 -0
  527. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_install_message.py +0 -0
  528. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_issue_63_readonly_lock.py +0 -0
  529. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_jobs.py +0 -0
  530. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_join_col_resolve_marker.py +0 -0
  531. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_judgement.py +0 -0
  532. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_lineage_conversion.py +0 -0
  533. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_literal_column_skip.py +0 -0
  534. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_best_practices.py +0 -0
  535. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_control.py +0 -0
  536. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_stdio_smoke.py +0 -0
  537. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_metrics.py +0 -0
  538. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_noise_filter.py +0 -0
  539. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_normalize_keys.py +0 -0
  540. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_failed_classification.py +0 -0
  541. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_file_dependency_filter.py +0 -0
  542. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_quality.py +0 -0
  543. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parser.py +0 -0
  544. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_perf_scaling_guard.py +0 -0
  545. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr07_observability.py +0 -0
  546. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr6_execute_immediate_unwrap.py +0 -0
  547. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr_impact_unit.py +0 -0
  548. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_qualify_failed_unit.py +0 -0
  549. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_queries_loader.py +0 -0
  550. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_read_client.py +0 -0
  551. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_repo_relative_cte_namespaces.py +0 -0
  552. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolvable_write_col_edges_unit.py +0 -0
  553. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolve_join_columns_sql.py +0 -0
  554. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolve_pass2_passes_dependency_filter.py +0 -0
  555. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_schema_resolver.py +0 -0
  556. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selects_from_completeness_unit.py +0 -0
  557. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_detector.py +0 -0
  558. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_pr1_messages.py +0 -0
  559. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_reexec.py +0 -0
  560. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_watcher.py +0 -0
  561. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_server.py +0 -0
  562. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_skip_counts_persistence.py +0 -0
  563. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_snowflake_strip_alter_set_tag.py +0 -0
  564. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_sprint_06_t04_t05.py +0 -0
  565. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_star_resolution_unit.py +0 -0
  566. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_star_schema_unit.py +0 -0
  567. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_submit_feedback.py +0 -0
  568. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_subprocess_isolate.py +0 -0
  569. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_t02_expression_name_extraction.py +0 -0
  570. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_t03_ddl_skip.py +0 -0
  571. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_temp_table_namespacing.py +0 -0
  572. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_timeout_cancel.py +0 -0
  573. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tool_version_stamp.py +0 -0
  574. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tools_hints.py +0 -0
  575. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tools_warnings.py +0 -0
  576. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_transform_kind_classification.py +0 -0
  577. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_uninstall.py +0 -0
  578. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_unknown_sentinel_skip.py +0 -0
  579. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_unqualified_fallback.py +0 -0
  580. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_upsert_batch_invariant.py +0 -0
  581. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_use_schema_session_context.py +0 -0
  582. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_version_parity.py +0 -0
  583. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_view_classification.py +0 -0
  584. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_walker.py +0 -0
  585. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_watcher.py +0 -0
  586. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_worker_error_classification.py +0 -0
  587. {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_writer_queue.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sql-code-graph
3
- Version: 1.34.1
3
+ Version: 1.34.2
4
4
  Summary: SQL code graph analyzer and lineage tracer
5
5
  Project-URL: Homepage, https://github.com/Warhorze/sql-code-graph
6
6
  Project-URL: Repository, https://github.com/Warhorze/sql-code-graph
@@ -0,0 +1,31 @@
1
+ {"total_calls": 1231, "last_7d_calls": 1231, "index_runs": 5, "feedback_tp": 0,
2
+ "feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 412},
3
+ {"name": "trace_column_lineage", "count": 326}, {"name":
4
+ "list_dialects_and_repos", "count": 106}], "execute_sql_ratio": 0.33,
5
+ "parse_quality": {"sqlglot": 5166, "scripting": 20, "dynamic_sql": 3},
6
+ "coverage": {"catalogued_tables": 5796, "total_tables": 6581, "good_edges":
7
+ 51326, "total_edges": 59474, "phantom_edges": 12241, "blindspot_tables": 628,
8
+ "good_edges_strict": 46495, "edge_health_strict_pct": 78.18,
9
+ "good_edges_scoped": 36842, "total_edges_scoped": 37619,
10
+ "edge_health_scoped_pct": 97.93, "phantom_confirmed": 11701,
11
+ "phantom_contradicted": 352, "phantom_unverified": 188, "top_blindspot_tables":
12
+ [{"table": "ia_analytics.ba_wtfa_artikel_formule_dagomzet", "bad_edges": 217},
13
+ {"table": "ba.wtfa_kpi_datum_klant", "bad_edges": 70}, {"table":
14
+ "ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
15
+ "ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
16
+ "da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
17
+ "da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
18
+ "wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
19
+ "da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
20
+ "bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19}],
21
+ "blindspot_tables_for_80pct": 15, "files_indexed": 1335, "indexed_sha":
22
+ "fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path": "/tmp/ckm_after.duckdb",
23
+ "index_timestamp": 1781457191.07209, "degraded_parse_total": 5189,
24
+ "degraded_parse_queries": 20, "degraded_parse_by_dir": {"etl": {"degraded": 1,
25
+ "total": 2776}, "ddl": {"degraded": 19, "total": 2413}},
26
+ "zero_edge_write_queries": 1040, "total_write_queries": 2323,
27
+ "cte_key_collisions": 0, "rescuable_unqualified_edges": 125,
28
+ "info_schema_has_column_rows": 110257, "cte_source_gap_writes": 0,
29
+ "resolvable_write_col_edges": 35759, "transitive_col_edges": 4168,
30
+ "qualify_failed_statements": 9, "tool_version_stale": false,
31
+ "indexed_tool_version": "1.34.3", "running_tool_version": "1.34.3"}}
@@ -0,0 +1,31 @@
1
+ {"total_calls": 1231, "last_7d_calls": 1231, "index_runs": 5, "feedback_tp": 0,
2
+ "feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 412},
3
+ {"name": "trace_column_lineage", "count": 326}, {"name":
4
+ "list_dialects_and_repos", "count": 106}], "execute_sql_ratio": 0.33,
5
+ "parse_quality": {"sqlglot": 5162, "scripting": 20, "dynamic_sql": 3},
6
+ "coverage": {"catalogued_tables": 5796, "total_tables": 6572, "good_edges":
7
+ 51235, "total_edges": 59068, "phantom_edges": 12241, "blindspot_tables": 619,
8
+ "good_edges_strict": 46399, "edge_health_strict_pct": 78.55,
9
+ "good_edges_scoped": 36748, "total_edges_scoped": 37524,
10
+ "edge_health_scoped_pct": 97.93, "phantom_confirmed": 11701,
11
+ "phantom_contradicted": 352, "phantom_unverified": 188, "top_blindspot_tables":
12
+ [{"table": "ia_analytics.ba_wtfa_artikel_formule_dagomzet", "bad_edges": 216},
13
+ {"table": "ba.wtfa_kpi_datum_klant", "bad_edges": 70}, {"table":
14
+ "ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
15
+ "ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
16
+ "da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
17
+ "da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
18
+ "wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
19
+ "da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
20
+ "bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19}],
21
+ "blindspot_tables_for_80pct": 15, "files_indexed": 1335, "indexed_sha":
22
+ "fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path": "/tmp/ckm_before.duckdb",
23
+ "index_timestamp": 1781456971.4233296, "degraded_parse_total": 5185,
24
+ "degraded_parse_queries": 20, "degraded_parse_by_dir": {"etl": {"degraded": 1,
25
+ "total": 2772}, "ddl": {"degraded": 19, "total": 2413}},
26
+ "zero_edge_write_queries": 1069, "total_write_queries": 2351,
27
+ "cte_key_collisions": 0, "rescuable_unqualified_edges": 125,
28
+ "info_schema_has_column_rows": 110257, "cte_source_gap_writes": 0,
29
+ "resolvable_write_col_edges": 35351, "transitive_col_edges": 4174,
30
+ "qualify_failed_statements": 9, "tool_version_stale": false,
31
+ "indexed_tool_version": "1.34.1", "running_tool_version": "1.34.1"}}
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sql-code-graph"
7
- version = "1.34.1"
7
+ version = "1.34.2"
8
8
  description = "SQL code graph analyzer and lineage tracer"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -1,5 +1,5 @@
1
1
  """SQL Code Graph - SQL lineage and dependency analysis tool."""
2
2
 
3
- __version__ = "1.34.1"
3
+ __version__ = "1.34.2"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -591,7 +591,8 @@ class SqlParser(ABC):
591
591
  case "PROCEDURE" | "FUNCTION":
592
592
  return QueryKind.CREATE_PROC
593
593
  case _:
594
- return QueryKind.CREATE_TABLE # Default to table
594
+ # non-table CREATE (sequence/stage/file format/schema/index/etc.)
595
+ return QueryKind.OTHER
595
596
  case exp.Merge():
596
597
  return QueryKind.MERGE
597
598
  case _:
@@ -0,0 +1,88 @@
1
+ """Coverage no-regression: non-table CREATE DDL is excluded from write-kind metrics.
2
+
3
+ Pins blast-radius item #7 of the create-kind mislabel bugfix
4
+ ([plan doc](plan/sprints/bugfix_create_kind_mislabel.md), AC4).
5
+
6
+ ``_WRITE_KINDS = ("INSERT", "MERGE", "CREATE_TABLE", "UPDATE")`` drives
7
+ ``total_write_queries`` and ``zero_edge_write_queries``. Before the fix a
8
+ ``CREATE SEQUENCE`` was stored as ``CREATE_TABLE`` and so inflated both counters
9
+ (it carries no COLUMN_LINEAGE, so it counted as a "zero-edge write" — a false
10
+ unresolved-write gap). After the fix it classifies as ``OTHER`` and drops out of
11
+ the write population. This is an honest-accounting correction, not a regression.
12
+
13
+ Observable oracle: ``collect_coverage`` routed to the in-memory graph returns the
14
+ write counts that exclude the sequence; an independent kind census on the same
15
+ graph confirms the sequence is stored as ``OTHER``.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from unittest.mock import patch
21
+
22
+ import pytest
23
+
24
+ from sqlcg.cli.coverage import collect_coverage
25
+ from sqlcg.core.duckdb_backend import DuckDBBackend
26
+ from sqlcg.indexer.indexer import Indexer
27
+
28
+
29
+ @pytest.fixture
30
+ def indexed_db(tmp_path):
31
+ """Index a repo with one resolvable INSERT, one CREATE TABLE, one CREATE SEQUENCE.
32
+
33
+ Expected write population (kind IN _WRITE_KINDS):
34
+ * ba.src — CREATE TABLE (zero COLUMN_LINEAGE → a zero-edge write)
35
+ * ba.dst — INSERT … SELECT (has COLUMN_LINEAGE)
36
+ The CREATE SEQUENCE classifies as OTHER → NOT in the write population.
37
+ """
38
+ db = DuckDBBackend(":memory:")
39
+ db.init_schema()
40
+ repo = tmp_path / "repo"
41
+ repo.mkdir()
42
+ (repo / "src.sql").write_text("CREATE TABLE ba.src (a INT);\n")
43
+ (repo / "ins.sql").write_text("INSERT INTO ba.dst SELECT a FROM ba.src;\n")
44
+ (repo / "seq.sql").write_text("CREATE SEQUENCE ba.s START 1;\n")
45
+ Indexer().index_repo(repo, dialect="snowflake", db=db, use_git=False)
46
+ yield db
47
+ db.close()
48
+
49
+
50
+ def _collect(db: DuckDBBackend):
51
+ def _routed(query: str, params: dict):
52
+ return db.run_read(query, params)
53
+
54
+ with patch("sqlcg.cli.coverage.run_read_routed", side_effect=_routed):
55
+ return collect_coverage()
56
+
57
+
58
+ def test_sequence_excluded_from_total_write_queries(indexed_db):
59
+ """total_write_queries counts only INSERT + CREATE TABLE, not the CREATE SEQUENCE."""
60
+ stats = _collect(indexed_db)
61
+ assert stats is not None
62
+ assert stats.total_write_queries == 2, (
63
+ "total_write_queries must count only the INSERT and the CREATE TABLE "
64
+ f"(the CREATE SEQUENCE is OTHER, excluded); got {stats.total_write_queries}. "
65
+ "A value of 3 means the sequence was mislabeled CREATE_TABLE again."
66
+ )
67
+
68
+
69
+ def test_sequence_does_not_inflate_zero_edge_write_queries(indexed_db):
70
+ """zero_edge_write_queries reflects only the genuine zero-edge CREATE TABLE.
71
+
72
+ The CREATE SEQUENCE has zero COLUMN_LINEAGE; before the fix it would have
73
+ counted here as a false unresolved-write. Expected = 1 (the CREATE TABLE
74
+ 'ba.src' DDL with no SELECT body), not 2.
75
+ """
76
+ stats = _collect(indexed_db)
77
+ assert stats is not None
78
+ assert stats.zero_edge_write_queries == 1, (
79
+ "zero_edge_write_queries must be 1 (the CREATE TABLE DDL only); "
80
+ f"got {stats.zero_edge_write_queries}. A value of 2 means the sequence "
81
+ "was counted as a zero-edge write (the inflation this fix removes)."
82
+ )
83
+
84
+
85
+ def test_sequence_stored_as_other_kind(indexed_db):
86
+ """Independent oracle: the sequence statement is stored as kind=OTHER."""
87
+ rows = indexed_db.run_read('SELECT kind FROM "SqlQuery" WHERE id LIKE ?', {"id": "%seq.sql:0"})
88
+ assert rows and rows[0]["kind"] == "OTHER", f"sequence must be stored as OTHER; got {rows}"
@@ -0,0 +1,148 @@
1
+ """Integration test: non-table CREATE DDL is stored as SqlQuery.kind='OTHER'.
2
+
3
+ End-to-end (parser → indexer → DuckDB) guard for the create-kind mislabel
4
+ bugfix ([plan doc](plan/sprints/bugfix_create_kind_mislabel.md)).
5
+
6
+ Scope (RESCOPED, kind-only — plan §Scope):
7
+ * AC1/AC2 — a fixture with CREATE SEQUENCE / STAGE plus real CREATE TABLE /
8
+ CTAS controls stores ``SqlQuery.kind = OTHER`` for the non-table DDL and
9
+ ``CREATE_TABLE`` for the genuine tables.
10
+ * AC3 — the ``analyze impact`` query (analyze.py:317 shape) renders the
11
+ sequence's producing statement as ``kind=OTHER`` not ``CREATE_TABLE``.
12
+
13
+ Explicitly OUT OF SCOPE (plan Follow-up §, blast-radius row #1b): the sequence
14
+ name persists as a ``SqlTable`` source node via the kind-independent
15
+ ``referenced_tables`` → ``indexer.py`` source loop. This fix corrects only the
16
+ stored kind; it does NOT remove that phantom node. No assertion here claims the
17
+ node is absent.
18
+ """
19
+
20
+ import pytest
21
+
22
+ from sqlcg.core.duckdb_backend import DuckDBBackend
23
+ from sqlcg.indexer.indexer import Indexer
24
+
25
+
26
+ @pytest.fixture
27
+ def db():
28
+ backend = DuckDBBackend(":memory:")
29
+ backend.init_schema()
30
+ yield backend
31
+ backend.close()
32
+
33
+
34
+ def _kind_of_query(db: DuckDBBackend, id_suffix: str) -> str | None:
35
+ """Return SqlQuery.kind for the statement whose id ends with ``id_suffix``."""
36
+ rows = db.run_read(
37
+ 'SELECT id, kind FROM "SqlQuery" WHERE id LIKE ?',
38
+ {"id": f"%{id_suffix}"},
39
+ )
40
+ return rows[0]["kind"] if rows else None
41
+
42
+
43
+ @pytest.fixture
44
+ def indexed(db, tmp_path):
45
+ """Index a repo with non-table CREATEs (SEQUENCE/STAGE) + table controls.
46
+
47
+ On the Snowflake path a ``CREATE SEQUENCE ba.s`` parses with target=None and
48
+ its name ``ba.s`` enters ``sources`` → a ``SELECTS_FROM`` edge to ``ba.s`` and
49
+ a phantom ``SqlTable`` source node (out of scope, see module docstring).
50
+ """
51
+ repo = tmp_path / "repo"
52
+ repo.mkdir()
53
+ (repo / "seq.sql").write_text("CREATE SEQUENCE ba.s START 1;\n")
54
+ (repo / "stg.sql").write_text("CREATE STAGE ba.stg;\n")
55
+ (repo / "tbl.sql").write_text("CREATE TABLE ba.t (a INT);\n")
56
+ (repo / "ctas.sql").write_text("CREATE TABLE ba.t2 AS SELECT a FROM ba.t;\n")
57
+ Indexer().index_repo(repo, dialect="snowflake", db=db, use_git=False)
58
+ return repo
59
+
60
+
61
+ def test_create_sequence_stored_as_other(indexed, db):
62
+ """AC1: CREATE SEQUENCE is stored as SqlQuery.kind='OTHER' (not CREATE_TABLE)."""
63
+ assert _kind_of_query(db, "seq.sql:0") == "OTHER", (
64
+ "CREATE SEQUENCE must store kind=OTHER after the catch-all flip; "
65
+ "before the fix it was mislabeled CREATE_TABLE."
66
+ )
67
+
68
+
69
+ def test_create_stage_stored_as_other(indexed, db):
70
+ """AC1: CREATE STAGE is stored as SqlQuery.kind='OTHER'."""
71
+ assert _kind_of_query(db, "stg.sql:0") == "OTHER", (
72
+ "CREATE STAGE must store kind=OTHER, not CREATE_TABLE."
73
+ )
74
+
75
+
76
+ def test_real_create_table_still_create_table(indexed, db):
77
+ """AC2: a genuine CREATE TABLE control still stores kind='CREATE_TABLE'."""
78
+ assert _kind_of_query(db, "tbl.sql:0") == "CREATE_TABLE", (
79
+ "Plain CREATE TABLE must remain CREATE_TABLE (no regression on real tables)."
80
+ )
81
+
82
+
83
+ def test_ctas_still_create_table(indexed, db):
84
+ """AC2: CTAS (CREATE TABLE AS SELECT) control still stores kind='CREATE_TABLE'."""
85
+ assert _kind_of_query(db, "ctas.sql:0") == "CREATE_TABLE", (
86
+ "CTAS has Create.kind=='TABLE' and must remain CREATE_TABLE."
87
+ )
88
+
89
+
90
+ def test_sequence_produces_selects_from_edge(indexed, db):
91
+ """The sequence statement carries a SELECTS_FROM edge to its name node.
92
+
93
+ This is the live shape behind the bug — a non-table CREATE that has a
94
+ SELECTS_FROM edge yet was mislabeled CREATE_TABLE. Asserting the edge exists
95
+ proves the reclassified statement is exactly the kind that leaked into
96
+ ``analyze impact`` (NOT a statement with no edges).
97
+ """
98
+ rows = db.run_read(
99
+ 'SELECT q.id AS id, q.kind AS kind FROM "SqlQuery" q '
100
+ 'JOIN "SELECTS_FROM" sf ON sf.src_key = q.id '
101
+ "WHERE sf.dst_key = ?",
102
+ {"dst": "ba.s"},
103
+ )
104
+ assert len(rows) == 1, f"expected one SELECTS_FROM producer for ba.s, got {rows}"
105
+ assert rows[0]["kind"] == "OTHER", (
106
+ f"the sequence statement with a SELECTS_FROM edge must be kind=OTHER, "
107
+ f"got {rows[0]['kind']!r}"
108
+ )
109
+
110
+
111
+ def test_analyze_impact_renders_sequence_as_other(indexed, db, monkeypatch):
112
+ """AC3: ``analyze impact ba.s`` renders the producing statement kind=OTHER.
113
+
114
+ Runs the exact analyze.py:317 query shape against the indexed graph and the
115
+ CLI render path; asserts the kind column shows OTHER, never CREATE_TABLE.
116
+ No assertion is made about the ba.s SqlTable node's existence (out of scope).
117
+ """
118
+ # Direct query (analyze.py:317 shape) — observable kind on the producer row.
119
+ results = db.run_read(
120
+ "SELECT DISTINCT q.id AS id, q.kind AS kind, q.target_table AS target"
121
+ ' FROM "SqlTable" t'
122
+ ' JOIN "SELECTS_FROM" sf ON sf.dst_key = t.qualified'
123
+ ' JOIN "SqlQuery" q ON q.id = sf.src_key'
124
+ " WHERE t.qualified = ? LIMIT 100",
125
+ {"t": "ba.s"},
126
+ )
127
+ kinds = {r["kind"] for r in results}
128
+ assert kinds == {"OTHER"}, (
129
+ f"analyze impact on ba.s must render only kind=OTHER for the sequence producer; got {kinds}"
130
+ )
131
+
132
+ # CLI render path: kind=OTHER appears, CREATE_TABLE does not.
133
+ from typer.testing import CliRunner
134
+
135
+ from sqlcg.cli.commands.analyze import app
136
+
137
+ def _route_to_db(query, params):
138
+ return db.run_read(query, params)
139
+
140
+ monkeypatch.setattr("sqlcg.cli.commands.analyze.run_read_routed", _route_to_db)
141
+ result = CliRunner().invoke(app, ["impact", "ba.s", "--raw"])
142
+ assert result.exit_code == 0, result.output
143
+ assert "OTHER" in result.output, (
144
+ f"analyze impact output must contain kind=OTHER for the sequence.\n{result.output}"
145
+ )
146
+ assert "CREATE_TABLE" not in result.output, (
147
+ f"analyze impact must NOT render CREATE_TABLE for the sequence.\n{result.output}"
148
+ )
@@ -0,0 +1,88 @@
1
+ """Unit tests for ``SqlParser._classify`` on non-table ``CREATE`` DDL.
2
+
3
+ Guards the create-kind mislabel bugfix
4
+ ([plan doc](plan/sprints/bugfix_create_kind_mislabel.md)).
5
+
6
+ Before the fix the ``exp.Create`` catch-all returned ``CREATE_TABLE`` for every
7
+ ``Create.kind`` it did not explicitly handle, so ``CREATE SEQUENCE`` /
8
+ ``CREATE STAGE`` / ``CREATE FILE FORMAT`` (and ``SCHEMA`` / ``INDEX``) were all
9
+ stored as ``CREATE_TABLE``. The catch-all now returns ``OTHER``.
10
+
11
+ Safety property under test (AC2): every statement that is *genuinely* a table —
12
+ plain ``CREATE TABLE``, ``TRANSIENT TABLE``, ``OR REPLACE TABLE`` and CTAS — has
13
+ ``Create.kind == "TABLE"`` and so hits the explicit arm; the flip to ``OTHER``
14
+ cannot reclassify a real table.
15
+
16
+ Each assertion checks the observable returned kind string, not "no exception".
17
+ """
18
+
19
+ import sqlglot
20
+
21
+ from sqlcg.lineage.schema_resolver import SchemaResolver
22
+ from sqlcg.parsers.ansi_parser import AnsiParser
23
+
24
+
25
+ def _classify(sql: str) -> str:
26
+ """Parse ``sql`` (snowflake dialect) and return the stored query kind."""
27
+ parser = AnsiParser(SchemaResolver(dialect="snowflake"))
28
+ node = sqlglot.parse_one(sql, dialect="snowflake")
29
+ return parser._classify(node)
30
+
31
+
32
+ class TestNonTableCreateClassifiesAsOther:
33
+ """Non-table CREATE DDL must classify as OTHER, not CREATE_TABLE."""
34
+
35
+ def test_create_sequence_classifies_as_other(self):
36
+ """CREATE SEQUENCE (Create.kind == 'SEQUENCE') is OTHER."""
37
+ assert _classify("CREATE SEQUENCE ba.s START 1") == "OTHER"
38
+
39
+ def test_create_stage_classifies_as_other(self):
40
+ """CREATE STAGE (Create.kind == 'STAGE') is OTHER."""
41
+ assert _classify("CREATE STAGE ma.stg") == "OTHER"
42
+
43
+ def test_create_file_format_classifies_as_other(self):
44
+ """CREATE FILE FORMAT (Create.kind == 'FILE FORMAT') is OTHER."""
45
+ assert _classify("CREATE FILE FORMAT ff TYPE=CSV") == "OTHER"
46
+
47
+ def test_create_schema_classifies_as_other(self):
48
+ """CREATE SCHEMA (Create.kind == 'SCHEMA') is OTHER."""
49
+ assert _classify("CREATE SCHEMA s") == "OTHER"
50
+
51
+ def test_create_index_classifies_as_other(self):
52
+ """CREATE INDEX (Create.kind == 'INDEX') is OTHER."""
53
+ assert _classify("CREATE INDEX i ON t(a)") == "OTHER"
54
+
55
+
56
+ class TestRealTableCreateStillClassifiesAsCreateTable:
57
+ """Control: every genuine table CREATE keeps CREATE_TABLE (safety property)."""
58
+
59
+ def test_plain_create_table_classifies_as_create_table(self):
60
+ """Plain CREATE TABLE keeps CREATE_TABLE."""
61
+ assert _classify("CREATE TABLE t (a INT)") == "CREATE_TABLE"
62
+
63
+ def test_transient_table_classifies_as_create_table(self):
64
+ """CREATE TRANSIENT TABLE has Create.kind == 'TABLE' → CREATE_TABLE."""
65
+ assert _classify("CREATE TRANSIENT TABLE t (a INT)") == "CREATE_TABLE"
66
+
67
+ def test_or_replace_table_classifies_as_create_table(self):
68
+ """CREATE OR REPLACE TABLE has Create.kind == 'TABLE' → CREATE_TABLE."""
69
+ assert _classify("CREATE OR REPLACE TABLE t (a INT)") == "CREATE_TABLE"
70
+
71
+ def test_ctas_classifies_as_create_table(self):
72
+ """CTAS (CREATE TABLE AS SELECT) has Create.kind == 'TABLE' → CREATE_TABLE."""
73
+ assert _classify("CREATE TABLE t AS SELECT a FROM s") == "CREATE_TABLE"
74
+
75
+
76
+ class TestViewAndProcUnaffected:
77
+ """VIEW / PROCEDURE explicit arms are unchanged by the catch-all flip."""
78
+
79
+ def test_create_view_classifies_as_create_view(self):
80
+ """CREATE VIEW keeps CREATE_VIEW."""
81
+ assert _classify("CREATE VIEW v AS SELECT a FROM s") == "CREATE_VIEW"
82
+
83
+ def test_create_procedure_classifies_as_create_proc(self):
84
+ """CREATE PROCEDURE keeps CREATE_PROC."""
85
+ assert (
86
+ _classify("CREATE PROCEDURE p() RETURNS INT AS $$ BEGIN RETURN 1; END $$")
87
+ == "CREATE_PROC"
88
+ )
@@ -2844,7 +2844,7 @@ wheels = [
2844
2844
 
2845
2845
  [[package]]
2846
2846
  name = "sql-code-graph"
2847
- version = "1.34.1"
2847
+ version = "1.34.2"
2848
2848
  source = { editable = "." }
2849
2849
  dependencies = [
2850
2850
  { name = "duckdb" },
File without changes