aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimen Heggestøyl2016-11-15 19:08:22 +0100
committerSimen Heggestøyl2016-11-15 19:08:22 +0100
commit4e2ef64449ce5dc91e2d533c0fbaaf50b0e92f3b (patch)
tree89e0591c9a02a03abfd2acdbcf5166bc490dbde4
parent8663fad0a70e60e130ae4cd0529ead66fbad2250 (diff)
downloademacs-4e2ef64449ce5dc91e2d533c0fbaaf50b0e92f3b.tar.gz
emacs-4e2ef64449ce5dc91e2d533c0fbaaf50b0e92f3b.zip
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.
-rw-r--r--lisp/progmodes/sql.el18
-rw-r--r--test/lisp/progmodes/sql-tests.el47
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