使用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}}"(
在该值为"0"的情况下是否应该是单引号的;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 %}
)";
这有可能以某种方式实现吗?
模板中的这个构造根据值";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 )