3832 lines
		
	
	
		
			108 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			3832 lines
		
	
	
		
			108 KiB
		
	
	
	
		
			C
		
	
	
	
/*
 | 
						|
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 | 
						|
 *
 | 
						|
 * This program is free software: you can use, redistribute, and/or modify
 | 
						|
 * it under the terms of the GNU Affero General Public License, version 3
 | 
						|
 * or later ("AGPL"), as published by the Free Software Foundation.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but WITHOUT
 | 
						|
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Affero General Public License
 | 
						|
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _TD_COMMON_TAOS_MSG_H_
 | 
						|
#define _TD_COMMON_TAOS_MSG_H_
 | 
						|
 | 
						|
#include "taosdef.h"
 | 
						|
#include "taoserror.h"
 | 
						|
#include "tarray.h"
 | 
						|
#include "tcoding.h"
 | 
						|
#include "tencode.h"
 | 
						|
#include "thash.h"
 | 
						|
#include "tlist.h"
 | 
						|
#include "tname.h"
 | 
						|
#include "trow.h"
 | 
						|
#include "tuuid.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* ------------------------ MESSAGE DEFINITIONS ------------------------ */
 | 
						|
#define TD_MSG_NUMBER_
 | 
						|
#undef TD_MSG_DICT_
 | 
						|
#undef TD_MSG_INFO_
 | 
						|
#undef TD_MSG_SEG_CODE_
 | 
						|
#include "tmsgdef.h"
 | 
						|
 | 
						|
#undef TD_MSG_NUMBER_
 | 
						|
#undef TD_MSG_DICT_
 | 
						|
#undef TD_MSG_INFO_
 | 
						|
#define TD_MSG_SEG_CODE_
 | 
						|
#include "tmsgdef.h"
 | 
						|
 | 
						|
#undef TD_MSG_NUMBER_
 | 
						|
#undef TD_MSG_DICT_
 | 
						|
#undef TD_MSG_INFO_
 | 
						|
#undef TD_MSG_SEG_CODE_
 | 
						|
#include "tmsgdef.h"
 | 
						|
 | 
						|
extern char*   tMsgInfo[];
 | 
						|
extern int32_t tMsgDict[];
 | 
						|
 | 
						|
#define TMSG_SEG_CODE(TYPE) (((TYPE)&0xff00) >> 8)
 | 
						|
#define TMSG_SEG_SEQ(TYPE)  ((TYPE)&0xff)
 | 
						|
#define TMSG_INFO(TYPE)                                                                                                \
 | 
						|
  ((TYPE) < TDMT_DND_MAX_MSG || (TYPE) < TDMT_MND_MAX_MSG || (TYPE) < TDMT_VND_MAX_MSG || (TYPE) < TDMT_SCH_MAX_MSG || \
 | 
						|
   (TYPE) < TDMT_STREAM_MAX_MSG || (TYPE) < TDMT_MON_MAX_MSG || (TYPE) < TDMT_SYNC_MAX_MSG) ||                         \
 | 
						|
          (TYPE) < TDMT_VND_STREAM_MSG || (TYPE) < TDMT_VND_TMQ_MSG || (TYPE) < TDMT_VND_TMQ_MAX_MSG                   \
 | 
						|
      ? tMsgInfo[tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE)]                                                   \
 | 
						|
      : 0
 | 
						|
 | 
						|
#define TMSG_INDEX(TYPE) (tMsgDict[TMSG_SEG_CODE(TYPE)] + TMSG_SEG_SEQ(TYPE))
 | 
						|
 | 
						|
typedef uint16_t tmsg_t;
 | 
						|
 | 
						|
static inline bool tmsgIsValid(tmsg_t type) {
 | 
						|
  if (type < TDMT_DND_MAX_MSG || type < TDMT_MND_MAX_MSG || type < TDMT_VND_MAX_MSG || type < TDMT_SCH_MAX_MSG ||
 | 
						|
      type < TDMT_STREAM_MAX_MSG || type < TDMT_MON_MAX_MSG || type < TDMT_SYNC_MAX_MSG || type < TDMT_VND_STREAM_MSG ||
 | 
						|
      type < TDMT_VND_TMQ_MSG || type < TDMT_VND_TMQ_MAX_MSG) {
 | 
						|
    return true;
 | 
						|
  } else {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
}
 | 
						|
static inline bool vnodeIsMsgBlock(tmsg_t type) {
 | 
						|
  return (type == TDMT_VND_CREATE_TABLE) || (type == TDMT_VND_ALTER_TABLE) || (type == TDMT_VND_DROP_TABLE) ||
 | 
						|
         (type == TDMT_VND_UPDATE_TAG_VAL) || (type == TDMT_VND_ALTER_CONFIRM) || (type == TDMT_VND_COMMIT) ||
 | 
						|
         (type == TDMT_SYNC_CONFIG_CHANGE);
 | 
						|
}
 | 
						|
 | 
						|
static inline bool syncUtilUserCommit(tmsg_t msgType) {
 | 
						|
  return msgType != TDMT_SYNC_NOOP && msgType != TDMT_SYNC_LEADER_TRANSFER;
 | 
						|
}
 | 
						|
 | 
						|
/* ------------------------ OTHER DEFINITIONS ------------------------ */
 | 
						|
// IE type
 | 
						|
#define TSDB_IE_TYPE_SEC         1
 | 
						|
#define TSDB_IE_TYPE_META        2
 | 
						|
#define TSDB_IE_TYPE_MGMT_IP     3
 | 
						|
#define TSDB_IE_TYPE_DNODE_CFG   4
 | 
						|
#define TSDB_IE_TYPE_NEW_VERSION 5
 | 
						|
#define TSDB_IE_TYPE_DNODE_EXT   6
 | 
						|
#define TSDB_IE_TYPE_DNODE_STATE 7
 | 
						|
 | 
						|
enum {
 | 
						|
  CONN_TYPE__QUERY = 1,
 | 
						|
  CONN_TYPE__TMQ,
 | 
						|
  CONN_TYPE__UDFD,
 | 
						|
  CONN_TYPE__MAX,
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
  HEARTBEAT_KEY_USER_AUTHINFO = 1,
 | 
						|
  HEARTBEAT_KEY_DBINFO,
 | 
						|
  HEARTBEAT_KEY_STBINFO,
 | 
						|
  HEARTBEAT_KEY_TMQ,
 | 
						|
};
 | 
						|
 | 
						|
typedef enum _mgmt_table {
 | 
						|
  TSDB_MGMT_TABLE_START,
 | 
						|
  TSDB_MGMT_TABLE_DNODE,
 | 
						|
  TSDB_MGMT_TABLE_MNODE,
 | 
						|
  TSDB_MGMT_TABLE_MODULE,
 | 
						|
  TSDB_MGMT_TABLE_QNODE,
 | 
						|
  TSDB_MGMT_TABLE_SNODE,
 | 
						|
  TSDB_MGMT_TABLE_BNODE,  // no longer used
 | 
						|
  TSDB_MGMT_TABLE_CLUSTER,
 | 
						|
  TSDB_MGMT_TABLE_DB,
 | 
						|
  TSDB_MGMT_TABLE_FUNC,
 | 
						|
  TSDB_MGMT_TABLE_INDEX,
 | 
						|
  TSDB_MGMT_TABLE_STB,
 | 
						|
  TSDB_MGMT_TABLE_STREAMS,
 | 
						|
  TSDB_MGMT_TABLE_TABLE,
 | 
						|
  TSDB_MGMT_TABLE_TAG,
 | 
						|
  TSDB_MGMT_TABLE_COL,
 | 
						|
  TSDB_MGMT_TABLE_USER,
 | 
						|
  TSDB_MGMT_TABLE_GRANTS,
 | 
						|
  TSDB_MGMT_TABLE_VGROUP,
 | 
						|
  TSDB_MGMT_TABLE_TOPICS,
 | 
						|
  TSDB_MGMT_TABLE_CONSUMERS,
 | 
						|
  TSDB_MGMT_TABLE_SUBSCRIPTIONS,
 | 
						|
  TSDB_MGMT_TABLE_TRANS,
 | 
						|
  TSDB_MGMT_TABLE_SMAS,
 | 
						|
  TSDB_MGMT_TABLE_CONFIGS,
 | 
						|
  TSDB_MGMT_TABLE_CONNS,
 | 
						|
  TSDB_MGMT_TABLE_QUERIES,
 | 
						|
  TSDB_MGMT_TABLE_VNODES,
 | 
						|
  TSDB_MGMT_TABLE_APPS,
 | 
						|
  TSDB_MGMT_TABLE_STREAM_TASKS,
 | 
						|
  TSDB_MGMT_TABLE_PRIVILEGES,
 | 
						|
  TSDB_MGMT_TABLE_MAX,
 | 
						|
} EShowType;
 | 
						|
 | 
						|
#define TSDB_ALTER_TABLE_ADD_TAG             1
 | 
						|
#define TSDB_ALTER_TABLE_DROP_TAG            2
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_TAG_NAME     3
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_TAG_VAL      4
 | 
						|
#define TSDB_ALTER_TABLE_ADD_COLUMN          5
 | 
						|
#define TSDB_ALTER_TABLE_DROP_COLUMN         6
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES 7
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_TAG_BYTES    8
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_OPTIONS      9
 | 
						|
#define TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME  10
 | 
						|
#define TSDB_ALTER_TABLE_ADD_TAG_INDEX       11
 | 
						|
#define TSDB_ALTER_TABLE_DROP_TAG_INDEX      12
 | 
						|
 | 
						|
#define TSDB_FILL_NONE        0
 | 
						|
#define TSDB_FILL_NULL        1
 | 
						|
#define TSDB_FILL_NULL_F      2
 | 
						|
#define TSDB_FILL_SET_VALUE   3
 | 
						|
#define TSDB_FILL_SET_VALUE_F 4
 | 
						|
#define TSDB_FILL_LINEAR      5
 | 
						|
#define TSDB_FILL_PREV        6
 | 
						|
#define TSDB_FILL_NEXT        7
 | 
						|
 | 
						|
#define TSDB_ALTER_USER_PASSWD                 0x1
 | 
						|
#define TSDB_ALTER_USER_SUPERUSER              0x2
 | 
						|
#define TSDB_ALTER_USER_ADD_READ_DB            0x3
 | 
						|
#define TSDB_ALTER_USER_REMOVE_READ_DB         0x4
 | 
						|
#define TSDB_ALTER_USER_ADD_WRITE_DB           0x5
 | 
						|
#define TSDB_ALTER_USER_REMOVE_WRITE_DB        0x6
 | 
						|
#define TSDB_ALTER_USER_ADD_ALL_DB             0x7
 | 
						|
#define TSDB_ALTER_USER_REMOVE_ALL_DB          0x8
 | 
						|
#define TSDB_ALTER_USER_ENABLE                 0x9
 | 
						|
#define TSDB_ALTER_USER_SYSINFO                0xA
 | 
						|
#define TSDB_ALTER_USER_ADD_SUBSCRIBE_TOPIC    0xB
 | 
						|
#define TSDB_ALTER_USER_REMOVE_SUBSCRIBE_TOPIC 0xC
 | 
						|
#define TSDB_ALTER_USER_ADD_READ_TABLE         0xD
 | 
						|
#define TSDB_ALTER_USER_REMOVE_READ_TABLE      0xE
 | 
						|
#define TSDB_ALTER_USER_ADD_WRITE_TABLE        0xF
 | 
						|
#define TSDB_ALTER_USER_REMOVE_WRITE_TABLE     0x10
 | 
						|
#define TSDB_ALTER_USER_ADD_ALL_TABLE          0x11
 | 
						|
#define TSDB_ALTER_USER_REMOVE_ALL_TABLE       0x12
 | 
						|
 | 
						|
#define TSDB_ALTER_USER_PRIVILEGES 0x2
 | 
						|
 | 
						|
#define TSDB_KILL_MSG_LEN 30
 | 
						|
 | 
						|
#define TSDB_TABLE_NUM_UNIT 100000
 | 
						|
 | 
						|
#define TSDB_VN_READ_ACCCESS  ((char)0x1)
 | 
						|
#define TSDB_VN_WRITE_ACCCESS ((char)0x2)
 | 
						|
#define TSDB_VN_ALL_ACCCESS   (TSDB_VN_READ_ACCCESS | TSDB_VN_WRITE_ACCCESS)
 | 
						|
 | 
						|
#define TSDB_COL_NORMAL 0x0u  // the normal column of the table
 | 
						|
#define TSDB_COL_TAG    0x1u  // the tag column type
 | 
						|
#define TSDB_COL_UDC    0x2u  // the user specified normal string column, it is a dummy column
 | 
						|
#define TSDB_COL_TMP    0x4u  // internal column generated by the previous operators
 | 
						|
#define TSDB_COL_NULL   0x8u  // the column filter NULL or not
 | 
						|
 | 
						|
#define TSDB_COL_IS_TAG(f)        (((f & (~(TSDB_COL_NULL))) & TSDB_COL_TAG) != 0)
 | 
						|
#define TSDB_COL_IS_NORMAL_COL(f) ((f & (~(TSDB_COL_NULL))) == TSDB_COL_NORMAL)
 | 
						|
#define TSDB_COL_IS_UD_COL(f)     ((f & (~(TSDB_COL_NULL))) == TSDB_COL_UDC)
 | 
						|
#define TSDB_COL_REQ_NULL(f)      (((f)&TSDB_COL_NULL) != 0)
 | 
						|
 | 
						|
#define TD_SUPER_TABLE  TSDB_SUPER_TABLE
 | 
						|
#define TD_CHILD_TABLE  TSDB_CHILD_TABLE
 | 
						|
#define TD_NORMAL_TABLE TSDB_NORMAL_TABLE
 | 
						|
 | 
						|
#define TD_REQ_FROM_APP  0
 | 
						|
#define TD_REQ_FROM_TAOX 1
 | 
						|
 | 
						|
typedef enum ENodeType {
 | 
						|
  // Syntax nodes are used in parser and planner module, and some are also used in executor module, such as COLUMN,
 | 
						|
  // VALUE, OPERATOR, FUNCTION and so on.
 | 
						|
  QUERY_NODE_COLUMN = 1,
 | 
						|
  QUERY_NODE_VALUE,
 | 
						|
  QUERY_NODE_OPERATOR,
 | 
						|
  QUERY_NODE_LOGIC_CONDITION,
 | 
						|
  QUERY_NODE_FUNCTION,
 | 
						|
  QUERY_NODE_REAL_TABLE,
 | 
						|
  QUERY_NODE_TEMP_TABLE,
 | 
						|
  QUERY_NODE_JOIN_TABLE,
 | 
						|
  QUERY_NODE_GROUPING_SET,
 | 
						|
  QUERY_NODE_ORDER_BY_EXPR,
 | 
						|
  QUERY_NODE_LIMIT,
 | 
						|
  QUERY_NODE_STATE_WINDOW,
 | 
						|
  QUERY_NODE_SESSION_WINDOW,
 | 
						|
  QUERY_NODE_INTERVAL_WINDOW,
 | 
						|
  QUERY_NODE_NODE_LIST,
 | 
						|
  QUERY_NODE_FILL,
 | 
						|
  QUERY_NODE_RAW_EXPR,  // Only be used in parser module.
 | 
						|
  QUERY_NODE_TARGET,
 | 
						|
  QUERY_NODE_DATABLOCK_DESC,
 | 
						|
  QUERY_NODE_SLOT_DESC,
 | 
						|
  QUERY_NODE_COLUMN_DEF,
 | 
						|
  QUERY_NODE_DOWNSTREAM_SOURCE,
 | 
						|
  QUERY_NODE_DATABASE_OPTIONS,
 | 
						|
  QUERY_NODE_TABLE_OPTIONS,
 | 
						|
  QUERY_NODE_INDEX_OPTIONS,
 | 
						|
  QUERY_NODE_EXPLAIN_OPTIONS,
 | 
						|
  QUERY_NODE_STREAM_OPTIONS,
 | 
						|
  QUERY_NODE_LEFT_VALUE,
 | 
						|
  QUERY_NODE_COLUMN_REF,
 | 
						|
  QUERY_NODE_WHEN_THEN,
 | 
						|
  QUERY_NODE_CASE_WHEN,
 | 
						|
  QUERY_NODE_EVENT_WINDOW,
 | 
						|
  QUERY_NODE_HINT,
 | 
						|
 | 
						|
  // Statement nodes are used in parser and planner module.
 | 
						|
  QUERY_NODE_SET_OPERATOR = 100,
 | 
						|
  QUERY_NODE_SELECT_STMT,
 | 
						|
  QUERY_NODE_VNODE_MODIFY_STMT,
 | 
						|
  QUERY_NODE_CREATE_DATABASE_STMT,
 | 
						|
  QUERY_NODE_DROP_DATABASE_STMT,
 | 
						|
  QUERY_NODE_ALTER_DATABASE_STMT,
 | 
						|
  QUERY_NODE_FLUSH_DATABASE_STMT,
 | 
						|
  QUERY_NODE_TRIM_DATABASE_STMT,
 | 
						|
  QUERY_NODE_CREATE_TABLE_STMT,
 | 
						|
  QUERY_NODE_CREATE_SUBTABLE_CLAUSE,
 | 
						|
  QUERY_NODE_CREATE_MULTI_TABLES_STMT,
 | 
						|
  QUERY_NODE_DROP_TABLE_CLAUSE,
 | 
						|
  QUERY_NODE_DROP_TABLE_STMT,
 | 
						|
  QUERY_NODE_DROP_SUPER_TABLE_STMT,
 | 
						|
  QUERY_NODE_ALTER_TABLE_STMT,
 | 
						|
  QUERY_NODE_ALTER_SUPER_TABLE_STMT,
 | 
						|
  QUERY_NODE_CREATE_USER_STMT,
 | 
						|
  QUERY_NODE_ALTER_USER_STMT,
 | 
						|
  QUERY_NODE_DROP_USER_STMT,
 | 
						|
  QUERY_NODE_USE_DATABASE_STMT,
 | 
						|
  QUERY_NODE_CREATE_DNODE_STMT,
 | 
						|
  QUERY_NODE_DROP_DNODE_STMT,
 | 
						|
  QUERY_NODE_ALTER_DNODE_STMT,
 | 
						|
  QUERY_NODE_CREATE_INDEX_STMT,
 | 
						|
  QUERY_NODE_DROP_INDEX_STMT,
 | 
						|
  QUERY_NODE_CREATE_QNODE_STMT,
 | 
						|
  QUERY_NODE_DROP_QNODE_STMT,
 | 
						|
  QUERY_NODE_CREATE_BNODE_STMT,
 | 
						|
  QUERY_NODE_DROP_BNODE_STMT,
 | 
						|
  QUERY_NODE_CREATE_SNODE_STMT,
 | 
						|
  QUERY_NODE_DROP_SNODE_STMT,
 | 
						|
  QUERY_NODE_CREATE_MNODE_STMT,
 | 
						|
  QUERY_NODE_DROP_MNODE_STMT,
 | 
						|
  QUERY_NODE_CREATE_TOPIC_STMT,
 | 
						|
  QUERY_NODE_DROP_TOPIC_STMT,
 | 
						|
  QUERY_NODE_DROP_CGROUP_STMT,
 | 
						|
  QUERY_NODE_ALTER_LOCAL_STMT,
 | 
						|
  QUERY_NODE_EXPLAIN_STMT,
 | 
						|
  QUERY_NODE_DESCRIBE_STMT,
 | 
						|
  QUERY_NODE_RESET_QUERY_CACHE_STMT,
 | 
						|
  QUERY_NODE_COMPACT_DATABASE_STMT,
 | 
						|
  QUERY_NODE_CREATE_FUNCTION_STMT,
 | 
						|
  QUERY_NODE_DROP_FUNCTION_STMT,
 | 
						|
  QUERY_NODE_CREATE_STREAM_STMT,
 | 
						|
  QUERY_NODE_DROP_STREAM_STMT,
 | 
						|
  QUERY_NODE_BALANCE_VGROUP_STMT,
 | 
						|
  QUERY_NODE_MERGE_VGROUP_STMT,
 | 
						|
  QUERY_NODE_REDISTRIBUTE_VGROUP_STMT,
 | 
						|
  QUERY_NODE_SPLIT_VGROUP_STMT,
 | 
						|
  QUERY_NODE_SYNCDB_STMT,
 | 
						|
  QUERY_NODE_GRANT_STMT,
 | 
						|
  QUERY_NODE_REVOKE_STMT,
 | 
						|
  QUERY_NODE_SHOW_DNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_MNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_MODULES_STMT,
 | 
						|
  QUERY_NODE_SHOW_QNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_SNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_BNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_CLUSTER_STMT,
 | 
						|
  QUERY_NODE_SHOW_DATABASES_STMT,
 | 
						|
  QUERY_NODE_SHOW_FUNCTIONS_STMT,
 | 
						|
  QUERY_NODE_SHOW_INDEXES_STMT,
 | 
						|
  QUERY_NODE_SHOW_STABLES_STMT,
 | 
						|
  QUERY_NODE_SHOW_STREAMS_STMT,
 | 
						|
  QUERY_NODE_SHOW_TABLES_STMT,
 | 
						|
  QUERY_NODE_SHOW_TAGS_STMT,
 | 
						|
  QUERY_NODE_SHOW_USERS_STMT,
 | 
						|
  QUERY_NODE_SHOW_LICENCES_STMT,
 | 
						|
  QUERY_NODE_SHOW_VGROUPS_STMT,
 | 
						|
  QUERY_NODE_SHOW_TOPICS_STMT,
 | 
						|
  QUERY_NODE_SHOW_CONSUMERS_STMT,
 | 
						|
  QUERY_NODE_SHOW_CONNECTIONS_STMT,
 | 
						|
  QUERY_NODE_SHOW_QUERIES_STMT,
 | 
						|
  QUERY_NODE_SHOW_APPS_STMT,
 | 
						|
  QUERY_NODE_SHOW_VARIABLES_STMT,
 | 
						|
  QUERY_NODE_SHOW_DNODE_VARIABLES_STMT,
 | 
						|
  QUERY_NODE_SHOW_TRANSACTIONS_STMT,
 | 
						|
  QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT,
 | 
						|
  QUERY_NODE_SHOW_VNODES_STMT,
 | 
						|
  QUERY_NODE_SHOW_USER_PRIVILEGES_STMT,
 | 
						|
  QUERY_NODE_SHOW_CREATE_DATABASE_STMT,
 | 
						|
  QUERY_NODE_SHOW_CREATE_TABLE_STMT,
 | 
						|
  QUERY_NODE_SHOW_CREATE_STABLE_STMT,
 | 
						|
  QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT,
 | 
						|
  QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT,
 | 
						|
  QUERY_NODE_SHOW_SCORES_STMT,
 | 
						|
  QUERY_NODE_SHOW_TABLE_TAGS_STMT,
 | 
						|
  QUERY_NODE_KILL_CONNECTION_STMT,
 | 
						|
  QUERY_NODE_KILL_QUERY_STMT,
 | 
						|
  QUERY_NODE_KILL_TRANSACTION_STMT,
 | 
						|
  QUERY_NODE_DELETE_STMT,
 | 
						|
  QUERY_NODE_INSERT_STMT,
 | 
						|
  QUERY_NODE_QUERY,
 | 
						|
  QUERY_NODE_SHOW_DB_ALIVE_STMT,
 | 
						|
  QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT,
 | 
						|
  QUERY_NODE_BALANCE_VGROUP_LEADER_STMT,
 | 
						|
  QUERY_NODE_RESTORE_DNODE_STMT,
 | 
						|
  QUERY_NODE_RESTORE_QNODE_STMT,
 | 
						|
  QUERY_NODE_RESTORE_MNODE_STMT,
 | 
						|
  QUERY_NODE_RESTORE_VNODE_STMT,
 | 
						|
  QUERY_NODE_PAUSE_STREAM_STMT,
 | 
						|
  QUERY_NODE_RESUME_STREAM_STMT,
 | 
						|
 | 
						|
  // logic plan node
 | 
						|
  QUERY_NODE_LOGIC_PLAN_SCAN = 1000,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_JOIN,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_AGG,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_PROJECT,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_EXCHANGE,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_MERGE,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_WINDOW,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_FILL,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_SORT,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_PARTITION,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_INDEF_ROWS_FUNC,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_INTERP_FUNC,
 | 
						|
  QUERY_NODE_LOGIC_SUBPLAN,
 | 
						|
  QUERY_NODE_LOGIC_PLAN,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_GROUP_CACHE,
 | 
						|
  QUERY_NODE_LOGIC_PLAN_DYN_QUERY_CTRL,
 | 
						|
 | 
						|
  // physical plan node
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN = 1100,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_TABLE_SEQ_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_SYSTABLE_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_PROJECT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_HASH_AGG,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_EXCHANGE,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_SORT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_GROUP_SORT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_HASH_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_INTERVAL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_FILL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_FILL,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_SESSION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_SESSION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_SEMI_SESSION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_FINAL_SESSION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_STATE,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_STATE,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_PARTITION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_PARTITION,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_INDEF_ROWS_FUNC,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_INTERP_FUNC,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_DISPATCH,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_INSERT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_QUERY_INSERT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_DELETE,
 | 
						|
  QUERY_NODE_PHYSICAL_SUBPLAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_MERGE_EVENT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_STREAM_EVENT,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_HASH_JOIN,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_GROUP_CACHE,
 | 
						|
  QUERY_NODE_PHYSICAL_PLAN_DYN_QUERY_CTRL  
 | 
						|
} ENodeType;
 | 
						|
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  char*   dbFName;
 | 
						|
  char*   tbName;
 | 
						|
} SBuildTableInput;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t dbId;
 | 
						|
  int32_t vgVersion;
 | 
						|
  int32_t numOfTable;  // unit is TSDB_TABLE_NUM_UNIT
 | 
						|
  int64_t stateTs;
 | 
						|
} SBuildUseDBInput;
 | 
						|
 | 
						|
