From 7e0ece016a1a1636d63b0c422b8c3066a5700d45 Mon Sep 17 00:00:00 2001 From: hzcheng Date: Thu, 12 Mar 2020 17:20:52 +0800 Subject: [PATCH] refactor and add more --- src/common/inc/dataformat.h | 7 +++++-- src/common/src/dataformat.c | 31 ++++++++++++++++++++++++++---- src/common/src/ttypes.c | 4 ++-- src/vnode/tsdb/tests/tsdbTests.cpp | 3 +++ 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/common/inc/dataformat.h b/src/common/inc/dataformat.h index c263f4128b..76b5317b35 100644 --- a/src/common/inc/dataformat.h +++ b/src/common/inc/dataformat.h @@ -79,14 +79,17 @@ void tdUpdateSchema(STSchema *pSchema); */ typedef void *SDataRow; +#define TD_DATA_ROW_HEAD_SIZE sizeof(int32_t) + #define dataRowLen(r) (*(int32_t *)(r)) -#define dataRowTuple(r) ((char *)(r) + sizeof(int32_t)) +#define dataRowTuple(r) ((char *)(r) + TD_DATA_ROW_HEAD_SIZE) #define dataRowSetLen(r, l) (dataRowLen(r) = (l)) #define dataRowIdx(r, i) ((char *)(r) + i) #define dataRowCpy(dst, r) memcpy((dst), (r), dataRowLen(r)) SDataRow tdNewDataRow(int32_t bytes); -// SDataRow tdNewDdataFromSchema(SSchema *pSchema); +int tdMaxRowBytesFromSchema(STSchema *pSchema); +SDataRow tdNewDataRowFromSchema(STSchema *pSchema); void tdFreeDataRow(SDataRow row); // int32_t tdAppendColVal(SDataRow row, void *value, SColumn *pCol, int32_t suffixOffset); void tdDataRowCpy(void *dst, SDataRow row); diff --git a/src/common/src/dataformat.c b/src/common/src/dataformat.c index ce07afd17d..c6fd4af284 100644 --- a/src/common/src/dataformat.c +++ b/src/common/src/dataformat.c @@ -178,10 +178,33 @@ SDataRow tdNewDataRow(int32_t bytes) { return row; } -// SDataRow tdNewDdataFromSchema(SSchema *pSchema) { -// int32_t bytes = tdMaxRowDataBytes(pSchema); -// return tdNewDataRow(bytes); -// } +/** + * Get maximum bytes a data row from a schema + * ASSUMPTIONS: VALID PARAMETER + */ +int tdMaxRowBytesFromSchema(STSchema *pSchema) { + // TODO + int bytes = TD_DATA_ROW_HEAD_SIZE; + for (int i = 0; i < schemaNCols(pSchema); i++) { + STColumn *pCol = schemaColAt(pSchema, i); + bytes += TYPE_BYTES[pCol->type]; + + if (pCol->type == TSDB_DATA_TYPE_BINARY || pCol->type == TSDB_DATA_TYPE_NCHAR) { + bytes += pCol->bytes; + } + } + + return bytes; +} + +SDataRow tdNewDataRowFromSchema(STSchema *pSchema) { + int bytes = 0; + { + // TODO: estimiate size from schema + } + + return tdNewDataRow(bytes); +} /** * Free the SDataRow object diff --git a/src/common/src/ttypes.c b/src/common/src/ttypes.c index 14b4d593fb..2f4aa6ab76 100644 --- a/src/common/src/ttypes.c +++ b/src/common/src/ttypes.c @@ -26,9 +26,9 @@ const int32_t TYPE_BYTES[11] = { sizeof(int64_t), // TSDB_DATA_TYPE_BIGINT sizeof(float), // TSDB_DATA_TYPE_FLOAT sizeof(double), // TSDB_DATA_TYPE_DOUBLE - -1, // TSDB_DATA_TYPE_BINARY + sizeof(int32_t), // TSDB_DATA_TYPE_BINARY sizeof(TSKEY), // TSDB_DATA_TYPE_TIMESTAMP - -1 // TSDB_DATA_TYPE_NCHAR + sizeof(int32_t) // TSDB_DATA_TYPE_NCHAR }; tDataTypeDescriptor tDataTypeDesc[11] = { diff --git a/src/vnode/tsdb/tests/tsdbTests.cpp b/src/vnode/tsdb/tests/tsdbTests.cpp index 757fd10017..34a712dc0f 100644 --- a/src/vnode/tsdb/tests/tsdbTests.cpp +++ b/src/vnode/tsdb/tests/tsdbTests.cpp @@ -34,5 +34,8 @@ TEST(TsdbTest, createRepo) { tsdbCreateTable(pRepo, &tCfg); // 3. Loop to write some simple data + SDataRow row = tdNewDataRowFromSchema(schema); + for (int i = 0; i < nCols; i++) { + } } -- GitLab