標籤:
周末兩天我寫了一個MySQLParser。寫這個東西的目的是:公司的一個項目中需要對資料打版本號碼(每個表的每條記錄要有一個版本號碼欄位,這個欄位需要由架構自動打上去,而不是由程式員來做)。
所以,我寫的這個程式是有專門的情境的,並非為通用情況而編寫(也就是說:有些東西並不影響工具對sql加欄位的,我在編寫的過程中故意的忽略了。比如:系統中只用到CRUD操作,所以我在寫SQL時就沒能支援DDL語句)。
我已經測試了項目系統中的所有SQL,都是可以處理的,同時我也自己寫了一些比較複雜的SQL,也可以正常處理。
但:因為我對MySQL的一些生僻文法不熟悉,在實現時參考MySQL源碼中的sql_yacc.yy檔案中的文法定義,發現有很多不懂的文法,雖然可以實現,但因為不懂,所以我也直接忽略掉了(如果有人用了這些文法就會直接報錯)。
在這裡面我很難定義什麼是“常規SQL文法”,什麼是“生僻SQL文法”,所以我目前的實現只是按我自己的理解來實現的,至少目前我所用到的所有MySQL的insert/delete/update/select語句的文法都是可以正確解析,並正確添加資料版本號碼欄位的。
如果大家對這個東西有興趣(如果同時又有需要,那就更好),就請大家到這裡【https://github.com/naturemickey/MySQLParser】clone這個工具的代碼試一下。
代碼說明:
1.clone出來之後的目錄就是一個eclipse工程,直接匯入即可。
2.src/test目錄中是所有的測試案例,可以直接運行(測試代碼中真正使用工具在sql中加欄位的地方只有一行代碼,非常簡單)。
3.代碼用java8編寫。
麻煩大家:
1.如果發現大家平時用到的SQL這裡無法解析或解析錯誤,那麼麻煩大家在github上把您的測試案例pull request給我。
2.如果您平時不用github,那麼麻煩您直接把您的測試SQL在本文章後面留言(https://github.com/naturemickey/MySQLParser這個地址也可以直接用SVN checkout)。
非常感謝!
請大家幫我找一找bug —— 一個MySQL解析程式(JAVA實現)