Estoy usando sql-interactive-mode
y necesito un back-end de la Compañía que complete las palabras clave de SQL, y preferiblemente, también los nombres de columna / tabla de la base de datos utilizada.
Cuando busqué alguna terminación, para mi sorpresa, todavía no había un back-end para SQL. Encontré este fragmento , pero eso no funcionó correctamente.
Es posible que aún no exista, y podría crear un propio back-end para SQL. Pero me resulta difícil creer que no haya un backend de la Compañía para uno de los idiomas más comunes.
company-mode
sql-interactive-mode
sql-mode
ReneFroger
fuente
fuente
company-dabbrev
, supongo?company-keywords.el
, ¡así que siéntase libre de contribuir! Y sí, el backend dabbrev que atraparía (y todo lo demás en su memoria intermedia) ...Respuestas:
Tuve un problema similar y decidí crear mi propio backend. Uno de los backends existentes (C ++?) Se usó como plantilla y lo modifiqué para crear el nuevo back-end que se comporta como un diccionario.
En mi configuración, los buffers SQLi se nombran automáticamente para que coincidan con la base de datos a la que se está conectando, por ejemplo.
*DB:DBASE1DM*
. El backend contiene una lista para cada base de datos con esquemas, tablas y columnas. Cuando quiero completar algo, el nombre del búfer se usa para obtener la lista correcta de candidatos para esa base de datos.Esto tiene el inconveniente de que no es una finalización inteligente y que incluir nuevas bases de datos o realizar modificaciones en las bases de datos existentes es un proceso manual. Se pueden usar un par de consultas para recopilar los datos y luego no es muy difícil darles masajes en el formato necesario para el backend.
La siguiente función maneja la conexión a una base de datos y el cambio de los nombres de los buffers para que coincidan con la base de datos que está conectada.
fuente
(add-to-list 'company-backends 'ry/company-sql) (add-to-list 'company-backends 'ry/company-sql-alist)
, tengo el siguiente error enM-x sql-mysql
después de probar una palabra:Company: An error occurred in auto-begin Args out of range: "*SQL*", 4, -3
. ¿Cómo podría interpretar este mensaje de error?*DB:
sufijo y el entorno del nombre del búfer para obtener el nombre de la base de datos, de modo que se use la lista correcta de finalizaciones. La función supone que el nombre del búfer para las terminaciones estará en el formulario*DB:ACCOUNTSDM*
. La subcadena se extraeríaACCOUNTS
del nombre del búfer.mysql
lugar de hacerlodb2
. Pero su contribución es muy apreciada, por lo que he validado su respuesta. Gracias por eso.