diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index de393c79357d5a848d8763c62a0ea81d3c369f22..13e1582526147b23928af8ead07711b873bc1a53 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -633,45 +633,39 @@ int32_t tscGetDataBlockFromList(void* pHashList, SDataBlockList* pDataBlockList, static void trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock) { int32_t firstPartLen = 0; - - STableMeta* pTableMeta = pTableDataBlock->pTableMeta; + + STableMeta* pTableMeta = pTableDataBlock->pTableMeta; STableComInfo tinfo = tscGetTableInfo(pTableMeta); - SSchema* pSchema = tscGetTableSchema(pTableMeta); - + SSchema* pSchema = tscGetTableSchema(pTableMeta); + + SSubmitBlk* pBlock = pDataBlock; memcpy(pDataBlock, pTableDataBlock->pData, sizeof(SSubmitBlk)); pDataBlock += sizeof(SSubmitBlk); - - int32_t total = sizeof(int32_t)*2; - for(int32_t i = 0; i < tinfo.numOfColumns; ++i) { - switch (pSchema[i].type) { - case TSDB_DATA_TYPE_NCHAR: - case TSDB_DATA_TYPE_BINARY: { - assert(0); // not support binary yet - firstPartLen += sizeof(int32_t);break; - } - default: - firstPartLen += tDataTypeDesc[pSchema[i].type].nSize; - total += tDataTypeDesc[pSchema[i].type].nSize; - } + + int32_t flen = 0; + for (int32_t i = 0; i < tinfo.numOfColumns; ++i) { + flen += TYPE_BYTES[pSchema[i].type]; } - + char* p = pTableDataBlock->pData + sizeof(SSubmitBlk); - - SSubmitBlk* pBlock = (SSubmitBlk*) pTableDataBlock->pData; - int32_t rows = htons(pBlock->numOfRows); - - for(int32_t i = 0; i < rows; ++i) { - *(int32_t*) pDataBlock = total; - pDataBlock += sizeof(int32_t); - - // *(int32_t*) pDataBlock = firstPartLen; - // pDataBlock += sizeof(int32_t); - - memcpy(pDataBlock, p, pTableDataBlock->rowSize); - - p += pTableDataBlock->rowSize; - pDataBlock += pTableDataBlock->rowSize; + pBlock->len = 0; + for (int32_t i = 0; i < htons(pBlock->numOfRows); ++i) { + SDataRow trow = (SDataRow)pDataBlock; + dataRowSetLen(trow, TD_DATA_ROW_HEAD_SIZE + flen); + + int toffset = 0; + for (int32_t j = 0; j < tinfo.numOfColumns; j++) { + tdAppendColVal(trow, p, pSchema[j].type, pSchema[j].bytes, toffset); + toffset += TYPE_BYTES[pSchema[j].type]; + p += pSchema[j].bytes; + } + + // p += pTableDataBlock->rowSize; + pDataBlock += dataRowLen(trow); + pBlock->len += dataRowLen(trow); } + + pBlock->len = htonl(pBlock->len); } int32_t tscMergeTableDataBlocks(SSqlObj* pSql, SDataBlockList* pTableDataBlockList) { diff --git a/src/common/src/tdataformat.c b/src/common/src/tdataformat.c index 80dbcef3518e2f069beb4d8d152022043b559aa0..1af7c2359e5cdeea9f2edba256095080b6257892 100644 --- a/src/common/src/tdataformat.c +++ b/src/common/src/tdataformat.c @@ -174,7 +174,7 @@ int tdAppendColVal(SDataRow row, void *value, int8_t type, int32_t bytes, int32_ if (value == NULL) { *(int32_t *)dataRowAt(row, toffset) = -1; } else { - int16_t slen = (type) ? strlen((char *)value) : wcslen((wchar_t *)value) * TSDB_NCHAR_SIZE; + int16_t slen = (type) ? strnlen((char *)value, bytes) : wcsnlen((wchar_t *)value, bytes/TSDB_NCHAR_SIZE) * TSDB_NCHAR_SIZE; if (slen > bytes) return -1; *(int32_t *)dataRowAt(row, toffset) = dataRowLen(row);