aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes/sql.el
diff options
context:
space:
mode:
authorMichael R. Mauger2019-04-24 20:59:25 -0400
committerMichael R. Mauger2019-04-24 20:59:25 -0400
commita1386fa6a7698c04902354cd5fefb39056b0a901 (patch)
tree9d4ee7ae5b4d3cc13e0b88a445ec2e1c35e36117 /lisp/progmodes/sql.el
parent2bf957394cdcb93396966d3289f5e200886cb424 (diff)
downloademacs-a1386fa6a7698c04902354cd5fefb39056b0a901.tar.gz
emacs-a1386fa6a7698c04902354cd5fefb39056b0a901.zip
* lisp/progmodes/sql.el
(sql-is-sqli-buffer-p): New function. (sql-generate-unique-sqli-buffer-name): Refactor and use it. (sql-product-interactive): Simplify name logic. * test/lisp/progmodes/sql-tests.el (sql-tests-placeholder-filter-harness): New macro. (sql-tests-placeholder-filter-simple) (sql-tests-placeholder-filter-ampersand) (sql-tests-placeholder-filter-period): Refactored tests and use macro. (sql-tests-buffer-naming-harness): New macro. (sql-tests-buffer-naming-default) (sql-tests-buffer-naming-multiple) (sql-tests-buffer-naming-explicit) (sql-tests-buffer-naming-universal-argument) (sql-tests-buffer-naming-existing): New tests.
Diffstat (limited to 'lisp/progmodes/sql.el')
-rw-r--r--lisp/progmodes/sql.el46
1 files changed, 30 insertions, 16 deletions
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 28261ef74b2..2d33b3130cd 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -1423,6 +1423,15 @@ specified, it's `sql-product' or `sql-connection' must match."
1423 (and (stringp connection) 1423 (and (stringp connection)
1424 (string= connection sql-connection)))))))) 1424 (string= connection sql-connection))))))))
1425 1425
1426(defun sql-is-sqli-buffer-p (buffer)
1427 "Return non-nil if buffer is a SQLi buffer."
1428 (when buffer
1429 (setq buffer (get-buffer buffer))
1430 (and buffer
1431 (buffer-live-p buffer)
1432 (with-current-buffer buffer
1433 (derived-mode-p 'sql-interactive-mode)))))
1434
1426;; Keymap for sql-interactive-mode. 1435;; Keymap for sql-interactive-mode.
1427 1436
1428(defvar sql-interactive-mode-map 1437(defvar sql-interactive-mode-map
@@ -3550,24 +3559,29 @@ server/database name."
3550 "Generate a new, unique buffer name for a SQLi buffer. 3559 "Generate a new, unique buffer name for a SQLi buffer.
3551 3560
3552Append a sequence number until a unique name is found." 3561Append a sequence number until a unique name is found."
3553 (let ((base-name (when (stringp base) 3562 (let ((base-name (substring-no-properties
3554 (substring-no-properties 3563 (if base
3555 (or base 3564 (if (stringp base)
3556 (sql-get-product-feature product :name) 3565 base
3566 (format "%S" base))
3567 (or (sql-get-product-feature product :name)
3557 (symbol-name product))))) 3568 (symbol-name product)))))
3558 buf-fmt-1st buf-fmt-rest) 3569 buf-fmt-1st
3570 buf-fmt-rest)
3559 3571
3560 ;; Calculate buffer format 3572 ;; Calculate buffer format
3561 (if base-name 3573 (if (string-blank-p base-name)
3562 (setq buf-fmt-1st (format "*SQL: %s*" base-name) 3574 (setq buf-fmt-1st "*SQL*"
3563 buf-fmt-rest (format "*SQL: %s-%%d*" base-name)) 3575 buf-fmt-rest "*SQL-%d*")
3564 (setq buf-fmt-1st "*SQL*" 3576 (setq buf-fmt-1st (format "*SQL: %s*" base-name)
3565 buf-fmt-rest "*SQL-%d*")) 3577 buf-fmt-rest (format "*SQL: %s-%%d*" base-name)))
3566 3578
3567 ;; See if we can find an unused buffer 3579 ;; See if we can find an unused buffer
3568 (let ((buf-name buf-fmt-1st) 3580 (let ((buf-name buf-fmt-1st)
3569 (i 1)) 3581 (i 1))
3570 (while (sql-buffer-live-p buf-name) 3582 (while (if (sql-is-sqli-buffer-p buf-name)
3583 (comint-check-proc buf-name)
3584 (buffer-live-p (get-buffer buf-name)))
3571 ;; Check a sequence number on the BASE 3585 ;; Check a sequence number on the BASE
3572 (setq buf-name (format buf-fmt-rest i) 3586 (setq buf-name (format buf-fmt-rest i)
3573 i (1+ i))) 3587 i (1+ i)))
@@ -4670,13 +4684,13 @@ the call to \\[sql-product-interactive] with
4670 (read-string 4684 (read-string
4671 "Buffer name (\"*SQL: XXX*\"; enter `XXX'): " 4685 "Buffer name (\"*SQL: XXX*\"; enter `XXX'): "
4672 (sql-make-alternate-buffer-name product)))) 4686 (sql-make-alternate-buffer-name product))))
4673 ((or (string-prefix-p " " new-name)
4674 (string-match-p "\\`[*].*[*]\\'" new-name))
4675 new-name)
4676 ((stringp new-name) 4687 ((stringp new-name)
4677 (sql-generate-unique-sqli-buffer-name product new-name)) 4688 (if (or (string-prefix-p " " new-name)
4689 (string-match-p "\\`[*].*[*]\\'" new-name))
4690 new-name
4691 (sql-generate-unique-sqli-buffer-name product new-name)))
4678 (t 4692 (t
4679 (sql-generate-unique-sqli-buffer-name product nil))))) 4693 (sql-generate-unique-sqli-buffer-name product new-name)))))
4680 4694
4681 ;; Set SQLi mode. 4695 ;; Set SQLi mode.
4682 (let ((sql-interactive-product product)) 4696 (let ((sql-interactive-product product))