DataStax C++ Cassandra Вложенные UDT
В драйвере 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);
Кто-нибудь знает, почему это так? Сама Кассандра, кажется, допускает вложенные UDT.
- Что-то не так с тем, как я устанавливаю поля UDT?
- Разве вложение драйвера UDT невозможно в драйвере C++? Для чего нужна функция cass_user_type_set_user_type(), если это так?
1 ответ
Я изменил вышеупомянутое, чтобы вместо этого получить определяемый пользователем тип из схемы Cassandra. Моя первоначальная проблема заключалась в использовании такого типа.
Проблема в конечном итоге стала проблемой чувствительности к регистру.
По некоторым причинам некоторые вызовы в драйвере DataStax C++ чувствительны к регистру, например cass_keyspace_meta_user_type_by_name, а некоторые не такие, как cass_user_type_set_user_type_by_name.
DataStax C++ действительно допускает вложенные UDT. Просто будьте осторожны с их именами при определении их в Кассандре.