微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

libpqxx准备好的语句非空检查指针类型

如何解决libpqxx准备好的语句非空检查指针类型

我是sql整体和libpqxx的新手。我正在尝试构建一个基本应用程序,我只需要使用准备好的语句来执行非常简单的作业即可。 我已经从libpxx 4.0版本开始,并且实现了如下代码

pqxx::work txn( *conn );
auto result = txn.prepared( "my_insert" )( x->getId( ),x->isIdSet( ) )( x->getUser( ),x->isUserSet( ) )(x->getCreatedAt( ),x->isCreatedAtSet( ) ).exec( );
txn.commit();

现在,我不得不更改为6.4版,并意识到不赞成使用预准备功能,而我应该使用exec_prepared函数。好的。但是我真的错过了“ nonnull”条件。出于某些原因,我使用了大量的指针,并且需要一种方便的方法将这些值传递给数据库API。我可以这样写:

auto result = txn.exec_prepared( "my_insert",(x->isIdSet() ? std::to_string(x-getId()) : "null"),....);

这在某些情况下可能有效,但是当我尝试将“ null”作为字符串插入smallint字段时,出现sql错误(尽管这是合理的)。 由于类型不同,我不能使用?:运算符在true分支上返回string / int / etc ...,在false分支上返回nullptr。

我找不到有关该库的适当文档。他们有一个文档here,但是如果您想了解有关某个特定功能的更多信息,那么那里根本就没有任何内容

老实说,即使弃用的.prepared(...)函数在我的6.4中也无法正常使用。我尝试使用txn.prepared("whatever")(y->z->getA(),y->z != nullptr).exec()格式,当y是有效的非null指针类型而z是null指针时,出现了分段错误。我希望该函数在检查条件之前不会触及该值,但显然并非如此。

我有一个带有8个参数的准备好的语句,其中6个是指针类型(shared_ptr),如果我不得不想出一个荒谬的解决方案来逐个检查所有参数,并且不得不写200行只是为了能够正确调用函数

有人在那里有适当的解决方案吗?正如我提到的,我是新手,所以我可能会错过其中的重要部分。请帮帮我^^

解决方法

我知道这个问题很老了。但这是你要做的:

const auto& id{ x->isIdSet()
    ? std::optional<std::string>{x-getId()} : std::nullopt };
auto result{ txn.exec_prepared("my_insert",id,....) };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。