-
Notifications
You must be signed in to change notification settings - Fork 23
开发日志(中文)
Clark Yu edited this page May 26, 2022
·
14 revisions
有个问题困扰我很久。因为插件是基于SQL中的关键词进行分割再组合,但当字符串中出现了关键词,就会让格式化失败(虽然这种情况不常见issue36、issue20),例如:
select " WHERE "
from a
这个代码在格式化后会变成:
SELECT "
WHERE "
FROM a
因为它在字符串里命中了where的关键词,在一般逻辑下,我们认为遇到where
就要换行,这里就出现了问题。还有一种问题更加棘手,就是遇到正则处理的SQL语句
SELECT aaa
,CAST(get_json_object(json_obj,'$.uid') AS BIGINT) AS uid
,CASE WHEN get_json_object(json_obj,'$.app') = 'app1' THEN id ELSE get_json_object(json_obj,'$.start_id') END AS id
,CASE WHEN ( array_contains( split(regexp_replace(regexp_replace ( event_attribute['items'],'^\ \[',''),'\ \ ]$',''),',''--'),get_json_object(json_obj,'$.id')) OR event_attribute['id'] = get_json_object(json_obj,'$.id') ) THEN 1 ELSE 0 END AS has_item
FROM ddd.ttt
正则里面有太多的符号,例如,
是我判断换行的基础,--
是我判断后面的文本是不是注释的基础,这些都可能因为正则的处理而随机出现在两个引号之间。
一开始我想通过制定一系列的规则来限制这些异常case,但是失败了。所以这次换了个思路,在格式化开始之前,先把所有引号内的内容提取出来做标记,格式化后再补充回去,下面就是修改前和修改后的例子(旧版本下会把三个空格简写成一个),新版本则保持了原样。
(旧版本)
(新版本)
- 修复了一些过去堆积的bug,但是还有些注释问题无法修复
- 新增了自定义字段长度,来参加as的对齐
有朋友反馈在tab键在linux下beeline命令窗下会出错,sqlbeautify在子查询嵌套缩进中直接用了制表符缩进,为了解决这个问题,新增了可用四个空格替换制表符缩进功能,如图所示:
祝大家端午节快乐!
以下是逗号放在字段前和逗号放在字段后的两种格式
SELECT pt,
col_name1 AS a,
col2_name2 AS b,
col3_name3 AS c
FROM table_name
WHERE pt = '${env.YYYYMMDD}'
SELECT pt,
col_name1 AS a,
col2_name2 AS b,
col3_name3 AS c
FROM table_name
WHERE pt = '${env.YYYYMMDD}'
有一个场景,我需要对字段进行建表,比如上述代码的pt,a,b,c四个字段。在vscode的列编辑中,可以通过定位到这四行行首,然后敲END键直接到末行,然后再shift+alt+方向键往回选,就能直接选定所需要的字段,但是在逗号放在后的情况下,最后一行和前几行相差了一个逗号,却无法这样操作,如图所示。
不过这也是我的个人经验,除了这个小问题,哪种样式更好,还是看大家习惯就行。
@Clark Yu