typedef struct SField {
 | 
						|
  char    name[TSDB_COL_NAME_LEN];
 | 
						|
  uint8_t type;
 | 
						|
  int8_t  flags;
 | 
						|
  int32_t bytes;
 | 
						|
} SField;
 | 
						|
 | 
						|
typedef struct SRetention {
 | 
						|
  int64_t freq;
 | 
						|
  int64_t keep;
 | 
						|
  int8_t  freqUnit;
 | 
						|
  int8_t  keepUnit;
 | 
						|
} SRetention;
 | 
						|
 | 
						|
#define RETENTION_VALID(r) (((r)->freq > 0) && ((r)->keep > 0))
 | 
						|
 | 
						|
#pragma pack(push, 1)
 | 
						|
 | 
						|
// null-terminated string instead of char array to avoid too many memory consumption in case of more than 1M tableMeta
 | 
						|
typedef struct SEp {
 | 
						|
  char     fqdn[TSDB_FQDN_LEN];
 | 
						|
  uint16_t port;
 | 
						|
} SEp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t contLen;
 | 
						|
  int32_t vgId;
 | 
						|
} SMsgHead;
 | 
						|
 | 
						|
// Submit message for one table
 | 
						|
typedef struct SSubmitBlk {
 | 
						|
  int64_t uid;        // table unique id
 | 
						|
  int64_t suid;       // stable id
 | 
						|
  int32_t sversion;   // data schema version
 | 
						|
  int32_t dataLen;    // data part length, not including the SSubmitBlk head
 | 
						|
  int32_t schemaLen;  // schema length, if length is 0, no schema exists
 | 
						|
  int32_t numOfRows;  // total number of rows in current submit block
 | 
						|
  char    data[];
 | 
						|
} SSubmitBlk;
 | 
						|
 | 
						|
// Submit message for this TSDB
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  int64_t  version;
 | 
						|
  int32_t  length;
 | 
						|
  int32_t  numOfBlocks;
 | 
						|
  char     blocks[];
 | 
						|
} SSubmitReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t totalLen;
 | 
						|
  int32_t len;
 | 
						|
  STSRow* row;
 | 
						|
} SSubmitBlkIter;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t totalLen;
 | 
						|
  int32_t len;
 | 
						|
  // head of SSubmitBlk
 | 
						|
  int64_t uid;        // table unique id
 | 
						|
  int64_t suid;       // stable id
 | 
						|
  int32_t sversion;   // data schema version
 | 
						|
  int32_t dataLen;    // data part length, not including the SSubmitBlk head
 | 
						|
  int32_t schemaLen;  // schema length, if length is 0, no schema exists
 | 
						|
  int32_t numOfRows;  // total number of rows in current submit block
 | 
						|
  // head of SSubmitBlk
 | 
						|
  int32_t     numOfBlocks;
 | 
						|
  const void* pMsg;
 | 
						|
} SSubmitMsgIter;
 | 
						|
 | 
						|
int32_t tInitSubmitMsgIter(const SSubmitReq* pMsg, SSubmitMsgIter* pIter);
 | 
						|
int32_t tGetSubmitMsgNext(SSubmitMsgIter* pIter, SSubmitBlk** pPBlock);
 | 
						|
int32_t tInitSubmitBlkIter(SSubmitMsgIter* pMsgIter, SSubmitBlk* pBlock, SSubmitBlkIter* pIter);
 | 
						|
STSRow* tGetSubmitBlkNext(SSubmitBlkIter* pIter);
 | 
						|
// for debug
 | 
						|
int32_t tPrintFixedSchemaSubmitReq(SSubmitReq* pReq, STSchema* pSchema);
 | 
						|
 | 
						|
struct SSchema {
 | 
						|
  int8_t   type;
 | 
						|
  int8_t   flags;
 | 
						|
  col_id_t colId;
 | 
						|
  int32_t  bytes;
 | 
						|
  char     name[TSDB_COL_NAME_LEN];
 | 
						|
};
 | 
						|
 | 
						|
struct SSchema2 {
 | 
						|
  int8_t   type;
 | 
						|
  int8_t   flags;
 | 
						|
  col_id_t colId;
 | 
						|
  int32_t  bytes;
 | 
						|
  char     name[TSDB_COL_NAME_LEN];
 | 
						|
  char     alias[TSDB_COL_NAME_LEN];
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     tbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     stbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t  dbId;
 | 
						|
  int32_t  numOfTags;
 | 
						|
  int32_t  numOfColumns;
 | 
						|
  int8_t   precision;
 | 
						|
  int8_t   tableType;
 | 
						|
  int32_t  sversion;
 | 
						|
  int32_t  tversion;
 | 
						|
  uint64_t suid;
 | 
						|
  uint64_t tuid;
 | 
						|
  int32_t  vgId;
 | 
						|
  int8_t   sysInfo;
 | 
						|
  SSchema* pSchemas;
 | 
						|
} STableMetaRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t        code;
 | 
						|
  int64_t        uid;
 | 
						|
  char*          tblFName;
 | 
						|
  int32_t        numOfRows;
 | 
						|
  int32_t        affectedRows;
 | 
						|
  int64_t        sver;
 | 
						|
  STableMetaRsp* pMeta;
 | 
						|
} SSubmitBlkRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t numOfRows;
 | 
						|
  int32_t affectedRows;
 | 
						|
  int32_t nBlocks;
 | 
						|
  union {
 | 
						|
    SArray*        pArray;
 | 
						|
    SSubmitBlkRsp* pBlocks;
 | 
						|
  };
 | 
						|
} SSubmitRsp;
 | 
						|
 | 
						|
int32_t tEncodeSSubmitRsp(SEncoder* pEncoder, const SSubmitRsp* pRsp);
 | 
						|
int32_t tDecodeSSubmitRsp(SDecoder* pDecoder, SSubmitRsp* pRsp);
 | 
						|
void    tFreeSSubmitBlkRsp(void* param);
 | 
						|
void    tFreeSSubmitRsp(SSubmitRsp* pRsp);
 | 
						|
 | 
						|
#define COL_SMA_ON     ((int8_t)0x1)
 | 
						|
#define COL_IDX_ON     ((int8_t)0x2)
 | 
						|
#define COL_SET_NULL   ((int8_t)0x10)
 | 
						|
#define COL_SET_VAL    ((int8_t)0x20)
 | 
						|
#define COL_IS_SYSINFO ((int8_t)0x40)
 | 
						|
 | 
						|
#define COL_IS_SET(FLG)  (((FLG) & (COL_SET_VAL | COL_SET_NULL)) != 0)
 | 
						|
#define COL_CLR_SET(FLG) ((FLG) &= (~(COL_SET_VAL | COL_SET_NULL)))
 | 
						|
 | 
						|
#define IS_BSMA_ON(s)  (((s)->flags & 0x01) == COL_SMA_ON)
 | 
						|
#define IS_IDX_ON(s)   (((s)->flags & 0x02) == COL_IDX_ON)
 | 
						|
#define IS_SET_NULL(s) (((s)->flags & COL_SET_NULL) == COL_SET_NULL)
 | 
						|
 | 
						|
#define SSCHMEA_SET_IDX_ON(s) \
 | 
						|
  do {                        \
 | 
						|
    (s)->flags |= COL_IDX_ON; \
 | 
						|
  } while (0)
 | 
						|
 | 
						|
#define SSCHMEA_SET_IDX_OFF(s)   \
 | 
						|
  do {                           \
 | 
						|
    (s)->flags &= (~COL_IDX_ON); \
 | 
						|
  } while (0)
 | 
						|
 | 
						|
#define SSCHMEA_TYPE(s)  ((s)->type)
 | 
						|
#define SSCHMEA_FLAGS(s) ((s)->flags)
 | 
						|
#define SSCHMEA_COLID(s) ((s)->colId)
 | 
						|
#define SSCHMEA_BYTES(s) ((s)->bytes)
 | 
						|
#define SSCHMEA_NAME(s)  ((s)->name)
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  nCols;
 | 
						|
  int32_t  version;
 | 
						|
  SSchema* pSchema;
 | 
						|
} SSchemaWrapper;
 | 
						|
 | 
						|
