emacsの*scratch*バッファでテンプレートエンジンのmustache.elを使って雑にSQLを作ってみる。
mustache.elを見つけたので使ってみる。
Emacs Lisp自体ほとんどわかっていないので勉強もかねてやってみた。
*scratch*バッファだから、順番に”C-j”して実行して行けば、テンプレートの{{key}}で書かれたところを埋めたSQLが手に入る。
利用したライブラリは下記の3つ
*scratch*バッファ
;;テンプレートを作る (setq template " update users set user_id = '{{new-id}}' where user_id = '{{old-id}}'; delete from item_info where user_id = '{{old-id}}'; ") ;;ハッシュテーブルを作る (require 'ht) (setq context (list (ht ("new-id" "new-foo") ("old-id" "old-foo")) (ht ("new-id" "new-bar") ("old-id" "old-bar")) (ht ("new-id" "new-baz") ("old-id" "old-baz")))) ;;SQLをmustache.elで作る (require 'dash) (require 'mustache) (-map (lambda (m) (princ (mustache-render template m))) context) ;;再帰でもやってみる (defun my-render (tmpl lst) (cond ((null lst) (princ "commit;\n")) (t (progn (princ (mustache-render tmpl (car lst))) (my-render tmpl (cdr lst)))))) (my-render template context)
業務で単純なSQLをたくさん書かないと行けない時は、Excelを使って作っている。
ただ、Excelだと一対一のSQLは作りやすいけど、一つのキーで複数のテーブルを更新しに行く一対多のSQLは作りづらいから、こういうやり方も覚えておくと便利かもしれない。
追記
READMEを読んだら、リストをループさせるテンプレートの書き方も載ってた。
当たり前だけど、公開されているドキュメントは一通り見ておいて損はないね。
(require 'mustache) mustache (require 'ht) ht (mustache-render " {{#hoge-list}} * {{hoge}} {{/hoge-list}} " (ht ("hoge-list" (list (ht ("hoge" "hogehoge1")) (ht ("hoge" "hogehoge2")))))) " * hogehoge1 * hogehoge2 "