2017-08-22 4 views
0

DataStax C++ドライバでは、ユーザタイプを別のユーザタイプ(ネストされたUDT)に設定しようとしています。DataStax C++ Cassandraネストされた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()に対応していますか?

答えて

0

代わりに、カサンドラスキーマからユーザー定義型を取得するように上記を変更しました。私の元の問題は、このようなタイプを使用することでした。

この問題は、大文字と小文字の区別の問題となりました。

何らかの理由のためにいくつかは、cass_user_type_set_user_type_by_nameとしてではないが、DataStax C++ドライバで特定の呼び出しは、cass_keyspace_meta_user_type_by_nameように、大文字と小文字が区別されます。

DataStax C++では実際にネストされたUDTが使用できます。カサンドラでそれらの名前を定義する際には、その名前に注意してください。

関連する問題