aboutsummaryrefslogblamecommitdiffstats
path: root/magemacs-sql.el
blob: e6f2a9c612010c766bbb4ff25824fc9ad000b8b2 (plain) (tree)



































































                                                                                                     
;;; magemacs-sql.el --- MageMacs SQL integration -*- lexical-binding: t; -*-

(defun magemacs/lsp-sqls-from-connection-alist ()
  "Configure `lsp-sqls-connections` from `sql-connection-alist`."
  (require 'lsp-sqls)
  (setq lsp-sqls-connections
        (mapcar
         (lambda (conn)
           (let* ((props (cdr conn))
                  (driver "postgresql")
                  (server (cadr (assoc 'sql-server props)))
                  (port (cadr (assoc 'sql-port props)))
                  (user (cadr (assoc 'sql-user props)))
                  (db (cadr (assoc 'sql-database props))))
             `((driver . ,driver)
               (dataSourceName . ,(format "host=%s port=%s user=%s dbname=%s sslmode=disable"
                                          server port user db)))))
         sql-connection-alist))
  (message "Configured lsp-sqls-connections for %d databases"
           (length lsp-sqls-connections)))

(defun magemacs/lsp-sqls-use-connection ()
  "Configure `lsp-sqls` to use only the `psi` connection."
  (interactive)
  (require 'lsp-sqls)
  (let* ((connection-name (read-string "Connection name: "))
	 (conn (assoc (intern connection-name) sql-connection-alist)))
    (if conn
      (setq-local lsp-sqls-connections
                  (list
                   (let* ((props (cdr conn))
                          (driver "postgresql")
                          (server (cadr (assoc 'sql-server props)))
                          (port (cadr (assoc 'sql-port props)))
                          (user (cadr (assoc 'sql-user props)))
                          (db (cadr (assoc 'sql-database props))))
                     `((driver . ,driver)
                       (dataSourceName . ,(format "host=%s port=%s user=%s dbname=%s sslmode=require"
                                                  server port user db))))))
      (user-error "Could not load connection '%s'" connection-name)))
  (message "lsp-sqls configured to use the specified connection"))

(defun magemacs/use-sql-connections (var)
  "Replace `sql-connection-alist` with the value of VAR.
VAR should be a symbol referring to a variable that holds
an alist of SQL connection definitions."
  (interactive
   (list (intern
          (completing-read
           "Use SQL connections from variable: "
           (let (vars)
             (mapatoms
              (lambda (sym)
                (when (and (boundp sym)
			   (string-prefix-p "secret|" (symbol-name sym)))
                  (push (symbol-name sym) vars))))
             vars)
           nil t))))
  (if (and (boundp var)
           (listp (symbol-value var)))
      (progn
        (setq sql-connection-alist (symbol-value var))
        (message "sql-connection-alist replaced with value from %s" var))
    (user-error "Variable %s is not bound or not a list" var)))

(provide 'magemacs-sql)
;;; magemacs-sql.el ends here