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 () быть, если это так?

0

Решение

Я изменил вышеупомянутое, чтобы вместо этого получить определяемый пользователем тип из схемы Cassandra. Моя первоначальная проблема заключалась в использовании такого типа.

Проблема в конечном итоге стала проблемой чувствительности к регистру.

По некоторым причинам некоторые вызовы в драйвере DataStax C ++ чувствительны к регистру, например, cass_keyspace_meta_user_type_by_name, в то время как некоторые не такие как cass_user_type_set_user_type_by_name.

DataStax C ++ действительно допускает вложенные UDT. Просто будьте осторожны с их именами при определении их в Кассандре.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]