如何在Cassandra C ++ DataStax中绑定十进制类型

时间:2019-02-08 19:28:18

标签: c++ cassandra

我正在使用DataStax Cassandra驱动程序 我正在尝试将问题行插入cassandra表中。 如果表是十进制类型,则为列之一。我的查询是

插入表格(id,价格)值(?,?)

我准备语句cass_session_prepare,然后绑定 cass_statement_bind_int32_by_name ID。

当我尝试绑定小数时,问题开始了。该方法的原型是

  CassError cass_statement_bind_decimal ( statement, index, varint, varint_size, scale )

其中varint是指向字节的指针,varint_size字节数,而scale是小数位数。

所以,最后我的问题是如何计算应该传递给该方法的字节数组的内容? 首先,我天真地认为,如果我仅传递数字的字符表示形式(“ 1234.56”),它将起作用。但是我当然不工作。 现在,我了解到我应该传递的字节数组在Java中称为BigInteger。但是我不知道如何将字符串或双精度数转换为这个BigInteger数组。我认为Cassandra驱动程序API不能提供任何可以帮助我进行此转换的东西。 因此,如果有人可以帮助我解决这个问题,我将不胜感激

1 个答案:

答案 0 :(得分:2)

您可以利用许多库来执行转换:

如果您研究DataStax C / C ++驱动程序的集成测试,您会发现使用BigNumber implementation库的基本OpenSSL BIGNUM。此实现不执行算术运算,但可以让您轻松地将字节数组(带有比例)转换为BigNumber以进行比较和显示。

注意:众所周知,OpenSSL BIGNUM实现比许多其他库慢。在使用GMP库的DataStax PHP driver GitHub repository中可以找到更完整的实现。