O cliente MariaDB não possui prompt no modo sql do Emacs

4

Acabei de atualizar de um antigo cliente MySQL para mariadb-clients-10.0.21-3 no Arch Linux. Após a atualização, não vejo mais um prompt ao usar a função sql-mysql do Emacs.

Parece que mysql está armazenando em buffer o prompt, porque ele aparece na primeira linha de saída:

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

Em todos os casos, a linha antes de " MySQL [dbname]> " é o que eu digitei. ( ... indica saída omitida.)

Como posso fazer com que o prompt seja exibido corretamente? Experimentei a opção -n de mysql ; não teve efeito. Se eu executar mysql em um terminal, tudo funcionará bem.

    
por cjm 02.10.2015 / 17:25

3 respostas

5

Você esqueceu de escapar dos caracteres especiais. Elisp-regex é bastante barra invertida desde que o primeiro \ é engolido pela string lisp. Consulte o link

Para pegar o MariaDB e o MySQL eu tenho isso na minha configuração:

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

    
por 21.07.2016 / 11:24
2

O problema é que o prompt não corresponde ao que o sql-mode está esperando. O MariaDB usa "MySQL [dbname] >" como seu prompt padrão, e sql-mode somente permite "mysql >".

Portanto, uma correção é adicionar "--prompt = mysql >" a sql-mysql-options :

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

Um melhor seria corrigir o regexp para permitir um estilo de prompt. Mas estou tendo alguma dificuldade para fazer isso funcionar, então eu recompensarei a recompensa se alguém postar como fazer isso.

Eu tentei

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

mas não funciona a menos que o prompt seja "mysql >" ou "MySQL >".

    
por 05.10.2015 / 23:47
0

Se você adicionar a .emacs, faça o seguinte:

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

O (require 'sql) é necessário para que a função de recurso conjunto de produtos do SQL se torne disponível globalmente.

    
por 14.09.2017 / 12:18