static FORCE_INLINE SSchemaWrapper* tCloneSSchemaWrapper(const SSchemaWrapper* pSchemaWrapper) {
 | 
						|
  if (pSchemaWrapper->pSchema == NULL) return NULL;
 | 
						|
 | 
						|
  SSchemaWrapper* pSW = (SSchemaWrapper*)taosMemoryMalloc(sizeof(SSchemaWrapper));
 | 
						|
  if (pSW == NULL) return pSW;
 | 
						|
  pSW->nCols = pSchemaWrapper->nCols;
 | 
						|
  pSW->version = pSchemaWrapper->version;
 | 
						|
  pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema));
 | 
						|
  if (pSW->pSchema == NULL) {
 | 
						|
    taosMemoryFree(pSW);
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
 | 
						|
  memcpy(pSW->pSchema, pSchemaWrapper->pSchema, pSW->nCols * sizeof(SSchema));
 | 
						|
  return pSW;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tDeleteSchemaWrapper(SSchemaWrapper* pSchemaWrapper) {
 | 
						|
  if (pSchemaWrapper) {
 | 
						|
    taosMemoryFree(pSchemaWrapper->pSchema);
 | 
						|
    taosMemoryFree(pSchemaWrapper);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tDeleteSSchemaWrapperForHash(void* pSchemaWrapper) {
 | 
						|
  if (pSchemaWrapper != NULL && *(SSchemaWrapper**)pSchemaWrapper != NULL) {
 | 
						|
    taosMemoryFree((*(SSchemaWrapper**)pSchemaWrapper)->pSchema);
 | 
						|
    taosMemoryFree(*(SSchemaWrapper**)pSchemaWrapper);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t taosEncodeSSchema(void** buf, const SSchema* pSchema) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI8(buf, pSchema->type);
 | 
						|
  tlen += taosEncodeFixedI8(buf, pSchema->flags);
 | 
						|
  tlen += taosEncodeFixedI32(buf, pSchema->bytes);
 | 
						|
  tlen += taosEncodeFixedI16(buf, pSchema->colId);
 | 
						|
  tlen += taosEncodeString(buf, pSchema->name);
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* taosDecodeSSchema(const void* buf, SSchema* pSchema) {
 | 
						|
  buf = taosDecodeFixedI8(buf, &pSchema->type);
 | 
						|
  buf = taosDecodeFixedI8(buf, &pSchema->flags);
 | 
						|
  buf = taosDecodeFixedI32(buf, &pSchema->bytes);
 | 
						|
  buf = taosDecodeFixedI16(buf, &pSchema->colId);
 | 
						|
  buf = taosDecodeStringTo(buf, pSchema->name);
 | 
						|
  return (void*)buf;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSSchema(SEncoder* pEncoder, const SSchema* pSchema) {
 | 
						|
  if (tEncodeI8(pEncoder, pSchema->type) < 0) return -1;
 | 
						|
  if (tEncodeI8(pEncoder, pSchema->flags) < 0) return -1;
 | 
						|
  if (tEncodeI32v(pEncoder, pSchema->bytes) < 0) return -1;
 | 
						|
  if (tEncodeI16v(pEncoder, pSchema->colId) < 0) return -1;
 | 
						|
  if (tEncodeCStr(pEncoder, pSchema->name) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tDecodeSSchema(SDecoder* pDecoder, SSchema* pSchema) {
 | 
						|
  if (tDecodeI8(pDecoder, &pSchema->type) < 0) return -1;
 | 
						|
  if (tDecodeI8(pDecoder, &pSchema->flags) < 0) return -1;
 | 
						|
  if (tDecodeI32v(pDecoder, &pSchema->bytes) < 0) return -1;
 | 
						|
  if (tDecodeI16v(pDecoder, &pSchema->colId) < 0) return -1;
 | 
						|
  if (tDecodeCStrTo(pDecoder, pSchema->name) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t taosEncodeSSchemaWrapper(void** buf, const SSchemaWrapper* pSW) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeVariantI32(buf, pSW->nCols);
 | 
						|
  tlen += taosEncodeVariantI32(buf, pSW->version);
 | 
						|
  for (int32_t i = 0; i < pSW->nCols; i++) {
 | 
						|
    tlen += taosEncodeSSchema(buf, &pSW->pSchema[i]);
 | 
						|
  }
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* taosDecodeSSchemaWrapper(const void* buf, SSchemaWrapper* pSW) {
 | 
						|
  buf = taosDecodeVariantI32(buf, &pSW->nCols);
 | 
						|
  buf = taosDecodeVariantI32(buf, &pSW->version);
 | 
						|
  if (pSW->nCols > 0) {
 | 
						|
    pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema));
 | 
						|
    if (pSW->pSchema == NULL) {
 | 
						|
      return NULL;
 | 
						|
    }
 | 
						|
 | 
						|
    for (int32_t i = 0; i < pSW->nCols; i++) {
 | 
						|
      buf = taosDecodeSSchema(buf, &pSW->pSchema[i]);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    pSW->pSchema = NULL;
 | 
						|
  }
 | 
						|
  return (void*)buf;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSSchemaWrapper(SEncoder* pEncoder, const SSchemaWrapper* pSW) {
 | 
						|
  if (tEncodeI32v(pEncoder, pSW->nCols) < 0) return -1;
 | 
						|
  if (tEncodeI32v(pEncoder, pSW->version) < 0) return -1;
 | 
						|
  for (int32_t i = 0; i < pSW->nCols; i++) {
 | 
						|
    if (tEncodeSSchema(pEncoder, &pSW->pSchema[i]) < 0) return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tDecodeSSchemaWrapper(SDecoder* pDecoder, SSchemaWrapper* pSW) {
 | 
						|
  if (tDecodeI32v(pDecoder, &pSW->nCols) < 0) return -1;
 | 
						|
  if (tDecodeI32v(pDecoder, &pSW->version) < 0) return -1;
 | 
						|
 | 
						|
  pSW->pSchema = (SSchema*)taosMemoryCalloc(pSW->nCols, sizeof(SSchema));
 | 
						|
  if (pSW->pSchema == NULL) return -1;
 | 
						|
  for (int32_t i = 0; i < pSW->nCols; i++) {
 | 
						|
    if (tDecodeSSchema(pDecoder, &pSW->pSchema[i]) < 0) return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tDecodeSSchemaWrapperEx(SDecoder* pDecoder, SSchemaWrapper* pSW) {
 | 
						|
  if (tDecodeI32v(pDecoder, &pSW->nCols) < 0) return -1;
 | 
						|
  if (tDecodeI32v(pDecoder, &pSW->version) < 0) return -1;
 | 
						|
 | 
						|
  pSW->pSchema = (SSchema*)tDecoderMalloc(pDecoder, pSW->nCols * sizeof(SSchema));
 | 
						|
  if (pSW->pSchema == NULL) return -1;
 | 
						|
  for (int32_t i = 0; i < pSW->nCols; i++) {
 | 
						|
    if (tDecodeSSchema(pDecoder, &pSW->pSchema[i]) < 0) return -1;
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t   igExists;
 | 
						|
  int8_t   source;  // 1-taosX or 0-taosClient
 | 
						|
  int8_t   reserved[6];
 | 
						|
  tb_uid_t suid;
 | 
						|
  int64_t  delay1;
 | 
						|
  int64_t  delay2;
 | 
						|
  int64_t  watermark1;
 | 
						|
  int64_t  watermark2;
 | 
						|
  int32_t  ttl;
 | 
						|
  int32_t  colVer;
 | 
						|
  int32_t  tagVer;
 | 
						|
  int32_t  numOfColumns;
 | 
						|
  int32_t  numOfTags;
 | 
						|
  int32_t  numOfFuncs;
 | 
						|
  int32_t  commentLen;
 | 
						|
  int32_t  ast1Len;
 | 
						|
  int32_t  ast2Len;
 | 
						|
  SArray*  pColumns;  // array of SField
 | 
						|
  SArray*  pTags;     // array of SField
 | 
						|
  SArray*  pFuncs;
 | 
						|
  char*    pComment;
 | 
						|
  char*    pAst1;
 | 
						|
  char*    pAst2;
 | 
						|
  int64_t  deleteMark1;
 | 
						|
  int64_t  deleteMark2;
 | 
						|
} SMCreateStbReq;
 | 
						|
 | 
						|
int32_t tSerializeSMCreateStbReq(void* buf, int32_t bufLen, SMCreateStbReq* pReq);
 | 
						|
int32_t tDeserializeSMCreateStbReq(void* buf, int32_t bufLen, SMCreateStbReq* pReq);
 | 
						|
void    tFreeSMCreateStbReq(SMCreateStbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  STableMetaRsp* pMeta;
 | 
						|
} SMCreateStbRsp;
 | 
						|
 | 
						|
int32_t tEncodeSMCreateStbRsp(SEncoder* pEncoder, const SMCreateStbRsp* pRsp);
 | 
						|
int32_t tDecodeSMCreateStbRsp(SDecoder* pDecoder, SMCreateStbRsp* pRsp);
 | 
						|
void    tFreeSMCreateStbRsp(SMCreateStbRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t   igNotExists;
 | 
						|
  int8_t   source;  // 1-taosX or 0-taosClient
 | 
						|
  int8_t   reserved[6];
 | 
						|
  tb_uid_t suid;
 | 
						|
} SMDropStbReq;
 | 
						|
 | 
						|
int32_t tSerializeSMDropStbReq(void* buf, int32_t bufLen, SMDropStbReq* pReq);
 | 
						|
int32_t tDeserializeSMDropStbReq(void* buf, int32_t bufLen, SMDropStbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t  alterType;
 | 
						|
  int32_t numOfFields;
 | 
						|
  SArray* pFields;
 | 
						|
  int32_t ttl;
 | 
						|
  int32_t commentLen;
 | 
						|
  char*   comment;
 | 
						|
} SMAlterStbReq;
 | 
						|
 | 
						|
int32_t tSerializeSMAlterStbReq(void* buf, int32_t bufLen, SMAlterStbReq* pReq);
 | 
						|
int32_t tDeserializeSMAlterStbReq(void* buf, int32_t bufLen, SMAlterStbReq* pReq);
 | 
						|
void    tFreeSMAltertbReq(SMAlterStbReq* pReq);
 | 
						|
 | 
						|
typedef struct SEpSet {
 | 
						|
  int8_t inUse;
 | 
						|
  int8_t numOfEps;
 | 
						|
  SEp    eps[TSDB_MAX_REPLICA];
 | 
						|
} SEpSet;
 | 
						|
 | 
						|
int32_t tEncodeSEpSet(SEncoder* pEncoder, const SEpSet* pEp);
 | 
						|
int32_t tDecodeSEpSet(SDecoder* pDecoder, SEpSet* pEp);
 | 
						|
int32_t taosEncodeSEpSet(void** buf, const SEpSet* pEp);
 | 
						|
void*   taosDecodeSEpSet(const void* buf, SEpSet* pEp);
 | 
						|
 | 
						|
int32_t tSerializeSEpSet(void* buf, int32_t bufLen, const SEpSet* pEpset);
 | 
						|
int32_t tDeserializeSEpSet(void* buf, int32_t buflen, SEpSet* pEpset);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  connType;
 | 
						|
  int32_t pid;
 | 
						|
  char    app[TSDB_APP_NAME_LEN];
 | 
						|
  char    db[TSDB_DB_NAME_LEN];
 | 
						|
  char    user[TSDB_USER_LEN];
 | 
						|
  char    passwd[TSDB_PASSWORD_LEN];
 | 
						|
  int64_t startTime;
 | 
						|
  char    sVer[TSDB_VERSION_LEN];
 | 
						|
} SConnectReq;
 | 
						|
 | 
						|
int32_t tSerializeSConnectReq(void* buf, int32_t bufLen, SConnectReq* pReq);
 | 
						|
int32_t tDeserializeSConnectReq(void* buf, int32_t bufLen, SConnectReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  acctId;
 | 
						|
  int64_t  clusterId;
 | 
						|
  uint32_t connId;
 | 
						|
  int32_t  dnodeNum;
 | 
						|
  int8_t   superUser;
 | 
						|
  int8_t   sysInfo;
 | 
						|
  int8_t   connType;
 | 
						|
  SEpSet   epSet;
 | 
						|
  int32_t  svrTimestamp;
 | 
						|
  int32_t  passVer;
 | 
						|
  int32_t  authVer;
 | 
						|
  char     sVer[TSDB_VERSION_LEN];
 | 
						|
  char     sDetailVer[128];
 | 
						|
} SConnectRsp;
 | 
						|
 | 
						|
int32_t tSerializeSConnectRsp(void* buf, int32_t bufLen, SConnectRsp* pRsp);
 | 
						|
int32_t tDeserializeSConnectRsp(void* buf, int32_t bufLen, SConnectRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    user[TSDB_USER_LEN];
 | 
						|
  char    pass[TSDB_PASSWORD_LEN];
 | 
						|
  int32_t maxUsers;
 | 
						|
  int32_t maxDbs;
 | 
						|
  int32_t maxTimeSeries;
 | 
						|
  int32_t maxStreams;
 | 
						|
  int32_t accessState;  // Configured only by command
 | 
						|
  int64_t maxStorage;
 | 
						|
} SCreateAcctReq, SAlterAcctReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateAcctReq(void* buf, int32_t bufLen, SCreateAcctReq* pReq);
 | 
						|
int32_t tDeserializeSCreateAcctReq(void* buf, int32_t bufLen, SCreateAcctReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char user[TSDB_USER_LEN];
 | 
						|
} SDropUserReq, SDropAcctReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq);
 | 
						|
int32_t tDeserializeSDropUserReq(void* buf, int32_t bufLen, SDropUserReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t createType;
 | 
						|
  int8_t superUser;  // denote if it is a super user or not
 | 
						|
  int8_t sysInfo;
 | 
						|
  int8_t enable;
 | 
						|
  char   user[TSDB_USER_LEN];
 | 
						|
  char   pass[TSDB_USET_PASSWORD_LEN];
 | 
						|
} SCreateUserReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq);
 | 
						|
int32_t tDeserializeSCreateUserReq(void* buf, int32_t bufLen, SCreateUserReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  alterType;
 | 
						|
  int8_t  superUser;
 | 
						|
  int8_t  sysInfo;
 | 
						|
  int8_t  enable;
 | 
						|
  char    user[TSDB_USER_LEN];
 | 
						|
  char    pass[TSDB_USET_PASSWORD_LEN];
 | 
						|
  char    objname[TSDB_DB_FNAME_LEN];  // db or topic
 | 
						|
  char    tabName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char*   tagCond;
 | 
						|
  int32_t tagCondLen;
 | 
						|
} SAlterUserReq;
 | 
						|
 | 
						|
int32_t tSerializeSAlterUserReq(void* buf, int32_t bufLen, SAlterUserReq* pReq);
 | 
						|
int32_t tDeserializeSAlterUserReq(void* buf, int32_t bufLen, SAlterUserReq* pReq);
 | 
						|
void    tFreeSAlterUserReq(SAlterUserReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char user[TSDB_USER_LEN];
 | 
						|
} SGetUserAuthReq;
 | 
						|
 | 
						|
int32_t tSerializeSGetUserAuthReq(void* buf, int32_t bufLen, SGetUserAuthReq* pReq);
 | 
						|
int32_t tDeserializeSGetUserAuthReq(void* buf, int32_t bufLen, SGetUserAuthReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char      user[TSDB_USER_LEN];
 | 
						|
  int32_t   version;
 | 
						|
  int32_t   passVer;
 | 
						|
  int8_t    superAuth;
 | 
						|
  int8_t    sysInfo;
 | 
						|
  int8_t    enable;
 | 
						|
  int8_t    reserve;
 | 
						|
  SHashObj* createdDbs;
 | 
						|
  SHashObj* readDbs;
 | 
						|
  SHashObj* writeDbs;
 | 
						|
  SHashObj* readTbs;
 | 
						|
  SHashObj* writeTbs;
 | 
						|
  SHashObj* useDbs;
 | 
						|
} SGetUserAuthRsp;
 | 
						|
 | 
						|
int32_t tSerializeSGetUserAuthRsp(void* buf, int32_t bufLen, SGetUserAuthRsp* pRsp);
 | 
						|
int32_t tDeserializeSGetUserAuthRsp(void* buf, int32_t bufLen, SGetUserAuthRsp* pRsp);
 | 
						|
void    tFreeSGetUserAuthRsp(SGetUserAuthRsp* pRsp);
 | 
						|
 | 
						|
/*
 | 
						|
 * for client side struct, only column id, type, bytes are necessary
 | 
						|
 * But for data in vnode side, we need all the following information.
 | 
						|
 */
 | 
						|
typedef struct {
 | 
						|
  union {
 | 
						|
    col_id_t colId;
 | 
						|
    int16_t  slotId;
 | 
						|
  };
 | 
						|
 | 
						|
  uint8_t precision;
 | 
						|
  uint8_t scale;
 | 
						|
  int32_t bytes;
 | 
						|
  int8_t  type;
 | 
						|
} SColumnInfo;
 | 
						|
 | 
						|
typedef struct STimeWindow {
 | 
						|
  TSKEY skey;
 | 
						|
  TSKEY ekey;
 | 
						|
} STimeWindow;
 | 
						|
 | 
						|
typedef struct SQueryHint {
 | 
						|
  bool batchScan;
 | 
						|
} SQueryHint;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t tsOffset;       // offset value in current msg body, NOTE: ts list is compressed
 | 
						|
  int32_t tsLen;          // total length of ts comp block
 | 
						|
  int32_t tsNumOfBlocks;  // ts comp block numbers
 | 
						|
  int32_t tsOrder;        // ts comp block order
 | 
						|
} STsBufInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t tz;  // query client timezone
 | 
						|
  char    intervalUnit;
 | 
						|
  char    slidingUnit;
 | 
						|
  char    offsetUnit;
 | 
						|
  int8_t  precision;
 | 
						|
  int64_t interval;
 | 
						|
  int64_t sliding;
 | 
						|
  int64_t offset;
 | 
						|
} SInterval;
 | 
						|
 | 
						|
 | 
						|
typedef struct STbVerInfo {
 | 
						|
  char    tbFName[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int32_t sversion;
 | 
						|
  int32_t tversion;
 | 
						|
} STbVerInfo;
 | 
						|
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t code;
 | 
						|
  int64_t affectedRows;
 | 
						|
  SArray* tbVerInfo;  // STbVerInfo
 | 
						|
} SQueryTableRsp;
 | 
						|
 | 
						|
int32_t tSerializeSQueryTableRsp(void* buf, int32_t bufLen, SQueryTableRsp* pRsp);
 | 
						|
 | 
						|
int32_t tDeserializeSQueryTableRsp(void* buf, int32_t bufLen, SQueryTableRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  char     dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  char     tbName[TSDB_TABLE_NAME_LEN];
 | 
						|
} STableCfgReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     tbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     stbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  int32_t  numOfTags;
 | 
						|
  int32_t  numOfColumns;
 | 
						|
  int8_t   tableType;
 | 
						|
  int64_t  delay1;
 | 
						|
  int64_t  delay2;
 | 
						|
  int64_t  watermark1;
 | 
						|
  int64_t  watermark2;
 | 
						|
  int32_t  ttl;
 | 
						|
  SArray*  pFuncs;
 | 
						|
  int32_t  commentLen;
 | 
						|
  char*    pComment;
 | 
						|
  SSchema* pSchemas;
 | 
						|
  int32_t  tagsLen;
 | 
						|
  char*    pTags;
 | 
						|
} STableCfg;
 | 
						|
 | 
						|
typedef STableCfg STableCfgRsp;
 | 
						|
 | 
						|
int32_t tSerializeSTableCfgReq(void* buf, int32_t bufLen, STableCfgReq* pReq);
 | 
						|
int32_t tDeserializeSTableCfgReq(void* buf, int32_t bufLen, STableCfgReq* pReq);
 | 
						|
 | 
						|
int32_t tSerializeSTableCfgRsp(void* buf, int32_t bufLen, STableCfgRsp* pRsp);
 | 
						|
int32_t tDeserializeSTableCfgRsp(void* buf, int32_t bufLen, STableCfgRsp* pRsp);
 | 
						|
void    tFreeSTableCfgRsp(STableCfgRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int32_t numOfVgroups;
 | 
						|
  int32_t numOfStables;  // single_stable
 | 
						|
  int32_t buffer;        // MB
 | 
						|
  int32_t pageSize;
 | 
						|
  int32_t pages;
 | 
						|
  int32_t cacheLastSize;
 | 
						|
  int32_t daysPerFile;
 | 
						|
  int32_t daysToKeep0;
 | 
						|
  int32_t daysToKeep1;
 | 
						|
  int32_t daysToKeep2;
 | 
						|
  int32_t minRows;
 | 
						|
  int32_t maxRows;
 | 
						|
  int32_t walFsyncPeriod;
 | 
						|
  int8_t  walLevel;
 | 
						|
  int8_t  precision;  // time resolution
 | 
						|
  int8_t  compression;
 | 
						|
  int8_t  replications;
 | 
						|
  int8_t  strict;
 | 
						|
  int8_t  cacheLast;
 | 
						|
  int8_t  schemaless;
 | 
						|
  int8_t  ignoreExist;
 | 
						|
  int32_t numOfRetensions;
 | 
						|
  SArray* pRetensions;  // SRetention
 | 
						|
  int32_t walRetentionPeriod;
 | 
						|
  int64_t walRetentionSize;
 | 
						|
  int32_t walRollPeriod;
 | 
						|
  int64_t walSegmentSize;
 | 
						|
  int32_t sstTrigger;
 | 
						|
  int16_t hashPrefix;
 | 
						|
  int16_t hashSuffix;
 | 
						|
  int32_t tsdbPageSize;
 | 
						|
} SCreateDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
 | 
						|
int32_t tDeserializeSCreateDbReq(void* buf, int32_t bufLen, SCreateDbReq* pReq);
 | 
						|
void    tFreeSCreateDbReq(SCreateDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int32_t buffer;
 | 
						|
  int32_t pageSize;
 | 
						|
  int32_t pages;
 | 
						|
  int32_t cacheLastSize;
 | 
						|
  int32_t daysPerFile;
 | 
						|
  int32_t daysToKeep0;
 | 
						|
  int32_t daysToKeep1;
 | 
						|
  int32_t daysToKeep2;
 | 
						|
  int32_t walFsyncPeriod;
 | 
						|
  int8_t  walLevel;
 | 
						|
  int8_t  strict;
 | 
						|
  int8_t  cacheLast;
 | 
						|
  int8_t  replications;
 | 
						|
  int32_t sstTrigger;
 | 
						|
  int32_t minRows;
 | 
						|
  int32_t walRetentionPeriod;
 | 
						|
  int32_t walRetentionSize;
 | 
						|
} SAlterDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSAlterDbReq(void* buf, int32_t bufLen, SAlterDbReq* pReq);
 | 
						|
int32_t tDeserializeSAlterDbReq(void* buf, int32_t bufLen, SAlterDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   db[TSDB_DB_FNAME_LEN];
 | 
						|
  int8_t ignoreNotExists;
 | 
						|
} SDropDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropDbReq(void* buf, int32_t bufLen, SDropDbReq* pReq);
 | 
						|
int32_t tDeserializeSDropDbReq(void* buf, int32_t bufLen, SDropDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t uid;
 | 
						|
} SDropDbRsp;
 | 
						|
 | 
						|
int32_t tSerializeSDropDbRsp(void* buf, int32_t bufLen, SDropDbRsp* pRsp);
 | 
						|
int32_t tDeserializeSDropDbRsp(void* buf, int32_t bufLen, SDropDbRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t dbId;
 | 
						|
  int32_t vgVersion;
 | 
						|
  int32_t numOfTable;  // unit is TSDB_TABLE_NUM_UNIT
 | 
						|
  int64_t stateTs;     // ms
 | 
						|
} SUseDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSUseDbReq(void* buf, int32_t bufLen, SUseDbReq* pReq);
 | 
						|
int32_t tDeserializeSUseDbReq(void* buf, int32_t bufLen, SUseDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t uid;
 | 
						|
  int32_t vgVersion;
 | 
						|
  int32_t vgNum;
 | 
						|
  int16_t hashPrefix;
 | 
						|
  int16_t hashSuffix;
 | 
						|
  int8_t  hashMethod;
 | 
						|
  SArray* pVgroupInfos;  // Array of SVgroupInfo
 | 
						|
  int32_t errCode;
 | 
						|
  int64_t stateTs;  // ms
 | 
						|
} SUseDbRsp;
 | 
						|
 | 
						|
int32_t tSerializeSUseDbRsp(void* buf, int32_t bufLen, const SUseDbRsp* pRsp);
 | 
						|
int32_t tDeserializeSUseDbRsp(void* buf, int32_t bufLen, SUseDbRsp* pRsp);
 | 
						|
int32_t tSerializeSUseDbRspImp(SEncoder* pEncoder, const SUseDbRsp* pRsp);
 | 
						|
int32_t tDeserializeSUseDbRspImp(SDecoder* pDecoder, SUseDbRsp* pRsp);
 | 
						|
void    tFreeSUsedbRsp(SUseDbRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char db[TSDB_DB_FNAME_LEN];
 | 
						|
} SDbCfgReq;
 | 
						|
 | 
						|
int32_t tSerializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq);
 | 
						|
int32_t tDeserializeSDbCfgReq(void* buf, int32_t bufLen, SDbCfgReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int32_t maxSpeed;
 | 
						|
} STrimDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSTrimDbReq(void* buf, int32_t bufLen, STrimDbReq* pReq);
 | 
						|
int32_t tDeserializeSTrimDbReq(void* buf, int32_t bufLen, STrimDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t timestamp;
 | 
						|
} SVTrimDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSVTrimDbReq(void* buf, int32_t bufLen, SVTrimDbReq* pReq);
 | 
						|
int32_t tDeserializeSVTrimDbReq(void* buf, int32_t bufLen, SVTrimDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t timestampSec;
 | 
						|
  int32_t ttlDropMaxCount;
 | 
						|
  int32_t nUids;
 | 
						|
  SArray* pTbUids;
 | 
						|
} SVDropTtlTableReq;
 | 
						|
 | 
						|
int32_t tSerializeSVDropTtlTableReq(void* buf, int32_t bufLen, SVDropTtlTableReq* pReq);
 | 
						|
int32_t tDeserializeSVDropTtlTableReq(void* buf, int32_t bufLen, SVDropTtlTableReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t dbId;
 | 
						|
  int32_t cfgVersion;
 | 
						|
  int32_t numOfVgroups;
 | 
						|
  int32_t numOfStables;
 | 
						|
  int32_t buffer;
 | 
						|
  int32_t cacheSize;
 | 
						|
  int32_t pageSize;
 | 
						|
  int32_t pages;
 | 
						|
  int32_t daysPerFile;
 | 
						|
  int32_t daysToKeep0;
 | 
						|
  int32_t daysToKeep1;
 | 
						|
  int32_t daysToKeep2;
 | 
						|
  int32_t minRows;
 | 
						|
  int32_t maxRows;
 | 
						|
  int32_t walFsyncPeriod;
 | 
						|
  int16_t hashPrefix;
 | 
						|
  int16_t hashSuffix;
 | 
						|
  int8_t  walLevel;
 | 
						|
  int8_t  precision;
 | 
						|
  int8_t  compression;
 | 
						|
  int8_t  replications;
 | 
						|
  int8_t  strict;
 | 
						|
  int8_t  cacheLast;
 | 
						|
  int32_t tsdbPageSize;
 | 
						|
  int32_t walRetentionPeriod;
 | 
						|
  int32_t walRollPeriod;
 | 
						|
  int64_t walRetentionSize;
 | 
						|
  int64_t walSegmentSize;
 | 
						|
  int32_t numOfRetensions;
 | 
						|
  SArray* pRetensions;
 | 
						|
  int8_t  schemaless;
 | 
						|
  int16_t sstTrigger;
 | 
						|
} SDbCfgRsp;
 | 
						|
 | 
						|
typedef SDbCfgRsp     SDbCfgInfo;
 | 
						|
 | 
						|
int32_t tSerializeSDbCfgRspImpl(SEncoder *encoder, const SDbCfgRsp *pRsp);
 | 
						|
int32_t tSerializeSDbCfgRsp(void* buf, int32_t bufLen, const SDbCfgRsp* pRsp);
 | 
						|
int32_t tDeserializeSDbCfgRsp(void* buf, int32_t bufLen, SDbCfgRsp* pRsp);
 | 
						|
int32_t tDeserializeSDbCfgRspImpl(SDecoder* decoder, SDbCfgRsp *pRsp);
 | 
						|
void tFreeSDbCfgRsp(SDbCfgRsp *pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t rowNum;
 | 
						|
} SQnodeListReq;
 | 
						|
 | 
						|
int32_t tSerializeSQnodeListReq(void* buf, int32_t bufLen, SQnodeListReq* pReq);
 | 
						|
int32_t tDeserializeSQnodeListReq(void* buf, int32_t bufLen, SQnodeListReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t rowNum;
 | 
						|
} SDnodeListReq;
 | 
						|
 | 
						|
int32_t tSerializeSDnodeListReq(void* buf, int32_t bufLen, SDnodeListReq* pReq);
 | 
						|
int32_t tDeserializeSDnodeListReq(void* buf, int32_t bufLen, SDnodeListReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t useless;  // useless
 | 
						|
} SServerVerReq;
 | 
						|
 | 
						|
int32_t tSerializeSServerVerReq(void* buf, int32_t bufLen, SServerVerReq* pReq);
 | 
						|
int32_t tDeserializeSServerVerReq(void* buf, int32_t bufLen, SServerVerReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char ver[TSDB_VERSION_LEN];
 | 
						|
} SServerVerRsp;
 | 
						|
 | 
						|
int32_t tSerializeSServerVerRsp(void* buf, int32_t bufLen, SServerVerRsp* pRsp);
 | 
						|
int32_t tDeserializeSServerVerRsp(void* buf, int32_t bufLen, SServerVerRsp* pRsp);
 | 
						|
 | 
						|
typedef struct SQueryNodeAddr {
 | 
						|
  int32_t nodeId;  // vgId or qnodeId
 | 
						|
  SEpSet  epSet;
 | 
						|
} SQueryNodeAddr;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SQueryNodeAddr addr;
 | 
						|
  uint64_t       load;
 | 
						|
} SQueryNodeLoad;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* qnodeList;  // SArray<SQueryNodeLoad>
 | 
						|
} SQnodeListRsp;
 | 
						|
 | 
						|
int32_t tSerializeSQnodeListRsp(void* buf, int32_t bufLen, SQnodeListRsp* pRsp);
 | 
						|
int32_t tDeserializeSQnodeListRsp(void* buf, int32_t bufLen, SQnodeListRsp* pRsp);
 | 
						|
void    tFreeSQnodeListRsp(SQnodeListRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* dnodeList;  // SArray<SEpSet>
 | 
						|
} SDnodeListRsp;
 | 
						|
 | 
						|
int32_t tSerializeSDnodeListRsp(void* buf, int32_t bufLen, SDnodeListRsp* pRsp);
 | 
						|
int32_t tDeserializeSDnodeListRsp(void* buf, int32_t bufLen, SDnodeListRsp* pRsp);
 | 
						|
void    tFreeSDnodeListRsp(SDnodeListRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SUseDbRsp *useDbRsp;
 | 
						|
  SDbCfgRsp *cfgRsp;
 | 
						|
} SDbHbRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* pArray;  // Array of SDbHbRsp
 | 
						|
} SDbHbBatchRsp;
 | 
						|
 | 
						|
int32_t tSerializeSDbHbBatchRsp(void* buf, int32_t bufLen, SDbHbBatchRsp* pRsp);
 | 
						|
int32_t tDeserializeSDbHbBatchRsp(void* buf, int32_t bufLen, SDbHbBatchRsp* pRsp);
 | 
						|
void    tFreeSDbHbBatchRsp(SDbHbBatchRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* pArray;  // Array of SGetUserAuthRsp
 | 
						|
} SUserAuthBatchRsp;
 | 
						|
 | 
						|
int32_t tSerializeSUserAuthBatchRsp(void* buf, int32_t bufLen, SUserAuthBatchRsp* pRsp);
 | 
						|
int32_t tDeserializeSUserAuthBatchRsp(void* buf, int32_t bufLen, SUserAuthBatchRsp* pRsp);
 | 
						|
void    tFreeSUserAuthBatchRsp(SUserAuthBatchRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char        db[TSDB_DB_FNAME_LEN];
 | 
						|
  STimeWindow timeRange;
 | 
						|
} SCompactDbReq;
 | 
						|
 | 
						|
int32_t tSerializeSCompactDbReq(void* buf, int32_t bufLen, SCompactDbReq* pReq);
 | 
						|
int32_t tDeserializeSCompactDbReq(void* buf, int32_t bufLen, SCompactDbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_FUNC_NAME_LEN];
 | 
						|
  int8_t  igExists;
 | 
						|
  int8_t  funcType;
 | 
						|
  int8_t  scriptType;
 | 
						|
  int8_t  outputType;
 | 
						|
  int32_t outputLen;
 | 
						|
  int32_t bufSize;
 | 
						|
  int32_t codeLen;
 | 
						|
  int64_t signature;
 | 
						|
  char*   pComment;
 | 
						|
  char*   pCode;
 | 
						|
  int8_t  orReplace;
 | 
						|
} SCreateFuncReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateFuncReq(void* buf, int32_t bufLen, SCreateFuncReq* pReq);
 | 
						|
int32_t tDeserializeSCreateFuncReq(void* buf, int32_t bufLen, SCreateFuncReq* pReq);
 | 
						|
void    tFreeSCreateFuncReq(SCreateFuncReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_FUNC_NAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SDropFuncReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropFuncReq(void* buf, int32_t bufLen, SDropFuncReq* pReq);
 | 
						|
int32_t tDeserializeSDropFuncReq(void* buf, int32_t bufLen, SDropFuncReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t numOfFuncs;
 | 
						|
  bool    ignoreCodeComment;
 | 
						|
  SArray* pFuncNames;
 | 
						|
} SRetrieveFuncReq;
 | 
						|
 | 
						|
int32_t tSerializeSRetrieveFuncReq(void* buf, int32_t bufLen, SRetrieveFuncReq* pReq);
 | 
						|
int32_t tDeserializeSRetrieveFuncReq(void* buf, int32_t bufLen, SRetrieveFuncReq* pReq);
 | 
						|
void    tFreeSRetrieveFuncReq(SRetrieveFuncReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_FUNC_NAME_LEN];
 | 
						|
  int8_t  funcType;
 | 
						|
  int8_t  scriptType;
 | 
						|
  int8_t  outputType;
 | 
						|
  int32_t outputLen;
 | 
						|
  int32_t bufSize;
 | 
						|
  int64_t signature;
 | 
						|
  int32_t commentSize;
 | 
						|
  int32_t codeSize;
 | 
						|
  char*   pComment;
 | 
						|
  char*   pCode;
 | 
						|
} SFuncInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t funcVersion;
 | 
						|
  int64_t funcCreatedTime;
 | 
						|
} SFuncExtraInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t numOfFuncs;
 | 
						|
  SArray* pFuncInfos;
 | 
						|
  SArray* pFuncExtraInfos;
 | 
						|
} SRetrieveFuncRsp;
 | 
						|
 | 
						|
int32_t tSerializeSRetrieveFuncRsp(void* buf, int32_t bufLen, SRetrieveFuncRsp* pRsp);
 | 
						|
int32_t tDeserializeSRetrieveFuncRsp(void* buf, int32_t bufLen, SRetrieveFuncRsp* pRsp);
 | 
						|
void    tFreeSFuncInfo(SFuncInfo* pInfo);
 | 
						|
void    tFreeSRetrieveFuncRsp(SRetrieveFuncRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t statusInterval;
 | 
						|
  int64_t checkTime;                  // 1970-01-01 00:00:00.000
 | 
						|
  char    timezone[TD_TIMEZONE_LEN];  // tsTimezone
 | 
						|
  char    locale[TD_LOCALE_LEN];      // tsLocale
 | 
						|
  char    charset[TD_LOCALE_LEN];     // tsCharset
 | 
						|
  int8_t  ttlChangeOnWrite;
 | 
						|
} SClusterCfg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t openVnodes;
 | 
						|
  int32_t totalVnodes;
 | 
						|
  int32_t masterNum;
 | 
						|
  int64_t numOfSelectReqs;
 | 
						|
  int64_t numOfInsertReqs;
 | 
						|
  int64_t numOfInsertSuccessReqs;
 | 
						|
  int64_t numOfBatchInsertReqs;
 | 
						|
  int64_t numOfBatchInsertSuccessReqs;
 | 
						|
  int64_t errors;
 | 
						|
} SVnodesStat;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int8_t  syncState;
 | 
						|
  int8_t  syncRestore;
 | 
						|
  int64_t syncTerm;
 | 
						|
  int64_t roleTimeMs;
 | 
						|
  int64_t startTimeMs;
 | 
						|
  int8_t  syncCanRead;
 | 
						|
  int64_t cacheUsage;
 | 
						|
  int64_t numOfTables;
 | 
						|
  int64_t numOfTimeSeries;
 | 
						|
  int64_t totalStorage;
 | 
						|
  int64_t compStorage;
 | 
						|
  int64_t pointsWritten;
 | 
						|
  int64_t numOfSelectReqs;
 | 
						|
  int64_t numOfInsertReqs;
 | 
						|
  int64_t numOfInsertSuccessReqs;
 | 
						|
  int64_t numOfBatchInsertReqs;
 | 
						|
  int64_t numOfBatchInsertSuccessReqs;
 | 
						|
  int32_t numOfCachedTables;
 | 
						|
  int32_t learnerProgress; // use one reservered
 | 
						|
} SVnodeLoad;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  syncState;
 | 
						|
  int64_t syncTerm;
 | 
						|
  int8_t  syncRestore;
 | 
						|
  int64_t roleTimeMs;
 | 
						|
} SMnodeLoad;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
  int64_t numOfProcessedQuery;
 | 
						|
  int64_t numOfProcessedCQuery;
 | 
						|
  int64_t numOfProcessedFetch;
 | 
						|
  int64_t numOfProcessedDrop;
 | 
						|
  int64_t numOfProcessedHb;
 | 
						|
  int64_t numOfProcessedDelete;
 | 
						|
  int64_t cacheDataSize;
 | 
						|
  int64_t numOfQueryInQueue;
 | 
						|
  int64_t numOfFetchInQueue;
 | 
						|
  int64_t timeInQueryQueue;
 | 
						|
  int64_t timeInFetchQueue;
 | 
						|
} SQnodeLoad;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t     sver;      // software version
 | 
						|
  int64_t     dnodeVer;  // dnode table version in sdb
 | 
						|
  int32_t     dnodeId;
 | 
						|
  int64_t     clusterId;
 | 
						|
  int64_t     rebootTime;
 | 
						|
  int64_t     updateTime;
 | 
						|
  float       numOfCores;
 | 
						|
  int32_t     numOfSupportVnodes;
 | 
						|
  int64_t     memTotal;
 | 
						|
  int64_t     memAvail;
 | 
						|
  char        dnodeEp[TSDB_EP_LEN];
 | 
						|
  SMnodeLoad  mload;
 | 
						|
  SQnodeLoad  qload;
 | 
						|
  SClusterCfg clusterCfg;
 | 
						|
  SArray*     pVloads;  // array of SVnodeLoad
 | 
						|
  int32_t     statusSeq;
 | 
						|
} SStatusReq;
 | 
						|
 | 
						|
