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;