Skip to content

DBNova 实现了一个简单的 SQL 语句拆分功能。不考虑具体的 SQL 语法,只根据;进行拆分,同时考虑参数、注释和字符串及其转义。

  • 参数的声明为${paramname}。参数的其他属性,类型、默认值等需要以注释的形式提供, 参见SQL 参数参数说明

  • 单行注释以--开头,直到行尾。

  • 多行注释以/*开头,以*/结尾,且不支持嵌套。

  • 字符串可以使用单引号'或双引号"括起来,且支持转义。为了支持更多的数据库,所以实现的很宽泛。但是实际上的具体的数据库 在处理字符串时,都不太一致。用户需要根据具体的数据库来注意使用正确的引号和转义字符(或者尽量避免使用复杂的字符串字面量)。

    例如:'hello world'"hello world"'hello\nworld'"hello "" world", 'hello '' world',以上都是 DBNova 认为合 法的字符串字面量。

参见下面的测试用例:

sql
-- comment 1
SELECT '${mock_param}' AS "quoted;semicolon", -- commit 2
       t.name
FROM users t
WHERE t.id = ${user_id} /* 这是一个多行注释

params注释指令的顺序是无所谓的。
@param user_id / int / default=12

注意: 不支持嵌套的多行注释。
                           包含分号 ; 也不应断开 */
  AND t.bio = 'I''m a developer\nwith "high" hopes;';

-- 下一条语句
UPDATE settings SET val = 1;