diff --git a/src/vnode/common/inc/schema.h b/src/vnode/common/inc/schema.h index 62b642894e3b89edba4d7160135d64e7f298eace..c8ac6e7f6740043b31c44907e98665894a315c34 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; - -// Schema with version -typedef struct { - int32_t version; // Schema with version - int32_t numOfCols; - int32_t numOfTags; - SVColumn *columns; -} SVSchema; - -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); - +/* Inline schema definition + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + * | int32_t | | | | | | | | + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + * | len | SSchema | SColumn | ... | SColumn | col1_name | ... | colN_name | + * +---------+---------+---------+-----+---------+-----------+-----+-----------+ + */ +typedef char *SISchema + +// ---- 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) + +// ---- 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 c36d7fd43aecc1ec18d12f1bcd43ba3e20ece05f..c7cf10c52c3456b44696341a09222eda27a61d5e 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_