pp sql
niceqlがなかなか便利だーと思ったのだけど、少し使ってみていると表示にちょっと不満が出てきた。
他にないかなとさがしてみるとanbt-sql-formatterというのがあった。↑の不満はとりあえずどうにかなりそうなのだが、残念なことにカラー表示には対応していなかった。
というわけで、ちょっとでっちあげてみた → https://gist.github.com/arika/762aa661c62779f7a7761e6c4e2eb63f
SQL文が
SELECT `users`.* FROM `users` INNER JOIN `comments` ON `comments`.`user_id` = `users`.`id` INNER JOIN `articles` ON `articles`.`id` = `users`.`user_id` AND `articles`.`status` NOT IN (0, 9)
WHERE `users`.id 10 LIMIT 3
なら、出力は
SELECT
`users`. *
FROM
`users`
INNER JOIN
`comments`
ON `comments`.`user_id` = `users`.`id`
INNER JOIN
`articles`
ON `articles`.`id` = `users`.`user_id`
AND `articles`.`status` NOT IN (
0
,9
)
WHERE
`users`.id 10 LIMIT 3
となる。このくらいなら悪くなさそう。
でも、もうちょっと複雑になると………
SELECT
a
,b
,SUM (c)
FROM
(
SELECT
d
,e
,f
FROM
(
SELECT
g
,h
,i
FROM
TABLE
WHERE
id IN (
1
,2
,3
)
) a
WHERE
a.e = 5
OR a.e = 7
) b
WHERE
b.c > 5
GROUP BY
a
,b
ORDER BY
a ASC
,b DESC
ちょっとやりすぎに感じる。文法的に整形するのとppとはちょっと違うのだなと思った。
もともとのppのように一行の文字数を制限して、その中に収まる部分は一行で表示してしまう、とかするとよいのかもしれない。sqlppあたりに手を加えるともう少しなんとかなりそうなのだけど。
ちなみにniceqlの出力はそれぞれ
SELECT `users`.*
FROM `users`
INNER JOIN `comments` ON `comments`.`user_id` = `users`.`id`
INNER JOIN `articles` ON `articles`.`id` = `users`.`user_id` AND `articles`.`status` NOT IN (0, 9)
WHERE `users`.id 10
LIMIT 3
と
SELECT a, b, sum(c)
FROM (
SELECT d, e, f
FROM (
SELECT g, h, i
FROM table
WHERE id IN (1, 2, 3)
) a
WHERE a.e = 5 OR a.e = 7
) b
WHERE b.c > 5
GROUP BY a, b
ORDER BY a ASC, b DESC
のようになる。