sql-code-graph 1.35.3__tar.gz → 1.36.1__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 (618) hide show
  1. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/PKG-INFO +35 -5
  2. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/README.md +34 -4
  3. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/docs/getting-started.md +10 -3
  4. sql_code_graph-1.36.1/plan/metrics/identifier_live_acceptance.md +84 -0
  5. sql_code_graph-1.36.1/plan/metrics/identifier_live_after_v1.36.0.json +31 -0
  6. sql_code_graph-1.36.1/plan/metrics/identifier_live_before_v1.35.3.json +32 -0
  7. sql_code_graph-1.36.1/plan/sprints/feature_generic_var_name_resolution.md +518 -0
  8. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/pyproject.toml +1 -1
  9. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/__init__.py +1 -1
  10. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/registry.py +7 -3
  11. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/snowflake_parser.py +114 -4
  12. sql_code_graph-1.36.1/tests/integration/snowflake/test_identifier_var_sink_resolution_integration.py +96 -0
  13. sql_code_graph-1.36.1/tests/unit/test_identifier_var_sink_resolution.py +201 -0
  14. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_perf_scaling_guard.py +76 -0
  15. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/uv.lock +1 -1
  16. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/api-documenter.md +0 -0
  17. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/architect-planner.md +0 -0
  18. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/architect-reviewer.md +0 -0
  19. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/code-reviewer.md +0 -0
  20. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/developer.md +0 -0
  21. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/plan-reviewer.md +0 -0
  22. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.claude/agents/sprint-planner.md +0 -0
  23. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  24. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  25. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  26. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/workflows/benchmark.yml +0 -0
  27. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/workflows/e2e-tests.yml +0 -0
  28. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/workflows/release.yml +0 -0
  29. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.github/workflows/test.yml +0 -0
  30. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.gitignore +0 -0
  31. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.pre-commit-config.yaml +0 -0
  32. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/.sqlcgignore +0 -0
  33. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/ARCHITECTURE_REVIEW.md +0 -0
  34. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/ARCHITECTURE_REVIEW_ARCHIVE.md +0 -0
  35. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/CHANGELOG.md +0 -0
  36. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/CLAUDE.md +0 -0
  37. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/docs/AIRBNB_PARSE_REPORT.md +0 -0
  38. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/docs/cli.md +0 -0
  39. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/docs/releasing-pypi.md +0 -0
  40. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/e2e_firstuser_report.md +0 -0
  41. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/e2e_run_20260528_101413.output +0 -0
  42. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/main.py +0 -0
  43. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/WORKFLOW.md +0 -0
  44. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/pr2_catalog_load_eval.json +0 -0
  45. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/pr3_repo_native_plateau.json +0 -0
  46. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/pr4_transform_kinds.json +0 -0
  47. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/pr5_extraction_recall_taxonomy.json +0 -0
  48. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/sprint_08_changelogs_fullindex.json +0 -0
  49. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/measurements/sprint_08_fullcorpus_index.json +0 -0
  50. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/createkind_dwh_after.json +0 -0
  51. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/createkind_dwh_before.json +0 -0
  52. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/gain_1.29.0_05c6943.json +0 -0
  53. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/gain_1.30.0_2c8ac25.json +0 -0
  54. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/gain_1.30.1_26271fc.json +0 -0
  55. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/gain_1.31.0_a40c837.json +0 -0
  56. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/gain_1.32.0_c1bec3c.json +0 -0
  57. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/lineage5_dwh_after_pr5.json +0 -0
  58. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/lineage5_dwh_before_master.json +0 -0
  59. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr4_star_promote_after.json +0 -0
  60. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr4_star_promote_before.json +0 -0
  61. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr_b_phantom_after.json +0 -0
  62. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr_b_phantom_before.json +0 -0
  63. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr_c_merge_after.json +0 -0
  64. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/pr_c_merge_before.json +0 -0
  65. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/schema_comparison_with_schema.json +0 -0
  66. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/schema_comparison_without_schema.json +0 -0
  67. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/sprint_08_changelogs_fullindex.json +0 -0
  68. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/sprint_08_fullcorpus_index.json +0 -0
  69. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/metrics/sprint_pool_300s_plan.json +0 -0
  70. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/column_coverage_diagnostic.md +0 -0
  71. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/column_coverage_findings.md +0 -0
  72. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/dwh_graph_analysis.md +0 -0
  73. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/dwh_positional_insert_column_blindspot.md +0 -0
  74. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/feature_acceptance_dwh.md +0 -0
  75. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/graph_health_sprint_postmortem.md +0 -0
  76. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/island_lever_live_verification.md +0 -0
  77. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/issue38_pr2_live_acceptance.md +0 -0
  78. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/issue38_pr3_live_acceptance.md +0 -0
  79. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/lineage_identity_sprint_postmortem.md +0 -0
  80. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/pr_impact_followups_2026-06-14.md +0 -0
  81. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/sprint_03_v0.3.1_postmortem.md +0 -0
  82. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/sprint_3.1_postmortem.md +0 -0
  83. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/reports/v1_14_dialect_query_config_postmortem.md +0 -0
  84. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/blueprint.md +0 -0
  85. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/coverage_parse_failure_diagnosis.md +0 -0
  86. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/investigation_e5_e4.md +0 -0
  87. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/observed_usage_overlay_query_history_tableau.md +0 -0
  88. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/parse_diagnostics.md +0 -0
  89. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/parsing_errors_experiment.md +0 -0
  90. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/snowflake_en_test_suite.md +0 -0
  91. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/sql_only_coverage_lever_post_pr2.md +0 -0
  92. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/research/sqlcg.md +0 -0
  93. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/bundle_claude_skill.md +0 -0
  94. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/ci_tests_pool_flake_fix.md +0 -0
  95. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/column_lineage_recall_metric.md +0 -0
  96. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/coverage_p1_p3_p4.md +0 -0
  97. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/coverage_p1_p5_metric.md +0 -0
  98. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/coverage_parse_failures.md +0 -0
  99. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/diff-impact-producer-file.md +0 -0
  100. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/e8_dual_emission.md +0 -0
  101. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/feature_34_unused_presentation_segregation.md +0 -0
  102. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/feature_35_external_downstream_injection.md +0 -0
  103. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/feature_F2_bundle_claude_skill.md +0 -0
  104. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/feature_kuzu_to_duckdb_migration.md +0 -0
  105. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_backward_self_heal_index_at_sha.md +0 -0
  106. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_downstream_sink_location.md +0 -0
  107. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_dynamic_table_parsing.md +0 -0
  108. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_expand_qualify_perf.md +0 -0
  109. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_firstuser_findings.md +0 -0
  110. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_issue29_live_test_followups.md +0 -0
  111. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/fix_schema_case_mismatch.md +0 -0
  112. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/gain_coverage_metrics.md +0 -0
  113. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/graph_health_catalog_and_metrics.md +0 -0
  114. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/hygiene_config_path_and_survivors.md +0 -0
  115. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/issue-38-backfill-cte-bridge.md +0 -0
  116. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/issue-38-residual-source-extraction.md +0 -0
  117. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/issue-38-selects-from-island-lever.md +0 -0
  118. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/living_codebase_resync.md +0 -0
  119. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/mcp_server_self_healing.md +0 -0
  120. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/positional_insert_clone_blindspot.md +0 -0
  121. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_01.md +0 -0
  122. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_01_deployment_pypi.md +0 -0
  123. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_02.md +0 -0
  124. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_02_v0.3.0_core.md +0 -0
  125. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_03.md +0 -0
  126. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_04_column_lineage.md +0 -0
  127. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_04_column_lineage_fix.md +0 -0
  128. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_05_star_resolution.md +0 -0
  129. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_06_lineage_coverage.md +0 -0
  130. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_07_open_ecodes.md +0 -0
  131. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_07_perf_and_live_test.md +0 -0
  132. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_08_perf_upsert.md +0 -0
  133. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_09_lineage_coverage.md +0 -0
  134. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_10_anchor_tools.md +0 -0
  135. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_11_v1.0.2_bugfix.md +0 -0
  136. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_12_v1.1.0.md +0 -0
  137. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_13_v1.1.0_cluster_b.md +0 -0
  138. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_lineage_identity_and_session_context.md +0 -0
  139. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/sprint_postmortem_fixes.md +0 -0
  140. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/temp_table_namespacing.md +0 -0
  141. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/trust_layer.md +0 -0
  142. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/unfilled_table_impact.md +0 -0
  143. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1.1.0_cluster_b_provenance_trust.md +0 -0
  144. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1.1.0_live_graph_freshness.md +0 -0
  145. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1.1.1_batch_upsert_perf.md +0 -0
  146. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1.14.0_dialect_and_query_config_fixes.md +0 -0
  147. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1_1_2_bugfix.md +0 -0
  148. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1_1_3_union_cte_star.md +0 -0
  149. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1_2_0_read_proxy.md +0 -0
  150. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/v1_2_1_bugfix.md +0 -0
  151. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/plan/sprints/version-parity-and-restart.md +0 -0
  152. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/profile.html +0 -0
  153. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/pyrightconfig.json +0 -0
  154. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/scripts/collect_parse_errors.py +0 -0
  155. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/scripts/column_coverage_check.py +0 -0
  156. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/scripts/generate_cli_docs.sh +0 -0
  157. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/__main__.py +0 -0
  158. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/__init__.py +0 -0
  159. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/__init__.py +0 -0
  160. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/analyze.py +0 -0
  161. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/catalog.py +0 -0
  162. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/db.py +0 -0
  163. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/find.py +0 -0
  164. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/gain.py +0 -0
  165. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/git.py +0 -0
  166. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/index.py +0 -0
  167. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/install.py +0 -0
  168. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/mcp.py +0 -0
  169. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/reindex.py +0 -0
  170. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/report.py +0 -0
  171. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/uninstall.py +0 -0
  172. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/viz.py +0 -0
  173. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/commands/watch.py +0 -0
  174. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/coverage.py +0 -0
  175. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/cli/main.py +0 -0
  176. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/__init__.py +0 -0
  177. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/config.py +0 -0
  178. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/duckdb_backend.py +0 -0
  179. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/freshness.py +0 -0
  180. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/graph_db.py +0 -0
  181. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/jobs.py +0 -0
  182. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/noise_match.py +0 -0
  183. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/queries.cypher +0 -0
  184. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/queries.py +0 -0
  185. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/queries.sql +0 -0
  186. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/schema.cypher +0 -0
  187. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/core/schema.py +0 -0
  188. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/__init__.py +0 -0
  189. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/dbt_adapter.py +0 -0
  190. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/error_classify.py +0 -0
  191. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/git_delta.py +0 -0
  192. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/indexer.py +0 -0
  193. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/pool.py +0 -0
  194. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/walker.py +0 -0
  195. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/indexer/watcher.py +0 -0
  196. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/lineage/__init__.py +0 -0
  197. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/lineage/aggregator.py +0 -0
  198. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/lineage/schema_resolver.py +0 -0
  199. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/metrics/__init__.py +0 -0
  200. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/metrics/store.py +0 -0
  201. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/__init__.py +0 -0
  202. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/ansi_parser.py +0 -0
  203. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/base.py +0 -0
  204. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/bigquery_parser.py +0 -0
  205. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/dynamic_name.py +0 -0
  206. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/postgres_parser.py +0 -0
  207. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/parsers/tsql_parser.py +0 -0
  208. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/__init__.py +0 -0
  209. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/control.py +0 -0
  210. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/exceptions.py +0 -0
  211. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/models.py +0 -0
  212. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/noise_filter.py +0 -0
  213. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/read_client.py +0 -0
  214. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/selfheal.py +0 -0
  215. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/server.py +0 -0
  216. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/skill.py +0 -0
  217. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/tools.py +0 -0
  218. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/server/writer.py +0 -0
  219. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/utils/__init__.py +0 -0
  220. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/utils/hashing.py +0 -0
  221. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/utils/ignore.py +0 -0
  222. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/utils/logging.py +0 -0
  223. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/__init__.py +0 -0
  224. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/assets/force-graph.min.js +0 -0
  225. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/assets/template.html +0 -0
  226. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/data.py +0 -0
  227. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/render.py +0 -0
  228. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/src/sqlcg/viz/tags.py +0 -0
  229. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/__init__.py +0 -0
  230. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/__init__.py +0 -0
  231. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/adversarial/200_join.sql +0 -0
  232. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/adversarial/500_union.sql +0 -0
  233. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/bench_indexer.py +0 -0
  234. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/conftest.py +0 -0
  235. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/case_normalization.sql +0 -0
  236. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/colon_cast.sql +0 -0
  237. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/colon_reserved_word.sql +0 -0
  238. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/copy_into.sql +0 -0
  239. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/create_procedure.sql +0 -0
  240. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/identifier_dynamic.sql +0 -0
  241. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/lateral_flatten.sql +0 -0
  242. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/qualify.sql +0 -0
  243. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/scripting_block.sql +0 -0
  244. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/golden_corpus/snowflake/three_part.sql +0 -0
  245. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/tpch/q01.sql +0 -0
  246. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/tpch/q02.sql +0 -0
  247. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/tpch/q03.sql +0 -0
  248. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/tpch/q04.sql +0 -0
  249. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/benchmarks/tpch/q05.sql +0 -0
  250. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/conftest.py +0 -0
  251. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/__init__.py +0 -0
  252. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/conftest.py +0 -0
  253. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_F2_skill_install_e2e.py +0 -0
  254. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_airbnb_e2e.py +0 -0
  255. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_cli_index.py +0 -0
  256. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_empty_impact_cli_e2e.py +0 -0
  257. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_git_hook_install.py +0 -0
  258. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_golden_lineage.py +0 -0
  259. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_mcp_lifecycle.py +0 -0
  260. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_mcp_tools.py +0 -0
  261. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_parse_diagnostics_cli.py +0 -0
  262. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_pr_impact_cli_e2e.py +0 -0
  263. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_selfheal_e2e.py +0 -0
  264. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_star_resolution_e2e.py +0 -0
  265. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_viz_cli_e2e.py +0 -0
  266. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/e2e/test_watch.py +0 -0
  267. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/dim_hosts_cleansed.sql +0 -0
  268. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/dim_listings_cleansed.sql +0 -0
  269. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/fct_reviews.sql +0 -0
  270. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/mart_fullmoon_reviews.sql +0 -0
  271. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/raw_hosts.sql +0 -0
  272. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/raw_listings.sql +0 -0
  273. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/raw_reviews.sql +0 -0
  274. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/src_hosts.sql +0 -0
  275. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/src_listings.sql +0 -0
  276. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/airbnb/src_reviews.sql +0 -0
  277. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/bigquery/.gitkeep +0 -0
  278. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/duckdb_parity/kuzu_reference.json +0 -0
  279. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/jaffle_shop/customers.sql +0 -0
  280. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/jaffle_shop/orders.sql +0 -0
  281. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/jaffle_shop/raw_orders.sql +0 -0
  282. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/snowflake/base_tables.sql +0 -0
  283. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/snowflake/reports.sql +0 -0
  284. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/snowflake/views.sql +0 -0
  285. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/star_corpus/ddl_src.sql +0 -0
  286. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/star_corpus/ddl_tgt.sql +0 -0
  287. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/star_corpus/etl_alias_star.sql +0 -0
  288. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/star_corpus/etl_star.sql +0 -0
  289. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/synthetic/base_tables.sql +0 -0
  290. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/synthetic/reports.sql +0 -0
  291. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/fixtures/synthetic/views.sql +0 -0
  292. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/__init__.py +0 -0
  293. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/snowflake/__init__.py +0 -0
  294. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/snowflake/test_insert_select.py +0 -0
  295. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/snowflake/test_qualify_bare_tables_command_guard_integration.py +0 -0
  296. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_T34_presentation_segregation.py +0 -0
  297. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_T35_external_consumers.py +0 -0
  298. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_analyze_case_fold.py +0 -0
  299. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_anchor_tools.py +0 -0
  300. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_backfill_impact_consistency.py +0 -0
  301. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_bare_column_cte_lineage.py +0 -0
  302. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_bulk_upsert.py +0 -0
  303. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_case_split_seed_regression.py +0 -0
  304. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_catalog_kind_upgrade.py +0 -0
  305. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_catalog_load_integration.py +0 -0
  306. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cli_index_clear_before_rebuild.py +0 -0
  307. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_column_coverage_patterns.py +0 -0
  308. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_column_lineage_e2e.py +0 -0
  309. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_coverage_metrics_integration.py +0 -0
  310. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cross_file_lineage.py +0 -0
  311. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cte_key_namespacing_integration.py +0 -0
  312. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cte_recall_guard.py +0 -0
  313. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cte_schema_alias_guard.py +0 -0
  314. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_cte_source_node_invariant.py +0 -0
  315. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_dialect_auto_resolution.py +0 -0
  316. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_dialect_matrix.py +0 -0
  317. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_duckdb_parity.py +0 -0
  318. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_e36_xfile_regression_guard.py +0 -0
  319. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_empty_impact_blast_radius.py +0 -0
  320. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_empty_index_rollback_guard.py +0 -0
  321. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_freshness_mcp.py +0 -0
  322. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_gating_join_retrofit.py +0 -0
  323. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_hygiene_config_root_reconciliation.py +0 -0
  324. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_identity_counters_integration.py +0 -0
  325. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_impact_consumer_parity.py +0 -0
  326. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_incremental_reindex_parity.py +0 -0
  327. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_index_degraded_files_metric.py +0 -0
  328. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_index_filter_node_exclusion.py +0 -0
  329. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_indexer_batching.py +0 -0
  330. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_indexer_commits.py +0 -0
  331. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_indexer_to_graph.py +0 -0
  332. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_issue38_cte_insert_regression.py +0 -0
  333. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_join_col_resolution.py +0 -0
  334. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_key_normalization_chokepoint.py +0 -0
  335. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_live_anchors.py +0 -0
  336. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_mvcc_rebuild.py +0 -0
  337. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_non_table_create_coverage_no_regression.py +0 -0
  338. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_non_table_create_kind_in_graph.py +0 -0
  339. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_parse_diagnostics.py +0 -0
  340. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_phantom_non_table_create_node.py +0 -0
  341. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_pr1_confidence_reason.py +0 -0
  342. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_pr2_source_location.py +0 -0
  343. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_pr3_kind_tagging.py +0 -0
  344. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_pr_impact_integration.py +0 -0
  345. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_qualify_failed_persist.py +0 -0
  346. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_read_via_server.py +0 -0
  347. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_readonly_under_lock.py +0 -0
  348. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_reindex_via_server.py +0 -0
  349. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_repo_relative_cte_namespaces.py +0 -0
  350. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_resolvable_write_col_edges_integration.py +0 -0
  351. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_resync.py +0 -0
  352. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_selects_from_completeness.py +0 -0
  353. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_selects_from_cte_body_source.py +0 -0
  354. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_selects_from_subscope_source.py +0 -0
  355. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_single_writer_queue.py +0 -0
  356. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_skip_counts_integration.py +0 -0
  357. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_star_promote_temp_columns.py +0 -0
  358. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_star_resolution.py +0 -0
  359. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_temp_table_lineage.py +0 -0
  360. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_temp_table_namespacing.py +0 -0
  361. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_tool_version_stamp_integration.py +0 -0
  362. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_union_cte_star_recall_guard.py +0 -0
  363. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_usage_derived_catalog.py +0 -0
  364. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_use_schema_session_context_integration.py +0 -0
  365. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_user_surface_recall_guard.py +0 -0
  366. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_v141_surface_guards.py +0 -0
  367. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_v1_14_0_dialect_and_query_config_fixes.py +0 -0
  368. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_view_kind_in_graph.py +0 -0
  369. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_viz_data_build.py +0 -0
  370. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/integration/test_write_memory_ceiling.py +0 -0
  371. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/perf/__init__.py +0 -0
  372. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/perf/test_perf.py +0 -0
  373. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E10/__init__.py +0 -0
  374. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E11/__init__.py +0 -0
  375. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E12/__init__.py +0 -0
  376. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E12/e12_json_path.sql +0 -0
  377. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E12/e12_lateral_flatten.sql +0 -0
  378. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E12/test_e12.py +0 -0
  379. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E13/__init__.py +0 -0
  380. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E14/__init__.py +0 -0
  381. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E15/__init__.py +0 -0
  382. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E16/__init__.py +0 -0
  383. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E16/e16_merge.sql +0 -0
  384. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E16/e16_merge_delete.sql +0 -0
  385. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E16/test_e16.py +0 -0
  386. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E17/__init__.py +0 -0
  387. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E18/__init__.py +0 -0
  388. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E18/e18_decode.sql +0 -0
  389. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E18/e18_iff_decode.sql +0 -0
  390. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E18/e18_nvl2.sql +0 -0
  391. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E18/test_e18.py +0 -0
  392. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E19/__init__.py +0 -0
  393. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E2/__init__.py +0 -0
  394. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E2/e2_expr_alias.sql +0 -0
  395. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E2/e2_function_alias.sql +0 -0
  396. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E2/e2_multiply_alias.sql +0 -0
  397. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E2/test_e2.py +0 -0
  398. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E20/__init__.py +0 -0
  399. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E21/__init__.py +0 -0
  400. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E21/e21_alias_forward_ref.sql +0 -0
  401. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E21/e21_three_level_chain.sql +0 -0
  402. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E21/test_e21.py +0 -0
  403. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E22/__init__.py +0 -0
  404. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E23/__init__.py +0 -0
  405. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E23/e23_stored_proc.sql +0 -0
  406. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E23/e23_stored_proc_multi.sql +0 -0
  407. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E23/test_e23.py +0 -0
  408. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E24/__init__.py +0 -0
  409. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E25/__init__.py +0 -0
  410. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E25/e25_cross_db.sql +0 -0
  411. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E25/e25_two_part.sql +0 -0
  412. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E25/test_e25.py +0 -0
  413. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E25/test_e25_full_id.py +0 -0
  414. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E26/__init__.py +0 -0
  415. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E27/__init__.py +0 -0
  416. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E27/e27_nested_udf.sql +0 -0
  417. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E27/e27_udf.sql +0 -0
  418. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E27/test_e27.py +0 -0
  419. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E28/__init__.py +0 -0
  420. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E29/__init__.py +0 -0
  421. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E3/__init__.py +0 -0
  422. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E3/e3_alter_table.sql +0 -0
  423. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E3/e3_create_sequence.sql +0 -0
  424. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E3/e3_ddl_only.sql +0 -0
  425. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E3/test_e3.py +0 -0
  426. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E30/__init__.py +0 -0
  427. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E31/__init__.py +0 -0
  428. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E32/__init__.py +0 -0
  429. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E33/__init__.py +0 -0
  430. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E34/__init__.py +0 -0
  431. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E35/__init__.py +0 -0
  432. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E36/__init__.py +0 -0
  433. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E36/e36_temp_multi_use.sql +0 -0
  434. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E36/e36_temp_table.sql +0 -0
  435. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E36/test_e36.py +0 -0
  436. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E36/test_e36_xfile.py +0 -0
  437. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E37/__init__.py +0 -0
  438. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E38/__init__.py +0 -0
  439. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/__init__.py +0 -0
  440. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/e4_execute_immediate.sql +0 -0
  441. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/e4_if_not_exists.sql +0 -0
  442. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/e4_unexpected_token.sql +0 -0
  443. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/e4_unpivot.sql +0 -0
  444. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E4/test_e4.py +0 -0
  445. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/__init__.py +0 -0
  446. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/e5_cte_missing_source.sql +0 -0
  447. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/e5_multi_cte.sql +0 -0
  448. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/e5_nested_cte.sql +0 -0
  449. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/test_e5.py +0 -0
  450. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E5/test_e5_cte_projection.py +0 -0
  451. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E8/__init__.py +0 -0
  452. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E8/e8_dynamic_sources.sql +0 -0
  453. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E8/e8_seq_nextval.sql +0 -0
  454. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E8/e8_uuid.sql +0 -0
  455. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E8/test_e8.py +0 -0
  456. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E9/__init__.py +0 -0
  457. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_aggregates/__init__.py +0 -0
  458. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_aggregates/fixture_sum_absent_cross_schema.sql +0 -0
  459. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_aggregates/fixture_sum_case_when.sql +0 -0
  460. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_aggregates/fixture_sum_present_source.sql +0 -0
  461. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_aggregates/test_e_aggregates.py +0 -0
  462. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/__init__.py +0 -0
  463. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/fixture_date_aliased.sql +0 -0
  464. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/fixture_date_unaliased.sql +0 -0
  465. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/fixture_datediff_unaliased.sql +0 -0
  466. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/fixture_year_unaliased.sql +0 -0
  467. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/E_date_functions/test_e_date_functions.py +0 -0
  468. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/README.md +0 -0
  469. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/__init__.py +0 -0
  470. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/__init__.py +0 -0
  471. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/fixture_etl.sql +0 -0
  472. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/fixture_omloopsnelheid.sql +0 -0
  473. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/fixture_semantic.sql +0 -0
  474. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/fixture_source.sql +0 -0
  475. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/test_anchor_ma_aantal_op_order.py +0 -0
  476. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/anchors/test_anchor_omloopsnelheid.py +0 -0
  477. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/conftest.py +0 -0
  478. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/snowflake/test_plan_review_gates.py +0 -0
  479. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/__init__.py +0 -0
  480. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/snowflake/__init__.py +0 -0
  481. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/snowflake/test_qualify_bare_tables_command_guard.py +0 -0
  482. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/snowflake/test_scripting_noise.py +0 -0
  483. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_BugB_escalation_uses_init_path.py +0 -0
  484. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_BugC_hook_upgrade.py +0 -0
  485. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_F2_install_skill.py +0 -0
  486. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_F2_skill_render.py +0 -0
  487. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_F2_uninstall_skill.py +0 -0
  488. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_T09_01_qualify_once.py +0 -0
  489. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_T09_02_ddl_skip.py +0 -0
  490. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_T09_04_subprocess_isolate.py +0 -0
  491. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_T09_06_log_verbosity.py +0 -0
  492. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_T35_config_external_consumers.py +0 -0
  493. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_aggregator.py +0 -0
  494. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_aggregator_skip.py +0 -0
  495. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_analyze_case_fold.py +0 -0
  496. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_base_parser.py +0 -0
  497. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_branch_monitor.py +0 -0
  498. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_bulk_upsert_invariant.py +0 -0
  499. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_canonical_target_resolution.py +0 -0
  500. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_catalog_csv_parsing.py +0 -0
  501. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_catalog_missing_warning.py +0 -0
  502. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_classify_non_table_create_kind.py +0 -0
  503. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_cli.py +0 -0
  504. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_cli_doc_flag_staleness.py +0 -0
  505. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_cli_help.py +0 -0
  506. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_clone_positional_insert_blindspot.py +0 -0
  507. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_closure_depth.py +0 -0
  508. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_column_lineage_wiring.py +0 -0
  509. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_config.py +0 -0
  510. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_coverage_metrics.py +0 -0
  511. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_cte_key_namespacing.py +0 -0
  512. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_cte_source_gap_metric.py +0 -0
  513. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_data_models.py +0 -0
  514. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_db_info.py +0 -0
  515. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_db_info_coverage.py +0 -0
  516. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_db_path_isolation_fixture.py +0 -0
  517. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_doc_links.py +0 -0
  518. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_doc_markdown_link_existence.py +0 -0
  519. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_dominant_cause.py +0 -0
  520. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_duckdb_backend.py +0 -0
  521. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_duckdb_backend_shared.py +0 -0
  522. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_dynamic_name_resolution.py +0 -0
  523. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_e5_view_alias_resolution.py +0 -0
  524. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_e8_dual_emission.py +0 -0
  525. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_e8_temp_chain_key_mismatch.py +0 -0
  526. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_empty_propagation_unit.py +0 -0
  527. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_extract_select_output_columns.py +0 -0
  528. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_file_ignore_defaults.py +0 -0
  529. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_find_cmd.py +0 -0
  530. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_firstuser_findings.py +0 -0
  531. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_freshness_helper.py +0 -0
  532. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_gain_coverage.py +0 -0
  533. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_gain_ratio.py +0 -0
  534. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_gating_join_field_docstrings.py +0 -0
  535. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_git_delta.py +0 -0
  536. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_git_hooks.py +0 -0
  537. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_git_hooks_notify.py +0 -0
  538. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_graph_backend.py +0 -0
  539. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_graph_completeness_invariant.py +0 -0
  540. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_hard_kill_pool.py +0 -0
  541. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_has_column_precedence_upsert.py +0 -0
  542. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_hook_reindex_detach.py +0 -0
  543. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_hygiene_config_warning.py +0 -0
  544. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_identity_counters.py +0 -0
  545. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_include_working_tree.py +0 -0
  546. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_index_cmd.py +0 -0
  547. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_index_filter_config.py +0 -0
  548. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_index_flags.py +0 -0
  549. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_index_progress.py +0 -0
  550. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_index_summary_degraded_metric.py +0 -0
  551. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_indexer_progress.py +0 -0
  552. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_indexer_quality.py +0 -0
  553. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_install.py +0 -0
  554. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_install_message.py +0 -0
  555. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_issue_63_readonly_lock.py +0 -0
  556. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_jobs.py +0 -0
  557. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_join_col_resolve_marker.py +0 -0
  558. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_judgement.py +0 -0
  559. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_lineage_conversion.py +0 -0
  560. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_literal_column_skip.py +0 -0
  561. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_mcp_best_practices.py +0 -0
  562. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_mcp_control.py +0 -0
  563. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_mcp_stdio_smoke.py +0 -0
  564. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_merge_column_lineage.py +0 -0
  565. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_metrics.py +0 -0
  566. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_noise_filter.py +0 -0
  567. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_normalize_keys.py +0 -0
  568. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_parse_failed_classification.py +0 -0
  569. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_parse_file_dependency_filter.py +0 -0
  570. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_parse_quality.py +0 -0
  571. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_parser.py +0 -0
  572. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_phantom_non_table_create_source.py +0 -0
  573. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_pr07_observability.py +0 -0
  574. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_pr6_execute_immediate_unwrap.py +0 -0
  575. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_pr_impact_unit.py +0 -0
  576. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_qualify_failed_unit.py +0 -0
  577. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_queries_loader.py +0 -0
  578. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_read_client.py +0 -0
  579. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_repo_relative_cte_namespaces.py +0 -0
  580. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_resolvable_write_col_edges_unit.py +0 -0
  581. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_resolve_join_columns_sql.py +0 -0
  582. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_resolve_pass2_passes_dependency_filter.py +0 -0
  583. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_schema_resolver.py +0 -0
  584. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_selects_from_completeness_unit.py +0 -0
  585. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_selfheal_detector.py +0 -0
  586. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_selfheal_pr1_messages.py +0 -0
  587. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_selfheal_reexec.py +0 -0
  588. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_selfheal_watcher.py +0 -0
  589. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_server.py +0 -0
  590. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_skip_counts_persistence.py +0 -0
  591. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_snowflake_strip_alter_set_tag.py +0 -0
  592. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_sprint_06_t04_t05.py +0 -0
  593. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_star_resolution_unit.py +0 -0
  594. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_star_schema_unit.py +0 -0
  595. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_submit_feedback.py +0 -0
  596. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_subprocess_isolate.py +0 -0
  597. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_t02_expression_name_extraction.py +0 -0
  598. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_t03_ddl_skip.py +0 -0
  599. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_temp_table_namespacing.py +0 -0
  600. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_timeout_cancel.py +0 -0
  601. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_tool_version_stamp.py +0 -0
  602. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_tools_hints.py +0 -0
  603. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_tools_warnings.py +0 -0
  604. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_transform_kind_classification.py +0 -0
  605. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_uninstall.py +0 -0
  606. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_unknown_sentinel_skip.py +0 -0
  607. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_unqualified_fallback.py +0 -0
  608. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_upsert_batch_invariant.py +0 -0
  609. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_use_schema_session_context.py +0 -0
  610. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_version_parity.py +0 -0
  611. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_view_classification.py +0 -0
  612. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_viz_config_schemas.py +0 -0
  613. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_viz_facets.py +0 -0
  614. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_viz_render_self_contained.py +0 -0
  615. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_walker.py +0 -0
  616. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_watcher.py +0 -0
  617. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/tests/unit/test_worker_error_classification.py +0 -0
  618. {sql_code_graph-1.35.3 → sql_code_graph-1.36.1}/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.35.3