int32_t tSerializeSStatusReq(void* buf, int32_t bufLen, SStatusReq* pReq);
 | 
						|
int32_t tDeserializeSStatusReq(void* buf, int32_t bufLen, SStatusReq* pReq);
 | 
						|
void    tFreeSStatusReq(SStatusReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
  int64_t clusterId;
 | 
						|
} SDnodeCfg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t id;
 | 
						|
  int8_t  isMnode;
 | 
						|
  SEp     ep;
 | 
						|
} SDnodeEp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t id;
 | 
						|
  int8_t  isMnode;
 | 
						|
  SEp     ep;
 | 
						|
  char    active[TSDB_ACTIVE_KEY_LEN];
 | 
						|
  char    connActive[TSDB_CONN_ACTIVE_KEY_LEN];
 | 
						|
} SDnodeInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t   dnodeVer;
 | 
						|
  SDnodeCfg dnodeCfg;
 | 
						|
  SArray*   pDnodeEps;  // Array of SDnodeEp
 | 
						|
  int32_t   statusSeq;
 | 
						|
} SStatusRsp;
 | 
						|
 | 
						|
int32_t tSerializeSStatusRsp(void* buf, int32_t bufLen, SStatusRsp* pRsp);
 | 
						|
int32_t tDeserializeSStatusRsp(void* buf, int32_t bufLen, SStatusRsp* pRsp);
 | 
						|
void    tFreeSStatusRsp(SStatusRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t reserved;
 | 
						|
} SMTimerReq;
 | 
						|
 | 
						|
int32_t tSerializeSMTimerMsg(void* buf, int32_t bufLen, SMTimerReq* pReq);
 | 
						|
int32_t tDeserializeSMTimerMsg(void* buf, int32_t bufLen, SMTimerReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t tick;
 | 
						|
} SMStreamTickReq;
 | 
						|
 | 
						|
int32_t tSerializeSMStreamTickMsg(void* buf, int32_t bufLen, SMStreamTickReq* pReq);
 | 
						|
int32_t tDeserializeSMStreamTickMsg(void* buf, int32_t bufLen, SMStreamTickReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  id;
 | 
						|
  uint16_t port;                 // node sync Port
 | 
						|
  char     fqdn[TSDB_FQDN_LEN];  // node FQDN
 | 
						|
} SReplica;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  vgId;
 | 
						|
  char     db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t  dbUid;
 | 
						|
  int32_t  vgVersion;
 | 
						|
  int32_t  numOfStables;
 | 
						|
  int32_t  buffer;
 | 
						|
  int32_t  pageSize;
 | 
						|
  int32_t  pages;
 | 
						|
  int32_t  cacheLastSize;
 | 
						|
  int32_t  daysPerFile;
 | 
						|
  int32_t  daysToKeep0;
 | 
						|
  int32_t  daysToKeep1;
 | 
						|
  int32_t  daysToKeep2;
 | 
						|
  int32_t  minRows;
 | 
						|
  int32_t  maxRows;
 | 
						|
  int32_t  walFsyncPeriod;
 | 
						|
  uint32_t hashBegin;
 | 
						|
  uint32_t hashEnd;
 | 
						|
  int8_t   hashMethod;
 | 
						|
  int8_t   walLevel;
 | 
						|
  int8_t   precision;
 | 
						|
  int8_t   compression;
 | 
						|
  int8_t   strict;
 | 
						|
  int8_t   cacheLast;
 | 
						|
  int8_t   isTsma;
 | 
						|
  int8_t   replica;
 | 
						|
  int8_t   selfIndex;
 | 
						|
  SReplica replicas[TSDB_MAX_REPLICA];
 | 
						|
  int32_t  numOfRetensions;
 | 
						|
  SArray*  pRetensions;  // SRetention
 | 
						|
  void*    pTsma;
 | 
						|
  int32_t  walRetentionPeriod;
 | 
						|
  int64_t  walRetentionSize;
 | 
						|
  int32_t  walRollPeriod;
 | 
						|
  int64_t  walSegmentSize;
 | 
						|
  int16_t  sstTrigger;
 | 
						|
  int16_t  hashPrefix;
 | 
						|
  int16_t  hashSuffix;
 | 
						|
  int32_t  tsdbPageSize;
 | 
						|
  int64_t  reserved[8];
 | 
						|
  int8_t   learnerReplica;
 | 
						|
  int8_t   learnerSelfIndex;
 | 
						|
  SReplica learnerReplicas[TSDB_MAX_LEARNER_REPLICA];
 | 
						|
  int32_t  changeVersion;
 | 
						|
} SCreateVnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateVnodeReq(void* buf, int32_t bufLen, SCreateVnodeReq* pReq);
 | 
						|
int32_t tDeserializeSCreateVnodeReq(void* buf, int32_t bufLen, SCreateVnodeReq* pReq);
 | 
						|
int32_t tFreeSCreateVnodeReq(SCreateVnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int32_t dnodeId;
 | 
						|
  int64_t dbUid;
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t reserved[8];
 | 
						|
} SDropVnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropVnodeReq(void* buf, int32_t bufLen, SDropVnodeReq* pReq);
 | 
						|
int32_t tDeserializeSDropVnodeReq(void* buf, int32_t bufLen, SDropVnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    colName[TSDB_COL_NAME_LEN];
 | 
						|
  char    stb[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int64_t stbUid;
 | 
						|
  int64_t dbUid;
 | 
						|
  int64_t reserved[8];
 | 
						|
} SDropIndexReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropIdxReq(void* buf, int32_t bufLen, SDropIndexReq* pReq);
 | 
						|
int32_t tDeserializeSDropIdxReq(void* buf, int32_t bufLen, SDropIndexReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t     dbUid;
 | 
						|
  char        db[TSDB_DB_FNAME_LEN];
 | 
						|
  int64_t     compactStartTime;
 | 
						|
  STimeWindow tw;
 | 
						|
} SCompactVnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSCompactVnodeReq(void* buf, int32_t bufLen, SCompactVnodeReq* pReq);
 | 
						|
int32_t tDeserializeSCompactVnodeReq(void* buf, int32_t bufLen, SCompactVnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgVersion;
 | 
						|
  int32_t buffer;
 | 
						|
  int32_t pageSize;
 | 
						|
  int32_t pages;
 | 
						|
  int32_t cacheLastSize;
 | 
						|
  int32_t daysPerFile;
 | 
						|
  int32_t daysToKeep0;
 | 
						|
  int32_t daysToKeep1;
 | 
						|
  int32_t daysToKeep2;
 | 
						|
  int32_t walFsyncPeriod;
 | 
						|
  int8_t  walLevel;
 | 
						|
  int8_t  strict;
 | 
						|
  int8_t  cacheLast;
 | 
						|
  int64_t reserved[8];
 | 
						|
  // 1st modification
 | 
						|
  int16_t sttTrigger;
 | 
						|
  int32_t minRows;
 | 
						|
  // 2nd modification
 | 
						|
  int32_t walRetentionPeriod;
 | 
						|
  int32_t walRetentionSize;
 | 
						|
} SAlterVnodeConfigReq;
 | 
						|
 | 
						|
int32_t tSerializeSAlterVnodeConfigReq(void* buf, int32_t bufLen, SAlterVnodeConfigReq* pReq);
 | 
						|
int32_t tDeserializeSAlterVnodeConfigReq(void* buf, int32_t bufLen, SAlterVnodeConfigReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  vgId;
 | 
						|
  int8_t   strict;
 | 
						|
  int8_t   selfIndex;
 | 
						|
  int8_t   replica;
 | 
						|
  SReplica replicas[TSDB_MAX_REPLICA];
 | 
						|
  int64_t  reserved[8];
 | 
						|
  int8_t   learnerSelfIndex;
 | 
						|
  int8_t   learnerReplica;
 | 
						|
  SReplica learnerReplicas[TSDB_MAX_LEARNER_REPLICA];
 | 
						|
  int32_t  changeVersion;
 | 
						|
} SAlterVnodeReplicaReq, SAlterVnodeTypeReq, SCheckLearnCatchupReq;
 | 
						|
 | 
						|
int32_t tSerializeSAlterVnodeReplicaReq(void* buf, int32_t bufLen, SAlterVnodeReplicaReq* pReq);
 | 
						|
int32_t tDeserializeSAlterVnodeReplicaReq(void* buf, int32_t bufLen, SAlterVnodeReplicaReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int8_t  disable;
 | 
						|
} SDisableVnodeWriteReq;
 | 
						|
 | 
						|
int32_t tSerializeSDisableVnodeWriteReq(void* buf, int32_t bufLen, SDisableVnodeWriteReq* pReq);
 | 
						|
int32_t tDeserializeSDisableVnodeWriteReq(void* buf, int32_t bufLen, SDisableVnodeWriteReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t  srcVgId;
 | 
						|
  int32_t  dstVgId;
 | 
						|
  uint32_t hashBegin;
 | 
						|
  uint32_t hashEnd;
 | 
						|
  int32_t  changeVersion;
 | 
						|
  int32_t  reserved;
 | 
						|
} SAlterVnodeHashRangeReq;
 | 
						|
 | 
						|
int32_t tSerializeSAlterVnodeHashRangeReq(void* buf, int32_t bufLen, SAlterVnodeHashRangeReq* pReq);
 | 
						|
int32_t tDeserializeSAlterVnodeHashRangeReq(void* buf, int32_t bufLen, SAlterVnodeHashRangeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  char     dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  char     tbName[TSDB_TABLE_NAME_LEN];
 | 
						|
} STableInfoReq;
 | 
						|
 | 
						|
int32_t tSerializeSTableInfoReq(void* buf, int32_t bufLen, STableInfoReq* pReq);
 | 
						|
int32_t tDeserializeSTableInfoReq(void* buf, int32_t bufLen, STableInfoReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  metaClone;  // create local clone of the cached table meta
 | 
						|
  int32_t numOfVgroups;
 | 
						|
  int32_t numOfTables;
 | 
						|
  int32_t numOfUdfs;
 | 
						|
  char    tableNames[];
 | 
						|
} SMultiTableInfoReq;
 | 
						|
 | 
						|
// todo refactor
 | 
						|
typedef struct SVgroupInfo {
 | 
						|
  int32_t  vgId;
 | 
						|
  uint32_t hashBegin;
 | 
						|
  uint32_t hashEnd;
 | 
						|
  SEpSet   epSet;
 | 
						|
  union {
 | 
						|
    int32_t numOfTable;  // unit is TSDB_TABLE_NUM_UNIT
 | 
						|
    int32_t taskId;      // used in stream
 | 
						|
  };
 | 
						|
} SVgroupInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t     numOfVgroups;
 | 
						|
  SVgroupInfo vgroups[];
 | 
						|
} SVgroupsInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  STableMetaRsp* pMeta;
 | 
						|
} SMAlterStbRsp;
 | 
						|
 | 
						|
int32_t tEncodeSMAlterStbRsp(SEncoder* pEncoder, const SMAlterStbRsp* pRsp);
 | 
						|
int32_t tDecodeSMAlterStbRsp(SDecoder* pDecoder, SMAlterStbRsp* pRsp);
 | 
						|
void    tFreeSMAlterStbRsp(SMAlterStbRsp* pRsp);
 | 
						|
 | 
						|
int32_t tSerializeSTableMetaRsp(void* buf, int32_t bufLen, STableMetaRsp* pRsp);
 | 
						|
int32_t tDeserializeSTableMetaRsp(void* buf, int32_t bufLen, STableMetaRsp* pRsp);
 | 
						|
void    tFreeSTableMetaRsp(void* pRsp);
 | 
						|
void    tFreeSTableIndexRsp(void* info);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* pMetaRsp;   // Array of STableMetaRsp
 | 
						|
  SArray* pIndexRsp;  // Array of STableIndexRsp;
 | 
						|
} SSTbHbRsp;
 | 
						|
 | 
						|
int32_t tSerializeSSTbHbRsp(void* buf, int32_t bufLen, SSTbHbRsp* pRsp);
 | 
						|
int32_t tDeserializeSSTbHbRsp(void* buf, int32_t bufLen, SSTbHbRsp* pRsp);
 | 
						|
void    tFreeSSTbHbRsp(SSTbHbRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t numOfTables;
 | 
						|
  int32_t numOfVgroup;
 | 
						|
  int32_t numOfUdf;
 | 
						|
  int32_t contLen;
 | 
						|
  int8_t  compressed;  // denote if compressed or not
 | 
						|
  int32_t rawLen;      // size before compress
 | 
						|
  uint8_t metaClone;   // make meta clone after retrieve meta from mnode
 | 
						|
  char    meta[];
 | 
						|
} SMultiTableMeta;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dataLen;
 | 
						|
  char    name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  char*   data;
 | 
						|
} STagData;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t useless;  // useless
 | 
						|
} SShowVariablesReq;
 | 
						|
 | 
						|
int32_t tSerializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq);
 | 
						|
int32_t tDeserializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char name[TSDB_CONFIG_OPTION_LEN + 1];
 | 
						|
  char value[TSDB_CONFIG_VALUE_LEN + 1];
 | 
						|
  char scope[TSDB_CONFIG_SCOPE_LEN + 1];
 | 
						|
} SVariablesInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* variables;  // SArray<SVariablesInfo>
 | 
						|
} SShowVariablesRsp;
 | 
						|
 | 
						|
int32_t tSerializeSShowVariablesRsp(void* buf, int32_t bufLen, SShowVariablesRsp* pReq);
 | 
						|
int32_t tDeserializeSShowVariablesRsp(void* buf, int32_t bufLen, SShowVariablesRsp* pReq);
 | 
						|
 | 
						|
void tFreeSShowVariablesRsp(SShowVariablesRsp* pRsp);
 | 
						|
 | 
						|
/*
 | 
						|
 * sql: show tables like '%a_%'
 | 
						|
 * payload is the query condition, e.g., '%a_%'
 | 
						|
 * payloadLen is the length of payload
 | 
						|
 */
 | 
						|
typedef struct {
 | 
						|
  int32_t type;
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  int32_t payloadLen;
 | 
						|
  char*   payload;
 | 
						|
} SShowReq;
 | 
						|
 | 
						|
int32_t tSerializeSShowReq(void* buf, int32_t bufLen, SShowReq* pReq);
 | 
						|
int32_t tDeserializeSShowReq(void* buf, int32_t bufLen, SShowReq* pReq);
 | 
						|
void    tFreeSShowReq(SShowReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t       showId;
 | 
						|
  STableMetaRsp tableMeta;
 | 
						|
} SShowRsp, SVShowTablesRsp;
 | 
						|
 | 
						|
int32_t tSerializeSShowRsp(void* buf, int32_t bufLen, SShowRsp* pRsp);
 | 
						|
int32_t tDeserializeSShowRsp(void* buf, int32_t bufLen, SShowRsp* pRsp);
 | 
						|
void    tFreeSShowRsp(SShowRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    db[TSDB_DB_FNAME_LEN];
 | 
						|
  char    tb[TSDB_TABLE_NAME_LEN];
 | 
						|
  char    user[TSDB_USER_LEN];
 | 
						|
  char    filterTb[TSDB_TABLE_NAME_LEN];
 | 
						|
  int64_t showId;
 | 
						|
} SRetrieveTableReq;
 | 
						|
 | 
						|
typedef struct SSysTableSchema {
 | 
						|
  int8_t   type;
 | 
						|
  col_id_t colId;
 | 
						|
  int32_t  bytes;
 | 
						|
} SSysTableSchema;
 | 
						|
 | 
						|
int32_t tSerializeSRetrieveTableReq(void* buf, int32_t bufLen, SRetrieveTableReq* pReq);
 | 
						|
int32_t tDeserializeSRetrieveTableReq(void* buf, int32_t bufLen, SRetrieveTableReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t useconds;
 | 
						|
  int8_t  completed;  // all results are returned to client
 | 
						|
  int8_t  precision;
 | 
						|
  int8_t  compressed;
 | 
						|
  int8_t  streamBlockType;
 | 
						|
  int32_t compLen;
 | 
						|
  int32_t numOfBlocks;
 | 
						|
  int64_t numOfRows;  // from int32_t change to int64_t
 | 
						|
  int64_t numOfCols;
 | 
						|
  int64_t skey;
 | 
						|
  int64_t ekey;
 | 
						|
  int64_t version;                         // for stream
 | 
						|
  TSKEY   watermark;                       // for stream
 | 
						|
  char    parTbName[TSDB_TABLE_NAME_LEN];  // for stream
 | 
						|
  char    data[];
 | 
						|
} SRetrieveTableRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t handle;
 | 
						|
  int64_t useconds;
 | 
						|
  int8_t  completed;  // all results are returned to client
 | 
						|
  int8_t  precision;
 | 
						|
  int8_t  compressed;
 | 
						|
  int32_t compLen;
 | 
						|
  int32_t numOfRows;
 | 
						|
  char    data[];
 | 
						|
} SRetrieveMetaTableRsp;
 | 
						|
 | 
						|
