From bf5586b4de61dd3fb8051ed9763ff4478d4dc707 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 11 Feb 2020 17:31:19 +0800 Subject: [PATCH] more --- src/vnode/common/inc/schema.h | 64 +++++++++++++++++++++-------------- src/vnode/common/inc/type.h | 2 ++ 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/vnode/common/inc/schema.h b/src/vnode/common/inc/schema.h index 62b642894e..c8ac6e7f67 100644 --- a/src/vnode/common/inc/schema.h +++ b/src/vnode/common/inc/schema.h @@ -3,40 +3,54 @@ #include -#include "tstring.h" #include "type.h" -typedef struct _scolumn { - tstring_t colName; // column name - td_datatype_t type; // data type - int32_t bytes; // number of bytes +// Column definition +// TODO: if we need to align the structure +typedef struct { + td_datatype_t type; // Column type + int32_t colId; // column ID + int32_t bytes; // column bytes + char * colName; // the column name } SColumn; -typedef struct SSchema { - int32_t numOfCols; +// Schema definition +typedef struct { + int32_t version; // schema version, it is used to change the schema + int32_t numOfCols; + int32_t numOfTags; + int32_t colIdCounter; SColumn *columns; } SSchema; -// Column with version -typedef struct { - tstring_t colName; - td_datatype_t type; - int32_t colId; - int32_t bytes; -} SVColumn; +/* Inline schema definition + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + * | int32_t | | | | | | | | + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + * | len | SSchema | SColumn | ... | SColumn | col1_name | ... | colN_name | + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + */ +typedef char *SISchema -// Schema with version -typedef struct { - int32_t version; // Schema with version - int32_t numOfCols; - int32_t numOfTags; - SVColumn *columns; -} SVSchema; +// ---- operation on SColumn +#define TD_COLUMN_TYPE(pCol) ((pCol)->type) +#define TD_COLUMN_ID(pCol) ((pCol)->colId) +#define TD_COLUMN_BYTES(pCol) ((pCol)->bytes) +#define TD_COLUMN_NAME(pCol) ((pCol)->colName) -int32_t tdAddColumnToSchema(tstring_t pSchema, SColumn col); - -td_datatype_t tdGetTypeOfCol(SSchema *pSchema, int32_t col); -int32_t tdGetLengthOfCol(SSchema *pSchema, int32_t col); +// ---- operation on SSchema +#define TD_SCHEMA_VERSION(pSchema) ((pSchema)->version) +#define TD_SCHEMA_NCOLS(pSchema) ((pSchema)->numOfCols) +#define TD_SCHEMA_NTAGS(pSchema) ((pSchema)->numOfTags) +#define TD_SCHEMA_TOTAL_COLS(pSchema) (TD_SCHEMA_NCOLS(pSchema) + TD_SCHEMA_NTAGS(pSchema)) +#define TD_SCHEMA_NEXT_COLID(pSchema) ((pSchema)->colIdCounter++) +#define TD_SCHEMA_COLS(pSchema) ((pSchema)->columns) +#define TD_SCHEMA_TAGS(pSchema) (TD_SCHEMA_COLS(pSchema) + TD_SCHEMA_NCOLS(pSchema)) +#define TD_SCHEMA_COLUMN_AT(pSchema, idx) TD_SCHEMA_COLS(pSchema)[idx] +#define TD_SCHEMA_TAG_AT(pSchema, idx) TD_SCHEMA_TAGS(pSchema)[idx] +// ---- operation on SISchema +#define TD_ISCHEMA_LEN(pISchema) *((int32_t *)(pISchema)) +#define TD_ISCHEMA_SCHEMA(pISchema) ((SSchema *)((pISchema) + sizeof(int32_t))) #endif // _TD_SCHEMA_H_ diff --git a/src/vnode/common/inc/type.h b/src/vnode/common/inc/type.h index c36d7fd43a..c7cf10c52c 100644 --- a/src/vnode/common/inc/type.h +++ b/src/vnode/common/inc/type.h @@ -29,4 +29,6 @@ typedef enum : uint8_t { #define TD_DATATYPE_NCHAR_NULL #define TD_DATATYPE_BINARY_NULL +#define TD_IS_VALID_DATATYPE(type) (((type) > TD_DATA_TYPE_INVLD) && ((type) <= TD_DATATYPE_BINARY)) + #endif // _TD_TYPE_H_