From 736b031282cd9e61586b5c68d5ed3f00b9854b68 Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Fri, 16 Oct 2026 12:53:07 +0800 Subject: [PATCH] =?UTF-8?q?SQL=20=E6=A3=80=E6=9F=A5=E8=AE=A4=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=88=97=E6=97=B6=E5=B8=A6=E4=B8=8A=20ENUM=20?= =?UTF-8?q?=E7=9A=84=E5=8F=96=E5=80=BC=E5=88=97=E8=A1=A8=EF=BC=9APG=20?= =?UTF-8?q?=E9=87=8C=E7=B1=BB=E5=9E=8B=E5=90=8D=E5=B8=A6=20DATE=20?= =?UTF-8?q?=E7=9A=84=E6=9E=9A=E4=B8=BE=E5=88=97=EF=BC=8C=E5=89=96=E6=9E=90?= =?UTF-8?q?=E4=B8=8D=E8=AE=A4=E6=98=AF=E6=97=A5=E6=9C=9F=E5=88=97=E3=80=81?= =?UTF-8?q?SQL=20=E6=A3=80=E6=9F=A5=E5=8D=B4=E8=AE=A4=EF=BC=8C=E4=B8=A4?= =?UTF-8?q?=E8=BE=B9=E5=AF=B9=E4=B8=8D=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/data/sqlcheck.py | 2 +- backend/tests/test_sqlcheck.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/app/data/sqlcheck.py b/backend/app/data/sqlcheck.py index eface254..c3f200f6 100644 --- a/backend/app/data/sqlcheck.py +++ b/backend/app/data/sqlcheck.py @@ -326,7 +326,7 @@ class _Table: 「唯一日期列」和这里认的时间列对得上)。""" meta = next((c for c in self.meta.get("columns") or [] if isinstance(c, Mapping) and str(c.get("name")).lower() == column.lower()), None) - return catalog.is_date_column(column, (meta or {}).get("type")) + return catalog.is_date_column(column, (meta or {}).get("type"), enum_values=(meta or {}).get("enum_values")) #: 一列解析到的位置:(表, 列的真名) diff --git a/backend/tests/test_sqlcheck.py b/backend/tests/test_sqlcheck.py index 2f8bf546..8277908a 100644 --- a/backend/tests/test_sqlcheck.py +++ b/backend/tests/test_sqlcheck.py @@ -555,3 +555,15 @@ async def test_checker_builds_relation_graph_lazily_and_reuses_it(cache, monkeyp checker.check(FANOUT[0]) checker.check(FANOUT[1]) assert calls == [1] + + +def test_a_postgres_enum_whose_type_name_says_date_is_not_a_time_column(): + """PG 的枚举编译出来就是类型名本身(update_date_kind 里也有 DATE):探查记下了 enum_values 的列,SQL 检查和剖析一样 + 不把它当时间列。以前 SQL 检查认时间列时没把取值列表传进去,剖析不认、SQL 检查却认,两边对不上。""" + from app.data.sqlcheck import _Table + + meta = {"columns": [{"name": "kind", "type": "update_date_kind", "enum_values": ["a", "b"]}, + {"name": "paid_on", "type": "DATE"}]} + table = _Table(alias="t", name="t", meta=meta, notes={}, order=0) + assert not table.temporal("kind") + assert table.temporal("paid_on")