Complete the name of PostgreSQL databases
* lisp/progmodes/sql.el (sql-postgres-login-params): Complete database name. (sql-postgres-list-databases): New function returning a list of available PostgreSQL databases. * test/lisp/progmodes/sql-tests.el: New file with tests for sql.el.
This commit is contained in:
parent
8663fad0a7
commit
4e2ef64449
2 changed files with 62 additions and 3 deletions
|
@ -1072,14 +1072,26 @@ add your name with a \"-U\" prefix (such as \"-Umark\") to the list."
|
|||
:version "20.8"
|
||||
:group 'SQL)
|
||||
|
||||
(defcustom sql-postgres-login-params `((user :default ,(user-login-name))
|
||||
(database :default ,(user-login-name))
|
||||
server)
|
||||
(defcustom sql-postgres-login-params
|
||||
`((user :default ,(user-login-name))
|
||||
(database :default ,(user-login-name)
|
||||
:completion ,(completion-table-dynamic
|
||||
(lambda (_) (sql-postgres-list-databases))))
|
||||
server)
|
||||
"List of login parameters needed to connect to Postgres."
|
||||
:type 'sql-login-params
|
||||
:version "24.1"
|
||||
:group 'SQL)
|
||||
|
||||
(defun sql-postgres-list-databases ()
|
||||
"Return a list of available PostgreSQL databases."
|
||||
(when (executable-find sql-postgres-program)
|
||||
(let ((res '()))
|
||||
(dolist (row (process-lines sql-postgres-program "-ltX"))
|
||||
(when (string-match "^ \\([[:alnum:]-_]+\\) +|.*" row)
|
||||
(push (match-string 1 row) res)))
|
||||
(nreverse res))))
|
||||
|
||||
;; Customization for Interbase
|
||||
|
||||
(defcustom sql-interbase-program "isql"
|
||||
|
|
47
test/lisp/progmodes/sql-tests.el
Normal file
47
test/lisp/progmodes/sql-tests.el
Normal file
|
@ -0,0 +1,47 @@
|
|||
;;; sql-tests.el --- Tests for sql.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Simen Heggestøyl <simenheg@gmail.com>
|
||||
;; Keywords:
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'ert)
|
||||
(require 'sql)
|
||||
|
||||
(ert-deftest sql-tests-postgres-list-databases ()
|
||||
"Test that output from `psql -ltX' is parsed correctly."
|
||||
(cl-letf
|
||||
(((symbol-function 'executable-find)
|
||||
(lambda (_command) t))
|
||||
((symbol-function 'process-lines)
|
||||
(lambda (_program &rest _args)
|
||||
'(" db-name-1 | foo-user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | "
|
||||
" db_name_2 | foo-user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | "
|
||||
""))))
|
||||
(should (equal (sql-postgres-list-databases)
|
||||
'("db-name-1" "db_name_2")))))
|
||||
|
||||
(provide 'sql-tests)
|
||||
;;; sql-tests.el ends here
|
Loading…
Add table
Reference in a new issue