Как получить фактическое количество вставленных строк при записи в таблицу в функции плагина DolphinDB?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как получить фактическое количество вставленных строк при записи в таблицу в функции плагина DolphinDB?

Сообщение Anonymous »

Я разрабатываю плагин DolphinDB, и мне нужно записать данные либо в таблицу в памяти, либо в распределенную таблицу. В плагине я вызываю встроенную функцию add! для выполнения записи и хочу получить фактическое количество вставленных строк. Ниже приведена упрощенная версия моего кода:

Код: Выделить всё

static FunctionDefSP appendFunc = heap->currentSession()->getFunctionDef("append!");
vector appendArgs = {destTable, batchTable};
int insertedRows = 0;
ConstantSP ret = appendFunc->call(heap, appendArgs);
insertedRows = ret->getInt();   // This fails with an error
Однако при выполнении этого кода я получаю сообщение об ошибке:

Ошибка добавления в DolphinDB: объект невозможно преобразовать в скаляр int.

После отладки я обнаружил, что ret на самом деле является словарем (когда целевая таблица является распределенной таблицей), поэтому getInt() нельзя использовать напрямую. Затем я попытался извлечь количество строк из словаря, используя:

Код: Выделить всё

ConstantSP keys = ret->getKeys();
ConstantSP firstCol = ret->getMember(keys->get(0));
insertedRows = ((VectorSP)firstCol)->size();   // Not correct
Но это возвращает количество строк исходной таблицы (

Код: Выделить всё

batchTable
), а не фактически вставленные строки. Более того, возвращаемое значение кажется постоянным независимо от того, была ли запись успешной или нет.
Я также попытался использовать встроенную функцию matchedRowCount на основе документации, в которой говорится, что matchedRowCount возвращает количество строк, на которые повлиял последний оператор INSERT INTO, DELETE или UPDATE в текущем сеансе. Мой код выглядит следующим образом:
static FunctionDefSP matchedRowCountFunc = heap->currentSession()->getFunctionDef("matchedRowCount");

Код: Выделить всё

appendFunc->call(heap, appendArgs);   // Execute tableInsert first
vector emptyArgs;
ConstantSP ret = matchedRowCountFunc->call(heap, emptyArgs);
insertedRows = ret->getInt();   // Always returns 0
Однако вставленные строки всегда равны 0, даже если запись прошла успешно.
Как я могу правильно получить количество строк, фактически вставленных путем добавления!, когда целью является распределенная таблица (где возвращаемым значением является словарь)?
Среда:
  • Версия DolphinDB: 3.0.0.4
  • Плагин, написанный на C++
  • Целевые таблицы могут находиться как в памяти, так и распределены (таблицы DFS)
Будем очень признательны за любые рекомендации.>

Подробнее: https://stackoverflow.com/questions/799 ... in-a-dolph
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»