最近碰到个问题,客户那边发布 SQL 文件到生产库,处于稽核的考虑,不能直接使用 JDBC 的用户,须使用第三方用户名。那么这样就会给开发人员带来麻烦,每次发布的时候,表名必须带上生产环境的 JDBC 用户名。
为了解决这个问题,特地开发个辅助软件,用于将开发人员提交的 SQL 文件中的表名自动加上指定的表所有者。
截图:
这里面还有两个插曲:
1、为了替换里面的表名,肯定不能简单的 Replace,那能借助什么呢?自然是强大的正则表达式了。幸好 Microsoft 在 ATL 中内置了对正则表达式的支持库。不过,居然没有 Perl 样式的 /b,无法匹配单词分隔符,VC 现在的正则表达式库 ATLRX.h 里面的 /b 只相当于 Perl 的 /s,代表空白字符。那没办法,只好另外选择第三方的正则表达式库了。提到 C++ 里面的正则表达式,首先想到的就是 GRETA 和 Boost 库(参考我的另一篇文章:Visual Studio 2008 中的 ATL),不过可惜,这几个库都巨大无比,虽然功能强大,不过我可不想带个 DLL 一起发布,能减小体积的事情,干嘛搞那么大?于是,在网上搜索了一下,一个小巧又功能强大、和 Perl 样式兼容的正则表达式库跃入眼帘,DEELX 正则表达式引擎
2、即使工程支持 Unicode 编码,用 CStdioFile 读取关键词文件,如果不是 ASCII 编码,Unicode 或者 UTF-8 格式,都会变成乱码。于是,从 CStdioFile 派生了一个新类 CXStdioFile,依据文件头来区分文件编码。
附文件头编码:
UNI16_BE: 0xFE, 0xFF
UNI16_LE: 0xFF, 0xFE
UTF8_SIGN: 0xEF, 0xBB, 0xBF //UTF-8 带签名格式
当然,要避免乱码,还是得使用 WideCharToMultiByte 和 MultiByteToWideChar。