fix(scripts): calibrate_ask.py None 파라미터 타입 추론 실패 해소
asyncpg 이 $N IS NULL 비교에서 Python None 의 타입 추론 실패 (AmbiguousParameterError: could not determine data type of parameter). None 인 조건은 WHERE 에서 아예 제외 — clauses 동적 조립. 부수 효과: 조건 0개일 때 "TRUE" 반환으로 quiet fallback. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+16
-14
@@ -104,21 +104,23 @@ def build_filters(args: argparse.Namespace) -> tuple[str, dict[str, Any]]:
|
||||
"""공통 WHERE 절 SQL + 바인딩 파라미터.
|
||||
|
||||
조건 4가지: source, prompt_version, since, until.
|
||||
None 인 항목은 IS NULL 로 무력화 (SQL CASE 회피, 단순 OR 패턴).
|
||||
None 인 항목은 WHERE 에 포함하지 않음 (asyncpg 이 None param 의 타입 추론 실패 회피).
|
||||
"""
|
||||
clauses = [
|
||||
"(:source IS NULL OR source = :source)",
|
||||
"(:prompt_version IS NULL OR prompt_version = :prompt_version)",
|
||||
"(:since IS NULL OR created_at >= CAST(:since AS TIMESTAMPTZ))",
|
||||
"(:until IS NULL OR created_at < CAST(:until AS TIMESTAMPTZ))",
|
||||
]
|
||||
params: dict[str, Any] = {
|
||||
"source": args.source,
|
||||
"prompt_version": args.prompt_version,
|
||||
"since": args.since,
|
||||
"until": args.until,
|
||||
}
|
||||
return " AND ".join(clauses), params
|
||||
clauses: list[str] = []
|
||||
params: dict[str, Any] = {}
|
||||
if args.source is not None:
|
||||
clauses.append("source = :source")
|
||||
params["source"] = args.source
|
||||
if args.prompt_version is not None:
|
||||
clauses.append("prompt_version = :prompt_version")
|
||||
params["prompt_version"] = args.prompt_version
|
||||
if args.since is not None:
|
||||
clauses.append("created_at >= CAST(:since AS TIMESTAMPTZ)")
|
||||
params["since"] = args.since
|
||||
if args.until is not None:
|
||||
clauses.append("created_at < CAST(:until AS TIMESTAMPTZ)")
|
||||
params["until"] = args.until
|
||||
return (" AND ".join(clauses) if clauses else "TRUE"), params
|
||||
|
||||
|
||||
# ─── eval split (id 해시) ────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user