typedef struct SExplainExecInfo {
 | 
						|
  double   startupCost;
 | 
						|
  double   totalCost;
 | 
						|
  uint64_t numOfRows;
 | 
						|
  uint32_t verboseLen;
 | 
						|
  void*    verboseInfo;
 | 
						|
} SExplainExecInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t           numOfPlans;
 | 
						|
  SExplainExecInfo* subplanInfo;
 | 
						|
} SExplainRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SExplainRsp rsp;
 | 
						|
  uint64_t    qId;
 | 
						|
  uint64_t    tId;
 | 
						|
  int64_t     rId;
 | 
						|
  int32_t     eId;
 | 
						|
} SExplainLocalRsp;
 | 
						|
 | 
						|
typedef struct STableScanAnalyzeInfo {
 | 
						|
  uint64_t totalRows;
 | 
						|
  uint64_t totalCheckedRows;
 | 
						|
  uint32_t totalBlocks;
 | 
						|
  uint32_t loadBlocks;
 | 
						|
  uint32_t loadBlockStatis;
 | 
						|
  uint32_t skipBlocks;
 | 
						|
  uint32_t filterOutBlocks;
 | 
						|
  double   elapsedTime;
 | 
						|
  double   filterTime;
 | 
						|
} STableScanAnalyzeInfo;
 | 
						|
 | 
						|
int32_t tSerializeSExplainRsp(void* buf, int32_t bufLen, SExplainRsp* pRsp);
 | 
						|
int32_t tDeserializeSExplainRsp(void* buf, int32_t bufLen, SExplainRsp* pRsp);
 | 
						|
void    tFreeSExplainRsp(SExplainRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    fqdn[TSDB_FQDN_LEN];  // end point, hostname:port
 | 
						|
  int32_t port;
 | 
						|
} SCreateDnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateDnodeReq(void* buf, int32_t bufLen, SCreateDnodeReq* pReq);
 | 
						|
int32_t tDeserializeSCreateDnodeReq(void* buf, int32_t bufLen, SCreateDnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
  char    fqdn[TSDB_FQDN_LEN];
 | 
						|
  int32_t port;
 | 
						|
  int8_t  force;
 | 
						|
  int8_t  unsafe;
 | 
						|
} SDropDnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropDnodeReq(void* buf, int32_t bufLen, SDropDnodeReq* pReq);
 | 
						|
int32_t tDeserializeSDropDnodeReq(void* buf, int32_t bufLen, SDropDnodeReq* pReq);
 | 
						|
 | 
						|
enum {
 | 
						|
  RESTORE_TYPE__ALL = 1,
 | 
						|
  RESTORE_TYPE__MNODE,
 | 
						|
  RESTORE_TYPE__VNODE,
 | 
						|
  RESTORE_TYPE__QNODE,
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
  int8_t  restoreType;
 | 
						|
} SRestoreDnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSRestoreDnodeReq(void* buf, int32_t bufLen, SRestoreDnodeReq* pReq);
 | 
						|
int32_t tDeserializeSRestoreDnodeReq(void* buf, int32_t bufLen, SRestoreDnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
  char    config[TSDB_DNODE_CONFIG_LEN];
 | 
						|
  char    value[TSDB_DNODE_VALUE_LEN];
 | 
						|
} SMCfgDnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSMCfgDnodeReq(void* buf, int32_t bufLen, SMCfgDnodeReq* pReq);
 | 
						|
int32_t tDeserializeSMCfgDnodeReq(void* buf, int32_t bufLen, SMCfgDnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char config[TSDB_DNODE_CONFIG_LEN];
 | 
						|
  char value[TSDB_DNODE_VALUE_LEN];
 | 
						|
} SDCfgDnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSDCfgDnodeReq(void* buf, int32_t bufLen, SDCfgDnodeReq* pReq);
 | 
						|
int32_t tDeserializeSDCfgDnodeReq(void* buf, int32_t bufLen, SDCfgDnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t dnodeId;
 | 
						|
} SMCreateMnodeReq, SMDropMnodeReq, SDDropMnodeReq, SMCreateQnodeReq, SMDropQnodeReq, SDCreateQnodeReq, SDDropQnodeReq,
 | 
						|
    SMCreateSnodeReq, SMDropSnodeReq, SDCreateSnodeReq, SDDropSnodeReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateDropMQSNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
 | 
						|
int32_t tDeserializeSCreateDropMQSNodeReq(void* buf, int32_t bufLen, SMCreateQnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t   replica;
 | 
						|
  SReplica replicas[TSDB_MAX_REPLICA];
 | 
						|
  int8_t   learnerReplica;
 | 
						|
  SReplica learnerReplicas[TSDB_MAX_LEARNER_REPLICA];
 | 
						|
  int64_t  lastIndex;
 | 
						|
} SDCreateMnodeReq, SDAlterMnodeReq, SDAlterMnodeTypeReq;
 | 
						|
 | 
						|
int32_t tSerializeSDCreateMnodeReq(void* buf, int32_t bufLen, SDCreateMnodeReq* pReq);
 | 
						|
int32_t tDeserializeSDCreateMnodeReq(void* buf, int32_t bufLen, SDCreateMnodeReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char queryStrId[TSDB_QUERY_ID_LEN];
 | 
						|
} SKillQueryReq;
 | 
						|
 | 
						|
int32_t tSerializeSKillQueryReq(void* buf, int32_t bufLen, SKillQueryReq* pReq);
 | 
						|
int32_t tDeserializeSKillQueryReq(void* buf, int32_t bufLen, SKillQueryReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  uint32_t connId;
 | 
						|
} SKillConnReq;
 | 
						|
 | 
						|
int32_t tSerializeSKillConnReq(void* buf, int32_t bufLen, SKillConnReq* pReq);
 | 
						|
int32_t tDeserializeSKillConnReq(void* buf, int32_t bufLen, SKillConnReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t transId;
 | 
						|
} SKillTransReq;
 | 
						|
 | 
						|
int32_t tSerializeSKillTransReq(void* buf, int32_t bufLen, SKillTransReq* pReq);
 | 
						|
int32_t tDeserializeSKillTransReq(void* buf, int32_t bufLen, SKillTransReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t useless;  // useless
 | 
						|
} SBalanceVgroupReq;
 | 
						|
 | 
						|
int32_t tSerializeSBalanceVgroupReq(void* buf, int32_t bufLen, SBalanceVgroupReq* pReq);
 | 
						|
int32_t tDeserializeSBalanceVgroupReq(void* buf, int32_t bufLen, SBalanceVgroupReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId1;
 | 
						|
  int32_t vgId2;
 | 
						|
} SMergeVgroupReq;
 | 
						|
 | 
						|
int32_t tSerializeSMergeVgroupReq(void* buf, int32_t bufLen, SMergeVgroupReq* pReq);
 | 
						|
int32_t tDeserializeSMergeVgroupReq(void* buf, int32_t bufLen, SMergeVgroupReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int32_t dnodeId1;
 | 
						|
  int32_t dnodeId2;
 | 
						|
  int32_t dnodeId3;
 | 
						|
} SRedistributeVgroupReq;
 | 
						|
 | 
						|
int32_t tSerializeSRedistributeVgroupReq(void* buf, int32_t bufLen, SRedistributeVgroupReq* pReq);
 | 
						|
int32_t tDeserializeSRedistributeVgroupReq(void* buf, int32_t bufLen, SRedistributeVgroupReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t useless;
 | 
						|
} SBalanceVgroupLeaderReq;
 | 
						|
 | 
						|
int32_t tSerializeSBalanceVgroupLeaderReq(void* buf, int32_t bufLen, SBalanceVgroupLeaderReq* pReq);
 | 
						|
int32_t tDeserializeSBalanceVgroupLeaderReq(void* buf, int32_t bufLen, SBalanceVgroupLeaderReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
} SForceBecomeFollowerReq;
 | 
						|
 | 
						|
int32_t tSerializeSForceBecomeFollowerReq(void* buf, int32_t bufLen, SForceBecomeFollowerReq* pReq);
 | 
						|
int32_t tDeserializeSForceBecomeFollowerReq(void* buf, int32_t bufLen, SForceBecomeFollowerReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
} SSplitVgroupReq;
 | 
						|
 | 
						|
int32_t tSerializeSSplitVgroupReq(void* buf, int32_t bufLen, SSplitVgroupReq* pReq);
 | 
						|
int32_t tDeserializeSSplitVgroupReq(void* buf, int32_t bufLen, SSplitVgroupReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char user[TSDB_USER_LEN];
 | 
						|
  char spi;
 | 
						|
  char encrypt;
 | 
						|
  char secret[TSDB_PASSWORD_LEN];
 | 
						|
  char ckey[TSDB_PASSWORD_LEN];
 | 
						|
} SAuthReq, SAuthRsp;
 | 
						|
 | 
						|
int32_t tSerializeSAuthReq(void* buf, int32_t bufLen, SAuthReq* pReq);
 | 
						|
int32_t tDeserializeSAuthReq(void* buf, int32_t bufLen, SAuthReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t statusCode;
 | 
						|
  char    details[1024];
 | 
						|
} SServerStatusRsp;
 | 
						|
 | 
						|
int32_t tSerializeSServerStatusRsp(void* buf, int32_t bufLen, SServerStatusRsp* pRsp);
 | 
						|
int32_t tDeserializeSServerStatusRsp(void* buf, int32_t bufLen, SServerStatusRsp* pRsp);
 | 
						|
 | 
						|
/**
 | 
						|
 * The layout of the query message payload is as following:
 | 
						|
 * +--------------------+---------------------------------+
 | 
						|
 * |Sql statement       | Physical plan                   |
 | 
						|
 * |(denoted by sqlLen) |(In JSON, denoted by contentLen) |
 | 
						|
 * +--------------------+---------------------------------+
 | 
						|
 */
 | 
						|
typedef struct SSubQueryMsg {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int64_t  refId;
 | 
						|
  int32_t  execId;
 | 
						|
  int32_t  msgMask;
 | 
						|
  int8_t   taskType;
 | 
						|
  int8_t   explain;
 | 
						|
  int8_t   needFetch;
 | 
						|
  uint32_t sqlLen;
 | 
						|
  char*    sql;
 | 
						|
  uint32_t msgLen;
 | 
						|
  char*    msg;
 | 
						|
} SSubQueryMsg;
 | 
						|
 | 
						|
int32_t tSerializeSSubQueryMsg(void* buf, int32_t bufLen, SSubQueryMsg* pReq);
 | 
						|
int32_t tDeserializeSSubQueryMsg(void* buf, int32_t bufLen, SSubQueryMsg* pReq);
 | 
						|
void    tFreeSSubQueryMsg(SSubQueryMsg* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
} SSinkDataReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int32_t  execId;
 | 
						|
} SQueryContinueReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
} SResReadyReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t code;
 | 
						|
  char    tbFName[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int32_t sversion;
 | 
						|
  int32_t tversion;
 | 
						|
} SResReadyRsp;
 | 
						|
 | 
						|
 | 
						|
typedef struct SOperatorParam {
 | 
						|
  int32_t             opType;
 | 
						|
  int32_t             downstreamIdx;
 | 
						|
  void*               value;
 | 
						|
  SArray*             pChildren; //SArray<SOperatorParam*>
 | 
						|
} SOperatorParam;
 | 
						|
 | 
						|
typedef struct STableScanOperatorParam {
 | 
						|
  bool                tableSeq;
 | 
						|
  SArray*             pUidList;
 | 
						|
} STableScanOperatorParam;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead        header;
 | 
						|
  uint64_t        sId;
 | 
						|
  uint64_t        queryId;
 | 
						|
  uint64_t        taskId;
 | 
						|
  int32_t         execId;
 | 
						|
  SOperatorParam* pOpParam;
 | 
						|
} SResFetchReq;
 | 
						|
 | 
						|
int32_t tSerializeSResFetchReq(void* buf, int32_t bufLen, SResFetchReq* pReq);
 | 
						|
int32_t tDeserializeSResFetchReq(void* buf, int32_t bufLen, SResFetchReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
} SSchTasksStatusReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int64_t  refId;
 | 
						|
  int32_t  execId;
 | 
						|
  int8_t   status;
 | 
						|
} STaskStatus;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t refId;
 | 
						|
  SArray* taskStatus;  // SArray<STaskStatus>
 | 
						|
} SSchedulerStatusRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int8_t   action;
 | 
						|
} STaskAction;
 | 
						|
 | 
						|
typedef struct SQueryNodeEpId {
 | 
						|
  int32_t nodeId;  // vgId or qnodeId
 | 
						|
  SEp     ep;
 | 
						|
} SQueryNodeEpId;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead       header;
 | 
						|
  uint64_t       sId;
 | 
						|
  SQueryNodeEpId epId;
 | 
						|
  SArray*        taskAction;  // SArray<STaskAction>
 | 
						|
} SSchedulerHbReq;
 | 
						|
 | 
						|
int32_t tSerializeSSchedulerHbReq(void* buf, int32_t bufLen, SSchedulerHbReq* pReq);
 | 
						|
int32_t tDeserializeSSchedulerHbReq(void* buf, int32_t bufLen, SSchedulerHbReq* pReq);
 | 
						|
void    tFreeSSchedulerHbReq(SSchedulerHbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SQueryNodeEpId epId;
 | 
						|
  SArray*        taskStatus;  // SArray<STaskStatus>
 | 
						|
} SSchedulerHbRsp;
 | 
						|
 | 
						|
int32_t tSerializeSSchedulerHbRsp(void* buf, int32_t bufLen, SSchedulerHbRsp* pRsp);
 | 
						|
int32_t tDeserializeSSchedulerHbRsp(void* buf, int32_t bufLen, SSchedulerHbRsp* pRsp);
 | 
						|
void    tFreeSSchedulerHbRsp(SSchedulerHbRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int64_t  refId;
 | 
						|
  int32_t  execId;
 | 
						|
} STaskCancelReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t code;
 | 
						|
} STaskCancelRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  int64_t  refId;
 | 
						|
  int32_t  execId;
 | 
						|
} STaskDropReq;
 | 
						|
 | 
						|
int32_t tSerializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq);
 | 
						|
int32_t tDeserializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq);
 | 
						|
int32_t tSerializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq);
 | 
						|
int32_t tDeserializeSTaskDropReq(void* buf, int32_t bufLen, STaskDropReq* pReq);
 | 
						|
 | 
						|
int32_t tSerializeSQueryTableRsp(void* buf, int32_t bufLen, SQueryTableRsp* pRsp);
 | 
						|
int32_t tDeserializeSQueryTableRsp(void* buf, int32_t bufLen, SQueryTableRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t code;
 | 
						|
} STaskDropRsp;
 | 
						|
 | 
						|
#define STREAM_TRIGGER_AT_ONCE        1
 | 
						|
#define STREAM_TRIGGER_WINDOW_CLOSE   2
 | 
						|
#define STREAM_TRIGGER_MAX_DELAY      3
 | 
						|
#define STREAM_DEFAULT_IGNORE_EXPIRED 1
 | 
						|
#define STREAM_FILL_HISTORY_ON        1
 | 
						|
#define STREAM_FILL_HISTORY_OFF       0
 | 
						|
#define STREAM_DEFAULT_FILL_HISTORY   STREAM_FILL_HISTORY_OFF
 | 
						|
#define STREAM_DEFAULT_IGNORE_UPDATE  1
 | 
						|
#define STREAM_CREATE_STABLE_TRUE     1
 | 
						|
#define STREAM_CREATE_STABLE_FALSE    0
 | 
						|
 | 
						|
typedef struct SColLocation {
 | 
						|
  int16_t  slotId;
 | 
						|
  col_id_t colId;
 | 
						|
  int8_t   type;
 | 
						|
} SColLocation;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  char    sourceDB[TSDB_DB_FNAME_LEN];
 | 
						|
  char    targetStbFullName[TSDB_TABLE_FNAME_LEN];
 | 
						|
  char*   sql;
 | 
						|
  char*   ast;
 | 
						|
  int8_t  igExists;
 | 
						|
  int8_t  triggerType;
 | 
						|
  int8_t  igExpired;
 | 
						|
  int8_t  fillHistory;  // process data inserted before creating stream
 | 
						|
  int64_t maxDelay;
 | 
						|
  int64_t watermark;
 | 
						|
  int32_t numOfTags;
 | 
						|
  SArray* pTags;  // array of SField
 | 
						|
  // 3.0.20
 | 
						|
  int64_t checkpointFreq;  // ms
 | 
						|
  // 3.0.2.3
 | 
						|
  int8_t   createStb;
 | 
						|
  uint64_t targetStbUid;
 | 
						|
  SArray*  fillNullCols;  // array of SColLocation
 | 
						|
  int64_t  deleteMark;
 | 
						|
  int8_t   igUpdate;
 | 
						|
  int64_t  lastTs;
 | 
						|
} SCMCreateStreamReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t streamId;
 | 
						|
} SCMCreateStreamRsp;
 | 
						|
 | 
						|
int32_t tSerializeSCMCreateStreamReq(void* buf, int32_t bufLen, const SCMCreateStreamReq* pReq);
 | 
						|
int32_t tDeserializeSCMCreateStreamReq(void* buf, int32_t bufLen, SCMCreateStreamReq* pReq);
 | 
						|
void    tFreeSCMCreateStreamReq(SCMCreateStreamReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  int64_t streamId;
 | 
						|
  char*   sql;
 | 
						|
  char*   executorMsg;
 | 
						|
} SMVCreateStreamReq, SMSCreateStreamReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t streamId;
 | 
						|
} SMVCreateStreamRsp, SMSCreateStreamRsp;
 | 
						|
 | 
						|
enum {
 | 
						|
  TOPIC_SUB_TYPE__DB = 1,
 | 
						|
  TOPIC_SUB_TYPE__TABLE,
 | 
						|
  TOPIC_SUB_TYPE__COLUMN,
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_TOPIC_FNAME_LEN];  // accout.topic
 | 
						|
  int8_t igExists;
 | 
						|
  int8_t subType;
 | 
						|
  int8_t withMeta;
 | 
						|
  char*  sql;
 | 
						|
  char   subDbName[TSDB_DB_FNAME_LEN];
 | 
						|
  char*  ast;
 | 
						|
  char   subStbName[TSDB_TABLE_FNAME_LEN];
 | 
						|
} SCMCreateTopicReq;
 | 
						|
 | 
						|
int32_t tSerializeSCMCreateTopicReq(void* buf, int32_t bufLen, const SCMCreateTopicReq* pReq);
 | 
						|
int32_t tDeserializeSCMCreateTopicReq(void* buf, int32_t bufLen, SCMCreateTopicReq* pReq);
 | 
						|
void    tFreeSCMCreateTopicReq(SCMCreateTopicReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t topicId;
 | 
						|
} SCMCreateTopicRsp;
 | 
						|
 | 
						|
int32_t tSerializeSCMCreateTopicRsp(void* buf, int32_t bufLen, const SCMCreateTopicRsp* pRsp);
 | 
						|
int32_t tDeserializeSCMCreateTopicRsp(void* buf, int32_t bufLen, SCMCreateTopicRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t consumerId;
 | 
						|
} SMqConsumerLostMsg, SMqConsumerRecoverMsg, SMqConsumerClearMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t consumerId;
 | 
						|
  char    cgroup[TSDB_CGROUP_LEN];
 | 
						|
  char    clientId[256];
 | 
						|
  SArray* topicNames;  // SArray<char**>
 | 
						|
 | 
						|
  int8_t         withTbName;
 | 
						|
  int8_t         autoCommit;
 | 
						|
  int32_t        autoCommitInterval;
 | 
						|
  int8_t         resetOffsetCfg;
 | 
						|
} SCMSubscribeReq;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tSerializeSCMSubscribeReq(void** buf, const SCMSubscribeReq* pReq) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI64(buf, pReq->consumerId);
 | 
						|
  tlen += taosEncodeString(buf, pReq->cgroup);
 | 
						|
  tlen += taosEncodeString(buf, pReq->clientId);
 | 
						|
 | 
						|
  int32_t topicNum = taosArrayGetSize(pReq->topicNames);
 | 
						|
  tlen += taosEncodeFixedI32(buf, topicNum);
 | 
						|
 | 
						|
  for (int32_t i = 0; i < topicNum; i++) {
 | 
						|
    tlen += taosEncodeString(buf, (char*)taosArrayGetP(pReq->topicNames, i));
 | 
						|
  }
 | 
						|
 | 
						|
  tlen += taosEncodeFixedI8(buf, pReq->withTbName);
 | 
						|
  tlen += taosEncodeFixedI8(buf, pReq->autoCommit);
 | 
						|
  tlen += taosEncodeFixedI32(buf, pReq->autoCommitInterval);
 | 
						|
  tlen += taosEncodeFixedI8(buf, pReq->resetOffsetCfg);
 | 
						|
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tDeserializeSCMSubscribeReq(void* buf, SCMSubscribeReq* pReq) {
 | 
						|
  buf = taosDecodeFixedI64(buf, &pReq->consumerId);
 | 
						|
  buf = taosDecodeStringTo(buf, pReq->cgroup);
 | 
						|
  buf = taosDecodeStringTo(buf, pReq->clientId);
 | 
						|
 | 
						|
  int32_t topicNum;
 | 
						|
  buf = taosDecodeFixedI32(buf, &topicNum);
 | 
						|
 | 
						|
  pReq->topicNames = taosArrayInit(topicNum, sizeof(void*));
 | 
						|
  for (int32_t i = 0; i < topicNum; i++) {
 | 
						|
    char* name;
 | 
						|
    buf = taosDecodeString(buf, &name);
 | 
						|
    taosArrayPush(pReq->topicNames, &name);
 | 
						|
  }
 | 
						|
 | 
						|
  buf = taosDecodeFixedI8(buf, &pReq->withTbName);
 | 
						|
  buf = taosDecodeFixedI8(buf, &pReq->autoCommit);
 | 
						|
  buf = taosDecodeFixedI32(buf, &pReq->autoCommitInterval);
 | 
						|
  buf = taosDecodeFixedI8(buf, &pReq->resetOffsetCfg);
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct SMqSubTopic {
 | 
						|
  int32_t vgId;
 | 
						|
  int64_t topicId;
 | 
						|
  SEpSet  epSet;
 | 
						|
} SMqSubTopic;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t     topicNum;
 | 
						|
  SMqSubTopic topics[];
 | 
						|
} SCMSubscribeRsp;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tSerializeSCMSubscribeRsp(void** buf, const SCMSubscribeRsp* pRsp) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI32(buf, pRsp->topicNum);
 | 
						|
  for (int32_t i = 0; i < pRsp->topicNum; i++) {
 | 
						|
    tlen += taosEncodeFixedI32(buf, pRsp->topics[i].vgId);
 | 
						|
    tlen += taosEncodeFixedI64(buf, pRsp->topics[i].topicId);
 | 
						|
    tlen += taosEncodeSEpSet(buf, &pRsp->topics[i].epSet);
 | 
						|
  }
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tDeserializeSCMSubscribeRsp(void* buf, SCMSubscribeRsp* pRsp) {
 | 
						|
  buf = taosDecodeFixedI32(buf, &pRsp->topicNum);
 | 
						|
  for (int32_t i = 0; i < pRsp->topicNum; i++) {
 | 
						|
    buf = taosDecodeFixedI32(buf, &pRsp->topics[i].vgId);
 | 
						|
    buf = taosDecodeFixedI64(buf, &pRsp->topics[i].topicId);
 | 
						|
    buf = taosDecodeSEpSet(buf, &pRsp->topics[i].epSet);
 | 
						|
  }
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t topicId;
 | 
						|
  int64_t consumerId;
 | 
						|
  int64_t consumerGroupId;
 | 
						|
  int64_t offset;
 | 
						|
  char*   sql;
 | 
						|
  char*   logicalPlan;
 | 
						|
  char*   physicalPlan;
 | 
						|
} SMVSubscribeReq;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tSerializeSMVSubscribeReq(void** buf, SMVSubscribeReq* pReq) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI64(buf, pReq->topicId);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pReq->consumerId);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pReq->consumerGroupId);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pReq->offset);
 | 
						|
  tlen += taosEncodeString(buf, pReq->sql);
 | 
						|
  tlen += taosEncodeString(buf, pReq->logicalPlan);
 | 
						|
  tlen += taosEncodeString(buf, pReq->physicalPlan);
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tDeserializeSMVSubscribeReq(void* buf, SMVSubscribeReq* pReq) {
 | 
						|
  buf = taosDecodeFixedI64(buf, &pReq->topicId);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pReq->consumerId);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pReq->consumerGroupId);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pReq->offset);
 | 
						|
  buf = taosDecodeString(buf, &pReq->sql);
 | 
						|
  buf = taosDecodeString(buf, &pReq->logicalPlan);
 | 
						|
  buf = taosDecodeString(buf, &pReq->physicalPlan);
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    key[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
  SArray* removedConsumers;  // SArray<int64_t>
 | 
						|
  SArray* newConsumers;      // SArray<int64_t>
 | 
						|
} SMqRebInfo;
 | 
						|
 | 
						|
