在C++模板引擎库inja中检测字符串值的条件(用于SQL插入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}}"(

在该值为"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    )

相关内容

  • 没有找到相关文章

最新更新