Невозможно обновить UDT с помощью gocqlx

Привет, у меня есть вариант использования, в котором пользователь может создать вторичный индекс для любой таблицы, вызвав API. И я записываю эти индексы в общую таблицу, используя Map<text, Frozen>, где индексы — это тип, определяемый пользователем:

CREATE TYPE indexes (
    local BOOLEAN,
    index_name TEXT,
    table_name TEXT,
    columns SET<TEXT>
);

При вызове API создается вторичный индекс. Эта часть работает нормально. А вот обновление строки в общих таблицах — нет. Все данные в UDT сохраняются как нулевые:

 {'table_table1_20e24b85_d425_11e_int13_idx': {local: null, name: null, table_name: null, columns: null}}

Вот мой код Go с реализацией gocqlx (config.GetScylla() возвращает сеанс gocqlx):

selectedTable.Indexes[indexName] = models.IndexModel{
    Local:     reqBody.Local,
    Name:      indexName,
    TableName: selectedTable.InternalName,
    Columns:   reqBody.Columns,
}

stmt, names = qb.Update("tables").Set("indexes").
    Where(qb.Eq("internal_name"), qb.Eq("name"), qb.Eq("description")).ToCql()
if err := config.GetScylla().Query(stmt, names).BindStruct(&selectedTable).ExecRelease(); err != nil {
    utils.HandleErrorResponse(c, err)
    return
}

Я надеюсь, что код достаточно понятен, но все, что я делаю, это создаю карту строк->индексов (UDT) для помещения в общую таблицу и обновляю с ее помощью общую таблицу.

Примечание: почему документация по gocqlx такая плохая?

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

неважно, после того, как я застрял на этом в течение 2 дней (я новичок в работе со Scylla (в том числе с расширением cassandra), я обнаружил, что определение тегов cql необходимо для пользовательских типов. Это не для таблиц, а для пользовательских типов.

type IndexModel struct {
    Local     bool     
    Name      string   
    TableName string   
    Columns   []string 
}

стал

type IndexModel struct {
    Local     bool     `cql:"local"`
    Name      string   `cql:"name"`
    TableName string   `cql:"table_name"`
    Columns   []string `cql:"columns"`
}

Другие вопросы по теме