Saya menggunakan sql-interactive-mode
, dan saya membutuhkan backend Perusahaan yang akan menyelesaikan kata kunci SQL, dan lebih disukai, juga nama kolom / tabel dari database yang digunakan.
Ketika mencari-cari penyelesaian, mengejutkan saya, belum ada backend untuk SQL. Saya menemukan cuplikan ini , tetapi itu tidak berfungsi dengan baik.
Mungkin belum ada, dan saya mungkin membuat backend sendiri untuk SQL. Tetapi saya merasa sulit untuk percaya bahwa tidak ada backend Perusahaan untuk salah satu bahasa yang paling umum.
company-mode
sql-interactive-mode
sql-mode
ReneFroger
sumber
sumber
company-dabbrev
saya kira?company-keywords.el
, jadi silakan berkontribusi! Dan ya, backend dabbrev akan menangkap itu (dan segala sesuatu di buffer Anda) ...Jawaban:
Saya memiliki masalah yang sama dan memutuskan untuk membuat backend saya sendiri. Salah satu backend yang ada (C ++?) Digunakan sebagai templat dan saya memodifikasinya untuk membuat back end baru yang berperilaku seperti kamus.
Dalam pengaturan saya, buffer SQLi secara otomatis dinamai sesuai dengan database yang sedang terhubung, misalnya.
*DB:DBASE1DM*
. Backend berisi daftar untuk setiap database dengan skema, tabel, dan kolom. Ketika saya ingin menyelesaikan sesuatu, nama buffer digunakan untuk mendapatkan daftar kandidat yang tepat untuk database itu.Ini memiliki kelemahan bahwa itu bukan penyelesaian yang cerdas dan termasuk database baru atau membuat modifikasi ke database yang ada adalah proses manual. Beberapa pertanyaan dapat digunakan untuk mengumpulkan data dan kemudian tidak terlalu sulit untuk memijatnya ke dalam format yang diperlukan untuk backend.
Fungsi di bawah ini menangani koneksi ke database dan mengubah nama buffer agar sesuai dengan database yang terhubung.
sumber
(add-to-list 'company-backends 'ry/company-sql) (add-to-list 'company-backends 'ry/company-sql-alist)
, saya mendapat error berikut dalamM-x sql-mysql
setelah mencoba kata:Company: An error occurred in auto-begin Args out of range: "*SQL*", 4, -3
. Bagaimana saya bisa menafsirkan pesan kesalahan ini?*DB:
sufiks lingkungan dan dari nama buffer untuk mendapatkan nama database sehingga daftar penyelesaian yang benar digunakan. Fungsi ini mengasumsikan bahwa nama buffer untuk penyelesaian akan berada dalam formulir*DB:ACCOUNTSDM*
. Substring akan menarikACCOUNTS
dari nama buffer.mysql
bukandb2
. Tetapi kontribusi Anda sangat dihargai, jadi saya memvalidasi balasan Anda. Terima kasih untuk itu.