static FORCE_INLINE SMqRebInfo* tNewSMqRebSubscribe(const char* key) {
 | 
						|
  SMqRebInfo* pRebInfo = (SMqRebInfo*)taosMemoryCalloc(1, sizeof(SMqRebInfo));
 | 
						|
  if (pRebInfo == NULL) {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
  tstrncpy(pRebInfo->key, key, TSDB_SUBSCRIBE_KEY_LEN);
 | 
						|
  pRebInfo->removedConsumers = taosArrayInit(0, sizeof(int64_t));
 | 
						|
  if (pRebInfo->removedConsumers == NULL) {
 | 
						|
    goto _err;
 | 
						|
  }
 | 
						|
  pRebInfo->newConsumers = taosArrayInit(0, sizeof(int64_t));
 | 
						|
  if (pRebInfo->newConsumers == NULL) {
 | 
						|
    goto _err;
 | 
						|
  }
 | 
						|
  return pRebInfo;
 | 
						|
_err:
 | 
						|
  taosArrayDestroy(pRebInfo->removedConsumers);
 | 
						|
  taosArrayDestroy(pRebInfo->newConsumers);
 | 
						|
  taosMemoryFreeClear(pRebInfo);
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
// this message is sent from mnode to mnode(read thread to write thread),
 | 
						|
// so there is no need for serialization or deserialization
 | 
						|
typedef struct {
 | 
						|
  SHashObj* rebSubHash;  // SHashObj<key, SMqRebSubscribe>
 | 
						|
} SMqDoRebalanceMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t streamId;
 | 
						|
  int64_t checkpointId;
 | 
						|
  char    streamName[TSDB_STREAM_FNAME_LEN];
 | 
						|
} SMStreamDoCheckpointMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t status;
 | 
						|
} SMVSubscribeRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMDropTopicReq;
 | 
						|
 | 
						|
int32_t tSerializeSMDropTopicReq(void* buf, int32_t bufLen, SMDropTopicReq* pReq);
 | 
						|
int32_t tDeserializeSMDropTopicReq(void* buf, int32_t bufLen, SMDropTopicReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   topic[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  char   cgroup[TSDB_CGROUP_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMDropCgroupReq;
 | 
						|
 | 
						|
int32_t tSerializeSMDropCgroupReq(void* buf, int32_t bufLen, SMDropCgroupReq* pReq);
 | 
						|
int32_t tDeserializeSMDropCgroupReq(void* buf, int32_t bufLen, SMDropCgroupReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SMDropCgroupRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t  alterType;
 | 
						|
  SSchema schema;
 | 
						|
} SAlterTopicReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  char     name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int64_t  tuid;
 | 
						|
  int32_t  sverson;
 | 
						|
  int32_t  execLen;
 | 
						|
  char*    executor;
 | 
						|
  int32_t  sqlLen;
 | 
						|
  char*    sql;
 | 
						|
} SDCreateTopicReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  char     name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int64_t  tuid;
 | 
						|
} SDDropTopicReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t maxdelay[2];
 | 
						|
  int64_t watermark[2];
 | 
						|
  int64_t deleteMark[2];
 | 
						|
  int32_t qmsgLen[2];
 | 
						|
  char*   qmsg[2];  // pAst:qmsg:SRetention => trigger aggr task1/2
 | 
						|
} SRSmaParam;
 | 
						|
 | 
						|
int32_t tEncodeSRSmaParam(SEncoder* pCoder, const SRSmaParam* pRSmaParam);
 | 
						|
int32_t tDecodeSRSmaParam(SDecoder* pCoder, SRSmaParam* pRSmaParam);
 | 
						|
 | 
						|
// TDMT_VND_CREATE_STB ==============
 | 
						|
typedef struct SVCreateStbReq {
 | 
						|
  char*          name;
 | 
						|
  tb_uid_t       suid;
 | 
						|
  int8_t         rollup;
 | 
						|
  SSchemaWrapper schemaRow;
 | 
						|
  SSchemaWrapper schemaTag;
 | 
						|
  SRSmaParam     rsmaParam;
 | 
						|
  int32_t        alterOriDataLen;
 | 
						|
  void*          alterOriData;
 | 
						|
} SVCreateStbReq;
 | 
						|
 | 
						|
int tEncodeSVCreateStbReq(SEncoder* pCoder, const SVCreateStbReq* pReq);
 | 
						|
int tDecodeSVCreateStbReq(SDecoder* pCoder, SVCreateStbReq* pReq);
 | 
						|
 | 
						|
// TDMT_VND_DROP_STB ==============
 | 
						|
typedef struct SVDropStbReq {
 | 
						|
  char*    name;
 | 
						|
  tb_uid_t suid;
 | 
						|
} SVDropStbReq;
 | 
						|
 | 
						|
int32_t tEncodeSVDropStbReq(SEncoder* pCoder, const SVDropStbReq* pReq);
 | 
						|
int32_t tDecodeSVDropStbReq(SDecoder* pCoder, SVDropStbReq* pReq);
 | 
						|
 | 
						|
// TDMT_VND_CREATE_TABLE ==============
 | 
						|
#define TD_CREATE_IF_NOT_EXISTS 0x1
 | 
						|
typedef struct SVCreateTbReq {
 | 
						|
  int32_t  flags;
 | 
						|
  char*    name;
 | 
						|
  tb_uid_t uid;
 | 
						|
  int64_t  btime;
 | 
						|
  int32_t  ttl;
 | 
						|
  int32_t  commentLen;
 | 
						|
  char*    comment;
 | 
						|
  int8_t   type;
 | 
						|
  union {
 | 
						|
    struct {
 | 
						|
      char*    stbName;  // super table name
 | 
						|
      uint8_t  tagNum;
 | 
						|
      tb_uid_t suid;
 | 
						|
      SArray*  tagName;
 | 
						|
      uint8_t* pTag;
 | 
						|
    } ctb;
 | 
						|
    struct {
 | 
						|
      SSchemaWrapper schemaRow;
 | 
						|
    } ntb;
 | 
						|
  };
 | 
						|
} SVCreateTbReq;
 | 
						|
 | 
						|
int  tEncodeSVCreateTbReq(SEncoder* pCoder, const SVCreateTbReq* pReq);
 | 
						|
int  tDecodeSVCreateTbReq(SDecoder* pCoder, SVCreateTbReq* pReq);
 | 
						|
void tDestroySVCreateTbReq(SVCreateTbReq* pReq, int32_t flags);
 | 
						|
 | 
						|
static FORCE_INLINE void tdDestroySVCreateTbReq(SVCreateTbReq* req) {
 | 
						|
  if (NULL == req) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  taosMemoryFreeClear(req->name);
 | 
						|
  taosMemoryFreeClear(req->comment);
 | 
						|
  if (req->type == TSDB_CHILD_TABLE) {
 | 
						|
    taosMemoryFreeClear(req->ctb.pTag);
 | 
						|
    taosMemoryFreeClear(req->ctb.stbName);
 | 
						|
    taosArrayDestroy(req->ctb.tagName);
 | 
						|
    req->ctb.tagName = NULL;
 | 
						|
  } else if (req->type == TSDB_NORMAL_TABLE) {
 | 
						|
    taosMemoryFreeClear(req->ntb.schemaRow.pSchema);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t nReqs;
 | 
						|
  union {
 | 
						|
    SVCreateTbReq* pReqs;
 | 
						|
    SArray*        pArray;
 | 
						|
  };
 | 
						|
} SVCreateTbBatchReq;
 | 
						|
 | 
						|
int tEncodeSVCreateTbBatchReq(SEncoder* pCoder, const SVCreateTbBatchReq* pReq);
 | 
						|
int tDecodeSVCreateTbBatchReq(SDecoder* pCoder, SVCreateTbBatchReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t        code;
 | 
						|
  STableMetaRsp* pMeta;
 | 
						|
} SVCreateTbRsp, SVUpdateTbRsp;
 | 
						|
 | 
						|
int  tEncodeSVCreateTbRsp(SEncoder* pCoder, const SVCreateTbRsp* pRsp);
 | 
						|
int  tDecodeSVCreateTbRsp(SDecoder* pCoder, SVCreateTbRsp* pRsp);
 | 
						|
void tFreeSVCreateTbRsp(void* param);
 | 
						|
 | 
						|
int32_t tSerializeSVCreateTbReq(void** buf, SVCreateTbReq* pReq);
 | 
						|
void*   tDeserializeSVCreateTbReq(void* buf, SVCreateTbReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t nRsps;
 | 
						|
  union {
 | 
						|
    SVCreateTbRsp* pRsps;
 | 
						|
    SArray*        pArray;
 | 
						|
  };
 | 
						|
} SVCreateTbBatchRsp;
 | 
						|
 | 
						|
int tEncodeSVCreateTbBatchRsp(SEncoder* pCoder, const SVCreateTbBatchRsp* pRsp);
 | 
						|
int tDecodeSVCreateTbBatchRsp(SDecoder* pCoder, SVCreateTbBatchRsp* pRsp);
 | 
						|
 | 
						|
int32_t tSerializeSVCreateTbBatchRsp(void* buf, int32_t bufLen, SVCreateTbBatchRsp* pRsp);
 | 
						|
int32_t tDeserializeSVCreateTbBatchRsp(void* buf, int32_t bufLen, SVCreateTbBatchRsp* pRsp);
 | 
						|
 | 
						|
// TDMT_VND_DROP_TABLE =================
 | 
						|
typedef struct {
 | 
						|
  char*    name;
 | 
						|
  uint64_t suid;  // for tmq in wal format
 | 
						|
  int8_t   igNotExists;
 | 
						|
} SVDropTbReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t code;
 | 
						|
} SVDropTbRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t nReqs;
 | 
						|
  union {
 | 
						|
    SVDropTbReq* pReqs;
 | 
						|
    SArray*      pArray;
 | 
						|
  };
 | 
						|
} SVDropTbBatchReq;
 | 
						|
 | 
						|
int32_t tEncodeSVDropTbBatchReq(SEncoder* pCoder, const SVDropTbBatchReq* pReq);
 | 
						|
int32_t tDecodeSVDropTbBatchReq(SDecoder* pCoder, SVDropTbBatchReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t nRsps;
 | 
						|
  union {
 | 
						|
    SVDropTbRsp* pRsps;
 | 
						|
    SArray*      pArray;
 | 
						|
  };
 | 
						|
} SVDropTbBatchRsp;
 | 
						|
 | 
						|
int32_t tEncodeSVDropTbBatchRsp(SEncoder* pCoder, const SVDropTbBatchRsp* pRsp);
 | 
						|
int32_t tDecodeSVDropTbBatchRsp(SDecoder* pCoder, SVDropTbBatchRsp* pRsp);
 | 
						|
 | 
						|
// TDMT_VND_ALTER_TABLE =====================
 | 
						|
typedef struct {
 | 
						|
  char*   tbName;
 | 
						|
  int8_t  action;
 | 
						|
  char*   colName;
 | 
						|
  int32_t colId;
 | 
						|
  // TSDB_ALTER_TABLE_ADD_COLUMN
 | 
						|
  int8_t  type;
 | 
						|
  int8_t  flags;
 | 
						|
  int32_t bytes;
 | 
						|
  // TSDB_ALTER_TABLE_DROP_COLUMN
 | 
						|
  // TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
 | 
						|
  int8_t  colModType;
 | 
						|
  int32_t colModBytes;
 | 
						|
  // TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME
 | 
						|
  char* colNewName;
 | 
						|
  // TSDB_ALTER_TABLE_UPDATE_TAG_VAL
 | 
						|
  char*    tagName;
 | 
						|
  int8_t   isNull;
 | 
						|
  int8_t   tagType;
 | 
						|
  uint32_t nTagVal;
 | 
						|
  uint8_t* pTagVal;
 | 
						|
  // TSDB_ALTER_TABLE_UPDATE_OPTIONS
 | 
						|
  int8_t  updateTTL;
 | 
						|
  int32_t newTTL;
 | 
						|
  int32_t newCommentLen;
 | 
						|
  char*   newComment;
 | 
						|
  int64_t ctimeMs; // fill by vnode
 | 
						|
} SVAlterTbReq;
 | 
						|
 | 
						|
int32_t tEncodeSVAlterTbReq(SEncoder* pEncoder, const SVAlterTbReq* pReq);
 | 
						|
int32_t tDecodeSVAlterTbReq(SDecoder* pDecoder, SVAlterTbReq* pReq);
 | 
						|
int32_t tDecodeSVAlterTbReqSetCtime(SDecoder* pDecoder, SVAlterTbReq* pReq, int64_t ctimeMs);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t        code;
 | 
						|
  STableMetaRsp* pMeta;
 | 
						|
} SVAlterTbRsp;
 | 
						|
 | 
						|
int32_t tEncodeSVAlterTbRsp(SEncoder* pEncoder, const SVAlterTbRsp* pRsp);
 | 
						|
int32_t tDecodeSVAlterTbRsp(SDecoder* pDecoder, SVAlterTbRsp* pRsp);
 | 
						|
// ======================
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int64_t  uid;
 | 
						|
  int32_t  tid;
 | 
						|
  int16_t  tversion;
 | 
						|
  int16_t  colId;
 | 
						|
  int8_t   type;
 | 
						|
  int16_t  bytes;
 | 
						|
  int32_t  tagValLen;
 | 
						|
  int16_t  numOfTags;
 | 
						|
  int32_t  schemaLen;
 | 
						|
  char     data[];
 | 
						|
} SUpdateTagValReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
} SUpdateTagValRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
} SVShowTablesReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int32_t  id;
 | 
						|
} SVShowTablesFetchReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t useconds;
 | 
						|
  int8_t  completed;  // all results are returned to client
 | 
						|
  int8_t  precision;
 | 
						|
  int8_t  compressed;
 | 
						|
  int32_t compLen;
 | 
						|
  int32_t numOfRows;
 | 
						|
  char    data[];
 | 
						|
} SVShowTablesFetchRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t consumerId;
 | 
						|
  int32_t epoch;
 | 
						|
  char    cgroup[TSDB_CGROUP_LEN];
 | 
						|
} SMqAskEpReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t key;
 | 
						|
  int32_t valueLen;
 | 
						|
  void*   value;
 | 
						|
} SKv;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t tscRid;
 | 
						|
  int8_t  connType;
 | 
						|
} SClientHbKey;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t tid;
 | 
						|
  char    status[TSDB_JOB_STATUS_LEN];
 | 
						|
} SQuerySubDesc;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     sql[TSDB_SHOW_SQL_LEN];
 | 
						|
  uint64_t queryId;
 | 
						|
  int64_t  useconds;
 | 
						|
  int64_t  stime;  // timestamp precision ms
 | 
						|
  int64_t  reqRid;
 | 
						|
  bool     stableQuery;
 | 
						|
  bool     isSubQuery;
 | 
						|
  char     fqdn[TSDB_FQDN_LEN];
 | 
						|
  int32_t  subPlanNum;
 | 
						|
  SArray*  subDesc;  // SArray<SQuerySubDesc>
 | 
						|
} SQueryDesc;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  uint32_t connId;
 | 
						|
  SArray*  queryDesc;  // SArray<SQueryDesc>
 | 
						|
} SQueryHbReqBasic;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  uint32_t connId;
 | 
						|
  uint64_t killRid;
 | 
						|
  int32_t  totalDnodes;
 | 
						|
  int32_t  onlineDnodes;
 | 
						|
  int8_t   killConnection;
 | 
						|
  int8_t   align[3];
 | 
						|
  SEpSet   epSet;
 | 
						|
  SArray*  pQnodeList;
 | 
						|
} SQueryHbRspBasic;
 | 
						|
 | 
						|
typedef struct SAppClusterSummary {
 | 
						|
  uint64_t numOfInsertsReq;
 | 
						|
  uint64_t numOfInsertRows;
 | 
						|
  uint64_t insertElapsedTime;
 | 
						|
  uint64_t insertBytes;  // submit to tsdb since launched.
 | 
						|
 | 
						|
  uint64_t fetchBytes;
 | 
						|
  uint64_t numOfQueryReq;
 | 
						|
  uint64_t queryElapsedTime;
 | 
						|
  uint64_t numOfSlowQueries;
 | 
						|
  uint64_t totalRequests;
 | 
						|
  uint64_t currentRequests;  // the number of SRequestObj
 | 
						|
} SAppClusterSummary;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t            appId;
 | 
						|
  int32_t            pid;
 | 
						|
  char               name[TSDB_APP_NAME_LEN];
 | 
						|
  int64_t            startTime;
 | 
						|
  SAppClusterSummary summary;
 | 
						|
} SAppHbReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SClientHbKey      connKey;
 | 
						|
  int64_t           clusterId;
 | 
						|
  SAppHbReq         app;
 | 
						|
  SQueryHbReqBasic* query;
 | 
						|
  SHashObj*         info;  // hash<Skv.key, Skv>
 | 
						|
} SClientHbReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t reqId;
 | 
						|
  SArray* reqs;  // SArray<SClientHbReq>
 | 
						|
} SClientHbBatchReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SClientHbKey      connKey;
 | 
						|
  int32_t           status;
 | 
						|
  SQueryHbRspBasic* query;
 | 
						|
  SArray*           info;  // Array<Skv>
 | 
						|
} SClientHbRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t reqId;
 | 
						|
  int64_t rspId;
 | 
						|
  int32_t svrTimestamp;
 | 
						|
  SArray* rsps;  // SArray<SClientHbRsp>
 | 
						|
} SClientHbBatchRsp;
 | 
						|
 | 
						|
