如何绑定到Cassandra C ++驱动程序

时间:2018-01-11 22:13:04

标签: c++ cassandra datastax

我有一个类型为LIST<FROZEN<custom_type>的列的表,其中custom_type是UDT,用户定义的类型(CREATE TYPE custom_type...)。

在Datastax C ++驱动程序中,如何将值绑定到此列?

我试图:

CassDataType* udt = cass_keyspace_meta_user_type_by_name("keyspace_name", "custom_type");
CassCollection* coll = cass_collection_new_from_data_type("custom_type", 5);
for (int ii = 0; ii < 5; ++ii)
{
    CassUserType* usr = cass_user_type_new_from_data_type(udt);
    cass_user_type_set_string_by_name(usr, "udt_name_1", data[ii].stringvalue);
    cass_user_type_set_int32_by_name(usr, "udt_name_2", data[ii].intvalue);
    cass_collection_append_user_type(coll, usr);
    cass_user_type_free(usr);
}
cass_statement_bind_collection_by_name(stmt, "column_name", coll);

此代码在第二行失败,其中cass_collection_new_from_data_type()返回NULL。 udt不是NULL。

cass_collection_new_from_data_type()的源代码中,如果参数为!is_collection(),则此函数返回NULL,但我的显然不是。{那么这个函数cass_collection_new_from_data_type()应该这样做吗?我怎么能让CassCollection *绑定到?

感谢。

1 个答案:

答案 0 :(得分:2)

您需要指定真实的集合类型,而不是用户定义的类型:

x

并将其余部分保留原样。请参阅examples/udt/udt.c作为示例。