diff --git a/src/common/inc/dataformat.h b/src/common/inc/dataformat.h index c263f4128b7c2c70e386b3a1537f51cbdac7e92d..76b5317b3553db797efd34c74a5c640ae1af521d 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 ce07afd17d082787fd77ebb16b4eb95ffc54ebc2..c6fd4af28428ac0d7264922be915f5ad3d0016c8 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 14b4d593fb9f2a614c804db3dcd8537b87aae6a7..2f4aa6ab765c71fa841ff5246e3e88ae37fd054b 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 757fd10017355ec0435323ebd9792c7851ec6ded..34a712dc0fb21bf73b9a3cdff721dadd154713b7 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++) { + } }