[英]condition for detecting string value in C++ template engine library inja (for SQL insertion of NULL)
使用 C++ 模板引擎庫
https://github.com/pantor/inja
在 SQL 中,我可以使用 VARCHAR SQL 類型列在數據庫中插入名為“col1”的行
std::string my_template = "INSERT INTO [my_table] (col1) VALUES ('my_value');"
要注意 SQL VARCHAR 類型需要單引號
“我的價值”
插入 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 %}
)";
這有可能以某種方式實現嗎?
模板中的此構造根據值為“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 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.