diff options
| author | Marcos Magueta <maguetamarcos@gmail.com> | 2025-10-25 16:41:40 -0300 |
|---|---|---|
| committer | Marcos Magueta <maguetamarcos@gmail.com> | 2025-10-25 16:41:40 -0300 |
| commit | 1cfc60020997353e5f14d632a29a4dcd4db25329 (patch) | |
| tree | f7cc9ae412e77d2ccab0b3eb0ed041f0a3382866 /magemacs-sql.el | |
| parent | 756c24533db8590e6ecb1bbe1f1ba36f7f38d4cf (diff) | |
| download | MageMacs-1cfc60020997353e5f14d632a29a4dcd4db25329.tar.gz MageMacs-1cfc60020997353e5f14d632a29a4dcd4db25329.zip | |
improve sql support with lsp and better secret management
Diffstat (limited to '')
| -rw-r--r-- | magemacs-sql.el | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/magemacs-sql.el b/magemacs-sql.el new file mode 100644 index 0000000..e6f2a9c --- /dev/null +++ b/magemacs-sql.el @@ -0,0 +1,68 @@ +;;; 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 + |