3
+ Version: 1.36.1
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
@@ -85,7 +85,8 @@ for that project.
85
85
 
86
86
  1. **Initialize**: `sqlcg db init`
87
87
  2. **Index**: `sqlcg index ./sql --dialect snowflake`
88
- 3. **Keep fresh**: `sqlcg git install-hooks` (optional)
88
+ 3. **Keep fresh**: `sqlcg git install-hooks` (auto-reindex on branch switch), or
89
+ `sqlcg watch ./sql` to re-index automatically as you edit files (both optional)
89
90
 
90
91
  ## Full setup (recommended)
91
92
 
@@ -303,7 +304,8 @@ sqlcg analyze empty-impact <table>... # downstream blast radius when named tabl
303
304
  sqlcg analyze pr-impact --base <ref> # detect producers a PR dropped + their blast radius (code-regression detection)
304
305
  sqlcg analyze upstream/downstream # trace lineage from the CLI
305
306
  sqlcg find table/column/pattern # search the graph
306
- sqlcg watch <path> # watch for file changes
307
+ sqlcg watch <path> # watch a directory and re-index on SQL file changes
308
+ sqlcg viz # generate a self-contained graph-explorer HTML
307
309
  sqlcg db info # graph stats + freshness (indexed SHA vs HEAD)
