Skip to content

SQL 和 Typescript 中的参数都是相同的实现,只是声明方式不同。

声明

在 SQL 中只有一个参数的命名空间,即在不同的查询中参数是共享的。

sql
-- @param uid
-- @type uint
-- @label 用户ID
-- @default 34
select * from `user` where id = ${uid};

delete from `user` where id = ${uid};

在 Typescript 中,则可以以变量的形式传递。

typescript
redisshell((cli) => {
  const params_key = params.string("key", { default: "hello" });
  const parmas_value = params.string("value", { default: "world" });

  cli.get(params_key);

  cli.set(params_key, parmas_value);
});

在 SQL 中,声明多个参数:

sql
-- @param uid
-- @type uint

-- @param name

-- @param info
-- @kind json

在 SQL 中使用@sameas

sql
-- @param uid
-- @type uint
-- @label 用户ID
-- @default 34
select * from `user` where id = ${uid};

-- @param delete_uid
-- @sameas uid
-- @label 需要删除的用户ID

delete from `user` where id = ${delete_uid};

字符串参数

字符串是参数的默认类型。

字符串参数额外提供两种类型,jsontextarea,以方便输入较长的内容。

sql
-- @param txt
-- @kind json
select ${txt};

时间参数

时间参数可以指定格式化模板和时区。

sql
-- @param timev
-- @type datetime
-- @layout YYYY-MM-DD HH:mm:ss
-- @timezone db
select ${timev};

layout的格式参见day.js format。 也支持一些简写:datetime, date, time, unix, unixms, unixns, ansic, unixdate, rfc3339, rfc3339nano, rfc1123, rfc1123z, 其中unix, unixms, unixns的输出为数字,其余都为字符串。

timezone默认为计算机的本地时区,设置为db时会尝试查询并使用数据库的时区。 其他的值,例如utcasia/shanghai等,请参见mdn