2010-03-25 4 views
3

я могу подключиться вручную, выполнив:Как создать буфер Emacs SQL?

Mx SQL-Postgres

и введите пользователя, базы данных, хост, сервер

Я хотел бы сделать что-то вроде:

(подключение -foo (пользователь "меня") (база данных "бар") (принимающая "земля"))

Решение до сих пор:

Я схватил некоторые гр ode из sql.el и изменил его, чтобы я мог использовать его не интерактивно.

(defun sql-create-buffer (profile) 
    "derived from sql-product-interactive in sql.el which is" 
    "covered by GNU General Public License version 3." 

    (setq sql-user  (cdr (assoc 'user profile)) 
     sql-password (cdr (assoc 'password profile)) 
     sql-server (cdr (assoc 'server profile)) 
     sql-database (cdr (assoc 'database profile))) 
    (setq product 'postgres) ;;(cdr (assoc 'product profile))) 
    (when (sql-product-feature :sqli-connect product) 
    (if (comint-check-proc "*SQL*") 
    (pop-to-buffer "*SQL*") 
     ;; Connect to database. 
     (message "Login...") 
     (funcall (sql-product-feature :sqli-connect product)) 
     ;; Set SQLi mode. 
     (setq sql-interactive-product product) 
     (setq sql-buffer (current-buffer)) 
     (sql-interactive-mode) 
     ;; All done. 
     (message "Login...done") 
     (pop-to-buffer sql-buffer)))) 

(setq bar-profile '(
     (product . "postgres") 
     (user  . "me") 
     (password . "") 
     (server . "earth") 
     (database . "bar"))) 

Я не знаю, что делать с параметром 'product', поэтому я оставил его жестко закодированным. Это «postgres» в sql.el.

(sql-create-buffer bar-profile) 

ответ

5

Кажется, что пакет не предназначен для использования в неинтерактивно (вероятно, чтобы препятствовать пишущие данные входа в файлы инициализации, который является совершенно доброкачественным принципом).

Однако, если вы действительно хотите, чтобы избежать ответов на вопросы, вы можете просто переопределить функцию запроса, например:

(defun sql-get-login (&rest what) 
    (setq sql-user  "me" 
     sql-password "secret" 
     sql-server "localhost" 
     sql-database "MyDB")) 
+0

Спасибо. Я схватил часть кода и пытаюсь использовать его не интерактивно. –

+0

Спасибо. У меня подобная проблема с Sybase. Я попробую ваше решение. У меня есть мой пароль irc в моем .emacs, который, как и наши серверы db, в любом случае находится за брандмауэром. –

Смежные вопросы