簡體   English   中英

在 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 中,我可以使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM