локальные значения буфера для параметров запроса SQL - PullRequest
0 голосов
/ 28 марта 2019

Используя sql-send-buffer, я могу отправить запрос SQL из файла в открытый SQL REPL.Многие из моих запросов имеют заполнители параметров (в синтаксисе Postgres, $1, $2 и т. Д.).У кого-нибудь есть код, аналогичный sql-send-buffer, который будет запрашивать значения для этих параметров?В идеале я хотел бы, чтобы он сохранял значения, которые я предоставляю, и не запрашивал их снова, пока я не добавлю параметры или не закрою файл.

В настоящее время я либо:

  1. заменяю параметры вфайл, попробуйте помнить, чтобы не фиксировать или развертывать эти тестовые значения (подвержены ошибкам) ​​
  2. скопировать запрос в REPL, заменить параметры там (утомительно)

1 Ответ

0 голосов
/ 29 марта 2019

Нечто подобное, возможно:

(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 похоже, что он должен работать. Он хранит замены в локальной переменной буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...