emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/drupal-mode 36ea4003da 259/308: Merge pull request #65 fro


From: ELPA Syncer
Subject: [nongnu] elpa/drupal-mode 36ea4003da 259/308: Merge pull request #65 from joddie/feature/sql-cli
Date: Tue, 25 Jan 2022 10:59:52 -0500 (EST)

branch: elpa/drupal-mode
commit 36ea4003dafdaea75d3ccf802c2b0ec19b44b11d
Merge: b59ad24b6e 72c533c619
Author: Arne Jørgensen <arne@arnested.dk>
Commit: Arne Jørgensen <arne@arnested.dk>

    Merge pull request #65 from joddie/feature/sql-cli
    
    Add `drupal-drush-sql-cli` command
---
 drupal-mode.el | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/drupal-mode.el b/drupal-mode.el
index 63d32732ef..8ddda9b6b4 100644
--- a/drupal-mode.el
+++ b/drupal-mode.el
@@ -36,6 +36,8 @@
 (require 'cl)
 (require 'php-mode)
 (require 'format-spec)
+(require 'json)
+(require 'sql)
 
 ;; Silence byte compiler.
 (defvar css-indent-level)
@@ -239,7 +241,8 @@ get better filling in Doxygen comments."
     (?f . drupal-insert-function)
     (?m . drupal-module-name)
     (?e . drupal-drush-php-eval)
-    (?t . drupal-wrap-string-in-t-function))
+    (?t . drupal-wrap-string-in-t-function)
+    (?s . drupal-drush-sql-cli))
   "Map of mnemonic keys and functions for keyboard shortcuts.
 See `drupal-mode-map'.")
 
@@ -428,6 +431,10 @@ of the project)."
   [menu-bar drupal cache-clear]
   '(menu-item "Clear all caches" drupal-drush-cache-clear
               :enable (and drupal-rootdir drupal-drush-program)))
+(define-key drupal-mode-map
+  [menu-bar drupal sql-cli]
+  '(menu-item "Open SQL shell" drupal-drush-sql-cli
+    :enable (and drupal-rootdir drupal-drush-program)))
 
 (define-key drupal-mode-map
   [menu-bar drupal drupal-project drupal-project-bugs]
@@ -519,6 +526,48 @@ buffer."
         (search-forward-regexp "\\(\"\\|'\\)")
         (insert ")")))))
 
+(defun drupal-drush-sql-cli ()
+  "Run a SQL shell using \"drush sql-cli\" in a SQL-mode comint buffer."
+  (interactive)
+  (let* ((json-object-type 'plist)
+         (config
+          (json-read-from-string
+           (with-temp-buffer
+             (call-process drupal-drush-program nil t nil
+                           "sql-conf" "--format=json")
+             (buffer-string)))))
+    (when (not config)
+      (error "No Drupal SQL configuration found."))
+    (destructuring-bind (&key database driver &allow-other-keys) config
+      (let ((sql-interactive-product
+             (drupal--db-driver-to-sql-product driver))
+            (start-buffer (current-buffer))
+            (sqli-buffer
+             (make-comint (format "SQL (%s)" database)
+                          drupal-drush-program nil "sql-cli")))
+        (with-current-buffer sqli-buffer
+          (sql-interactive-mode)
+          (set (make-local-variable 'sql-buffer)
+               (buffer-name (current-buffer)))
+
+          ;; Set `sql-buffer' in the start buffer
+          (with-current-buffer start-buffer
+            (when (derived-mode-p 'sql-mode)
+              (setq sql-buffer (buffer-name sqli-buffer))
+              (run-hooks 'sql-set-sqli-hook)))
+
+          ;; All done.
+          (run-hooks 'sql-login-hook)
+          (pop-to-buffer sqli-buffer))))))
+
+(defun drupal--db-driver-to-sql-product (driver)
+  "Translate a Drupal DB driver name into a sql-mode symbol."
+  (let ((driver (intern driver)))
+    (cond
+      ((eq driver 'pgsql) 'postgres)
+      ((assq driver sql-product-alist) driver)
+      (t 'ansi))))
+
 
 
 (defvar drupal-form-id-history nil



reply via email to

[Prev in Thread] Current Thread [Next in Thread]