我正在使用mysql-x-devapi,需要将一行插入到表中,并将服务器的UNIX_TIMESTAMP()放在列中:
sql_client_.getSession().getDefaultSchema()
.getTable("event")
.insert("title", "time")
.values("event title", "UNIX_TIMESTAMP()")
.execute();这段代码给出了: CDK错误:第1行“时间”列的不正确整数值'UNIX_TIMESTAMP()‘
如何使用xdevapi (而不是需要sql字符串的sql命令)来完成这个任务?
在更新表时,我能够在mysqlx::expr("UNIX_TIMESTAMP()")函数中使用set。同样的方法不适用于insert,但如果出现以下错误,则会失败:
/usr/include/mysql-cppconn-8/mysqlx/devapi/table_crud.h:157:17: error: ‘mysqlx::abi2::r0::internal::Expression::Expression(V&&) [with V = mysqlx::abi2::r0::internal::Expression&]’ is private within this context
157 | add_values(get_impl(), rest...);发布于 2022-06-29 04:52:45
我用了mysqlx::expr("UNIX_TIMESTAMP()")
sql_client_.getSession().getDefaultSchema()
.getTable("event")
.insert("title", "time")
.values("event title", mysqlx::expr("UNIX_TIMESTAMP()"))
.execute();然后通过触摸修正编译错误:
/usr/include/mysql-cppconn-8/mysqlx/devapi/table_crud.h取代:
template<typename... Types>
TableInsert& values(Types... rest)
{
try {
add_values(get_impl(), rest...);
return *this;
}
CATCH_AND_WRAP
}通过以下方式:
template<typename... Types>
TableInsert& values(Types&&... rest)
{
try {
add_values(get_impl(), std::forward<Types>(rest)...);
return *this;
}
CATCH_AND_WRAP
}/usr/include/mysql-cppconn-8/mysqlx/devapi/detail/crud.h取代:
template <typename... T>
static void add_values(Impl *impl, T... args)
{
Add_value::Impl row{ {}, 0 };
Args_processor<Add_value>::process_args(&row, args...);
Add_row::process_one(impl, row.first);
}通过以下方式:
template <typename... T>
static void add_values(Impl *impl, T&&... args)
{
Add_value::Impl row{ {}, 0 };
Args_processor<Add_value>::process_args(&row, std::forward<T>(args)...);
Add_row::process_one(impl, row.first);
}发布于 2022-06-28 14:01:37
X DevAPI用户指南提供了一些关于应该支持或不支持什么的提示。在这种情况下,正如您可以从功能定义文档中看到的那样,values()方法需要一个Literal,因此,甚至mysqlx.expr()都无法工作。
在您的示例中,查看错误消息,这意味着time列可能是某种INTEGER数据类型。给定"UNIX_TIMESTAMP()"是一个字符串(因为表达式没有被计算),它不会以任何方式被胁迫,并且只对其他列数据类型(如VARCHAR )起作用。
理论上,据我所知,没有什么能真正阻止API允许计算表达式。X协议适用于那,但我不完全确定X插件本身也是如此。我建议您使用public MySQL 虫追踪器和相应的类别(可能是MySQL Connectors: Document Store: DevAPI)来请求该特性。
免责声明:我是MySQL X DevAPI连接器Node.js的主要开发人员
https://stackoverflow.com/questions/72779225
复制相似问题