sql-code-graph 1.36.0__tar.gz → 1.36.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.
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/PKG-INFO +35 -5
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/README.md +34 -4
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/docs/getting-started.md +10 -3
- sql_code_graph-1.36.2/plan/metrics/gain_1.36.2_f6a335a.json +33 -0
- sql_code_graph-1.36.2/plan/metrics/gain_drop_alter_phantom_baseline_v1361.json +30 -0
- sql_code_graph-1.36.2/plan/metrics/identifier_live_acceptance.md +84 -0
- sql_code_graph-1.36.2/plan/metrics/identifier_live_after_v1.36.0.json +31 -0
- sql_code_graph-1.36.2/plan/metrics/identifier_live_before_v1.35.3.json +32 -0
- sql_code_graph-1.36.2/plan/sprints/fix_drop_alter_phantom_source_node.md +551 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/pyproject.toml +1 -1
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/__init__.py +1 -1
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/ansi_parser.py +16 -2
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_incremental_reindex_parity.py +102 -0
- sql_code_graph-1.36.2/tests/integration/test_phantom_drop_alter_node.py +123 -0
- sql_code_graph-1.36.2/tests/unit/test_phantom_drop_alter_source.py +166 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/uv.lock +1 -1
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/api-documenter.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/architect-planner.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/architect-reviewer.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/code-reviewer.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/developer.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/plan-reviewer.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.claude/agents/sprint-planner.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/workflows/benchmark.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/workflows/e2e-tests.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/workflows/release.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.github/workflows/test.yml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.gitignore +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.pre-commit-config.yaml +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/.sqlcgignore +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/ARCHITECTURE_REVIEW.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/ARCHITECTURE_REVIEW_ARCHIVE.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/CHANGELOG.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/CLAUDE.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/docs/AIRBNB_PARSE_REPORT.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/docs/cli.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/docs/releasing-pypi.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/e2e_firstuser_report.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/e2e_run_20260528_101413.output +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/main.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/WORKFLOW.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/pr2_catalog_load_eval.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/pr3_repo_native_plateau.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/pr4_transform_kinds.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/pr5_extraction_recall_taxonomy.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/measurements/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/createkind_dwh_after.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/createkind_dwh_before.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/gain_1.29.0_05c6943.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/gain_1.30.0_2c8ac25.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/gain_1.30.1_26271fc.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/gain_1.31.0_a40c837.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/gain_1.32.0_c1bec3c.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/lineage5_dwh_after_pr5.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/lineage5_dwh_before_master.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr4_star_promote_after.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr4_star_promote_before.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr_b_phantom_after.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr_b_phantom_before.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr_c_merge_after.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/pr_c_merge_before.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/schema_comparison_with_schema.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/schema_comparison_without_schema.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/metrics/sprint_pool_300s_plan.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/column_coverage_diagnostic.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/column_coverage_findings.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/dwh_graph_analysis.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/dwh_positional_insert_column_blindspot.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/feature_acceptance_dwh.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/graph_health_sprint_postmortem.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/island_lever_live_verification.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/issue38_pr2_live_acceptance.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/issue38_pr3_live_acceptance.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/lineage_identity_sprint_postmortem.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/pr_impact_followups_2026-06-14.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/sprint_03_v0.3.1_postmortem.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/sprint_3.1_postmortem.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/reports/v1_14_dialect_query_config_postmortem.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/blueprint.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/coverage_parse_failure_diagnosis.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/investigation_e5_e4.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/observed_usage_overlay_query_history_tableau.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/parse_diagnostics.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/parsing_errors_experiment.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/snowflake_en_test_suite.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/sql_only_coverage_lever_post_pr2.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/research/sqlcg.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/bundle_claude_skill.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/ci_tests_pool_flake_fix.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/column_lineage_recall_metric.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/coverage_p1_p3_p4.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/coverage_p1_p5_metric.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/coverage_parse_failures.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/diff-impact-producer-file.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/e8_dual_emission.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/feature_34_unused_presentation_segregation.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/feature_35_external_downstream_injection.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/feature_F2_bundle_claude_skill.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/feature_generic_var_name_resolution.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/feature_kuzu_to_duckdb_migration.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_backward_self_heal_index_at_sha.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_downstream_sink_location.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_dynamic_table_parsing.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_expand_qualify_perf.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_firstuser_findings.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_issue29_live_test_followups.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/fix_schema_case_mismatch.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/gain_coverage_metrics.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/graph_health_catalog_and_metrics.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/hygiene_config_path_and_survivors.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/issue-38-backfill-cte-bridge.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/issue-38-residual-source-extraction.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/issue-38-selects-from-island-lever.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/living_codebase_resync.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/mcp_server_self_healing.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/positional_insert_clone_blindspot.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_01.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_01_deployment_pypi.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_02.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_02_v0.3.0_core.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_03.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_04_column_lineage.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_04_column_lineage_fix.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_05_star_resolution.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_06_lineage_coverage.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_07_open_ecodes.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_07_perf_and_live_test.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_08_perf_upsert.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_09_lineage_coverage.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_10_anchor_tools.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_11_v1.0.2_bugfix.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_12_v1.1.0.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_13_v1.1.0_cluster_b.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_lineage_identity_and_session_context.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/sprint_postmortem_fixes.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/temp_table_namespacing.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/trust_layer.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/unfilled_table_impact.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1.1.0_cluster_b_provenance_trust.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1.1.0_live_graph_freshness.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1.1.1_batch_upsert_perf.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1.14.0_dialect_and_query_config_fixes.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1_1_2_bugfix.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1_1_3_union_cte_star.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1_2_0_read_proxy.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/v1_2_1_bugfix.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/plan/sprints/version-parity-and-restart.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/profile.html +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/pyrightconfig.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/scripts/collect_parse_errors.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/scripts/column_coverage_check.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/scripts/generate_cli_docs.sh +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/__main__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/analyze.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/catalog.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/db.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/find.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/gain.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/git.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/index.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/install.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/mcp.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/reindex.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/report.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/uninstall.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/viz.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/commands/watch.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/coverage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/cli/main.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/config.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/duckdb_backend.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/freshness.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/graph_db.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/jobs.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/noise_match.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/queries.cypher +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/queries.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/queries.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/schema.cypher +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/core/schema.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/dbt_adapter.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/error_classify.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/git_delta.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/indexer.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/pool.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/walker.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/indexer/watcher.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/lineage/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/lineage/aggregator.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/lineage/schema_resolver.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/metrics/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/metrics/store.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/base.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/bigquery_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/dynamic_name.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/postgres_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/registry.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/snowflake_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/parsers/tsql_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/control.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/exceptions.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/models.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/noise_filter.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/read_client.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/selfheal.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/server.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/skill.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/tools.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/server/writer.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/utils/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/utils/hashing.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/utils/ignore.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/utils/logging.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/assets/force-graph.min.js +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/assets/template.html +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/data.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/render.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/src/sqlcg/viz/tags.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/adversarial/200_join.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/adversarial/500_union.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/bench_indexer.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/conftest.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/case_normalization.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/colon_cast.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/colon_reserved_word.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/copy_into.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/create_procedure.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/identifier_dynamic.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/lateral_flatten.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/qualify.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/scripting_block.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/golden_corpus/snowflake/three_part.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/tpch/q01.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/tpch/q02.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/tpch/q03.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/tpch/q04.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/benchmarks/tpch/q05.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/conftest.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/conftest.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_F2_skill_install_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_airbnb_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_cli_index.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_empty_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_git_hook_install.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_golden_lineage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_mcp_lifecycle.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_mcp_tools.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_parse_diagnostics_cli.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_pr_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_selfheal_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_star_resolution_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_viz_cli_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/e2e/test_watch.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/dim_hosts_cleansed.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/dim_listings_cleansed.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/fct_reviews.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/mart_fullmoon_reviews.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/raw_hosts.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/raw_listings.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/raw_reviews.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/src_hosts.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/src_listings.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/airbnb/src_reviews.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/bigquery/.gitkeep +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/duckdb_parity/kuzu_reference.json +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/jaffle_shop/customers.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/jaffle_shop/orders.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/jaffle_shop/raw_orders.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/snowflake/base_tables.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/snowflake/reports.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/snowflake/views.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/star_corpus/ddl_src.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/star_corpus/ddl_tgt.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/star_corpus/etl_alias_star.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/star_corpus/etl_star.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/synthetic/base_tables.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/synthetic/reports.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/fixtures/synthetic/views.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/snowflake/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/snowflake/test_identifier_var_sink_resolution_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/snowflake/test_insert_select.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/snowflake/test_qualify_bare_tables_command_guard_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_T34_presentation_segregation.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_T35_external_consumers.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_anchor_tools.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_backfill_impact_consistency.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_bare_column_cte_lineage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_bulk_upsert.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_case_split_seed_regression.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_catalog_kind_upgrade.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_catalog_load_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cli_index_clear_before_rebuild.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_column_coverage_patterns.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_column_lineage_e2e.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_coverage_metrics_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cross_file_lineage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cte_key_namespacing_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cte_recall_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cte_schema_alias_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_cte_source_node_invariant.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_dialect_auto_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_dialect_matrix.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_duckdb_parity.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_e36_xfile_regression_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_empty_impact_blast_radius.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_empty_index_rollback_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_freshness_mcp.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_gating_join_retrofit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_hygiene_config_root_reconciliation.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_identity_counters_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_impact_consumer_parity.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_index_degraded_files_metric.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_index_filter_node_exclusion.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_indexer_batching.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_indexer_commits.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_indexer_to_graph.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_issue38_cte_insert_regression.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_join_col_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_key_normalization_chokepoint.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_live_anchors.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_mvcc_rebuild.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_non_table_create_coverage_no_regression.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_non_table_create_kind_in_graph.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_parse_diagnostics.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_phantom_non_table_create_node.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_pr1_confidence_reason.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_pr2_source_location.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_pr3_kind_tagging.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_pr_impact_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_qualify_failed_persist.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_read_via_server.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_readonly_under_lock.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_reindex_via_server.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_resolvable_write_col_edges_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_resync.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_selects_from_completeness.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_selects_from_cte_body_source.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_selects_from_subscope_source.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_single_writer_queue.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_skip_counts_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_star_promote_temp_columns.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_star_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_temp_table_lineage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_tool_version_stamp_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_union_cte_star_recall_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_usage_derived_catalog.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_use_schema_session_context_integration.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_user_surface_recall_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_v141_surface_guards.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_v1_14_0_dialect_and_query_config_fixes.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_view_kind_in_graph.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_viz_data_build.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/integration/test_write_memory_ceiling.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/perf/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/perf/test_perf.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E10/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E11/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E12/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E12/e12_json_path.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E12/e12_lateral_flatten.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E12/test_e12.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E13/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E14/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E15/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E16/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E16/e16_merge.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E16/e16_merge_delete.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E16/test_e16.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E17/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E18/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E18/e18_decode.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E18/e18_iff_decode.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E18/e18_nvl2.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E18/test_e18.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E19/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E2/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E2/e2_expr_alias.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E2/e2_function_alias.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E2/e2_multiply_alias.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E2/test_e2.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E20/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E21/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E21/e21_alias_forward_ref.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E21/e21_three_level_chain.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E21/test_e21.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E22/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E23/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E23/e23_stored_proc.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E23/e23_stored_proc_multi.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E23/test_e23.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E24/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E25/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E25/e25_cross_db.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E25/e25_two_part.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E25/test_e25.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E25/test_e25_full_id.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E26/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E27/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E27/e27_nested_udf.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E27/e27_udf.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E27/test_e27.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E28/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E29/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E3/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E3/e3_alter_table.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E3/e3_create_sequence.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E3/e3_ddl_only.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E3/test_e3.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E30/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E31/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E32/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E33/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E34/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E35/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E36/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E36/e36_temp_multi_use.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E36/e36_temp_table.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E36/test_e36.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E36/test_e36_xfile.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E37/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E38/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/e4_execute_immediate.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/e4_if_not_exists.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/e4_unexpected_token.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/e4_unpivot.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E4/test_e4.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/e5_cte_missing_source.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/e5_multi_cte.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/e5_nested_cte.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/test_e5.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E5/test_e5_cte_projection.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E8/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E8/e8_dynamic_sources.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E8/e8_seq_nextval.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E8/e8_uuid.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E8/test_e8.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E9/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_aggregates/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_aggregates/fixture_sum_absent_cross_schema.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_aggregates/fixture_sum_case_when.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_aggregates/fixture_sum_present_source.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_aggregates/test_e_aggregates.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/fixture_date_aliased.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/fixture_date_unaliased.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/fixture_datediff_unaliased.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/fixture_year_unaliased.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/E_date_functions/test_e_date_functions.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/README.md +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/fixture_etl.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/fixture_omloopsnelheid.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/fixture_semantic.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/fixture_source.sql +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/test_anchor_ma_aantal_op_order.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/anchors/test_anchor_omloopsnelheid.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/conftest.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/snowflake/test_plan_review_gates.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/snowflake/__init__.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/snowflake/test_qualify_bare_tables_command_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/snowflake/test_scripting_noise.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_BugB_escalation_uses_init_path.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_BugC_hook_upgrade.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_F2_install_skill.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_F2_skill_render.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_F2_uninstall_skill.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_T09_01_qualify_once.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_T09_02_ddl_skip.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_T09_04_subprocess_isolate.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_T09_06_log_verbosity.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_T35_config_external_consumers.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_aggregator.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_aggregator_skip.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_base_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_branch_monitor.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_bulk_upsert_invariant.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_canonical_target_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_catalog_csv_parsing.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_catalog_missing_warning.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_classify_non_table_create_kind.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_cli.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_cli_doc_flag_staleness.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_cli_help.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_clone_positional_insert_blindspot.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_closure_depth.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_column_lineage_wiring.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_config.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_coverage_metrics.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_cte_key_namespacing.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_cte_source_gap_metric.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_data_models.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_db_info.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_db_info_coverage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_db_path_isolation_fixture.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_doc_links.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_doc_markdown_link_existence.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_dominant_cause.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_duckdb_backend.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_duckdb_backend_shared.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_dynamic_name_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_e5_view_alias_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_e8_dual_emission.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_e8_temp_chain_key_mismatch.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_empty_propagation_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_extract_select_output_columns.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_file_ignore_defaults.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_find_cmd.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_firstuser_findings.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_freshness_helper.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_gain_coverage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_gain_ratio.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_gating_join_field_docstrings.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_git_delta.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_git_hooks.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_git_hooks_notify.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_graph_backend.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_graph_completeness_invariant.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_hard_kill_pool.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_has_column_precedence_upsert.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_hook_reindex_detach.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_hygiene_config_warning.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_identifier_var_sink_resolution.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_identity_counters.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_include_working_tree.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_index_cmd.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_index_filter_config.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_index_flags.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_index_progress.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_index_summary_degraded_metric.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_indexer_progress.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_indexer_quality.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_install.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_install_message.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_issue_63_readonly_lock.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_jobs.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_join_col_resolve_marker.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_judgement.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_lineage_conversion.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_literal_column_skip.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_mcp_best_practices.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_mcp_control.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_mcp_stdio_smoke.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_merge_column_lineage.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_metrics.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_noise_filter.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_normalize_keys.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_parse_failed_classification.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_parse_file_dependency_filter.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_parse_quality.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_parser.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_perf_scaling_guard.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_phantom_non_table_create_source.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_pr07_observability.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_pr6_execute_immediate_unwrap.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_pr_impact_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_qualify_failed_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_queries_loader.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_read_client.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_resolvable_write_col_edges_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_resolve_join_columns_sql.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_resolve_pass2_passes_dependency_filter.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_schema_resolver.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_selects_from_completeness_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_selfheal_detector.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_selfheal_pr1_messages.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_selfheal_reexec.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_selfheal_watcher.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_server.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_skip_counts_persistence.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_snowflake_strip_alter_set_tag.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_sprint_06_t04_t05.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_star_resolution_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_star_schema_unit.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_submit_feedback.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_subprocess_isolate.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_t02_expression_name_extraction.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_t03_ddl_skip.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_timeout_cancel.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_tool_version_stamp.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_tools_hints.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_tools_warnings.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_transform_kind_classification.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_uninstall.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_unknown_sentinel_skip.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_unqualified_fallback.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_upsert_batch_invariant.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_use_schema_session_context.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_version_parity.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_view_classification.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_viz_config_schemas.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_viz_facets.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_viz_render_self_contained.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_walker.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_watcher.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.2}/tests/unit/test_worker_error_classification.py +0 -0
- {sql_code_graph-1.36.0 → sql_code_graph-1.36.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.36.
|
|
3
|
+
Version: 1.36.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
|
|
@@ -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` (
|
|
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
|
|
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
|
|
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
|
|
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` (
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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,33 @@
|
|
|
1
|
+
{"total_calls": 1791, "last_7d_calls": 1791, "index_runs": 5, "feedback_tp": 0,
|
|
2
|
+
"feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 604},
|
|
3
|
+
{"name": "trace_column_lineage", "count": 470}, {"name":
|
|
4
|
+
"list_dialects_and_repos", "count": 154}], "execute_sql_ratio": 0.34,
|
|
5
|
+
"parse_quality": {"sqlglot": 5162, "scripting": 20, "dynamic_sql": 3},
|
|
6
|
+
"coverage": {"catalogued_tables": 5892, "total_tables": 6553, "good_edges":
|
|
7
|
+
54998, "total_edges": 63088, "phantom_edges": 12346, "blindspot_tables": 633,
|
|
8
|
+
"good_edges_strict": 49453, "edge_health_strict_pct": 78.39,
|
|
9
|
+
"good_edges_scoped": 37305, "total_edges_scoped": 37628,
|
|
10
|
+
"edge_health_scoped_pct": 99.14, "phantom_confirmed": 11686,
|
|
11
|
+
"phantom_contradicted": 239, "phantom_unverified": 421, "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
|
+
"wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
|
|
16
|
+
"ba.wtda_toeleverancier", "bad_edges": 13}, {"table":
|
|
17
|
+
"ba.wtfs_voorraad_dagstand_webshop_periode", "bad_edges": 13}, {"table":
|
|
18
|
+
"da.etl_rtwbs_cadeaukaarten", "bad_edges": 12}, {"table":
|
|
19
|
+
"wtfe_kpi_schapbeschikbaarheid_voorraadlocatie", "bad_edges": 12}, {"table":
|
|
20
|
+
"da.ttint_inventdim_formule", "bad_edges": 10}, {"table":
|
|
21
|
+
"ba.wtdm_klant_herkomst", "bad_edges": 8}], "blindspot_tables_for_80pct": 11,
|
|
22
|
+
"files_indexed": 1335, "indexed_sha":
|
|
23
|
+
"fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path":
|
|
24
|
+
"/tmp/sqlcg_dropfix_f6a335a.db", "index_timestamp": 1781505432.175605,
|
|
25
|
+
"degraded_parse_total": 5185, "degraded_parse_queries": 27,
|
|
26
|
+
"degraded_parse_by_dir": {"etl": {"degraded": 8, "total": 2772}, "ddl":
|
|
27
|
+
{"degraded": 19, "total": 2413}}, "zero_edge_write_queries": 956,
|
|
28
|
+
"total_write_queries": 2322, "cte_key_collisions": 71,
|
|
29
|
+
"rescuable_unqualified_edges": 125, "info_schema_has_column_rows": 100193,
|
|
30
|
+
"cte_source_gap_writes": 0, "resolvable_write_col_edges": 38068,
|
|
31
|
+
"transitive_col_edges": 5312, "qualify_failed_statements": 9,
|
|
32
|
+
"tool_version_stale": false, "indexed_tool_version": "1.36.2",
|
|
33
|
+
"running_tool_version": "1.36.2"}}
|
|
@@ -0,0 +1,30 @@
|
|
|
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": "/tmp/ab_v1361.db",
|
|
22
|
+
"index_timestamp": 1781502931.191137, "degraded_parse_total": 5189,
|
|
23
|
+
"degraded_parse_queries": 27, "degraded_parse_by_dir": {"etl": {"degraded": 8,
|
|
24
|
+
"total": 2776}, "ddl": {"degraded": 19, "total": 2413}},
|
|
25
|
+
"zero_edge_write_queries": 969, "total_write_queries": 2323,
|
|
26
|
+
"cte_key_collisions": 0, "rescuable_unqualified_edges": 125,
|
|
27
|
+
"info_schema_has_column_rows": 100193, "cte_source_gap_writes": 0,
|
|
28
|
+
"resolvable_write_col_edges": 37713, "transitive_col_edges": 4558,
|
|
29
|
+
"qualify_failed_statements": 9, "tool_version_stale": false,
|
|
30
|
+
"indexed_tool_version": "1.36.1", "running_tool_version": "1.36.1"}}
|
|
@@ -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"}}
|