首页 > 解决方案 > 在 sql 中查找硬编码值(忽略注释)

问题描述

我正在尝试通过匹配硬编码值来对我们尝试构建视图和索引的所有位置进行分类。我在完全用 sql 编写的迁移脚本存储库中运行它。

我想出了这个正则表达式,它似乎给了我相当多的匹配:

git grep -o -e "\w\+\s*[=~]\s*'[^']\+'" \
            -e "\w\+\s*\w\+\s*('[^']\+'" \
         '*.sql'

输出看起来像

migrations/50__xdr/R__create_xdr_indexes/20__indexes_10_all.sql:pattern_rawValue = 'J19.2020'                                                                                           
migrations/50__xdr/R__create_xdr_indexes/20__indexes_10_all.sql:pattern_rawValue = 'J19.2020'
… # lots of duplicates
migrations/50__xdr/V5.4.3__initial_xdr/01__xdr_schema.sql:matchingState IN ('Connectedness'
 … # and so on

松散地,它正在寻找匹配运算符后面的单引号中的第一个值。但我发现它也在很多注释行中找到匹配项。忽略注释行变得复杂。一方面,很难只看到“有趣”的部分:

git grep -o -e "^[^-].*{rest of expression as above}" …

有没有更好的方法来找到这些硬编码的表达式,特别是排除注释行?(我也对检查 postgresql 数据库本身的解决方案持开放态度。)

标签: sqlgrepanalysis

解决方案


推荐阅读