web-dev-qa-db-ja.com

MariaDBクライアントにはEmacssql-modeでプロンプトがありません

Arch Linuxで古いMySQLクライアントから mariadb-clients-10.0.21- にアップグレードしました。アップグレード後、Emacsのsql-mysql関数を使用するときにプロンプ​​トが表示されなくなりました。

mysqlは、出力の最初の行に表示されるため、プロンプトをバッファリングしているようです。

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 19662
Server version: 4.1.11-standard-log

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

show tables;
MySQL [dbname]> +---------------------------------------------------------+
| Tables_in_dbname                                           |
+---------------------------------------------------------+
...
+---------------------------------------------------------+
80 rows in set (0.02 sec)

help
MySQL [dbname]> 
General information about MariaDB can be found at
http://mariadb.org

List of all MySQL commands:
...
For server side help, type 'help contents'

?
MySQL [dbname]> 
General information about MariaDB can be found at
http://mariadb.org

List of all MySQL commands:
...
For server side help, type 'help contents'

exit
MySQL [dbname]> Bye

いずれの場合も、「MySQL [dbname]>」の前の行が入力したものです。 (...は、省略した出力を示します。)

プロンプトを正しく表示するにはどうすればよいですか?mysql-nオプションを試しました。効果はありませんでした。ターミナルでmysqlを実行すると、正常に動作します。

7
cjm

特殊文字をエスケープするのを忘れました。 Elisp-regexは、最初の\がLISP文字列に飲み込まれているため、かなりバックスラッシュが重いです。 https://www.emacswiki.org/emacs/RegularExpression を参照してください

MariaDBとMySQLをキャッチするために、構成にこれがあります。

(sql-set-product-feature 'mysql :Prompt-regexp "^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")

6
dakra

問題は、プロンプトがsql-modeが期待しているものと一致しないことであることが判明しました。 MariaDBはデフォルトのプロンプトとして「MySQL [dbname]>」を使用し、sql-modeは「mysql>」のみを許可します。

したがって、1つの修正は、「-Prompt = mysql>」をsql-mysql-optionsに追加することです。

(setq sql-mysql-options '("--Prompt=mysql> "))

より良い方法は、いずれかのプロンプトスタイルを許可するように正規表現を修正することです。しかし、それを機能させるのに少し苦労しているので、誰かがそれを行う方法を投稿した場合、私は賞金を授与します。

私はもう試した

(sql-set-product-feature 'mysql :Prompt-regexp "^[mM]y[sS][qQ][lL][^>]*> ")

ただし、プロンプトが「mysql>」または「MySQL>」でない限り機能しません。

2
cjm

.emacsに追加する場合は、次のようにします。

(require 'sql)
(sql-set-product-feature 'mysql :Prompt-regexp 
            "^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")

(require 'sql)は、sql-set-product-feature関数がグローバルに使用可能になるために必要です。

2
EoghanM