sql-code-graph 1.34.1__tar.gz → 1.34.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/PKG-INFO +1 -1
- sql_code_graph-1.34.2/plan/metrics/createkind_dwh_after.json +31 -0
- sql_code_graph-1.34.2/plan/metrics/createkind_dwh_before.json +31 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/pyproject.toml +1 -1
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/__init__.py +1 -1
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/base.py +2 -1
- sql_code_graph-1.34.2/tests/integration/test_non_table_create_coverage_no_regression.py +88 -0
- sql_code_graph-1.34.2/tests/integration/test_non_table_create_kind_in_graph.py +148 -0
- sql_code_graph-1.34.2/tests/unit/test_classify_non_table_create_kind.py +88 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/uv.lock +1 -1
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/api-documenter.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/architect-planner.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/architect-reviewer.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/code-reviewer.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/developer.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/plan-reviewer.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.claude/agents/sprint-planner.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/benchmark.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/e2e-tests.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/release.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.github/workflows/test.yml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.gitignore +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.pre-commit-config.yaml +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/.sqlcgignore +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/ARCHITECTURE_REVIEW.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/ARCHITECTURE_REVIEW_ARCHIVE.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/CHANGELOG.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/CLAUDE.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/README.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/AIRBNB_PARSE_REPORT.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/cli.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/getting-started.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/docs/releasing-pypi.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/e2e_firstuser_report.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/e2e_run_20260528_101413.output +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/main.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/WORKFLOW.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr2_catalog_load_eval.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr3_repo_native_plateau.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr4_transform_kinds.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr5_extraction_recall_taxonomy.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.29.0_05c6943.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.30.0_2c8ac25.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.30.1_26271fc.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.31.0_a40c837.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/gain_1.32.0_c1bec3c.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/lineage5_dwh_after_pr5.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/lineage5_dwh_before_master.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_with_schema.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_without_schema.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_changelogs_fullindex.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_fullcorpus_index.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_pool_300s_plan.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/column_coverage_diagnostic.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/column_coverage_findings.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/dwh_graph_analysis.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/dwh_positional_insert_column_blindspot.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/feature_acceptance_dwh.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/graph_health_sprint_postmortem.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/island_lever_live_verification.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/issue38_pr2_live_acceptance.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/issue38_pr3_live_acceptance.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/lineage_identity_sprint_postmortem.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/pr_impact_followups_2026-06-14.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/sprint_03_v0.3.1_postmortem.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/sprint_3.1_postmortem.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/v1_14_dialect_query_config_postmortem.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/blueprint.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/coverage_parse_failure_diagnosis.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/investigation_e5_e4.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/observed_usage_overlay_query_history_tableau.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/parse_diagnostics.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/parsing_errors_experiment.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/snowflake_en_test_suite.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/sql_only_coverage_lever_post_pr2.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/sqlcg.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/bundle_claude_skill.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/ci_tests_pool_flake_fix.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/column_lineage_recall_metric.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_p1_p3_p4.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_p1_p5_metric.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/coverage_parse_failures.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/diff-impact-producer-file.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/e8_dual_emission.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_34_unused_presentation_segregation.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_35_external_downstream_injection.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_F2_bundle_claude_skill.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/feature_kuzu_to_duckdb_migration.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_backward_self_heal_index_at_sha.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_downstream_sink_location.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_dynamic_table_parsing.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_expand_qualify_perf.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_firstuser_findings.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_issue29_live_test_followups.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/fix_schema_case_mismatch.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/gain_coverage_metrics.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/graph_health_catalog_and_metrics.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/hygiene_config_path_and_survivors.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-backfill-cte-bridge.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-residual-source-extraction.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/issue-38-selects-from-island-lever.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/living_codebase_resync.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/mcp_server_self_healing.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/positional_insert_clone_blindspot.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_01.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_01_deployment_pypi.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_02.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_02_v0.3.0_core.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_03.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_04_column_lineage.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_04_column_lineage_fix.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_05_star_resolution.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_06_lineage_coverage.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_07_open_ecodes.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_07_perf_and_live_test.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_08_perf_upsert.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_09_lineage_coverage.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_10_anchor_tools.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_11_v1.0.2_bugfix.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_12_v1.1.0.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_13_v1.1.0_cluster_b.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_lineage_identity_and_session_context.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/sprint_postmortem_fixes.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/temp_table_namespacing.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/trust_layer.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/unfilled_table_impact.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.0_cluster_b_provenance_trust.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.0_live_graph_freshness.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.1.1_batch_upsert_perf.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1.14.0_dialect_and_query_config_fixes.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_1_2_bugfix.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_1_3_union_cte_star.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_2_0_read_proxy.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/v1_2_1_bugfix.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/version-parity-and-restart.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/profile.html +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/pyrightconfig.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/collect_parse_errors.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/column_coverage_check.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/scripts/generate_cli_docs.sh +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/__main__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/analyze.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/catalog.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/db.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/find.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/gain.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/git.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/index.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/install.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/mcp.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/reindex.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/report.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/uninstall.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/commands/watch.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/coverage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/cli/main.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/config.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/duckdb_backend.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/freshness.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/graph_db.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/jobs.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/noise_match.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.cypher +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/queries.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/schema.cypher +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/core/schema.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/dbt_adapter.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/error_classify.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/git_delta.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/indexer.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/pool.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/walker.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/indexer/watcher.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/aggregator.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/lineage/schema_resolver.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/metrics/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/metrics/store.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/ansi_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/bigquery_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/postgres_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/registry.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/snowflake_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/parsers/tsql_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/control.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/exceptions.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/models.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/noise_filter.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/read_client.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/selfheal.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/server.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/skill.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/tools.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/server/writer.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/hashing.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/ignore.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/src/sqlcg/utils/logging.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/adversarial/200_join.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/adversarial/500_union.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/bench_indexer.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/conftest.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/case_normalization.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/colon_cast.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/colon_reserved_word.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/copy_into.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/create_procedure.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/identifier_dynamic.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/lateral_flatten.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/qualify.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/scripting_block.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/golden_corpus/snowflake/three_part.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q01.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q02.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q03.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q04.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/benchmarks/tpch/q05.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/conftest.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/conftest.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_F2_skill_install_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_airbnb_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_cli_index.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_empty_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_git_hook_install.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_golden_lineage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_mcp_lifecycle.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_mcp_tools.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_parse_diagnostics_cli.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_pr_impact_cli_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_selfheal_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_star_resolution_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/e2e/test_watch.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/dim_hosts_cleansed.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/dim_listings_cleansed.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/fct_reviews.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/mart_fullmoon_reviews.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_hosts.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_listings.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/raw_reviews.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_hosts.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_listings.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/airbnb/src_reviews.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/bigquery/.gitkeep +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/duckdb_parity/kuzu_reference.json +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/customers.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/orders.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/jaffle_shop/raw_orders.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/base_tables.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/reports.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/snowflake/views.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/ddl_src.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/ddl_tgt.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/etl_alias_star.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/star_corpus/etl_star.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/base_tables.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/reports.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/fixtures/synthetic/views.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/test_insert_select.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/snowflake/test_qualify_bare_tables_command_guard_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_T34_presentation_segregation.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_T35_external_consumers.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_anchor_tools.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_backfill_impact_consistency.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_bare_column_cte_lineage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_bulk_upsert.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_case_split_seed_regression.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_catalog_kind_upgrade.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_catalog_load_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cli_index_clear_before_rebuild.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_column_coverage_patterns.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_column_lineage_e2e.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_coverage_metrics_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cross_file_lineage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_key_namespacing_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_recall_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_schema_alias_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_cte_source_node_invariant.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_dialect_auto_resolution.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_dialect_matrix.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_duckdb_parity.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_e36_xfile_regression_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_empty_impact_blast_radius.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_empty_index_rollback_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_freshness_mcp.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_gating_join_retrofit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_hygiene_config_root_reconciliation.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_identity_counters_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_impact_consumer_parity.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_index_degraded_files_metric.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_index_filter_node_exclusion.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_batching.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_commits.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_indexer_to_graph.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_issue38_cte_insert_regression.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_join_col_resolution.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_key_normalization_chokepoint.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_live_anchors.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_mvcc_rebuild.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_parse_diagnostics.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr1_confidence_reason.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr2_source_location.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr3_kind_tagging.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_pr_impact_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_qualify_failed_persist.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_read_via_server.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_readonly_under_lock.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_reindex_via_server.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_resolvable_write_col_edges_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_resync.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_completeness.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_cte_body_source.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_selects_from_subscope_source.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_single_writer_queue.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_skip_counts_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_star_resolution.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_temp_table_lineage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_tool_version_stamp_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_union_cte_star_recall_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_usage_derived_catalog.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_use_schema_session_context_integration.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_user_surface_recall_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_v141_surface_guards.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_v1_14_0_dialect_and_query_config_fixes.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_view_kind_in_graph.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/integration/test_write_memory_ceiling.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/perf/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/perf/test_perf.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E10/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E11/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/e12_json_path.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/e12_lateral_flatten.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E12/test_e12.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E13/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E14/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E15/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/e16_merge.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/e16_merge_delete.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E16/test_e16.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E17/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_decode.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_iff_decode.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/e18_nvl2.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E18/test_e18.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E19/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_expr_alias.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_function_alias.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/e2_multiply_alias.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E2/test_e2.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E20/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/e21_alias_forward_ref.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/e21_three_level_chain.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E21/test_e21.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E22/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/e23_stored_proc.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/e23_stored_proc_multi.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E23/test_e23.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E24/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/e25_cross_db.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/e25_two_part.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/test_e25.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E25/test_e25_full_id.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E26/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/e27_nested_udf.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/e27_udf.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E27/test_e27.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E28/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E29/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_alter_table.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_create_sequence.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/e3_ddl_only.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E3/test_e3.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E30/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E31/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E32/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E33/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E34/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E35/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/e36_temp_multi_use.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/e36_temp_table.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/test_e36.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E36/test_e36_xfile.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E37/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E38/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_execute_immediate.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_if_not_exists.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_unexpected_token.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/e4_unpivot.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E4/test_e4.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_cte_missing_source.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_multi_cte.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/e5_nested_cte.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/test_e5.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E5/test_e5_cte_projection.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_dynamic_sources.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_seq_nextval.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/e8_uuid.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E8/test_e8.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E9/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_absent_cross_schema.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_case_when.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/fixture_sum_present_source.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_aggregates/test_e_aggregates.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_date_aliased.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_date_unaliased.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_datediff_unaliased.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/fixture_year_unaliased.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/E_date_functions/test_e_date_functions.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/README.md +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_etl.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_omloopsnelheid.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_semantic.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/fixture_source.sql +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/test_anchor_ma_aantal_op_order.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/anchors/test_anchor_omloopsnelheid.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/conftest.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/snowflake/test_plan_review_gates.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/__init__.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/test_qualify_bare_tables_command_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/snowflake/test_scripting_noise.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_BugB_escalation_uses_init_path.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_BugC_hook_upgrade.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_install_skill.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_skill_render.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_F2_uninstall_skill.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_01_qualify_once.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_02_ddl_skip.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_04_subprocess_isolate.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T09_06_log_verbosity.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_T35_config_external_consumers.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_aggregator.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_aggregator_skip.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_analyze_case_fold.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_base_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_branch_monitor.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_bulk_upsert_invariant.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_canonical_target_resolution.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_catalog_csv_parsing.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_catalog_missing_warning.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli_doc_flag_staleness.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cli_help.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_clone_positional_insert_blindspot.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_closure_depth.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_column_lineage_wiring.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_config.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_coverage_metrics.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cte_key_namespacing.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_cte_source_gap_metric.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_data_models.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_info.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_info_coverage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_db_path_isolation_fixture.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_doc_links.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_doc_markdown_link_existence.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_dominant_cause.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_duckdb_backend.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_duckdb_backend_shared.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e5_view_alias_resolution.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e8_dual_emission.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_e8_temp_chain_key_mismatch.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_empty_propagation_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_extract_select_output_columns.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_file_ignore_defaults.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_find_cmd.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_firstuser_findings.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_freshness_helper.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gain_coverage.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gain_ratio.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_gating_join_field_docstrings.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_delta.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_hooks.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_git_hooks_notify.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_graph_backend.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_graph_completeness_invariant.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hard_kill_pool.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_has_column_precedence_upsert.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hook_reindex_detach.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_hygiene_config_warning.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_identity_counters.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_include_working_tree.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_cmd.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_filter_config.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_flags.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_progress.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_index_summary_degraded_metric.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_indexer_progress.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_indexer_quality.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_install.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_install_message.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_issue_63_readonly_lock.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_jobs.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_join_col_resolve_marker.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_judgement.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_lineage_conversion.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_literal_column_skip.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_best_practices.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_control.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_mcp_stdio_smoke.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_metrics.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_noise_filter.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_normalize_keys.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_failed_classification.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_file_dependency_filter.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parse_quality.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_parser.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_perf_scaling_guard.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr07_observability.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr6_execute_immediate_unwrap.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_pr_impact_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_qualify_failed_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_queries_loader.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_read_client.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_repo_relative_cte_namespaces.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolvable_write_col_edges_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolve_join_columns_sql.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_resolve_pass2_passes_dependency_filter.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_schema_resolver.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selects_from_completeness_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_detector.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_pr1_messages.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_reexec.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_selfheal_watcher.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_server.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_skip_counts_persistence.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_snowflake_strip_alter_set_tag.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_sprint_06_t04_t05.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_star_resolution_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_star_schema_unit.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_submit_feedback.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_subprocess_isolate.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_t02_expression_name_extraction.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_t03_ddl_skip.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_temp_table_namespacing.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_timeout_cancel.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tool_version_stamp.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tools_hints.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_tools_warnings.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_transform_kind_classification.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_uninstall.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_unknown_sentinel_skip.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_unqualified_fallback.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_upsert_batch_invariant.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_use_schema_session_context.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_version_parity.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_view_classification.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_walker.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_watcher.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_worker_error_classification.py +0 -0
- {sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/tests/unit/test_writer_queue.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql-code-graph
|
|
3
|
-
Version: 1.34.
|
|
3
|
+
Version: 1.34.2
|
|
4
4
|
Summary: SQL code graph analyzer and lineage tracer
|
|
5
5
|
Project-URL: Homepage, https://github.com/Warhorze/sql-code-graph
|
|
6
6
|
Project-URL: Repository, https://github.com/Warhorze/sql-code-graph
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{"total_calls": 1231, "last_7d_calls": 1231, "index_runs": 5, "feedback_tp": 0,
|
|
2
|
+
"feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 412},
|
|
3
|
+
{"name": "trace_column_lineage", "count": 326}, {"name":
|
|
4
|
+
"list_dialects_and_repos", "count": 106}], "execute_sql_ratio": 0.33,
|
|
5
|
+
"parse_quality": {"sqlglot": 5166, "scripting": 20, "dynamic_sql": 3},
|
|
6
|
+
"coverage": {"catalogued_tables": 5796, "total_tables": 6581, "good_edges":
|
|
7
|
+
51326, "total_edges": 59474, "phantom_edges": 12241, "blindspot_tables": 628,
|
|
8
|
+
"good_edges_strict": 46495, "edge_health_strict_pct": 78.18,
|
|
9
|
+
"good_edges_scoped": 36842, "total_edges_scoped": 37619,
|
|
10
|
+
"edge_health_scoped_pct": 97.93, "phantom_confirmed": 11701,
|
|
11
|
+
"phantom_contradicted": 352, "phantom_unverified": 188, "top_blindspot_tables":
|
|
12
|
+
[{"table": "ia_analytics.ba_wtfa_artikel_formule_dagomzet", "bad_edges": 217},
|
|
13
|
+
{"table": "ba.wtfa_kpi_datum_klant", "bad_edges": 70}, {"table":
|
|
14
|
+
"ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
|
|
15
|
+
"ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
|
|
16
|
+
"da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
|
|
17
|
+
"da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
|
|
18
|
+
"wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
|
|
19
|
+
"da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
|
|
20
|
+
"bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19}],
|
|
21
|
+
"blindspot_tables_for_80pct": 15, "files_indexed": 1335, "indexed_sha":
|
|
22
|
+
"fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path": "/tmp/ckm_after.duckdb",
|
|
23
|
+
"index_timestamp": 1781457191.07209, "degraded_parse_total": 5189,
|
|
24
|
+
"degraded_parse_queries": 20, "degraded_parse_by_dir": {"etl": {"degraded": 1,
|
|
25
|
+
"total": 2776}, "ddl": {"degraded": 19, "total": 2413}},
|
|
26
|
+
"zero_edge_write_queries": 1040, "total_write_queries": 2323,
|
|
27
|
+
"cte_key_collisions": 0, "rescuable_unqualified_edges": 125,
|
|
28
|
+
"info_schema_has_column_rows": 110257, "cte_source_gap_writes": 0,
|
|
29
|
+
"resolvable_write_col_edges": 35759, "transitive_col_edges": 4168,
|
|
30
|
+
"qualify_failed_statements": 9, "tool_version_stale": false,
|
|
31
|
+
"indexed_tool_version": "1.34.3", "running_tool_version": "1.34.3"}}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{"total_calls": 1231, "last_7d_calls": 1231, "index_runs": 5, "feedback_tp": 0,
|
|
2
|
+
"feedback_total": 0, "top_tools": [{"name": "execute_sql", "count": 412},
|
|
3
|
+
{"name": "trace_column_lineage", "count": 326}, {"name":
|
|
4
|
+
"list_dialects_and_repos", "count": 106}], "execute_sql_ratio": 0.33,
|
|
5
|
+
"parse_quality": {"sqlglot": 5162, "scripting": 20, "dynamic_sql": 3},
|
|
6
|
+
"coverage": {"catalogued_tables": 5796, "total_tables": 6572, "good_edges":
|
|
7
|
+
51235, "total_edges": 59068, "phantom_edges": 12241, "blindspot_tables": 619,
|
|
8
|
+
"good_edges_strict": 46399, "edge_health_strict_pct": 78.55,
|
|
9
|
+
"good_edges_scoped": 36748, "total_edges_scoped": 37524,
|
|
10
|
+
"edge_health_scoped_pct": 97.93, "phantom_confirmed": 11701,
|
|
11
|
+
"phantom_contradicted": 352, "phantom_unverified": 188, "top_blindspot_tables":
|
|
12
|
+
[{"table": "ia_analytics.ba_wtfa_artikel_formule_dagomzet", "bad_edges": 216},
|
|
13
|
+
{"table": "ba.wtfa_kpi_datum_klant", "bad_edges": 70}, {"table":
|
|
14
|
+
"ba.wtfs_voorraad_dagstand", "bad_edges": 55}, {"table":
|
|
15
|
+
"ba.wtfs_voorraad_zondagstand", "bad_edges": 55}, {"table":
|
|
16
|
+
"da.rtgmd_postnl_customer_usage", "bad_edges": 43}, {"table":
|
|
17
|
+
"da.rtgmd_postnl_athome_3s", "bad_edges": 33}, {"table":
|
|
18
|
+
"wtfe_kpi_voorraad_artikel_voorraadlocatie", "bad_edges": 32}, {"table":
|
|
19
|
+
"da.rtgmd_postnl_facturen", "bad_edges": 30}, {"table": "da.hthyb_pages",
|
|
20
|
+
"bad_edges": 23}, {"table": "da.rtgmd_dhb_extra_kosten", "bad_edges": 19}],
|
|
21
|
+
"blindspot_tables_for_80pct": 15, "files_indexed": 1335, "indexed_sha":
|
|
22
|
+
"fdf1b551a34601a6cf3ce1c8b9f76e27ce2753e6", "db_path": "/tmp/ckm_before.duckdb",
|
|
23
|
+
"index_timestamp": 1781456971.4233296, "degraded_parse_total": 5185,
|
|
24
|
+
"degraded_parse_queries": 20, "degraded_parse_by_dir": {"etl": {"degraded": 1,
|
|
25
|
+
"total": 2772}, "ddl": {"degraded": 19, "total": 2413}},
|
|
26
|
+
"zero_edge_write_queries": 1069, "total_write_queries": 2351,
|
|
27
|
+
"cte_key_collisions": 0, "rescuable_unqualified_edges": 125,
|
|
28
|
+
"info_schema_has_column_rows": 110257, "cte_source_gap_writes": 0,
|
|
29
|
+
"resolvable_write_col_edges": 35351, "transitive_col_edges": 4174,
|
|
30
|
+
"qualify_failed_statements": 9, "tool_version_stale": false,
|
|
31
|
+
"indexed_tool_version": "1.34.1", "running_tool_version": "1.34.1"}}
|
|
@@ -591,7 +591,8 @@ class SqlParser(ABC):
|
|
|
591
591
|
case "PROCEDURE" | "FUNCTION":
|
|
592
592
|
return QueryKind.CREATE_PROC
|
|
593
593
|
case _:
|
|
594
|
-
|
|
594
|
+
# non-table CREATE (sequence/stage/file format/schema/index/etc.)
|
|
595
|
+
return QueryKind.OTHER
|
|
595
596
|
case exp.Merge():
|
|
596
597
|
return QueryKind.MERGE
|
|
597
598
|
case _:
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Coverage no-regression: non-table CREATE DDL is excluded from write-kind metrics.
|
|
2
|
+
|
|
3
|
+
Pins blast-radius item #7 of the create-kind mislabel bugfix
|
|
4
|
+
([plan doc](plan/sprints/bugfix_create_kind_mislabel.md), AC4).
|
|
5
|
+
|
|
6
|
+
``_WRITE_KINDS = ("INSERT", "MERGE", "CREATE_TABLE", "UPDATE")`` drives
|
|
7
|
+
``total_write_queries`` and ``zero_edge_write_queries``. Before the fix a
|
|
8
|
+
``CREATE SEQUENCE`` was stored as ``CREATE_TABLE`` and so inflated both counters
|
|
9
|
+
(it carries no COLUMN_LINEAGE, so it counted as a "zero-edge write" — a false
|
|
10
|
+
unresolved-write gap). After the fix it classifies as ``OTHER`` and drops out of
|
|
11
|
+
the write population. This is an honest-accounting correction, not a regression.
|
|
12
|
+
|
|
13
|
+
Observable oracle: ``collect_coverage`` routed to the in-memory graph returns the
|
|
14
|
+
write counts that exclude the sequence; an independent kind census on the same
|
|
15
|
+
graph confirms the sequence is stored as ``OTHER``.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from unittest.mock import patch
|
|
21
|
+
|
|
22
|
+
import pytest
|
|
23
|
+
|
|
24
|
+
from sqlcg.cli.coverage import collect_coverage
|
|
25
|
+
from sqlcg.core.duckdb_backend import DuckDBBackend
|
|
26
|
+
from sqlcg.indexer.indexer import Indexer
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.fixture
|
|
30
|
+
def indexed_db(tmp_path):
|
|
31
|
+
"""Index a repo with one resolvable INSERT, one CREATE TABLE, one CREATE SEQUENCE.
|
|
32
|
+
|
|
33
|
+
Expected write population (kind IN _WRITE_KINDS):
|
|
34
|
+
* ba.src — CREATE TABLE (zero COLUMN_LINEAGE → a zero-edge write)
|
|
35
|
+
* ba.dst — INSERT … SELECT (has COLUMN_LINEAGE)
|
|
36
|
+
The CREATE SEQUENCE classifies as OTHER → NOT in the write population.
|
|
37
|
+
"""
|
|
38
|
+
db = DuckDBBackend(":memory:")
|
|
39
|
+
db.init_schema()
|
|
40
|
+
repo = tmp_path / "repo"
|
|
41
|
+
repo.mkdir()
|
|
42
|
+
(repo / "src.sql").write_text("CREATE TABLE ba.src (a INT);\n")
|
|
43
|
+
(repo / "ins.sql").write_text("INSERT INTO ba.dst SELECT a FROM ba.src;\n")
|
|
44
|
+
(repo / "seq.sql").write_text("CREATE SEQUENCE ba.s START 1;\n")
|
|
45
|
+
Indexer().index_repo(repo, dialect="snowflake", db=db, use_git=False)
|
|
46
|
+
yield db
|
|
47
|
+
db.close()
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _collect(db: DuckDBBackend):
|
|
51
|
+
def _routed(query: str, params: dict):
|
|
52
|
+
return db.run_read(query, params)
|
|
53
|
+
|
|
54
|
+
with patch("sqlcg.cli.coverage.run_read_routed", side_effect=_routed):
|
|
55
|
+
return collect_coverage()
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_sequence_excluded_from_total_write_queries(indexed_db):
|
|
59
|
+
"""total_write_queries counts only INSERT + CREATE TABLE, not the CREATE SEQUENCE."""
|
|
60
|
+
stats = _collect(indexed_db)
|
|
61
|
+
assert stats is not None
|
|
62
|
+
assert stats.total_write_queries == 2, (
|
|
63
|
+
"total_write_queries must count only the INSERT and the CREATE TABLE "
|
|
64
|
+
f"(the CREATE SEQUENCE is OTHER, excluded); got {stats.total_write_queries}. "
|
|
65
|
+
"A value of 3 means the sequence was mislabeled CREATE_TABLE again."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def test_sequence_does_not_inflate_zero_edge_write_queries(indexed_db):
|
|
70
|
+
"""zero_edge_write_queries reflects only the genuine zero-edge CREATE TABLE.
|
|
71
|
+
|
|
72
|
+
The CREATE SEQUENCE has zero COLUMN_LINEAGE; before the fix it would have
|
|
73
|
+
counted here as a false unresolved-write. Expected = 1 (the CREATE TABLE
|
|
74
|
+
'ba.src' DDL with no SELECT body), not 2.
|
|
75
|
+
"""
|
|
76
|
+
stats = _collect(indexed_db)
|
|
77
|
+
assert stats is not None
|
|
78
|
+
assert stats.zero_edge_write_queries == 1, (
|
|
79
|
+
"zero_edge_write_queries must be 1 (the CREATE TABLE DDL only); "
|
|
80
|
+
f"got {stats.zero_edge_write_queries}. A value of 2 means the sequence "
|
|
81
|
+
"was counted as a zero-edge write (the inflation this fix removes)."
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_sequence_stored_as_other_kind(indexed_db):
|
|
86
|
+
"""Independent oracle: the sequence statement is stored as kind=OTHER."""
|
|
87
|
+
rows = indexed_db.run_read('SELECT kind FROM "SqlQuery" WHERE id LIKE ?', {"id": "%seq.sql:0"})
|
|
88
|
+
assert rows and rows[0]["kind"] == "OTHER", f"sequence must be stored as OTHER; got {rows}"
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"""Integration test: non-table CREATE DDL is stored as SqlQuery.kind='OTHER'.
|
|
2
|
+
|
|
3
|
+
End-to-end (parser → indexer → DuckDB) guard for the create-kind mislabel
|
|
4
|
+
bugfix ([plan doc](plan/sprints/bugfix_create_kind_mislabel.md)).
|
|
5
|
+
|
|
6
|
+
Scope (RESCOPED, kind-only — plan §Scope):
|
|
7
|
+
* AC1/AC2 — a fixture with CREATE SEQUENCE / STAGE plus real CREATE TABLE /
|
|
8
|
+
CTAS controls stores ``SqlQuery.kind = OTHER`` for the non-table DDL and
|
|
9
|
+
``CREATE_TABLE`` for the genuine tables.
|
|
10
|
+
* AC3 — the ``analyze impact`` query (analyze.py:317 shape) renders the
|
|
11
|
+
sequence's producing statement as ``kind=OTHER`` not ``CREATE_TABLE``.
|
|
12
|
+
|
|
13
|
+
Explicitly OUT OF SCOPE (plan Follow-up §, blast-radius row #1b): the sequence
|
|
14
|
+
name persists as a ``SqlTable`` source node via the kind-independent
|
|
15
|
+
``referenced_tables`` → ``indexer.py`` source loop. This fix corrects only the
|
|
16
|
+
stored kind; it does NOT remove that phantom node. No assertion here claims the
|
|
17
|
+
node is absent.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import pytest
|
|
21
|
+
|
|
22
|
+
from sqlcg.core.duckdb_backend import DuckDBBackend
|
|
23
|
+
from sqlcg.indexer.indexer import Indexer
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@pytest.fixture
|
|
27
|
+
def db():
|
|
28
|
+
backend = DuckDBBackend(":memory:")
|
|
29
|
+
backend.init_schema()
|
|
30
|
+
yield backend
|
|
31
|
+
backend.close()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _kind_of_query(db: DuckDBBackend, id_suffix: str) -> str | None:
|
|
35
|
+
"""Return SqlQuery.kind for the statement whose id ends with ``id_suffix``."""
|
|
36
|
+
rows = db.run_read(
|
|
37
|
+
'SELECT id, kind FROM "SqlQuery" WHERE id LIKE ?',
|
|
38
|
+
{"id": f"%{id_suffix}"},
|
|
39
|
+
)
|
|
40
|
+
return rows[0]["kind"] if rows else None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@pytest.fixture
|
|
44
|
+
def indexed(db, tmp_path):
|
|
45
|
+
"""Index a repo with non-table CREATEs (SEQUENCE/STAGE) + table controls.
|
|
46
|
+
|
|
47
|
+
On the Snowflake path a ``CREATE SEQUENCE ba.s`` parses with target=None and
|
|
48
|
+
its name ``ba.s`` enters ``sources`` → a ``SELECTS_FROM`` edge to ``ba.s`` and
|
|
49
|
+
a phantom ``SqlTable`` source node (out of scope, see module docstring).
|
|
50
|
+
"""
|
|
51
|
+
repo = tmp_path / "repo"
|
|
52
|
+
repo.mkdir()
|
|
53
|
+
(repo / "seq.sql").write_text("CREATE SEQUENCE ba.s START 1;\n")
|
|
54
|
+
(repo / "stg.sql").write_text("CREATE STAGE ba.stg;\n")
|
|
55
|
+
(repo / "tbl.sql").write_text("CREATE TABLE ba.t (a INT);\n")
|
|
56
|
+
(repo / "ctas.sql").write_text("CREATE TABLE ba.t2 AS SELECT a FROM ba.t;\n")
|
|
57
|
+
Indexer().index_repo(repo, dialect="snowflake", db=db, use_git=False)
|
|
58
|
+
return repo
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_create_sequence_stored_as_other(indexed, db):
|
|
62
|
+
"""AC1: CREATE SEQUENCE is stored as SqlQuery.kind='OTHER' (not CREATE_TABLE)."""
|
|
63
|
+
assert _kind_of_query(db, "seq.sql:0") == "OTHER", (
|
|
64
|
+
"CREATE SEQUENCE must store kind=OTHER after the catch-all flip; "
|
|
65
|
+
"before the fix it was mislabeled CREATE_TABLE."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def test_create_stage_stored_as_other(indexed, db):
|
|
70
|
+
"""AC1: CREATE STAGE is stored as SqlQuery.kind='OTHER'."""
|
|
71
|
+
assert _kind_of_query(db, "stg.sql:0") == "OTHER", (
|
|
72
|
+
"CREATE STAGE must store kind=OTHER, not CREATE_TABLE."
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_real_create_table_still_create_table(indexed, db):
|
|
77
|
+
"""AC2: a genuine CREATE TABLE control still stores kind='CREATE_TABLE'."""
|
|
78
|
+
assert _kind_of_query(db, "tbl.sql:0") == "CREATE_TABLE", (
|
|
79
|
+
"Plain CREATE TABLE must remain CREATE_TABLE (no regression on real tables)."
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_ctas_still_create_table(indexed, db):
|
|
84
|
+
"""AC2: CTAS (CREATE TABLE AS SELECT) control still stores kind='CREATE_TABLE'."""
|
|
85
|
+
assert _kind_of_query(db, "ctas.sql:0") == "CREATE_TABLE", (
|
|
86
|
+
"CTAS has Create.kind=='TABLE' and must remain CREATE_TABLE."
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_sequence_produces_selects_from_edge(indexed, db):
|
|
91
|
+
"""The sequence statement carries a SELECTS_FROM edge to its name node.
|
|
92
|
+
|
|
93
|
+
This is the live shape behind the bug — a non-table CREATE that has a
|
|
94
|
+
SELECTS_FROM edge yet was mislabeled CREATE_TABLE. Asserting the edge exists
|
|
95
|
+
proves the reclassified statement is exactly the kind that leaked into
|
|
96
|
+
``analyze impact`` (NOT a statement with no edges).
|
|
97
|
+
"""
|
|
98
|
+
rows = db.run_read(
|
|
99
|
+
'SELECT q.id AS id, q.kind AS kind FROM "SqlQuery" q '
|
|
100
|
+
'JOIN "SELECTS_FROM" sf ON sf.src_key = q.id '
|
|
101
|
+
"WHERE sf.dst_key = ?",
|
|
102
|
+
{"dst": "ba.s"},
|
|
103
|
+
)
|
|
104
|
+
assert len(rows) == 1, f"expected one SELECTS_FROM producer for ba.s, got {rows}"
|
|
105
|
+
assert rows[0]["kind"] == "OTHER", (
|
|
106
|
+
f"the sequence statement with a SELECTS_FROM edge must be kind=OTHER, "
|
|
107
|
+
f"got {rows[0]['kind']!r}"
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def test_analyze_impact_renders_sequence_as_other(indexed, db, monkeypatch):
|
|
112
|
+
"""AC3: ``analyze impact ba.s`` renders the producing statement kind=OTHER.
|
|
113
|
+
|
|
114
|
+
Runs the exact analyze.py:317 query shape against the indexed graph and the
|
|
115
|
+
CLI render path; asserts the kind column shows OTHER, never CREATE_TABLE.
|
|
116
|
+
No assertion is made about the ba.s SqlTable node's existence (out of scope).
|
|
117
|
+
"""
|
|
118
|
+
# Direct query (analyze.py:317 shape) — observable kind on the producer row.
|
|
119
|
+
results = db.run_read(
|
|
120
|
+
"SELECT DISTINCT q.id AS id, q.kind AS kind, q.target_table AS target"
|
|
121
|
+
' FROM "SqlTable" t'
|
|
122
|
+
' JOIN "SELECTS_FROM" sf ON sf.dst_key = t.qualified'
|
|
123
|
+
' JOIN "SqlQuery" q ON q.id = sf.src_key'
|
|
124
|
+
" WHERE t.qualified = ? LIMIT 100",
|
|
125
|
+
{"t": "ba.s"},
|
|
126
|
+
)
|
|
127
|
+
kinds = {r["kind"] for r in results}
|
|
128
|
+
assert kinds == {"OTHER"}, (
|
|
129
|
+
f"analyze impact on ba.s must render only kind=OTHER for the sequence producer; got {kinds}"
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# CLI render path: kind=OTHER appears, CREATE_TABLE does not.
|
|
133
|
+
from typer.testing import CliRunner
|
|
134
|
+
|
|
135
|
+
from sqlcg.cli.commands.analyze import app
|
|
136
|
+
|
|
137
|
+
def _route_to_db(query, params):
|
|
138
|
+
return db.run_read(query, params)
|
|
139
|
+
|
|
140
|
+
monkeypatch.setattr("sqlcg.cli.commands.analyze.run_read_routed", _route_to_db)
|
|
141
|
+
result = CliRunner().invoke(app, ["impact", "ba.s", "--raw"])
|
|
142
|
+
assert result.exit_code == 0, result.output
|
|
143
|
+
assert "OTHER" in result.output, (
|
|
144
|
+
f"analyze impact output must contain kind=OTHER for the sequence.\n{result.output}"
|
|
145
|
+
)
|
|
146
|
+
assert "CREATE_TABLE" not in result.output, (
|
|
147
|
+
f"analyze impact must NOT render CREATE_TABLE for the sequence.\n{result.output}"
|
|
148
|
+
)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Unit tests for ``SqlParser._classify`` on non-table ``CREATE`` DDL.
|
|
2
|
+
|
|
3
|
+
Guards the create-kind mislabel bugfix
|
|
4
|
+
([plan doc](plan/sprints/bugfix_create_kind_mislabel.md)).
|
|
5
|
+
|
|
6
|
+
Before the fix the ``exp.Create`` catch-all returned ``CREATE_TABLE`` for every
|
|
7
|
+
``Create.kind`` it did not explicitly handle, so ``CREATE SEQUENCE`` /
|
|
8
|
+
``CREATE STAGE`` / ``CREATE FILE FORMAT`` (and ``SCHEMA`` / ``INDEX``) were all
|
|
9
|
+
stored as ``CREATE_TABLE``. The catch-all now returns ``OTHER``.
|
|
10
|
+
|
|
11
|
+
Safety property under test (AC2): every statement that is *genuinely* a table —
|
|
12
|
+
plain ``CREATE TABLE``, ``TRANSIENT TABLE``, ``OR REPLACE TABLE`` and CTAS — has
|
|
13
|
+
``Create.kind == "TABLE"`` and so hits the explicit arm; the flip to ``OTHER``
|
|
14
|
+
cannot reclassify a real table.
|
|
15
|
+
|
|
16
|
+
Each assertion checks the observable returned kind string, not "no exception".
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import sqlglot
|
|
20
|
+
|
|
21
|
+
from sqlcg.lineage.schema_resolver import SchemaResolver
|
|
22
|
+
from sqlcg.parsers.ansi_parser import AnsiParser
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _classify(sql: str) -> str:
|
|
26
|
+
"""Parse ``sql`` (snowflake dialect) and return the stored query kind."""
|
|
27
|
+
parser = AnsiParser(SchemaResolver(dialect="snowflake"))
|
|
28
|
+
node = sqlglot.parse_one(sql, dialect="snowflake")
|
|
29
|
+
return parser._classify(node)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class TestNonTableCreateClassifiesAsOther:
|
|
33
|
+
"""Non-table CREATE DDL must classify as OTHER, not CREATE_TABLE."""
|
|
34
|
+
|
|
35
|
+
def test_create_sequence_classifies_as_other(self):
|
|
36
|
+
"""CREATE SEQUENCE (Create.kind == 'SEQUENCE') is OTHER."""
|
|
37
|
+
assert _classify("CREATE SEQUENCE ba.s START 1") == "OTHER"
|
|
38
|
+
|
|
39
|
+
def test_create_stage_classifies_as_other(self):
|
|
40
|
+
"""CREATE STAGE (Create.kind == 'STAGE') is OTHER."""
|
|
41
|
+
assert _classify("CREATE STAGE ma.stg") == "OTHER"
|
|
42
|
+
|
|
43
|
+
def test_create_file_format_classifies_as_other(self):
|
|
44
|
+
"""CREATE FILE FORMAT (Create.kind == 'FILE FORMAT') is OTHER."""
|
|
45
|
+
assert _classify("CREATE FILE FORMAT ff TYPE=CSV") == "OTHER"
|
|
46
|
+
|
|
47
|
+
def test_create_schema_classifies_as_other(self):
|
|
48
|
+
"""CREATE SCHEMA (Create.kind == 'SCHEMA') is OTHER."""
|
|
49
|
+
assert _classify("CREATE SCHEMA s") == "OTHER"
|
|
50
|
+
|
|
51
|
+
def test_create_index_classifies_as_other(self):
|
|
52
|
+
"""CREATE INDEX (Create.kind == 'INDEX') is OTHER."""
|
|
53
|
+
assert _classify("CREATE INDEX i ON t(a)") == "OTHER"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class TestRealTableCreateStillClassifiesAsCreateTable:
|
|
57
|
+
"""Control: every genuine table CREATE keeps CREATE_TABLE (safety property)."""
|
|
58
|
+
|
|
59
|
+
def test_plain_create_table_classifies_as_create_table(self):
|
|
60
|
+
"""Plain CREATE TABLE keeps CREATE_TABLE."""
|
|
61
|
+
assert _classify("CREATE TABLE t (a INT)") == "CREATE_TABLE"
|
|
62
|
+
|
|
63
|
+
def test_transient_table_classifies_as_create_table(self):
|
|
64
|
+
"""CREATE TRANSIENT TABLE has Create.kind == 'TABLE' → CREATE_TABLE."""
|
|
65
|
+
assert _classify("CREATE TRANSIENT TABLE t (a INT)") == "CREATE_TABLE"
|
|
66
|
+
|
|
67
|
+
def test_or_replace_table_classifies_as_create_table(self):
|
|
68
|
+
"""CREATE OR REPLACE TABLE has Create.kind == 'TABLE' → CREATE_TABLE."""
|
|
69
|
+
assert _classify("CREATE OR REPLACE TABLE t (a INT)") == "CREATE_TABLE"
|
|
70
|
+
|
|
71
|
+
def test_ctas_classifies_as_create_table(self):
|
|
72
|
+
"""CTAS (CREATE TABLE AS SELECT) has Create.kind == 'TABLE' → CREATE_TABLE."""
|
|
73
|
+
assert _classify("CREATE TABLE t AS SELECT a FROM s") == "CREATE_TABLE"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class TestViewAndProcUnaffected:
|
|
77
|
+
"""VIEW / PROCEDURE explicit arms are unchanged by the catch-all flip."""
|
|
78
|
+
|
|
79
|
+
def test_create_view_classifies_as_create_view(self):
|
|
80
|
+
"""CREATE VIEW keeps CREATE_VIEW."""
|
|
81
|
+
assert _classify("CREATE VIEW v AS SELECT a FROM s") == "CREATE_VIEW"
|
|
82
|
+
|
|
83
|
+
def test_create_procedure_classifies_as_create_proc(self):
|
|
84
|
+
"""CREATE PROCEDURE keeps CREATE_PROC."""
|
|
85
|
+
assert (
|
|
86
|
+
_classify("CREATE PROCEDURE p() RETURNS INT AS $$ BEGIN RETURN 1; END $$")
|
|
87
|
+
== "CREATE_PROC"
|
|
88
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr2_catalog_load_eval.json
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/pr3_repo_native_plateau.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/measurements/sprint_08_fullcorpus_index.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/lineage5_dwh_before_master.json
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_with_schema.json
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/schema_comparison_without_schema.json
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_changelogs_fullindex.json
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/metrics/sprint_08_fullcorpus_index.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/graph_health_sprint_postmortem.md
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/island_lever_live_verification.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/lineage_identity_sprint_postmortem.md
RENAMED
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/reports/pr_impact_followups_2026-06-14.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/coverage_parse_failure_diagnosis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/research/sql_only_coverage_lever_post_pr2.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sql_code_graph-1.34.1 → sql_code_graph-1.34.2}/plan/sprints/column_lineage_recall_metric.md
RENAMED
|
File without changes
|