Код: Выделить всё
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
Как я могу правильно получить количество строк, фактически вставленных путем добавления!, когда целью является распределенная таблица (где возвращаемым значением является словарь)?
Среда:
- Версия DolphinDB: 3.0.0.4
- Плагин, написанный на C++
- Целевые таблицы могут находиться как в памяти, так и распределены (таблицы DFS)
Подробнее: https://stackoverflow.com/questions/799 ... in-a-dolph
Мобильная версия