本文將介紹SOAR插件的基本實現以及如今已經實現的插件的安裝與使用。html
上篇文章回顧:淺析NewSQL數據庫——TiDBgit
SOAR(SQL Optimizer And Rewriter)是小米近期開源的SQL智能優化改寫工具,開源第一週就取得了2000+星的成績。咱們開發SOAR的目的並不單單但願對DBA可以提供幫助,也但願可以協助廣大的SQL開發者更容易的寫出高質量的SQL。SOAR借鑑了其餘SQLint[1]的思路,也提供了三種編輯器插件,能夠用來集成到Vim,Sublime Text,VS Code等代碼編輯器中。github
將report-type指定爲lint時,SOAR會將評審內容以SQLint的樣形輸出。爲了便於展現,lint模式下只保留了文件名、行號、建議類型和建議摘要等少數信息。下面是一個簡單的例子。sql
$ cat file.sql
select * from test
$ soar -report-type lint -query file.sql
file.sql:1:CLA.001 最外層SELECT未指定WHERE條件
file.sql:1:COL.001 不建議使用SELECT * 類型查詢複製代碼
Vim插件咱們選擇了在知名的Syntastic[2]插件基礎上進行增補,這就要求用戶首先安裝Syntastic插件,它的安裝方法在官方文檔[3]中有詳細描述,這裏再也不過多贅述。讓咱們來直接看看要怎樣配置SOAR生效。數據庫
確保soar二進制文件在可執行文件查找路徑$PATH下vim
確保soar二進制文件具備可執行權限,chmod a+x soarc#
將源碼中的doc/example/soar.vim文件拷貝至${SyntasticInstalledPath}/syntax_checkers/sql目錄下,例如筆者使用bundle來管理Vim插件,因而將soar.vim文件拷貝至~/.vim/bundle/pristine/syntastic/syntax_checkers/sql目錄bash
修改${SyntasticInstalledPath}/plugin/syntastic/registry.vim註冊文件,增長sql類型文件的檢查工具,如'sql':['soar','sqlint']運維
更新Vim配置~/.vimrc,容許Syntastic默認彈窗編輯器
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0複製代碼
一切順利的話使用Vim打開一個文件每次保存時您就能看到SOAR給出的建議了。
與Vim插件的思路相同,在Sublime Text3中,咱們選擇在SublimeLinter[4]的基礎上進行拓展。因爲代碼剛剛開源,SublimeLinter-soar[5]在PackageControlChannel相關Pull Request[6]還沒有被合併完成,因此目前暫時不能經過Sublime Text3自帶的PackageControl進行安裝。
雖然不能使用簡便的方式進行安裝,可是若是您想馬上體驗SOAR的Sublime Text3插件,能夠按照下列方式手動進行安裝:
確保soar二進制文件具備可執行權限,chmod a+x soar
根據官方文檔[7]安裝SublimeLinter
打開Sublime Text3的插件相關目錄:Preferences -> Browse Packages…
在該目錄下載代碼
git clone https://github.com/liipx/SublimeLinter-soar.git複製代碼
配置我的相關參數:點擊 Preferences -> PackageSettings -> SublimeLinter -> Settings,將下列內容修改後加入到我的配置中
// SublimeLinter Settings - User{
"linters": { "soar": { "soar_path":"your_soar_path"
},
},
}複製代碼
從新啓動Sublim Text3後,打開一個SQL文件就看到SOAR給出的建議了。
VS Code的插件功能十分強大,對於語言類的功能拓展,微軟採用了一種稱爲Language Server Protocol(LSP)的實現方式。這種協議標準化了語言工具和代碼編輯器之間的通訊方式,感興趣的同窗能夠經過官方文檔[8]進行更深刻的瞭解。
SOAR的VS Code插件目前在Github[9]上管理,還沒有發佈到微軟的應用市場,沒法直接在微軟官方網頁上點擊安裝。想嚐鮮且擁有TypeScript及VS Code插件開發相關經驗的同窗能夠經過如下方式來手動安裝體驗該插件。其餘同窗能夠靜靜等待微軟應用市場審批經過便可享受一鍵安裝的便利了。
確保soar二進制文件具備可執行權限,chmod a+x soar
確保soar二進制文件在可執行文件查找路徑$PATH下
找到VS Code插件安裝路徑,Mac/Linux用戶通常爲${HOME}/.vscode/extensions,Windows用戶通常爲%USERPROFILE%\.vscode\extensions
進入該路徑下載代碼
git clone https://github.com/liipx/vscode-extension-soar複製代碼
參考項目README[10]編譯Client與Server目錄下的TypeScript程序
重啓VS Code,打開一個SQL文件查看是否生效
SOAR並不單單是爲DBA準備的工具,咱們但願SOAR可以從SQL的所有生命週期來幫助提高代碼質量。不管屏幕前的你是DBA仍是軟件開發者,咱們相信SOAR都可以對您SQL的開發體驗帶來極大地提高。
參考
[1]:https://github.com/purcell/sqlint
[2]:https://github.com/vim-syntastic/syntastic
[3]:https://github.com/vim-syntastic/syntastic#installation
[4]:https://github.com/SublimeLinter/SublimeLinter
[5]:https://github.com/liipx/SublimeLinter-soar
[6]:https://github.com/SublimeLinter/package_control_channel/pull/77
[7]:http://sublimelinter.readthedocs.org/en/latest/installation.html
[8]:https://code.visualstudio.com/docs/extensions/example-language-server
[9]:https://github.com/liipx/vscode-extension-soar
[10]:https://github.com/XiaoMi/soar/blob/master/README.md
本文首發於公衆號「小米運維」,點擊查看原文