308
310
  sqlcg git install-hooks # install post-checkout + post-merge resync hooks
309
311
  sqlcg gain # show usage metrics
@@ -316,7 +318,7 @@ sqlcg mcp restart # stop the server (client must respawn it
316
318
  sqlcg version # show installed version
317
319
  ```
318
320
 
319
- ### Staying on the latest build (v1.5.0)
321
+ ### Staying on the latest build
320
322
 
321
323
  The installed package, the CLI, and the running MCP server all report the **same**
322
324
  version (`sqlcg.__version__`). After upgrading, an editor may still be talking to an
@@ -325,7 +327,7 @@ server's `version` and a `stale_by_version` flag that is `true` when the live se
325
327
  differs from the installed build. Re-running `sqlcg install` stops the stale server so
326
328
  your editor respawns it on the new build, so you never debug against an outdated server.
327
329
 
328
- ### Reads while the server is running (v1.2.0)
330
+ ### Reads while the server is running
329
331
 
330
332
  DuckDB takes an exclusive lock on the database file, so while the MCP server is
331
333
  live it holds that lock (other processes cannot open the file, even read-only).
@@ -336,6 +338,34 @@ running they open the database directly, exactly as before. If the server is
336
338
  mid-reindex the read waits for it to finish rather than failing with
337
339
  "Database is locked".
338
340
 
341
+ ### Visualising the graph (`viz`)
342
+
343
+ `sqlcg viz` generates a **self-contained graph-explorer HTML** from the live
344
+ graph — every node, edge, the force-graph library, and the facet data are inlined
345
+ into a single file, so it opens by double-click in a browser with no server or
346
+ external resources.
347
+
348
+ ```bash
349
+ sqlcg viz # writes table_graph.html in the current dir
350
+ sqlcg viz --out lineage.html # choose the output path
351
+ ```
352
+
353
+ In the browser the filter composes schema ∩ kind ∩ tag (multi-select per facet)
354
+ plus a job dropdown; an edge renders only when both endpoints are visible. Table,
355
+ view, and temp nodes are on by default; CTE and derived nodes are off (toggleable).
356
+
357
+ Two optional CSV facets let you colour and slice the graph by your own
358
+ conventions — both are `pattern,label[,color]` with a required header, patterns
359
+ are case-insensitive `fnmatch` globs (`*`, `?`) matched against the qualified
360
+ table name:
361
+
362
+ ```bash
363
+ sqlcg viz --tags tags.csv # legend swatches: colour + filter the graph
364
+ sqlcg viz --jobs jobs.csv # populate the job dropdown (filter only)
365
+ ```
366
+
367
+ Omit `--tags` to hide the tag legend; omit `--jobs` to leave the dropdown empty.
368
+
339
369
  ## Supported dialects
340
370
 
341
371
  sqlcg is built on [sqlglot](https://github.com/tobymao/sqlglot), so other dialects
@@ -49,7 +49,8 @@ for that project.
49
49
 
50
50
  1. **Initialize**: `sqlcg db init`
51
51
  2. **Index**: `sqlcg index ./sql --dialect snowflake`
52
- 3. **Keep fresh**: `sqlcg git install-hooks` (optional)
52
+ 3. **Keep fresh**: `sqlcg git install-hooks` (auto-reindex on branch switch), or
53
+ `sqlcg watch ./sql` to re-index automatically as you edit files (both optional)
53
54
 
54
55
  ## Full setup (recommended)
55
56
 
@@ -267,7 +268,8 @@ sqlcg analyze empty-impact <table>... # downstream blast radius when named tabl
267
268
  sqlcg analyze pr-impact --base <ref> # detect producers a PR dropped + their blast radius (code-regression detection)
268
269
  sqlcg analyze upstream/downstream # trace lineage from the CLI
269
270
  sqlcg find table/column/pattern # search the graph
270
- sqlcg watch <path> # watch for file changes
271
+ sqlcg watch <path> # watch a directory and re-index on SQL file changes
272
+ sqlcg viz # generate a self-contained graph-explorer HTML
271
273
  sqlcg db info # graph stats + freshness (indexed SHA vs HEAD)
272
274
  sqlcg git install-hooks # install post-checkout + post-merge resync hooks
273
275
  sqlcg gain # show usage metrics
@@ -280,7 +282,7 @@ sqlcg mcp restart # stop the server (client must respawn it
280
282
  sqlcg version # show installed version
281
283
  ```
