1-6ren">
gpt4 book ai didi

sql - 在 Emacs 中以另一种主要模式缩进 SQL

转载 作者:行者123 更新时间:2023-12-01 03:53:29 24 4
gpt4 key购买 nike

我经常写一些脚本来做一些事情,通常涉及 SQL,在不同的主要模式下。也许它看起来像这样:

sql = """
SELECT * FROM table WHERE row_awesomeness > 1000
"""

我希望能够适本地缩进 SQL,所以它看起来像:
sql = """
SELECT *
FROM table
WHERE row_awesomeness > 1000
"""

我对所使用的 SQL 缩进算法并不挑剔,但我根本无法使用任何东西。我不是 sql-indent.el 的忠实粉丝,但我什至无法在新缓冲区中使用它(函数 sql-indent-buffer 与我的第一个描述没有任何改变,我绝对想要 SELECTFROMWHERE 子句放在单独的行上,我认为这是非常标准的)。

理想情况下,我会突出显示包含 SQL 的区域并执行类似 M-x sql-indent-region 的操作。 RET - 不需要在换行符上缩进的东西。

最佳答案

这是一种方法(使用您提到的缩进功能进行了轻微测试——我不使用 SQL,但只要它在整个缓冲区上运行,您就应该能够在其位置插入任何函数):

(defun my-sql-indent-region (beg end)
"Indent the SQL statement in the region."
(interactive "*r")
(save-excursion
(save-restriction
(narrow-to-region beg end)
;; http://www.emacswiki.org/emacs/download/sql-indent.el
(sql-indent-buffer))))

如果我标记以下 sql 查询(从“SELECT”到“f2.PLAYERID”),嵌入在 elisp 中
字符串,然后执行 M-x my-sql-indent-region返回:
(defvar my-sql-query "
SELECT p1.PLAYERID,
f1.PLAYERNAME,
p2.PLAYERID,
f2.PLAYERNAME
FROM PLAYER f1,
PLAYER f2,
PLAYS p1
FULL OUTER JOIN PLAYS p2
ON p1.PLAYERID < p2.PLAYERID
AND p1.TEAMID = p2.TEAMID
GROUP BY p1.PLAYERID,
f1.PLAYERID,
p2.PLAYERID,
f2.PLAYERID
HAVING Count(p1.PLAYERID) = Count(*)
AND Count(p2.PLAYERID) = Count(*)
AND p1.PLAYERID = f1.PLAYERID
AND p2.PLAYERID = f2.PLAYERID;
")

我最终得到:
(defvar my-sql-query "
SELECT p1.PLAYERID,
f1.PLAYERNAME,
p2.PLAYERID,
f2.PLAYERNAME
FROM PLAYER f1,
PLAYER f2,
PLAYS p1
FULL OUTER JOIN PLAYS p2
ON p1.PLAYERID < p2.PLAYERID
AND p1.TEAMID = p2.TEAMID
GROUP BY p1.PLAYERID,
f1.PLAYERID,
p2.PLAYERID,
f2.PLAYERID
HAVING Count(p1.PLAYERID) = Count(*)
AND Count(p2.PLAYERID) = Count(*)
AND p1.PLAYERID = f1.PLAYERID
AND p2.PLAYERID = f2.PLAYERID;
")

关于sql - 在 Emacs 中以另一种主要模式缩进 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com