DataStax C++ Cassandra 嵌套 UDT
DataStax C++ Cassandra Nested UDTs
在 DataStax C++ 驱动程序中,我尝试将一个用户类型设置为另一个用户类型(嵌套 UDT)。
但是,由于某种原因,我在尝试将一个用户定义类型的字段设置为另一个用户定义类型时出错。
CassDataType* outerDataType = cass_data_type_new_udt(1);
cass_data_type_add_sub_value_type_by_name(outerDataType, "OUTER_FIELD", CASS_VALUE_TYPE_UDT);
CassUserType* outerUserType = cass_user_type_new_from_data_type(outerDataType);
CassDataType* innerDataType = cass_data_type_new_udt(1);
cass_data_type_add_sub_value_type_by_name(innerDataType, "INNER_FIELD", CASS_VALUE_TYPE_INT);
CassUserType* innerUserType = cass_user_type_new_from_data_type(innerDataType);
// Bind values to user type fields
// No error, CASS_OK
CassError err = cass_user_type_set_int32_by_name(innerUserType, "INNER_FIELD", 32);
// CASS_ERROR_LIB_INVALID_VALUE_TYPE
err = cass_user_type_set_user_type_by_name(outerUserType, "OUTER_FIELD", innerUserType);
// Error: Invalid value type
printf(cass_error_desc(err));
cass_data_type_free(innerDataType);
cass_data_type_free(outerDataType);
cass_user_type_free(innerUserType);
cass_user_type_free(outerUserType);
有人知道为什么会这样吗? Cassandra 本身似乎允许嵌套的 UDT。
- 我设置 UDT 字段的方式有问题吗?
- 在 C++ 驱动程序中嵌套 UDT 是不可能的吗?如果是这种情况,函数 cass_user_type_set_user_type() 的作用是什么?
我更改了上面的内容,改为从 Cassandra 架构中获取用户定义的类型。我最初的问题涉及使用这种类型。
问题最终成为区分大小写的问题。
由于某些原因,DataStax C++ 驱动程序中的某些调用区分大小写,例如 cass_keyspace_meta_user_type_by_name,而某些则不区分大小写,例如 cass_user_type_set_user_type_by_name.
DataStax C++ 确实允许嵌套的 UDT。在 Cassandra 中定义它们时请注意它们的名称。
在 DataStax C++ 驱动程序中,我尝试将一个用户类型设置为另一个用户类型(嵌套 UDT)。
但是,由于某种原因,我在尝试将一个用户定义类型的字段设置为另一个用户定义类型时出错。
CassDataType* outerDataType = cass_data_type_new_udt(1);
cass_data_type_add_sub_value_type_by_name(outerDataType, "OUTER_FIELD", CASS_VALUE_TYPE_UDT);
CassUserType* outerUserType = cass_user_type_new_from_data_type(outerDataType);
CassDataType* innerDataType = cass_data_type_new_udt(1);
cass_data_type_add_sub_value_type_by_name(innerDataType, "INNER_FIELD", CASS_VALUE_TYPE_INT);
CassUserType* innerUserType = cass_user_type_new_from_data_type(innerDataType);
// Bind values to user type fields
// No error, CASS_OK
CassError err = cass_user_type_set_int32_by_name(innerUserType, "INNER_FIELD", 32);
// CASS_ERROR_LIB_INVALID_VALUE_TYPE
err = cass_user_type_set_user_type_by_name(outerUserType, "OUTER_FIELD", innerUserType);
// Error: Invalid value type
printf(cass_error_desc(err));
cass_data_type_free(innerDataType);
cass_data_type_free(outerDataType);
cass_user_type_free(innerUserType);
cass_user_type_free(outerUserType);
有人知道为什么会这样吗? Cassandra 本身似乎允许嵌套的 UDT。
- 我设置 UDT 字段的方式有问题吗?
- 在 C++ 驱动程序中嵌套 UDT 是不可能的吗?如果是这种情况,函数 cass_user_type_set_user_type() 的作用是什么?
我更改了上面的内容,改为从 Cassandra 架构中获取用户定义的类型。我最初的问题涉及使用这种类型。
问题最终成为区分大小写的问题。
由于某些原因,DataStax C++ 驱动程序中的某些调用区分大小写,例如 cass_keyspace_meta_user_type_by_name,而某些则不区分大小写,例如 cass_user_type_set_user_type_by_name.
DataStax C++ 确实允许嵌套的 UDT。在 Cassandra 中定义它们时请注意它们的名称。