如何在编译时检测 C++ 代码中的 SQL 错误

How to detect SQL errors in c++ code at compile time

本文关键字:代码 SQL 错误 C++ 检测 编译      更新时间:2023-10-16

所以,我希望SQL错误阻止C++代码成功构建。

我的想法是通过一些 cmake 脚本或将 crep 文件用于 SQL 并验证 SQL 的东西进行编译。

我知道我可以添加某种运行时错误检查,但我不希望以下代码成功构建(不是关于 pqxx 的问题,而是一般C++ SQL 错误(:

#include <iostream>
#include <pqxx/pqxx>
using namespace std;
using namespace pqxx;
int main() {
    connection conn("dbname=d user=u");
    conn.prepare("invalid_sql", "SELECT 1 FROM WHERE a = $1");
    nontransaction txn(conn);
    txn.prepared("invalid_sql")(1.0).exec();
    cout << "the process already died due to invalid SQL" << endl;
    return 0;
}
你可以

,有点...

一种方法是 Boost meta_parsing,另一种方法是使用 C++11 的用户定义文本类型。我找不到SQL的工作示例,但也许随着C++11的成熟,有人会想出一个。

结束这个问题。 另一个答案很好,但这不是我所做的。

我决定做的是将准备好的语句放在 init_sql(( 方法中,并使用 boost/test/unit_test.hpp 对带有 jenkins 的复制数据库调用它,该数据库提供单元测试失败的通知。