fix(json2ddl): normalize field.default before render to fix illegal DEFAULT ''N'' SQL

This commit is contained in:
yumoqing 2026-09-08 15:24:16 +08:00
parent cdb5db57f3
commit ad8f6c926f

View File

@ -22,6 +22,29 @@ tmpls = {
"postgresql":postgresql_ddl_tmpl
}
def normalize_defaults(data):
"""规范化字段 default 值2026-09-07 根治 DEFAULT ''N'' 缺陷)。
DDL 模板的 defaultValue 宏固定输出 DEFAULT '<值>'模板加引号因此 JSON 里的
default 必须是裸值历史 models JSON 有两种脏形态渲染出非法 SQL
自带外层单引号 "'active'" DEFAULT ''active''语法错误整表建表中止
数值型 0JSON number Jinja {%- if defaultv %} 0 为假 DEFAULT 子句静默丢失
统一在渲染前修数据不动 sqlor 受保护模板一处修复覆盖所有方言模板
- 非字符串 default 转字符串0 '0'模板输出 DEFAULT '0'MySQL 数值列接受
- 剥离外层成对单引号多层也只剥到裸值
- 内部残留单引号转义为 ''SQL 字符串转义防拼接断裂
"""
for f in data.get('fields', []):
dv = f.get('default')
if dv is None:
continue
if not isinstance(dv, str):
dv = str(dv)
dv = dv.strip()
while len(dv) >= 2 and dv.startswith("'") and dv.endswith("'"):
dv = dv[1:-1]
f['default'] = dv.replace("'", "''")
def xls2ddl(xlsfile,dbtype):
data = None
if xlsfile.endswith('.json'):
@ -34,6 +57,7 @@ def xls2ddl(xlsfile,dbtype):
if data is None:
print(xlsfile, 'not data return')
return
normalize_defaults(data)
pri = data['summary'][0]['primary']
if isinstance(pri, str):
data['summary'][0]['primary'] = [pri]