typesql이 점진적인 이유#
SQL에는 이미 수년간 작동해 온 쿼리가 있습니다. typesql은 기존 쿼리를 다른 런타임 언어로 바꾸지 않고 증명 계층을 더합니다. 어노테이션이 없는 문서도 유효하며, 어노테이션을 추가할 때마다 해당 부분에서 충족해야 하는 조건이 강화됩니다.
소거 규칙#
핵심 타입 구문은 검사에만 사용됩니다. expression satisfies T는 expression으로 소거됩니다. 타입이 지정된 CTE 헤더는 열 이름을 유지하고 타입 부분만 제거합니다. import type은 문 전체가 소거됩니다.
소거는 어노테이션 범위 밖의 원래 런타임 토큰을 보존합니다. 문을 다시 포맷하거나 컴파일하지 않습니다. 어노테이션이 값, 행, 부수 효과를 바꿀 수 있다면 핵심 typesql 구문이 아닙니다.
타입은 근거에서 나옵니다#
검사기는 데이터베이스를 직접 여는 대신 스키마 제공자를 받습니다. 제공자는 실시간 카탈로그 스냅샷, 저장소에 포함된 테스트 데이터, 내용이 고정된 패키지 환경일 수 있습니다. 따라서 동일한 쿼리를 편집기, CI, 오프라인 도구에서 검사할 수 있습니다.
알 수 없는 근거는 unknown으로 유지됩니다. 익숙한 열 이름이라고 해서 누락된 물리적 타입의 근거를 보완하지는 않습니다. 기본 키와 null이 아님을 주장하려면 현재 카탈로그의 증명이 필요합니다.
언어의 처리 범위를 제한합니다#
SQL, 패키지 아티팩트, 논리 뷰 환경, 타입 그래프, 진단, 출력 문서에는 모두 수용 한도가 있습니다. 비용이 큰 구체화 전에 한도를 적용합니다. 악의적이거나 손상된 제공자가 무제한 재귀, 할당, 캐시 상태 보유를 강제할 수 없습니다.
이는 의미 체계의 일부입니다. 한도에 도달하면 TS0608이나 TS0802처럼 안정적으로 정의된 거부를 반환합니다. 유효해 보이는 불완전한 타입 결과를 반환하지 않습니다.
진단은 인터페이스입니다#
쿼리 오류를 주로 사용하는 대상 중 하나는 자신의 SQL을 수정하는 에이전트입니다. 따라서 모든 진단에는 위치, 이유, 수정 방법, 안정적인 코드, 기계 판독 형식이 포함됩니다. “구문 오류”만으로는 사람이나 에이전트가 해결에 도달하기에 정보가 충분하지 않습니다.
코드와 구조가 인터페이스이므로 메시지 표현을 개선해도 호출자가 깨지지 않습니다. 기계적 수정에는 정확한 범위와 대체 내용이 포함됩니다. 의미를 바꿀 수 있는 제안은 설명문으로 남습니다.
확장 기능도 경계를 유지합니다#
타입이 지정된 함수는 계약을 통과한 뒤에만 컴파일됩니다. 패키지는 내용이 고정됩니다. 논리 뷰는 검사 전에 정확한 출처 정보와 함께 확장됩니다. 정책 마스크는 권한이 확인된 런타임 정책 경계에 도달할 때까지 masked<T>로 유지됩니다.
각 기능은 근거나 재사용 가능한 구조를 추가하면서 원래의 약속을 지킵니다. 타입은 Supernova가 잘못된 쿼리를 더 일찍 거부하도록 돕지만, 어노테이션이 다른 쿼리를 실행하게 만들지는 않습니다.