From 53eb1bd0f465490523170bcc6cf8817fe6aff4d3 Mon Sep 17 00:00:00 2001 From: hzcheng Date: Mon, 27 Apr 2020 11:50:55 +0800 Subject: [PATCH] TD-166 --- src/client/src/tscUtil.c | 60 ++++++++++++++++-------------------- src/common/src/tdataformat.c | 2 +- 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index de393c7935..13e1582526 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 80dbcef351..1af7c2359e 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); -- GitLab