aboutsummaryrefslogtreecommitdiffstats
path: root/magemacs-sql.el
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2025-10-25 16:41:40 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2025-10-25 16:41:40 -0300
commit1cfc60020997353e5f14d632a29a4dcd4db25329 (patch)
treef7cc9ae412e77d2ccab0b3eb0ed041f0a3382866 /magemacs-sql.el
parent756c24533db8590e6ecb1bbe1f1ba36f7f38d4cf (diff)
downloadMageMacs-1cfc60020997353e5f14d632a29a4dcd4db25329.tar.gz
MageMacs-1cfc60020997353e5f14d632a29a4dcd4db25329.zip
improve sql support with lsp and better secret management
Diffstat (limited to '')
-rw-r--r--magemacs-sql.el68
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
+