如何绑定到 Cassandra C++ 驱动程序中的 UDT 集合
How to bind to a collection of UDT in Cassandra C++ driver
我有一个 table,其中有一列类型为 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()
returns NULL。 udt 不为 NULL。
从cass_collection_new_from_data_type()
的源代码来看,这个函数returns NULL 如果参数是!is_collection()
,而我的显然不是。那么这个函数 cass_collection_new_from_data_type()
应该这样做吗?我应该如何获得要绑定的 CassCollection*?
谢谢。
您需要指定真正的集合类型,而不是您的用户定义类型:
CassCollection* phone = cass_collection_new(CASS_COLLECTION_TYPE_LIST, 5);
其余的保持原样。以 examples/udt/udt.c 为例。
我有一个 table,其中有一列类型为 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()
returns NULL。 udt 不为 NULL。
从cass_collection_new_from_data_type()
的源代码来看,这个函数returns NULL 如果参数是!is_collection()
,而我的显然不是。那么这个函数 cass_collection_new_from_data_type()
应该这样做吗?我应该如何获得要绑定的 CassCollection*?
谢谢。
您需要指定真正的集合类型,而不是您的用户定义类型:
CassCollection* phone = cass_collection_new(CASS_COLLECTION_TYPE_LIST, 5);
其余的保持原样。以 examples/udt/udt.c 为例。