Estou usando sql-interactive-mode
e preciso de um back-end da empresa que complete palavras-chave SQL e, de preferência, também nomes de colunas / tabelas do banco de dados usado.
Ao procurar por alguma conclusão, para minha surpresa, ainda não havia back-end para SQL. Encontrei esse trecho , mas não funcionou corretamente.
É possível que ainda não exista, e talvez eu crie um back-end para SQL. Mas acho difícil acreditar que não haja back-end da empresa para um dos idiomas mais comuns.
company-mode
sql-interactive-mode
sql-mode
ReneFroger
fonte
fonte
company-dabbrev
eu acho?company-keywords.el
, então fique à vontade para contribuir! E sim, o backend dabbrev iria pegar isso (e tudo o mais no seu buffer) ...Respostas:
Eu tive um problema semelhante e decidi criar meu próprio back-end. Um dos back-ends existentes (C ++?) Foi usado como modelo e eu o modifiquei para criar o novo back-end que se comporta como um dicionário.
Na minha configuração, os buffers do SQLi são nomeados automaticamente para corresponder ao banco de dados ao qual está sendo conectado, por exemplo.
*DB:DBASE1DM*
. O back-end contém uma lista para cada banco de dados com os esquemas, tabelas e colunas. Quando eu quero concluir algo, o nome do buffer é usado para obter a lista correta de candidatos para esse banco de dados.Isso tem a desvantagem de não ser uma conclusão inteligente e que incluir novos bancos de dados ou fazer modificações nos bancos de dados existentes é um processo manual. Algumas consultas podem ser usadas para coletar os dados e, em seguida, não é muito difícil utilizá-los no formato necessário para o back-end.
A função abaixo trata da conexão com um banco de dados e da alteração dos nomes dos buffers para corresponder ao banco de dados ao qual está conectado.
fonte
(add-to-list 'company-backends 'ry/company-sql) (add-to-list 'company-backends 'ry/company-sql-alist)
, eu tenho o seguinte erro noM-x sql-mysql
depois de tentar uma palavra:Company: An error occurred in auto-begin Args out of range: "*SQL*", 4, -3
. Como eu poderia interpretar essa mensagem de erro?*DB:
sufixo e environment do nome do buffer para obter o nome do banco de dados para que a lista correta de conclusões seja usada. A função supõe que o nome do buffer para conclusões esteja no formulário*DB:ACCOUNTSDM*
. A substring seria retiradaACCOUNTS
do nome do buffer.mysql
vez dedb2
. Como sua contribuição é realmente apreciada, validei sua resposta. Obrigado por isso.