(-> % read write unlearn)

All opinions expressed are solely my own and do not express the views or opinions of my employer.

MySQLWorkbench でSQLを整形

f:id:hatappo:20150712103534p:plainMySQLWorkbenchのEditorが6.3からすごく高機能になったと聞いたので使ってみました。

ちょうどごちゃごちゃしたSQLが手許にありました。*1

SELECT i.item_name, i.cnt AS item_count,i.craeted_at,
CONCAT(i.attr_1, ', ', i.attr_2, ', '    , i.attr_3) AS item_attributes,
  (SELECT p.party_name
   FROM aaa.PARTIES    p
   WHERE i.user_id = 1) AS party_name
FROM (SELECT * FROM user_item WHERE deleted <> 1 ORDER BY item_id ASC) i LEFT JOIN users u ON i.user_id = u.user_id
WHERE u.user_id = 123 AND u.deleted <> 1
ORDER BY u.user_id DESC LIMIT 0, 1

;

これを整形します。command+bです。

SELECT 
    i.item_name,
    i.cnt AS item_count,
    i.craeted_at,
    CONCAT(i.attr_1, ', ', i.attr_2, ', ', i.attr_3) AS item_attributes,
    (SELECT 
            p.party_name
        FROM
            aaa.PARTIES p
        WHERE
            i.user_id = 1) AS party_name
FROM
    (SELECT 
        *
    FROM
        user_item
    WHERE
        deleted <> 1
    ORDER BY item_id ASC) i
        LEFT JOIN
    users u ON i.user_id = u.user_id
WHERE
    u.user_id = 123 AND u.deleted <> 1
ORDER BY u.user_id DESC
LIMIT 0 , 1

;
嬉しい
  • サブクエリも整形される。
気になる
  • SQLが少しでもsyntaxエラーだと整形してくれない。(例えば、アプリケーションで使用しているSQLテンプレートは、SQLとしては正しいsyntaxではないので整形てきない。)
ちょっと気になる
  • サブクエリの整形になんか統一感がない。
  • 4spaceインデント。(個人的には予約語の高さで揃えるほうが好き。)
  • where句のANDなどが同じ行になる。(個人的には改行して欲しい。)
  • limit句のオフセットの後のカンマの手前にスペースが入る。

sublimetextのSqlBeautifierプラグインと違って、元の状態にある程度影響されます。例えば、最後のセミコロンの手前の空行はそのままになってます。

MySQL専用だけあって、SQL標準の予約語だけでなくMySQLの関数もばっちりハイライト&コード補完されるし、予約語を一括で大文字化(あるいは小文字化)する機能があったり、そもそも接続してDBの中を横目に見ながらクエリ実行できるし、すごく便利です。ただ、普通のEditorと比べると重たい(起動にちょっと時間かかる)のほやっぱりちょっと気になります。

関数を補完してる画面のキャプチャ:

*1:実行できるか試してないくらい適当です。