282
284
 
283
- ### Staying on the latest build (v1.5.0)
285
+ ### Staying on the latest build
284
286
 
285
287
  The installed package, the CLI, and the running MCP server all report the **same**
286
288
  version (`sqlcg.__version__`). After upgrading, an editor may still be talking to an
@@ -289,7 +291,7 @@ server's `version` and a `stale_by_version` flag that is `true` when the live se
289
291
  differs from the installed build. Re-running `sqlcg install` stops the stale server so
290
292
  your editor respawns it on the new build, so you never debug against an outdated server.
291
293
 
292
- ### Reads while the server is running (v1.2.0)
294
+ ### Reads while the server is running
293
295
 
294
296
  DuckDB takes an exclusive lock on the database file, so while the MCP server is
295
297
  live it holds that lock (other processes cannot open the file, even read-only).
@@ -300,6 +302,34 @@ running they open the database directly, exactly as before. If the server is
300
302
  mid-reindex the read waits for it to finish rather than failing with
301
303
  "Database is locked".
302
304
 
305
+ ### Visualising the graph (`viz`)
306
+
307
+ `sqlcg viz` generates a **self-contained graph-explorer HTML** from the live
308
+ graph — every node, edge, the force-graph library, and the facet data are inlined
309
+ into a single file, so it opens by double-click in a browser with no server or
310
+ external resources.
311
+
312
+ ```bash
313
+ sqlcg viz # writes table_graph.html in the current dir
314
+ sqlcg viz --out lineage.html # choose the output path
315
+ ```
316
+
317
+ In the browser the filter composes schema ∩ kind ∩ tag (multi-select per facet)
318
+ plus a job dropdown; an edge renders only when both endpoints are visible. Table,
319
+ view, and temp nodes are on by default; CTE and derived nodes are off (toggleable).
320
+
321
+ Two optional CSV facets let you colour and slice the graph by your own
322
+ conventions — both are `pattern,label[,color]` with a required header, patterns
323
+ are case-insensitive `fnmatch` globs (`*`, `?`) matched against the qualified
324
+ table name:
325
+
326
+ ```bash
327
+ sqlcg viz --tags tags.csv # legend swatches: colour + filter the graph
328
+ sqlcg viz --jobs jobs.csv # populate the job dropdown (filter only)
329
+ ```
330
+
331
+ Omit `--tags` to hide the tag legend; omit `--jobs` to leave the dropdown empty.
332
+
303
333
  ## Supported dialects
