Files
Neo-ZQYY/.claude/hooks/post_edit_rls_dual_schema.py
2026-04-10 06:24:13 +08:00

38 lines
1.1 KiB
Python

#!/usr/bin/env python3
"""PostToolUse hook: 编辑含 CREATE VIEW 的 SQL 文件时提醒双 Schema 规则"""
import json, re, sys
try:
data = json.load(sys.stdin)
except Exception:
sys.exit(0)
fp = (data.get("tool_input") or {}).get("file_path", "")
if not fp:
sys.exit(0)
rel = re.sub(r"^.*?NeoZQYY[/\\]", "", fp.replace("\\", "/"))
# 仅检查 db/ 下的 SQL 文件
if not re.search(r"^db/.*\.sql$", rel):
sys.exit(0)
# 读取文件内容检查是否包含 CREATE VIEW
try:
with open(fp, "r", encoding="utf-8") as f:
content = f.read()
except Exception:
sys.exit(0)
# 检测 CREATE [OR REPLACE] VIEW 语句
if re.search(r"CREATE\s+(OR\s+REPLACE\s+)?VIEW\s+(dws|dwd|core)\.", content, re.IGNORECASE):
print(json.dumps({
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": (
f"[rls-dual-schema] 检测到 {rel} 中包含 dws/dwd/core schema 的 VIEW 定义 — "
"根据 RLS 视图双 Schema 规则,必须同时在原 schema 和 app schema 创建对应视图,否则后端查询会失败。"
)
}
}))