提问人:Pedro Vicente 提问时间:7/24/2022 最后编辑:Pedro Vicente 更新时间:7/28/2022 访问量:201
在 C++ 模板引擎库 inja 中检测字符串值的条件(用于 SQL 插入 NULL)
condition for detecting string value in C++ template engine library inja (for SQL insertion of NULL)
问:
使用 C++ 模板引擎库
https://github.com/pantor/inja
在 SQL 中,我可以在数据库中插入一行,其中包含名为“col1”的 VARCHAR SQL 类型列
std::string my_template = "INSERT INTO [my_table] (col1) VALUES ('my_value');"
请注意,SQL VARCHAR 类型需要单引号
“my_value”
若要插入 SQL NULL 值,则不指定单引号
"INSERT INTO [my_table] (col1) VALUES (NULL);"
我有一个模板,其中的值是单引号的,它允许插入字符串值,例如
std::string insert_template =
"INSERT INTO [my_table] (col1) VALUES ( '{{my_value}}' )";
nlohmann::json json;
json["my_value"] = "some_value";
std::string sql = inja::render(insert_template, json);
调用模板,并暂定插入 SQL NULL 作为
nlohmann::json json;
json["my_value"] = "NULL";
不正确,因为字符串是单引号的,导致 SQL 插入 将“NULL”作为 4 个字符的字符串,而不是 SQL NULL 值
问题
我怎样才能创建一个条件来检测参数是否 '{{my_value}}' )
如果值为“NULL”,则是否应该单引号?
将模板定义为(非单引号)
std::string insert_template =
"INSERT INTO [my_table] (col1) VALUES ( {{my_value}} )";
适用于 NULL 值,但不适用于字符串
所以,我想要类似的东西(在伪 INJA 语法中)
std::string insert_template =
"INSERT INTO [my_table] (col1) VALUES (
{% if my_value == NULL %}
{{my_value}}
{% else %}
'{{my_value}}'
{% endif %}
)";
这有可能以某种方式实现吗?
答:
0赞
Pedro Vicente
7/28/2022
#1
模板中的此构造根据值为“NULL”选择是否引用版本
nlohmann::json json4;
json4["name"] = "NULL";
std::string template5 = "INSERT INTO [my_table] (col1) VALUES ( \
{%if name == \"NULL\"%}\
{{name}}\
{%else%}\
'{{name}}'\
{%endif%}\
)";
std::string rendered5 = inja::render(template5, json4);
std::cout << rendered5 << std::endl;
呈现的字符串是
INSERT INTO [my_table] (col1) VALUES ( NULL )
上一个:控制越来越 NULL mf
评论
"NULL"
std::optional<std::string>
inja::render()