sql - SQL 查询参数的缓冲区本地值
问题描述
使用sql-send-buffer
,我可以将 SQL 查询从文件发送到打开的 SQL REPL。我的许多查询都有参数占位符(在 Postgres 语法中$1
,, $2
&c.)。有没有人有类似的代码sql-send-buffer
会提示为这些参数填写值?理想情况下,我希望它存储我提供的值,除非我添加参数或关闭文件,否则不会再次提示。
目前我要么:
- 替换文件中的参数,尽量记住不要提交或部署这些测试值(容易出错)
- 将查询复制到 REPL 中,在那里替换参数(繁琐)
解决方案
像这样的东西,也许:
(defvar my-sql-replacements nil)
(make-variable-buffer-local 'my-sql-replacements)
(defun my-sql-send-buffer-replace ()
(interactive)
(let ((string (buffer-substring-no-properties (point-min) (point-max))))
(while (string-match "[$][0-9]" string)
(let* ((placeholder (match-string 0 string))
(replacement (or (cdr (assoc placeholder my-sql-replacements))
(read-string (format "Replacement for %s: " placeholder)))))
(unless (assoc placeholder my-sql-replacements)
(push (cons placeholder replacement) my-sql-replacements))
(setq string (replace-regexp-in-string (regexp-quote placeholder) replacement string))))
(sql-send-string string)))
我还没有使用实际的 SQL 服务器对其进行过测试,但从跟踪sql-send-string
来看,它看起来应该可以工作。它将替换存储在缓冲区局部变量中。
推荐阅读
- wordpress - 管理员不能在 Windows 上工作,但可以在 iphone 上工作
- c# - 如何顺利升起墙壁并用协程关闭它们?
- html - 如何使具有 2 个不同宽度的 2 个不同按钮调整相同的大小
- javascript - Javascript中有没有办法将可选属性设置为默认值?
- python - 从文件中读取并获取对应的枚举
- javascript - 使用 JavaScript 和 HTML 在 Web 应用上打开手机手电筒
- r - R 中的错误 - 包含保留字或非法字符
- python - 如何解决python for-loop中到达循环末尾时发生的Keyerror
- postgresql - 如何用 Z 转换时间戳并计算 postregsql 中的天数?
- node.js - 如何添加节点终端 Visual Studio Code?