diff options
| -rw-r--r-- | lisp/progmodes/sql.el | 18 | ||||
| -rw-r--r-- | test/lisp/progmodes/sql-tests.el | 47 |
2 files changed, 62 insertions, 3 deletions
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el index a11d4560aed..4d0bed77d56 100644 --- a/lisp/progmodes/sql.el +++ b/lisp/progmodes/sql.el | |||
| @@ -1072,14 +1072,26 @@ add your name with a \"-U\" prefix (such as \"-Umark\") to the list." | |||
| 1072 | :version "20.8" | 1072 | :version "20.8" |
| 1073 | :group 'SQL) | 1073 | :group 'SQL) |
| 1074 | 1074 | ||
| 1075 | (defcustom sql-postgres-login-params `((user :default ,(user-login-name)) | 1075 | (defcustom sql-postgres-login-params |
| 1076 | (database :default ,(user-login-name)) | 1076 | `((user :default ,(user-login-name)) |
| 1077 | server) | 1077 | (database :default ,(user-login-name) |
| 1078 | :completion ,(completion-table-dynamic | ||
| 1079 | (lambda (_) (sql-postgres-list-databases)))) | ||
| 1080 | server) | ||
| 1078 | "List of login parameters needed to connect to Postgres." | 1081 | "List of login parameters needed to connect to Postgres." |
| 1079 | :type 'sql-login-params | 1082 | :type 'sql-login-params |
| 1080 | :version "24.1" | 1083 | :version "24.1" |
| 1081 | :group 'SQL) | 1084 | :group 'SQL) |
| 1082 | 1085 | ||
| 1086 | (defun sql-postgres-list-databases () | ||
| 1087 | "Return a list of available PostgreSQL databases." | ||
| 1088 | (when (executable-find sql-postgres-program) | ||
| 1089 | (let ((res '())) | ||
| 1090 | (dolist (row (process-lines sql-postgres-program "-ltX")) | ||
| 1091 | (when (string-match "^ \\([[:alnum:]-_]+\\) +|.*" row) | ||
| 1092 | (push (match-string 1 row) res))) | ||
| 1093 | (nreverse res)))) | ||
| 1094 | |||
| 1083 | ;; Customization for Interbase | 1095 | ;; Customization for Interbase |
| 1084 | 1096 | ||
| 1085 | (defcustom sql-interbase-program "isql" | 1097 | (defcustom sql-interbase-program "isql" |
diff --git a/test/lisp/progmodes/sql-tests.el b/test/lisp/progmodes/sql-tests.el new file mode 100644 index 00000000000..e05247a60ed --- /dev/null +++ b/test/lisp/progmodes/sql-tests.el | |||
| @@ -0,0 +1,47 @@ | |||
| 1 | ;;; sql-tests.el --- Tests for sql.el -*- lexical-binding: t; -*- | ||
| 2 | |||
| 3 | ;; Copyright (C) 2016 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; Author: Simen Heggestøyl <simenheg@gmail.com> | ||
| 6 | ;; Keywords: | ||
| 7 | |||
| 8 | ;; This file is part of GNU Emacs. | ||
| 9 | |||
| 10 | ;; GNU Emacs is free software: you can redistribute it and/or modify | ||
| 11 | ;; it under the terms of the GNU General Public License as published by | ||
| 12 | ;; the Free Software Foundation, either version 3 of the License, or | ||
| 13 | ;; (at your option) any later version. | ||
| 14 | |||
| 15 | ;; GNU Emacs is distributed in the hope that it will be useful, | ||
| 16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | ;; GNU General Public License for more details. | ||
| 19 | |||
| 20 | ;; You should have received a copy of the GNU General Public License | ||
| 21 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | ||
| 22 | |||
| 23 | ;;; Commentary: | ||
| 24 | |||
| 25 | ;; | ||
| 26 | |||
| 27 | ;;; Code: | ||
| 28 | |||
| 29 | (require 'cl-lib) | ||
| 30 | (require 'ert) | ||
| 31 | (require 'sql) | ||
| 32 | |||
| 33 | (ert-deftest sql-tests-postgres-list-databases () | ||
| 34 | "Test that output from `psql -ltX' is parsed correctly." | ||
| 35 | (cl-letf | ||
| 36 | (((symbol-function 'executable-find) | ||
| 37 | (lambda (_command) t)) | ||
| 38 | ((symbol-function 'process-lines) | ||
| 39 | (lambda (_program &rest _args) | ||
| 40 | '(" db-name-1 | foo-user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | " | ||
| 41 | " db_name_2 | foo-user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | " | ||
| 42 | "")))) | ||
| 43 | (should (equal (sql-postgres-list-databases) | ||
| 44 | '("db-name-1" "db_name_2"))))) | ||
| 45 | |||
| 46 | (provide 'sql-tests) | ||
| 47 | ;;; sql-tests.el ends here | ||