【问题标题】:DataStax C++ Cassandra Nested UDTsDataStax C++ Cassandra 嵌套 UDT
【发布时间】:2018-01-31 06:40:28
【问题描述】:

在 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() 的用途是什么?

【问题讨论】:

    标签: c++ cassandra nested datastax user-defined-types


    【解决方案1】:

    我更改了上述内容,改为从 Cassandra 架构中获取用户定义类型。我最初的问题涉及使用这种类型。

    问题最终成为区分大小写的问题。

    由于某些原因,DataStax C++ 驱动程序中的某些调用区分大小写,例如 cass_keyspace_meta_user_type_by_name,而有些则不区分大小写,例如 cass_user_type_set_user_type_by_name

    DataStax C++ 确实允许嵌套 UDT。在 Cassandra 中定义它们时请注意它们的名称。

    【讨论】:

      猜你喜欢
      • 2015-04-18
      • 2017-03-07
      • 2021-06-08
      • 2015-05-16
      • 2021-03-22
      • 2020-07-14
      • 2020-08-02
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多