Mysql
將 SQL 規範化為相同的格式
我想編寫一個包來管理 mysql/pgsql 視圖,但為此我需要檢查程式碼中定義的視圖是否與我使用 show create table 命令獲得的數據庫中的視圖相同。
問題是數據庫解析查詢並且可能會通過添加別名等稍微改變它。是否有一個解析器可以將視圖示準化為相同的格式,以便我可以像字元串一樣比較它們?
現在我使用創建 tmp 視圖、獲取定義和刪除視圖的方法。它有效,但看起來不太好。
Apache Foundation 維護一個名為Calcite的 SQL 解析器。它可以理解包括 MySQL 和 Postgres 在內的多種方言。您可以使用它將來自兩個源的視圖轉換為它們的標記化解析樹,然後比較這些樹以獲得有趣的差異。更簡單的方法是將樹轉換回常用方言的 SQL,並對兩個輸出執行字元串比較。