Skip to content

开发日志(中文)

Clark Yu edited this page May 26, 2022 · 14 revisions

新增了对引号内字符不操作的逻辑 2022.05.27

有个问题困扰我很久。因为插件是基于SQL中的关键词进行分割再组合,但当字符串中出现了关键词,就会让格式化失败(虽然这种情况不常见issue36issue20),例如:

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,但是失败了。所以这次换了个思路,在格式化开始之前,先把所有引号内的内容提取出来做标记,格式化后再补充回去,下面就是修改前和修改后的例子(旧版本下会把三个空格简写成一个),新版本则保持了原样。

before(旧版本) after(新版本)

时隔两个多月后的更新 2021.10.31

  • 修复了一些过去堆积的bug,但是还有些注释问题无法修复
  • 新增了自定义字段长度,来参加as的对齐

增加了自定义tab缩进为空格的功能 2021.06.13

有朋友反馈在tab键在linux下beeline命令窗下会出错,sqlbeautify在子查询嵌套缩进中直接用了制表符缩进,为了解决这个问题,新增了可用四个空格替换制表符缩进功能,如图所示: tablevswhitespace

祝大家端午节快乐!

关于逗号不建议放在字段后 2021.05.24

以下是逗号放在字段前和逗号放在字段后的两种格式

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+方向键往回选,就能直接选定所需要的字段,但是在逗号放在后的情况下,最后一行和前几行相差了一个逗号,却无法这样操作,如图所示。

不过这也是我的个人经验,除了这个小问题,哪种样式更好,还是看大家习惯就行。