代码之家  ›  专栏  ›  技术社区  ›  Eddy Pronk

如何创建Emacs SQL缓冲区?

  •  3
  • Eddy Pronk  · 技术社区  · 14 年前

    我可以通过执行以下操作手动连接:

    M-X SQL Postgres

    并键入用户、数据库、主机、服务器

    我想做些类似的事情:

    (连接foo(用户“me”)(数据库“bar”)(主机“earth”))

    目前的解决方案:

    我从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'参数,所以我暂时把它硬编码了。 这是“sql.el中的postgres”。

    (sql-create-buffer bar-profile)
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   Kilian Foth    14 年前

    似乎包不打算非交互使用(可能是为了阻止将登录信息写入init文件,这是一个非常合理的原则)。

    但是,如果您真的想避免回答这些问题,可以简单地重新定义查询函数,如下所示:

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