Emacs:如何在sql-interactive-mode中为不同的RDBM创建yasnippets

时间:2014-08-18 06:36:31

标签: emacs yasnippet sql-interactive-mode

我使用sql-interactive-mode连接到2个数据库:MySQL和SQLite。我在yasnippets/sql-interactive-mode文件夹中为mysql创建了yasnippets。例如,要在MySQL中添加一列,我使用以下代码段:

# -*- mode: snippet -*-
# name: Add column
# key: addcol
# --
ALTER TABLE $1 ADD COLUMN \`$2\` $3;

但SQLite使用不同的语法。如何为不同的数据库创建不同的yasnippets?

1 个答案:

答案 0 :(得分:4)

正如here所解释的那样,您可以将任意Emacs Lisp代码(包含在反引号中)添加到yasnippet代码段中,这些代码段将在展开时进行评估。在sql-modesql-interactive-mode中有一个名为sql-product的变量,您可以检查该变量以确定哪种类型的数据库(mysqlsqlitepostgres等等。你目前正在与之合作。

这基本上就是你需要知道的。以下是如何修改addcol代码段的示例:

# ...
ALTER TABLE $1 `(if (eq sql-product 'mysql) "ADD" "FROB")` COLUMN \`$2\` $3;

这将扩展为

ALTER TABLE $1 ADD COLUMN \`$2\` $3;

代表mysql

ALTER TABLE $1 FROB COLUMN \`$2\` $3;

用于其他类型的数据库。