304
334
 
305
335
  sqlcg is built on [sqlglot](https://github.com/tobymao/sqlglot), so other dialects
@@ -56,12 +56,12 @@ cd sql-code-graph
56
56
  uv sync
57
57
  ```
58
58
 
59
- Verify the install (your exact version may differ — anything **1.32.0 or
59
+ Verify the install (your exact version may differ — anything **1.36.0 or
60
60
  newer** is current):
61
61
 
62
62
  ```bash
63
63
  sqlcg version
64
- # sqlcg version 1.32.0
64
+ # sqlcg version 1.36.0
65
65
  ```
66
66
 
67
67
  ### 3.2 Initialise the graph database
@@ -72,7 +72,7 @@ where the graph file lives.
72
72
 
73
73
  ```bash
74
74
  sqlcg db init
75
- # Database initialised at /home/<you>/.sqlcg/graph.db (schema v9)
75
+ # Database initialised at /home/<you>/.sqlcg/graph.db (schema v11)
76
76
  ```
77
77
 
78
78
  ### 3.3 Index your repo (point at the ROOT)
@@ -379,6 +379,11 @@ Then run Question 1 (`find table`) on the hub tables you know — validate that
379
379
  the graph reflects reality on your known ground truth before relying on it for
380
380
  unknown territory.
381
381
 
382
+ To see the whole warehouse at once, run `sqlcg viz` — it writes a
383
+ self-contained `table_graph.html` you open in a browser to explore the graph
384
+ visually, filtering by schema, node kind, and your own tag/job CSV facets. See
385
+ the `viz` section in the [README](../README.md#visualising-the-graph-viz).
386
+
382
387
  ---
383
388
 
384
389
  ## 6. Where to go next
@@ -390,3 +395,5 @@ unknown territory.
390
395
  | [`docs/cli.md`](cli.md) | Full CLI reference (every command and flag) |
391
396
  | `sqlcg analyze failures` | Lists files that failed to parse with their dominant error-code bucket — start here when coverage is lower than expected |
392
397
  | `sqlcg git install-hooks` | Install post-checkout + post-merge hooks that auto-reindex on branch switch |
398
+ | `sqlcg watch <path>` | Watch a directory and re-index on SQL file changes — keeps the graph fresh while you edit |
399
+ | `sqlcg viz` | Generate a self-contained graph-explorer HTML to explore lineage in a browser |
@@ -0,0 +1,84 @@
1
+ # Generic variable-name resolution — live-DWH acceptance (PR-3)
2
+
3
+ Feature: [`feature_generic_var_name_resolution.md`](../sprints/feature_generic_var_name_resolution.md)
4
+ (shipped v1.36.0, PR #169). `IDENTIFIER($var)` table names built from `SET`
5
+ string-concat session variables are now resolved at `schema.table` grain via a
6
+ bounded, dialect-agnostic constant-fold of the variable's RHS AST.
7
+
8
+ ## Method
9
+
10
+ Two isolated sqlcg builds, **same** live DWH corpus (1335 files indexed,
11
+ `/home/ignwrad/Projects/dwh`, dialect snowflake, identical `indexed_sha
12
+ fdf1b551…`), each into its own `SQLCG_DB_PATH`; `gain --json` captured from each.
13
+
14
+ | Build | Commit | Version | JSON |
15
+ |-------|--------|---------|------|
16
+ | BEFORE (no IDENTIFIER feature) | `449df6d` (#172) | 1.35.3 | [`identifier_live_before_v1.35.3.json`](identifier_live_before_v1.35.3.json) |
17
+ | AFTER (feature merged) | `c480c15` (#169) | 1.36.0 | [`identifier_live_after_v1.36.0.json`](identifier_live_after_v1.36.0.json) |
18
+
19
+ Index timings: BEFORE 2:42.76, AFTER 2:41.07 wall (both < 3-min budget). Raw
20
+ edges 44093 → 45248; degraded files 174 → 161 (E8 161 → 148, 13 fewer).
21
+
22
+ ## Verdict: WIN CONFIRMED
23
+
24
+ ### 1. The win
25
+
26
+ | Metric | Before | After | Delta |
27
+ |--------|-------:|------:|------:|
28
+ | `resolvable_write_col_edges` | 36936 | 37713 | **+777** |
29
+ | `transitive_col_edges` | 4182 | 4558 | +376 |
30
+ | `zero_edge_write_queries` | 1028 | 969 | **−59** |
31
+ | `total_write_queries` | 2323 | 2323 | 0 |
32
+ | SELECTS_FROM edges | 6065 | 6239 | **+174** |
33
+ | `good_edges` (catalogued) | 52682 | 53811 | +1129 |
34
+ | `total_edges` | 60830 | 61983 | +1153 |
35
+ | `total_tables` | 6552 | 6673 | +121 |
36
+ | `catalogued_tables` | 5800 | 5864 | +64 |
37
+
38
+ **121 new `schema.table` nodes** appear in AFTER and not BEFORE — exactly the
39
+ IDENTIFIER($var) targets now resolving. **119 of 121 carry ≥1 real edge.** The
40
+ DWH has **136 files** containing `identifier($…)` (matches the plan's ~136). The
41
+ write side surfaces as `resolvable_write_col_edges` +777 and SELECTS_FROM +174
42
+ (the dynamic DML writes flow through column lineage / SELECTS_FROM, not
43
+ INSERTS_INTO — which is 0 in both builds). `zero_edge_write_queries` fell by 59,
44
+ i.e. 59 formerly-dropped write queries now produce a real edge.
45
+
46
+ ### 2. No regression
47
+
48
+ `good_edges_strict` 48151 → 48907 (**+756**, UP). `good_edges_scoped` 37471 →
49
+ 37502 (+31, UP). Health percentages move trivially (strict 79.16 → 78.90,
50
+ scoped 98.56 → 98.53) — the denominator grows with the new resolved targets;
51
+ absolute good edges rose in both. No drop.
52
+
53
+ ### 3. No catalog collision (env-parameterization safety)
54
+
55
+ - Non-empty-catalog table nodes = **3 in both** builds (unchanged). The feature
56
+ added **zero** literal `catalog.schema.table` nodes; every resolved IDENTIFIER
57
+ target landed at empty-catalog `db.name`, matching the catalog-less identity
58
+ used by DDL / plain-SQL. The research's "zero literal catalog.schema.table
59
+ refs" holds.
60
+ - No two distinct real tables collapsed into one node. The only `(db,name)`
61
+ values with >1 node are per-file local CTE/temp names (`cte_remove_duplicates`,
62
+ `tmp_*`, `agg`, …) — kind=`cte`, a pre-existing pattern, not IDENTIFIER tables.
63
+ - Spot-checks (real SELECTS_FROM edges in AFTER, absent in BEFORE, correct grain):
64
+ - `EMP.APPLICATION_FIELDS` → `emp.application_fields` (cat='', SELECTS_FROM=2)
65
+ - `FAC.VERZAMELFACTUUR` → `fac.verzamelfactuur` (cat='', SELECTS_FROM=3)
66
+ - `ods.ig_wecycle` → `ods.ig_wecycle` (cat='', SELECTS_FROM=3)
67
+
68
+ ### 4. Negative cases still hold
69
+
70
+ No phantom table nodes from non-table identifier positions. No node named
71
+ `identifier`, no `$`-bearing or unfolded `(…)` table introduced by the feature.
72
+ The only `$`/paren junk nodes (`@ma.msstg_*/${internal.job.name}/` Snowflake
73
+ stage paths, `ods workaround artikel (planning)`) are **identical in BEFORE** —
74
+ pre-existing, not from this feature. `wmswarehouse*` matches are real data
75
+ tables, not `ALTER WAREHOUSE` artifacts. The structural sink-walk (visiting only
76
+ `exp.Table` positions) correctly auto-excludes ALTER WAREHOUSE / CALL identifiers.
77
+
78
+ ## Why the win is ~777/121 not the full ~187 refs
79
+
80
+ The +777 `resolvable_write_col_edges` and 121 new nodes cover the resolvable
81
+ share. The plan's Non-Goals exclude the ~40 scalar-subquery / genuinely
82
+ runtime-dynamic delta vars (honest give-up) and chain depth > 1. Of 136 files,
83
+ the resolved fraction lands as 121 distinct target tables (119 with edges); the
84
+ remainder are OPAQUE-prefix / subquery-form sinks that correctly stay dropped.
@@ -0,0 +1,31 @@
1
+ {"total_calls": 1721, "last_7d_calls": 1721, "index_runs": 5, "feedback_tp": 0,
2
+ "feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 580},
3
+ {"name": "trace_column_lineage", "count": 452}, {"name":
4
+ "list_dialects_and_repos", "count": 148}], "execute_sql_ratio": 0.34,
5
+ "parse_quality": {"sqlglot": 5166, "scripting": 20, "dynamic_sql": 3},
6
+ "coverage": {"catalogued_tables": 5864, "total_tables": 6673, "good_edges":
7
+ 53811, "total_edges": 61983, "phantom_edges": 12241, "blindspot_tables": 631,
8
+ "good_edges_strict": 48907, "edge_health_strict_pct": 78.9, "good_edges_scoped":
9
+ 37502, "total_edges_scoped": 38063, "edge_health_scoped_pct": 98.53,
10
+ "phantom_confirmed": 11701, "phantom_contradicted": 352, "phantom_unverified":
11
+ 188, "top_blindspot_tables": [{"table": "ba.wtfa_kpi_datum_klant", "bad_edges":
12
+ 70}, {"table": "ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
13
+ "ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
14
+ "da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
15
+ "da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
16
+ "wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
17
+ "da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
18
+ "bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19},
19
+ {"table": "da.hthyb_page_brandplacement", "bad_edges": 17}],
20
+ "blindspot_tables_for_80pct": 18, "files_indexed": 1335, "indexed_sha":
21
+ "fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path":
22
+ "/tmp/sqlcg-after-graph.db", "index_timestamp": 1781478657.7558403,
23
+ "degraded_parse_total": 5189, "degraded_parse_queries": 27,
24
+ "degraded_parse_by_dir": {"etl": {"degraded": 8, "total": 2776}, "ddl":
25
+ {"degraded": 19, "total": 2413}}, "zero_edge_write_queries": 969,
26
+ "total_write_queries": 2323, "cte_key_collisions": 0,
27
+ "rescuable_unqualified_edges": 125, "info_schema_has_column_rows": 100193,
28
+ "cte_source_gap_writes": 0, "resolvable_write_col_edges": 37713,
29
+ "transitive_col_edges": 4558, "qualify_failed_statements": 9,
30
+ "tool_version_stale": false, "indexed_tool_version": "1.36.0",
31
+ "running_tool_version": "1.36.0"}}
@@ -0,0 +1,32 @@
1
+ {"total_calls": 1721, "last_7d_calls": 1721, "index_runs": 5, "feedback_tp": 0,
2
+ "feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 580},
3
+ {"name": "trace_column_lineage", "count": 452}, {"name":
4
+ "list_dialects_and_repos", "count": 148}], "execute_sql_ratio": 0.34,
5
+ "parse_quality": {"sqlglot": 5166, "scripting": 20, "dynamic_sql": 3},
6
+ "coverage": {"catalogued_tables": 5800, "total_tables": 6552, "good_edges":
7
+ 52682, "total_edges": 60830, "phantom_edges": 12241, "blindspot_tables": 628,
8
+ "good_edges_strict": 48151, "edge_health_strict_pct": 79.16,
9
+ "good_edges_scoped": 37471, "total_edges_scoped": 38020,
10
+ "edge_health_scoped_pct": 98.56, "phantom_confirmed": 11701,
11
+ "phantom_contradicted": 352, "phantom_unverified": 188, "top_blindspot_tables":
12
+ [{"table": "ba.wtfa_kpi_datum_klant", "bad_edges": 70}, {"table":
13
+ "ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
14
+ "ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
15
+ "da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
16
+ "da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
17
+ "wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
18
+ "da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
19
+ "bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19},
20
+ {"table": "da.hthyb_page_brandplacement", "bad_edges": 17}],
21
+ "blindspot_tables_for_80pct": 17, "files_indexed": 1335, "indexed_sha":
22
+ "fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path":
23
+ "/tmp/sqlcg-before-graph.db", "index_timestamp": 1781478465.9151304,
24
+ "degraded_parse_total": 5189, "degraded_parse_queries": 27,
25
+ "degraded_parse_by_dir": {"etl": {"degraded": 8, "total": 2776}, "ddl":
26
+ {"degraded": 19, "total": 2413}}, "zero_edge_write_queries": 1028,
27
+ "total_write_queries": 2323, "cte_key_collisions": 0,
28
+ "rescuable_unqualified_edges": 125, "info_schema_has_column_rows": 100193,
29
+ "cte_source_gap_writes": 0, "resolvable_write_col_edges": 36936,
30
+ "transitive_col_edges": 4182, "qualify_failed_statements": 9,
31
+ "tool_version_stale": false, "indexed_tool_version": "1.35.3",
32
+ "running_tool_version": "1.35.3"}}