static FORCE_INLINE uint32_t hbKeyHashFunc(const char* key, uint32_t keyLen) { return taosIntHash_64(key, keyLen); }
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeReqKvHash(SHashObj* info) {
 | 
						|
  void* pIter = taosHashIterate(info, NULL);
 | 
						|
  while (pIter != NULL) {
 | 
						|
    SKv* kv = (SKv*)pIter;
 | 
						|
    taosMemoryFreeClear(kv->value);
 | 
						|
    pIter = taosHashIterate(info, pIter);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientHbQueryDesc(void* pDesc) {
 | 
						|
  SQueryDesc* desc = (SQueryDesc*)pDesc;
 | 
						|
  if (desc->subDesc) {
 | 
						|
    taosArrayDestroy(desc->subDesc);
 | 
						|
    desc->subDesc = NULL;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientHbReq(void* pReq) {
 | 
						|
  SClientHbReq* req = (SClientHbReq*)pReq;
 | 
						|
  if (req->query) {
 | 
						|
    if (req->query->queryDesc) {
 | 
						|
      taosArrayDestroyEx(req->query->queryDesc, tFreeClientHbQueryDesc);
 | 
						|
    }
 | 
						|
    taosMemoryFreeClear(req->query);
 | 
						|
  }
 | 
						|
 | 
						|
  if (req->info) {
 | 
						|
    tFreeReqKvHash(req->info);
 | 
						|
    taosHashCleanup(req->info);
 | 
						|
    req->info = NULL;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
int32_t tSerializeSClientHbBatchReq(void* buf, int32_t bufLen, const SClientHbBatchReq* pReq);
 | 
						|
int32_t tDeserializeSClientHbBatchReq(void* buf, int32_t bufLen, SClientHbBatchReq* pReq);
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientHbBatchReq(void* pReq) {
 | 
						|
  if (pReq == NULL) return;
 | 
						|
  SClientHbBatchReq* req = (SClientHbBatchReq*)pReq;
 | 
						|
  taosArrayDestroyEx(req->reqs, tFreeClientHbReq);
 | 
						|
  taosMemoryFree(pReq);
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientKv(void* pKv) {
 | 
						|
  SKv* kv = (SKv*)pKv;
 | 
						|
  if (kv) {
 | 
						|
    taosMemoryFreeClear(kv->value);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientHbRsp(void* pRsp) {
 | 
						|
  SClientHbRsp* rsp = (SClientHbRsp*)pRsp;
 | 
						|
  if (rsp->query) {
 | 
						|
    taosArrayDestroy(rsp->query->pQnodeList);
 | 
						|
    taosMemoryFreeClear(rsp->query);
 | 
						|
  }
 | 
						|
  if (rsp->info) taosArrayDestroyEx(rsp->info, tFreeClientKv);
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeClientHbBatchRsp(void* pRsp) {
 | 
						|
  SClientHbBatchRsp* rsp = (SClientHbBatchRsp*)pRsp;
 | 
						|
  taosArrayDestroyEx(rsp->rsps, tFreeClientHbRsp);
 | 
						|
}
 | 
						|
 | 
						|
int32_t tSerializeSClientHbBatchRsp(void* buf, int32_t bufLen, const SClientHbBatchRsp* pBatchRsp);
 | 
						|
int32_t tDeserializeSClientHbBatchRsp(void* buf, int32_t bufLen, SClientHbBatchRsp* pBatchRsp);
 | 
						|
void    tFreeSClientHbBatchRsp(SClientHbBatchRsp* pBatchRsp);
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSKv(SEncoder* pEncoder, const SKv* pKv) {
 | 
						|
  if (tEncodeI32(pEncoder, pKv->key) < 0) return -1;
 | 
						|
  if (tEncodeI32(pEncoder, pKv->valueLen) < 0) return -1;
 | 
						|
  if (tEncodeBinary(pEncoder, (uint8_t*)pKv->value, pKv->valueLen) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tDecodeSKv(SDecoder* pDecoder, SKv* pKv) {
 | 
						|
  if (tDecodeI32(pDecoder, &pKv->key) < 0) return -1;
 | 
						|
  if (tDecodeI32(pDecoder, &pKv->valueLen) < 0) return -1;
 | 
						|
  pKv->value = taosMemoryMalloc(pKv->valueLen + 1);
 | 
						|
  if (pKv->value == NULL) return -1;
 | 
						|
  if (tDecodeCStrTo(pDecoder, (char*)pKv->value) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSClientHbKey(SEncoder* pEncoder, const SClientHbKey* pKey) {
 | 
						|
  if (tEncodeI64(pEncoder, pKey->tscRid) < 0) return -1;
 | 
						|
  if (tEncodeI8(pEncoder, pKey->connType) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tDecodeSClientHbKey(SDecoder* pDecoder, SClientHbKey* pKey) {
 | 
						|
  if (tDecodeI64(pDecoder, &pKey->tscRid) < 0) return -1;
 | 
						|
  if (tDecodeI8(pDecoder, &pKey->connType) < 0) return -1;
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  // TODO stas
 | 
						|
} SMqReportVgInfo;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t taosEncodeSMqVgInfo(void** buf, const SMqReportVgInfo* pVgInfo) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI32(buf, pVgInfo->vgId);
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* taosDecodeSMqVgInfo(void* buf, SMqReportVgInfo* pVgInfo) {
 | 
						|
  buf = taosDecodeFixedI32(buf, &pVgInfo->vgId);
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t epoch;
 | 
						|
  int64_t topicUid;
 | 
						|
  char    name[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  SArray* pVgInfo;  // SArray<SMqHbVgInfo>
 | 
						|
} SMqTopicInfo;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t taosEncodeSMqTopicInfoMsg(void** buf, const SMqTopicInfo* pTopicInfo) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI32(buf, pTopicInfo->epoch);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pTopicInfo->topicUid);
 | 
						|
  tlen += taosEncodeString(buf, pTopicInfo->name);
 | 
						|
  int32_t sz = taosArrayGetSize(pTopicInfo->pVgInfo);
 | 
						|
  tlen += taosEncodeFixedI32(buf, sz);
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqReportVgInfo* pVgInfo = (SMqReportVgInfo*)taosArrayGet(pTopicInfo->pVgInfo, i);
 | 
						|
    tlen += taosEncodeSMqVgInfo(buf, pVgInfo);
 | 
						|
  }
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* taosDecodeSMqTopicInfoMsg(void* buf, SMqTopicInfo* pTopicInfo) {
 | 
						|
  buf = taosDecodeFixedI32(buf, &pTopicInfo->epoch);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pTopicInfo->topicUid);
 | 
						|
  buf = taosDecodeStringTo(buf, pTopicInfo->name);
 | 
						|
  int32_t sz;
 | 
						|
  buf = taosDecodeFixedI32(buf, &sz);
 | 
						|
  pTopicInfo->pVgInfo = taosArrayInit(sz, sizeof(SMqReportVgInfo));
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqReportVgInfo vgInfo;
 | 
						|
    buf = taosDecodeSMqVgInfo(buf, &vgInfo);
 | 
						|
    taosArrayPush(pTopicInfo->pVgInfo, &vgInfo);
 | 
						|
  }
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t status;  // ask hb endpoint
 | 
						|
  int32_t epoch;
 | 
						|
  int64_t consumerId;
 | 
						|
  SArray* pTopics;  // SArray<SMqHbTopicInfo>
 | 
						|
} SMqReportReq;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t taosEncodeSMqReportMsg(void** buf, const SMqReportReq* pMsg) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI32(buf, pMsg->status);
 | 
						|
  tlen += taosEncodeFixedI32(buf, pMsg->epoch);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pMsg->consumerId);
 | 
						|
  int32_t sz = taosArrayGetSize(pMsg->pTopics);
 | 
						|
  tlen += taosEncodeFixedI32(buf, sz);
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqTopicInfo* topicInfo = (SMqTopicInfo*)taosArrayGet(pMsg->pTopics, i);
 | 
						|
    tlen += taosEncodeSMqTopicInfoMsg(buf, topicInfo);
 | 
						|
  }
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* taosDecodeSMqReportMsg(void* buf, SMqReportReq* pMsg) {
 | 
						|
  buf = taosDecodeFixedI32(buf, &pMsg->status);
 | 
						|
  buf = taosDecodeFixedI32(buf, &pMsg->epoch);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pMsg->consumerId);
 | 
						|
  int32_t sz;
 | 
						|
  buf = taosDecodeFixedI32(buf, &sz);
 | 
						|
  pMsg->pTopics = taosArrayInit(sz, sizeof(SMqTopicInfo));
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqTopicInfo topicInfo;
 | 
						|
    buf = taosDecodeSMqTopicInfoMsg(buf, &topicInfo);
 | 
						|
    taosArrayPush(pMsg->pTopics, &topicInfo);
 | 
						|
  }
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int64_t  leftForVer;
 | 
						|
  int32_t  vgId;
 | 
						|
  int64_t  consumerId;
 | 
						|
  char     subKey[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
} SMqVDeleteReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SMqVDeleteRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMDropStreamReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SMDropStreamRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int64_t  leftForVer;
 | 
						|
  int64_t  streamId;
 | 
						|
  int32_t  taskId;
 | 
						|
} SVDropStreamTaskReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SVDropStreamTaskRsp;
 | 
						|
 | 
						|
int32_t tSerializeSMDropStreamReq(void* buf, int32_t bufLen, const SMDropStreamReq* pReq);
 | 
						|
int32_t tDeserializeSMDropStreamReq(void* buf, int32_t bufLen, SMDropStreamReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMRecoverStreamReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SMRecoverStreamRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t recoverObjUid;
 | 
						|
  int32_t taskId;
 | 
						|
  int32_t hasCheckPoint;
 | 
						|
} SMVStreamGatherInfoReq;
 | 
						|
 | 
						|
int32_t tSerializeSMRecoverStreamReq(void* buf, int32_t bufLen, const SMRecoverStreamReq* pReq);
 | 
						|
int32_t tDeserializeSMRecoverStreamReq(void* buf, int32_t bufLen, SMRecoverStreamReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t leftForVer;
 | 
						|
  int32_t vgId;
 | 
						|
  int64_t oldConsumerId;
 | 
						|
  int64_t newConsumerId;
 | 
						|
  char    subKey[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
  int8_t  subType;
 | 
						|
  int8_t  withMeta;
 | 
						|
  char*   qmsg;  // SubPlanToString
 | 
						|
  int64_t suid;
 | 
						|
} SMqRebVgReq;
 | 
						|
 | 
						|
static FORCE_INLINE int tEncodeSMqRebVgReq(SEncoder *pCoder, const SMqRebVgReq* pReq) {
 | 
						|
  if (tStartEncode(pCoder) < 0) return -1;
 | 
						|
  if (tEncodeI64(pCoder, pReq->leftForVer) < 0) return -1;
 | 
						|
  if (tEncodeI32(pCoder, pReq->vgId) < 0) return -1;
 | 
						|
  if (tEncodeI64(pCoder, pReq->oldConsumerId) < 0) return -1;
 | 
						|
  if (tEncodeI64(pCoder, pReq->newConsumerId) < 0) return -1;
 | 
						|
  if (tEncodeCStr(pCoder, pReq->subKey) < 0) return -1;
 | 
						|
  if (tEncodeI8(pCoder, pReq->subType) < 0) return -1;
 | 
						|
  if (tEncodeI8(pCoder, pReq->withMeta) < 0) return -1;
 | 
						|
 | 
						|
  if (pReq->subType == TOPIC_SUB_TYPE__COLUMN) {
 | 
						|
    if (tEncodeCStr(pCoder, pReq->qmsg) < 0) return -1;
 | 
						|
  } else if (pReq->subType == TOPIC_SUB_TYPE__TABLE) {
 | 
						|
    if (tEncodeI64(pCoder, pReq->suid) < 0) return -1;
 | 
						|
    if (tEncodeCStr(pCoder, pReq->qmsg) < 0) return -1;
 | 
						|
  }
 | 
						|
  tEndEncode(pCoder);
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE int tDecodeSMqRebVgReq(SDecoder *pCoder, SMqRebVgReq* pReq) {
 | 
						|
  if (tStartDecode(pCoder) < 0) return -1;
 | 
						|
 | 
						|
  if (tDecodeI64(pCoder, &pReq->leftForVer) < 0) return -1;
 | 
						|
 | 
						|
  if (tDecodeI32(pCoder, &pReq->vgId) < 0) return -1;
 | 
						|
  if (tDecodeI64(pCoder, &pReq->oldConsumerId) < 0) return -1;
 | 
						|
  if (tDecodeI64(pCoder, &pReq->newConsumerId) < 0) return -1;
 | 
						|
  if (tDecodeCStrTo(pCoder, pReq->subKey) < 0) return -1;
 | 
						|
  if (tDecodeI8(pCoder, &pReq->subType) < 0) return -1;
 | 
						|
  if (tDecodeI8(pCoder, &pReq->withMeta) < 0) return -1;
 | 
						|
 | 
						|
  if (pReq->subType == TOPIC_SUB_TYPE__COLUMN) {
 | 
						|
    if (tDecodeCStr(pCoder, &pReq->qmsg) < 0) return -1;
 | 
						|
  } else if (pReq->subType == TOPIC_SUB_TYPE__TABLE) {
 | 
						|
    if (tDecodeI64(pCoder, &pReq->suid) < 0) return -1;
 | 
						|
    if (!tDecodeIsEnd(pCoder)){
 | 
						|
      if (tDecodeCStr(pCoder, &pReq->qmsg) < 0) return -1;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  tEndDecode(pCoder);
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    topic[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  int64_t ntbUid;
 | 
						|
  SArray* colIdList;  // SArray<int16_t>
 | 
						|
} STqCheckInfo;
 | 
						|
 | 
						|
int32_t tEncodeSTqCheckInfo(SEncoder* pEncoder, const STqCheckInfo* pInfo);
 | 
						|
int32_t tDecodeSTqCheckInfo(SDecoder* pDecoder, STqCheckInfo* pInfo);
 | 
						|
void    tDeleteSTqCheckInfo(STqCheckInfo* pInfo);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char topic[TSDB_TOPIC_FNAME_LEN];
 | 
						|
} STqDelCheckInfoReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int64_t offset;
 | 
						|
  char    topicName[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  char    cgroup[TSDB_CGROUP_LEN];
 | 
						|
} SMqOffset;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t    consumerId;
 | 
						|
  int32_t    num;
 | 
						|
  SMqOffset* offsets;
 | 
						|
} SMqCMCommitOffsetReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t reserved;
 | 
						|
} SMqCMCommitOffsetRsp;
 | 
						|
 | 
						|
int32_t tEncodeSMqOffset(SEncoder* encoder, const SMqOffset* pOffset);
 | 
						|
int32_t tDecodeSMqOffset(SDecoder* decoder, SMqOffset* pOffset);
 | 
						|
int32_t tEncodeSMqCMCommitOffsetReq(SEncoder* encoder, const SMqCMCommitOffsetReq* pReq);
 | 
						|
int32_t tDecodeSMqCMCommitOffsetReq(SDecoder* decoder, SMqCMCommitOffsetReq* pReq);
 | 
						|
 | 
						|
// tqOffset
 | 
						|
enum {
 | 
						|
  TMQ_OFFSET__RESET_NONE = -3,
 | 
						|
  TMQ_OFFSET__RESET_EARLIEST = -2,
 | 
						|
  TMQ_OFFSET__RESET_LATEST = -1,
 | 
						|
  TMQ_OFFSET__LOG = 1,
 | 
						|
  TMQ_OFFSET__SNAPSHOT_DATA = 2,
 | 
						|
  TMQ_OFFSET__SNAPSHOT_META = 3,
 | 
						|
};
 | 
						|
 | 
						|
enum {
 | 
						|
  WITH_DATA = 0,
 | 
						|
  WITH_META = 1,
 | 
						|
  ONLY_META = 2,
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t type;
 | 
						|
  union {
 | 
						|
    // snapshot
 | 
						|
    struct {
 | 
						|
      int64_t uid;
 | 
						|
      int64_t ts;
 | 
						|
    };
 | 
						|
    // log
 | 
						|
    struct {
 | 
						|
      int64_t version;
 | 
						|
    };
 | 
						|
  };
 | 
						|
} STqOffsetVal;
 | 
						|
 | 
						|
static FORCE_INLINE void tqOffsetResetToData(STqOffsetVal* pOffsetVal, int64_t uid, int64_t ts) {
 | 
						|
  pOffsetVal->type = TMQ_OFFSET__SNAPSHOT_DATA;
 | 
						|
  pOffsetVal->uid = uid;
 | 
						|
  pOffsetVal->ts = ts;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tqOffsetResetToMeta(STqOffsetVal* pOffsetVal, int64_t uid) {
 | 
						|
  pOffsetVal->type = TMQ_OFFSET__SNAPSHOT_META;
 | 
						|
  pOffsetVal->uid = uid;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tqOffsetResetToLog(STqOffsetVal* pOffsetVal, int64_t ver) {
 | 
						|
  pOffsetVal->type = TMQ_OFFSET__LOG;
 | 
						|
  pOffsetVal->version = ver;
 | 
						|
}
 | 
						|
 | 
						|
int32_t tEncodeSTqOffsetVal(SEncoder* pEncoder, const STqOffsetVal* pOffsetVal);
 | 
						|
int32_t tDecodeSTqOffsetVal(SDecoder* pDecoder, STqOffsetVal* pOffsetVal);
 | 
						|
int32_t tFormatOffset(char* buf, int32_t maxLen, const STqOffsetVal* pVal);
 | 
						|
bool    tOffsetEqual(const STqOffsetVal* pLeft, const STqOffsetVal* pRight);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  STqOffsetVal val;
 | 
						|
  char         subKey[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
} STqOffset;
 | 
						|
 | 
						|
int32_t tEncodeSTqOffset(SEncoder* pEncoder, const STqOffset* pOffset);
 | 
						|
int32_t tDecodeSTqOffset(SDecoder* pDecoder, STqOffset* pOffset);
 | 
						|
 | 
						|
typedef struct SMqVgOffset {
 | 
						|
  int64_t   consumerId;
 | 
						|
  STqOffset offset;
 | 
						|
} SMqVgOffset;
 | 
						|
 | 
						|
int32_t tEncodeMqVgOffset(SEncoder* pEncoder, const SMqVgOffset* pOffset);
 | 
						|
int32_t tDecodeMqVgOffset(SDecoder* pDecoder, SMqVgOffset* pOffset);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int64_t  streamId;
 | 
						|
  int32_t  taskId;
 | 
						|
} SVPauseStreamTaskReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SVPauseStreamTaskRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMPauseStreamReq;
 | 
						|
 | 
						|
int32_t tSerializeSMPauseStreamReq(void* buf, int32_t bufLen, const SMPauseStreamReq* pReq);
 | 
						|
int32_t tDeserializeSMPauseStreamReq(void* buf, int32_t bufLen, SMPauseStreamReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead head;
 | 
						|
  int32_t  taskId;
 | 
						|
  int64_t  streamId;
 | 
						|
  int8_t   igUntreated;
 | 
						|
} SVResumeStreamTaskReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SVResumeStreamTaskRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_STREAM_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
  int8_t igUntreated;
 | 
						|
} SMResumeStreamReq;
 | 
						|
 | 
						|
int32_t tSerializeSMResumeStreamReq(void* buf, int32_t bufLen, const SMResumeStreamReq* pReq);
 | 
						|
int32_t tDeserializeSMResumeStreamReq(void* buf, int32_t bufLen, SMResumeStreamReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char    name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  char    stb[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t  igExists;
 | 
						|
  int8_t  intervalUnit;
 | 
						|
  int8_t  slidingUnit;
 | 
						|
  int8_t  timezone;
 | 
						|
  int32_t dstVgId;  // for stream
 | 
						|
  int64_t interval;
 | 
						|
  int64_t offset;
 | 
						|
  int64_t sliding;
 | 
						|
  int64_t maxDelay;
 | 
						|
  int64_t watermark;
 | 
						|
  int32_t exprLen;        // strlen + 1
 | 
						|
  int32_t tagsFilterLen;  // strlen + 1
 | 
						|
  int32_t sqlLen;         // strlen + 1
 | 
						|
  int32_t astLen;         // strlen + 1
 | 
						|
  char*   expr;
 | 
						|
  char*   tagsFilter;
 | 
						|
  char*   sql;
 | 
						|
  char*   ast;
 | 
						|
  int64_t deleteMark;
 | 
						|
  int64_t lastTs;
 | 
						|
} SMCreateSmaReq;
 | 
						|
 | 
						|
int32_t tSerializeSMCreateSmaReq(void* buf, int32_t bufLen, SMCreateSmaReq* pReq);
 | 
						|
int32_t tDeserializeSMCreateSmaReq(void* buf, int32_t bufLen, SMCreateSmaReq* pReq);
 | 
						|
void    tFreeSMCreateSmaReq(SMCreateSmaReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMDropSmaReq;
 | 
						|
 | 
						|
int32_t tSerializeSMDropSmaReq(void* buf, int32_t bufLen, SMDropSmaReq* pReq);
 | 
						|
int32_t tDeserializeSMDropSmaReq(void* buf, int32_t bufLen, SMDropSmaReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  char   stbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char   colName[TSDB_COL_NAME_LEN];
 | 
						|
  char   idxName[TSDB_INDEX_FNAME_LEN];
 | 
						|
  int8_t idxType;
 | 
						|
} SCreateTagIndexReq;
 | 
						|
 | 
						|
int32_t tSerializeSCreateTagIdxReq(void* buf, int32_t bufLen, SCreateTagIndexReq* pReq);
 | 
						|
int32_t tDeserializeSCreateTagIdxReq(void* buf, int32_t bufLen, SCreateTagIndexReq* pReq);
 | 
						|
 | 
						|
typedef SMDropSmaReq SDropTagIndexReq;
 | 
						|
 | 
						|
int32_t tSerializeSDropTagIdxReq(void* buf, int32_t bufLen, SDropTagIndexReq* pReq);
 | 
						|
int32_t tDeserializeSDropTagIdxReq(void* buf, int32_t bufLen, SDropTagIndexReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t         version;       // for compatibility(default 0)
 | 
						|
  int8_t         intervalUnit;  // MACRO: TIME_UNIT_XXX
 | 
						|
  int8_t         slidingUnit;   // MACRO: TIME_UNIT_XXX
 | 
						|
  int8_t         timezoneInt;   // sma data expired if timezone changes.
 | 
						|
  int32_t        dstVgId;
 | 
						|
  char           indexName[TSDB_INDEX_NAME_LEN];
 | 
						|
  int32_t        exprLen;
 | 
						|
  int32_t        tagsFilterLen;
 | 
						|
  int64_t        indexUid;
 | 
						|
  tb_uid_t       tableUid;  // super/child/common table uid
 | 
						|
  tb_uid_t       dstTbUid;  // for dstVgroup
 | 
						|
  int64_t        interval;
 | 
						|
  int64_t        offset;  // use unit by precision of DB
 | 
						|
  int64_t        sliding;
 | 
						|
  char*          dstTbName;  // for dstVgroup
 | 
						|
  char*          expr;       // sma expression
 | 
						|
  char*          tagsFilter;
 | 
						|
  SSchemaWrapper schemaRow;  // for dstVgroup
 | 
						|
  SSchemaWrapper schemaTag;  // for dstVgroup
 | 
						|
} STSma;                     // Time-range-wise SMA
 | 
						|
 | 
						|
typedef STSma SVCreateTSmaReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  type;  // 0 status report, 1 update data
 | 
						|
  int64_t indexUid;
 | 
						|
  int64_t skey;  // start TS key of interval/sliding window
 | 
						|
} STSmaMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t indexUid;
 | 
						|
  char    indexName[TSDB_INDEX_NAME_LEN];
 | 
						|
} SVDropTSmaReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int tmp;  // TODO: to avoid compile error
 | 
						|
} SVCreateTSmaRsp, SVDropTSmaRsp;
 | 
						|
 | 
						|
#if 0
 | 
						|
int32_t tSerializeSVCreateTSmaReq(void** buf, SVCreateTSmaReq* pReq);
 | 
						|
void*   tDeserializeSVCreateTSmaReq(void* buf, SVCreateTSmaReq* pReq);
 | 
						|
int32_t tSerializeSVDropTSmaReq(void** buf, SVDropTSmaReq* pReq);
 | 
						|
void*   tDeserializeSVDropTSmaReq(void* buf, SVDropTSmaReq* pReq);
 | 
						|
#endif
 | 
						|
 | 
						|
int32_t tEncodeSVCreateTSmaReq(SEncoder* pCoder, const SVCreateTSmaReq* pReq);
 | 
						|
int32_t tDecodeSVCreateTSmaReq(SDecoder* pCoder, SVCreateTSmaReq* pReq);
 | 
						|
int32_t tEncodeSVDropTSmaReq(SEncoder* pCoder, const SVDropTSmaReq* pReq);
 | 
						|
int32_t tDecodeSVDropTSmaReq(SDecoder* pCoder, SVDropTSmaReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t number;
 | 
						|
  STSma*  tSma;
 | 
						|
} STSmaWrapper;
 | 
						|
 | 
						|
static FORCE_INLINE void tDestroyTSma(STSma* pSma) {
 | 
						|
  if (pSma) {
 | 
						|
    taosMemoryFreeClear(pSma->dstTbName);
 | 
						|
    taosMemoryFreeClear(pSma->expr);
 | 
						|
    taosMemoryFreeClear(pSma->tagsFilter);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tDestroyTSmaWrapper(STSmaWrapper* pSW, bool deepCopy) {
 | 
						|
  if (pSW) {
 | 
						|
    if (pSW->tSma) {
 | 
						|
      if (deepCopy) {
 | 
						|
        for (uint32_t i = 0; i < pSW->number; ++i) {
 | 
						|
          tDestroyTSma(pSW->tSma + i);
 | 
						|
        }
 | 
						|
      }
 | 
						|
      taosMemoryFreeClear(pSW->tSma);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tFreeTSmaWrapper(STSmaWrapper* pSW, bool deepCopy) {
 | 
						|
  tDestroyTSmaWrapper(pSW, deepCopy);
 | 
						|
  taosMemoryFreeClear(pSW);
 | 
						|
  return NULL;
 | 
						|
}
 | 
						|
 | 
						|
int32_t tEncodeSVCreateTSmaReq(SEncoder* pCoder, const SVCreateTSmaReq* pReq);
 | 
						|
int32_t tDecodeSVCreateTSmaReq(SDecoder* pCoder, SVCreateTSmaReq* pReq);
 | 
						|
 | 
						|
int32_t tEncodeTSma(SEncoder* pCoder, const STSma* pSma);
 | 
						|
int32_t tDecodeTSma(SDecoder* pCoder, STSma* pSma, bool deepCopy);
 | 
						|
 | 
						|
static int32_t tEncodeTSmaWrapper(SEncoder* pEncoder, const STSmaWrapper* pReq) {
 | 
						|
  if (tEncodeI32(pEncoder, pReq->number) < 0) return -1;
 | 
						|
  for (int32_t i = 0; i < pReq->number; ++i) {
 | 
						|
    tEncodeTSma(pEncoder, pReq->tSma + i);
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int32_t tDecodeTSmaWrapper(SDecoder* pDecoder, STSmaWrapper* pReq, bool deepCopy) {
 | 
						|
  if (tDecodeI32(pDecoder, &pReq->number) < 0) return -1;
 | 
						|
  for (int32_t i = 0; i < pReq->number; ++i) {
 | 
						|
    tDecodeTSma(pDecoder, pReq->tSma + i, deepCopy);
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int idx;
 | 
						|
} SMCreateFullTextReq;
 | 
						|
 | 
						|
int32_t tSerializeSMCreateFullTextReq(void* buf, int32_t bufLen, SMCreateFullTextReq* pReq);
 | 
						|
int32_t tDeserializeSMCreateFullTextReq(void* buf, int32_t bufLen, SMCreateFullTextReq* pReq);
 | 
						|
void    tFreeSMCreateFullTextReq(SMCreateFullTextReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char   name[TSDB_TABLE_FNAME_LEN];
 | 
						|
  int8_t igNotExists;
 | 
						|
} SMDropFullTextReq;
 | 
						|
 | 
						|
int32_t tSerializeSMDropFullTextReq(void* buf, int32_t bufLen, SMDropFullTextReq* pReq);
 | 
						|
int32_t tDeserializeSMDropFullTextReq(void* buf, int32_t bufLen, SMDropFullTextReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char indexFName[TSDB_INDEX_FNAME_LEN];
 | 
						|
} SUserIndexReq;
 | 
						|
 | 
						|
int32_t tSerializeSUserIndexReq(void* buf, int32_t bufLen, SUserIndexReq* pReq);
 | 
						|
int32_t tDeserializeSUserIndexReq(void* buf, int32_t bufLen, SUserIndexReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  char tblFName[TSDB_TABLE_FNAME_LEN];
 | 
						|
  char colName[TSDB_COL_NAME_LEN];
 | 
						|
  char indexType[TSDB_INDEX_TYPE_LEN];
 | 
						|
  char indexExts[TSDB_INDEX_EXTS_LEN];
 | 
						|
} SUserIndexRsp;
 | 
						|
 | 
						|
int32_t tSerializeSUserIndexRsp(void* buf, int32_t bufLen, const SUserIndexRsp* pRsp);
 | 
						|
int32_t tDeserializeSUserIndexRsp(void* buf, int32_t bufLen, SUserIndexRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char tbFName[TSDB_TABLE_FNAME_LEN];
 | 
						|
} STableIndexReq;
 | 
						|
 | 
						|
int32_t tSerializeSTableIndexReq(void* buf, int32_t bufLen, STableIndexReq* pReq);
 | 
						|
int32_t tDeserializeSTableIndexReq(void* buf, int32_t bufLen, STableIndexReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  intervalUnit;
 | 
						|
  int8_t  slidingUnit;
 | 
						|
  int64_t interval;
 | 
						|
  int64_t offset;
 | 
						|
  int64_t sliding;
 | 
						|
  int64_t dstTbUid;
 | 
						|
  int32_t dstVgId;
 | 
						|
  SEpSet  epSet;
 | 
						|
  char*   expr;
 | 
						|
} STableIndexInfo;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char     tbName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     dbFName[TSDB_DB_FNAME_LEN];
 | 
						|
  uint64_t suid;
 | 
						|
  int32_t  version;
 | 
						|
  int32_t  indexSize;
 | 
						|
  SArray*  pIndex;  // STableIndexInfo
 | 
						|
} STableIndexRsp;
 | 
						|
 | 
						|
int32_t tSerializeSTableIndexRsp(void* buf, int32_t bufLen, const STableIndexRsp* pRsp);
 | 
						|
int32_t tDeserializeSTableIndexRsp(void* buf, int32_t bufLen, STableIndexRsp* pRsp);
 | 
						|
void    tFreeSerializeSTableIndexRsp(STableIndexRsp* pRsp);
 | 
						|
 | 
						|
void tFreeSTableIndexInfo(void* pInfo);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t  mqMsgType;
 | 
						|
  int32_t code;
 | 
						|
  int32_t epoch;
 | 
						|
  int64_t consumerId;
 | 
						|
  int64_t walsver;
 | 
						|
  int64_t walever;
 | 
						|
} SMqRspHead;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead     head;
 | 
						|
  char         subKey[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
  int8_t       withTbName;
 | 
						|
  int8_t       useSnapshot;
 | 
						|
  int32_t      epoch;
 | 
						|
  uint64_t     reqId;
 | 
						|
  int64_t      consumerId;
 | 
						|
  int64_t      timeout;
 | 
						|
  STqOffsetVal reqOffset;
 | 
						|
} SMqPollReq;
 | 
						|
 | 
						|
int32_t tSerializeSMqPollReq(void* buf, int32_t bufLen, SMqPollReq* pReq);
 | 
						|
int32_t tDeserializeSMqPollReq(void* buf, int32_t bufLen, SMqPollReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t vgId;
 | 
						|
  int64_t offset;
 | 
						|
  SEpSet  epSet;
 | 
						|
} SMqSubVgEp;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSMqSubVgEp(void** buf, const SMqSubVgEp* pVgEp) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  tlen += taosEncodeFixedI32(buf, pVgEp->vgId);
 | 
						|
  tlen += taosEncodeFixedI64(buf, pVgEp->offset);
 | 
						|
  tlen += taosEncodeSEpSet(buf, &pVgEp->epSet);
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tDecodeSMqSubVgEp(void* buf, SMqSubVgEp* pVgEp) {
 | 
						|
  buf = taosDecodeFixedI32(buf, &pVgEp->vgId);
 | 
						|
  buf = taosDecodeFixedI64(buf, &pVgEp->offset);
 | 
						|
  buf = taosDecodeSEpSet(buf, &pVgEp->epSet);
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  char           topic[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  char           db[TSDB_DB_FNAME_LEN];
 | 
						|
  SArray*        vgs;  // SArray<SMqSubVgEp>
 | 
						|
  SSchemaWrapper schema;
 | 
						|
} SMqSubTopicEp;
 | 
						|
 | 
						|
int32_t tEncodeMqSubTopicEp(void** buf, const SMqSubTopicEp* pTopicEp);
 | 
						|
void*   tDecodeMqSubTopicEp(void* buf, SMqSubTopicEp* pTopicEp);
 | 
						|
void    tDeleteMqSubTopicEp(SMqSubTopicEp* pSubTopicEp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMqRspHead   head;
 | 
						|
  STqOffsetVal rspOffset;
 | 
						|
  int16_t      resMsgType;
 | 
						|
  int32_t      metaRspLen;
 | 
						|
  void*        metaRsp;
 | 
						|
} SMqMetaRsp;
 | 
						|
 | 
						|
int32_t tEncodeMqMetaRsp(SEncoder* pEncoder, const SMqMetaRsp* pRsp);
 | 
						|
int32_t tDecodeMqMetaRsp(SDecoder* pDecoder, SMqMetaRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMqRspHead   head;
 | 
						|
  STqOffsetVal reqOffset;
 | 
						|
  STqOffsetVal rspOffset;
 | 
						|
  int32_t      blockNum;
 | 
						|
  int8_t       withTbName;
 | 
						|
  int8_t       withSchema;
 | 
						|
  SArray*      blockDataLen;
 | 
						|
  SArray*      blockData;
 | 
						|
  SArray*      blockTbName;
 | 
						|
  SArray*      blockSchema;
 | 
						|
} SMqDataRsp;
 | 
						|
 | 
						|
int32_t tEncodeMqDataRsp(SEncoder* pEncoder, const SMqDataRsp* pRsp);
 | 
						|
int32_t tDecodeMqDataRsp(SDecoder* pDecoder, SMqDataRsp* pRsp);
 | 
						|
void    tDeleteMqDataRsp(SMqDataRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMqRspHead   head;
 | 
						|
  STqOffsetVal reqOffset;
 | 
						|
  STqOffsetVal rspOffset;
 | 
						|
  int32_t      blockNum;
 | 
						|
  int8_t       withTbName;
 | 
						|
  int8_t       withSchema;
 | 
						|
  SArray*      blockDataLen;
 | 
						|
  SArray*      blockData;
 | 
						|
  SArray*      blockTbName;
 | 
						|
  SArray*      blockSchema;
 | 
						|
  // the following attributes are extended from SMqDataRsp
 | 
						|
  int32_t createTableNum;
 | 
						|
  SArray* createTableLen;
 | 
						|
  SArray* createTableReq;
 | 
						|
} STaosxRsp;
 | 
						|
 | 
						|
int32_t tEncodeSTaosxRsp(SEncoder* pEncoder, const STaosxRsp* pRsp);
 | 
						|
int32_t tDecodeSTaosxRsp(SDecoder* pDecoder, STaosxRsp* pRsp);
 | 
						|
void    tDeleteSTaosxRsp(STaosxRsp* pRsp);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMqRspHead head;
 | 
						|
  char       cgroup[TSDB_CGROUP_LEN];
 | 
						|
  SArray*    topics;  // SArray<SMqSubTopicEp>
 | 
						|
} SMqAskEpRsp;
 | 
						|
 | 
						|
static FORCE_INLINE int32_t tEncodeSMqAskEpRsp(void** buf, const SMqAskEpRsp* pRsp) {
 | 
						|
  int32_t tlen = 0;
 | 
						|
  // tlen += taosEncodeString(buf, pRsp->cgroup);
 | 
						|
  int32_t sz = taosArrayGetSize(pRsp->topics);
 | 
						|
  tlen += taosEncodeFixedI32(buf, sz);
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqSubTopicEp* pVgEp = (SMqSubTopicEp*)taosArrayGet(pRsp->topics, i);
 | 
						|
    tlen += tEncodeMqSubTopicEp(buf, pVgEp);
 | 
						|
  }
 | 
						|
  return tlen;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void* tDecodeSMqAskEpRsp(void* buf, SMqAskEpRsp* pRsp) {
 | 
						|
  // buf = taosDecodeStringTo(buf, pRsp->cgroup);
 | 
						|
  int32_t sz;
 | 
						|
  buf = taosDecodeFixedI32(buf, &sz);
 | 
						|
  pRsp->topics = taosArrayInit(sz, sizeof(SMqSubTopicEp));
 | 
						|
  if (pRsp->topics == NULL) {
 | 
						|
    return NULL;
 | 
						|
  }
 | 
						|
  for (int32_t i = 0; i < sz; i++) {
 | 
						|
    SMqSubTopicEp topicEp;
 | 
						|
    buf = tDecodeMqSubTopicEp(buf, &topicEp);
 | 
						|
    taosArrayPush(pRsp->topics, &topicEp);
 | 
						|
  }
 | 
						|
  return buf;
 | 
						|
}
 | 
						|
 | 
						|
static FORCE_INLINE void tDeleteSMqAskEpRsp(SMqAskEpRsp* pRsp) {
 | 
						|
  taosArrayDestroyEx(pRsp->topics, (FDelete)tDeleteMqSubTopicEp);
 | 
						|
}
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t      vgId;
 | 
						|
  STqOffsetVal offset;
 | 
						|
  int64_t      rows;
 | 
						|
}OffsetRows;
 | 
						|
 | 
						|
typedef struct{
 | 
						|
  char       topicName[TSDB_TOPIC_FNAME_LEN];
 | 
						|
  SArray*    offsetRows;
 | 
						|
}TopicOffsetRows;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t consumerId;
 | 
						|
  int32_t epoch;
 | 
						|
  SArray* topics;
 | 
						|
} SMqHbReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int8_t reserved;
 | 
						|
} SMqHbRsp;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead     head;
 | 
						|
  int64_t consumerId;
 | 
						|
  char subKey[TSDB_SUBSCRIBE_KEY_LEN];
 | 
						|
} SMqSeekReq;
 | 
						|
 | 
						|
#define TD_AUTO_CREATE_TABLE 0x1
 | 
						|
typedef struct {
 | 
						|
  int64_t       suid;
 | 
						|
  int64_t       uid;
 | 
						|
  int32_t       sver;
 | 
						|
  uint32_t      nData;
 | 
						|
  uint8_t*      pData;
 | 
						|
  SVCreateTbReq cTbReq;
 | 
						|
} SVSubmitBlk;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t flags;
 | 
						|
  int32_t nBlocks;
 | 
						|
  union {
 | 
						|
    SArray*      pArray;
 | 
						|
    SVSubmitBlk* pBlocks;
 | 
						|
  };
 | 
						|
} SVSubmitReq;
 | 
						|
 | 
						|
int32_t tEncodeSVSubmitReq(SEncoder* pCoder, const SVSubmitReq* pReq);
 | 
						|
int32_t tDecodeSVSubmitReq(SDecoder* pCoder, SVSubmitReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  uint64_t sId;
 | 
						|
  uint64_t queryId;
 | 
						|
  uint64_t taskId;
 | 
						|
  uint32_t sqlLen;
 | 
						|
  uint32_t phyLen;
 | 
						|
  char*    sql;
 | 
						|
  char*    msg;
 | 
						|
} SVDeleteReq;
 | 
						|
 | 
						|
int32_t tSerializeSVDeleteReq(void* buf, int32_t bufLen, SVDeleteReq* pReq);
 | 
						|
int32_t tDeserializeSVDeleteReq(void* buf, int32_t bufLen, SVDeleteReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t affectedRows;
 | 
						|
} SVDeleteRsp;
 | 
						|
 | 
						|
int32_t tEncodeSVDeleteRsp(SEncoder* pCoder, const SVDeleteRsp* pReq);
 | 
						|
int32_t tDecodeSVDeleteRsp(SDecoder* pCoder, SVDeleteRsp* pReq);
 | 
						|
 | 
						|
typedef struct SDeleteRes {
 | 
						|
  uint64_t suid;
 | 
						|
  SArray*  uidList;
 | 
						|
  int64_t  skey;
 | 
						|
  int64_t  ekey;
 | 
						|
  int64_t  affectedRows;
 | 
						|
  char     tableFName[TSDB_TABLE_NAME_LEN];
 | 
						|
  char     tsColName[TSDB_COL_NAME_LEN];
 | 
						|
  int64_t  ctimeMs; // fill by vnode
 | 
						|
} SDeleteRes;
 | 
						|
 | 
						|
int32_t tEncodeDeleteRes(SEncoder* pCoder, const SDeleteRes* pRes);
 | 
						|
int32_t tDecodeDeleteRes(SDecoder* pCoder, SDeleteRes* pRes);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  // int64_t uid;
 | 
						|
  char    tbname[TSDB_TABLE_NAME_LEN];
 | 
						|
  int64_t startTs;
 | 
						|
  int64_t endTs;
 | 
						|
} SSingleDeleteReq;
 | 
						|
 | 
						|
int32_t tEncodeSSingleDeleteReq(SEncoder* pCoder, const SSingleDeleteReq* pReq);
 | 
						|
int32_t tDecodeSSingleDeleteReq(SDecoder* pCoder, SSingleDeleteReq* pReq);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int64_t suid;
 | 
						|
  SArray* deleteReqs;  // SArray<SSingleDeleteReq>
 | 
						|
  int64_t ctimeMs;     // fill by vnode
 | 
						|
} SBatchDeleteReq;
 | 
						|
 | 
						|
int32_t tEncodeSBatchDeleteReq(SEncoder* pCoder, const SBatchDeleteReq* pReq);
 | 
						|
int32_t tDecodeSBatchDeleteReq(SDecoder* pCoder, SBatchDeleteReq* pReq);
 | 
						|
int32_t tDecodeSBatchDeleteReqSetCtime(SDecoder* pDecoder, SBatchDeleteReq* pReq, int64_t ctimeMs);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t msgIdx;
 | 
						|
  int32_t msgType;
 | 
						|
  int32_t msgLen;
 | 
						|
  void*   msg;
 | 
						|
} SBatchMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  SArray*  pMsgs;  // SArray<SBatchMsg>
 | 
						|
} SBatchReq;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t reqType;
 | 
						|
  int32_t msgIdx;
 | 
						|
  int32_t msgLen;
 | 
						|
  int32_t rspCode;
 | 
						|
  void*   msg;
 | 
						|
} SBatchRspMsg;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* pRsps;  // SArray<SBatchRspMsg>
 | 
						|
} SBatchRsp;
 | 
						|
 | 
						|
int32_t                  tSerializeSBatchReq(void* buf, int32_t bufLen, SBatchReq* pReq);
 | 
						|
int32_t                  tDeserializeSBatchReq(void* buf, int32_t bufLen, SBatchReq* pReq);
 | 
						|
static FORCE_INLINE void tFreeSBatchReqMsg(void* msg) {
 | 
						|
  if (NULL == msg) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  SBatchMsg* pMsg = (SBatchMsg*)msg;
 | 
						|
  taosMemoryFree(pMsg->msg);
 | 
						|
}
 | 
						|
 | 
						|
int32_t tSerializeSBatchRsp(void* buf, int32_t bufLen, SBatchRsp* pRsp);
 | 
						|
int32_t tDeserializeSBatchRsp(void* buf, int32_t bufLen, SBatchRsp* pRsp);
 | 
						|
 | 
						|
static FORCE_INLINE void tFreeSBatchRspMsg(void* p) {
 | 
						|
  if (NULL == p) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
 | 
						|
  SBatchRspMsg* pRsp = (SBatchRspMsg*)p;
 | 
						|
  taosMemoryFree(pRsp->msg);
 | 
						|
}
 | 
						|
 | 
						|
int32_t tSerializeSMqAskEpReq(void* buf, int32_t bufLen, SMqAskEpReq* pReq);
 | 
						|
int32_t tDeserializeSMqAskEpReq(void* buf, int32_t bufLen, SMqAskEpReq* pReq);
 | 
						|
int32_t tSerializeSMqHbReq(void* buf, int32_t bufLen, SMqHbReq* pReq);
 | 
						|
int32_t tDeserializeSMqHbReq(void* buf, int32_t bufLen, SMqHbReq* pReq);
 | 
						|
int32_t tDeatroySMqHbReq(SMqHbReq* pReq);
 | 
						|
 | 
						|
int32_t tSerializeSMqSeekReq(void *buf, int32_t bufLen, SMqSeekReq *pReq);
 | 
						|
int32_t tDeserializeSMqSeekReq(void *buf, int32_t bufLen, SMqSeekReq *pReq);
 | 
						|
 | 
						|
#define SUBMIT_REQ_AUTO_CREATE_TABLE  0x1
 | 
						|
#define SUBMIT_REQ_COLUMN_DATA_FORMAT 0x2
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t        flags;
 | 
						|
  SVCreateTbReq* pCreateTbReq;
 | 
						|
  int64_t        suid;
 | 
						|
  int64_t        uid;
 | 
						|
  int32_t        sver;
 | 
						|
  union {
 | 
						|
    SArray* aRowP;
 | 
						|
    SArray* aCol;
 | 
						|
  };
 | 
						|
  int64_t        ctimeMs;
 | 
						|
} SSubmitTbData;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SArray* aSubmitTbData;  // SArray<SSubmitTbData>
 | 
						|
} SSubmitReq2;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  SMsgHead header;
 | 
						|
  int64_t  version;
 | 
						|
  char     data[];  // SSubmitReq2
 | 
						|
} SSubmitReq2Msg;
 | 
						|
 | 
						|
int32_t tEncodeSubmitReq(SEncoder* pCoder, const SSubmitReq2* pReq);
 | 
						|
int32_t tDecodeSubmitReq(SDecoder* pCoder, SSubmitReq2* pReq);
 | 
						|
void    tDestroySubmitTbData(SSubmitTbData* pTbData, int32_t flag);
 | 
						|
void    tDestroySubmitReq(SSubmitReq2* pReq, int32_t flag);
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  int32_t affectedRows;
 | 
						|
  SArray* aCreateTbRsp;  // SArray<SVCreateTbRsp>
 | 
						|
} SSubmitRsp2;
 | 
						|
 | 
						|
int32_t tEncodeSSubmitRsp2(SEncoder* pCoder, const SSubmitRsp2* pRsp);
 | 
						|
int32_t tDecodeSSubmitRsp2(SDecoder* pCoder, SSubmitRsp2* pRsp);
 | 
						|
void    tDestroySSubmitRsp2(SSubmitRsp2* pRsp, int32_t flag);
 | 
						|
 | 
						|
#define TSDB_MSG_FLG_ENCODE 0x1
 | 
						|
#define TSDB_MSG_FLG_DECODE 0x2
 | 
						|
#define TSDB_MSG_FLG_CMPT   0x3
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  union {
 | 
						|
    struct {
 | 
						|
      void*   msgStr;
 | 
						|
      int32_t msgLen;
 | 
						|
      int64_t ver;
 | 
						|
    };
 | 
						|
    void* pDataBlock;
 | 
						|
  };
 | 
						|
} SPackedData;
 | 
						|
 | 
						|
#pragma pack(pop)
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /*_TD_COMMON_TAOS_MSG_H_*/
 |