diff --git a/cmake/platform.inc b/cmake/platform.inc index 2e0e2d6af08fa529f7435b2e39fa4cdb4d293fae..731cf446845ab53d9c3ce23b2a6079c06bcc50f5 100755 --- a/cmake/platform.inc +++ b/cmake/platform.inc @@ -109,7 +109,7 @@ IF (TD_LINUX_64) IF (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") SET(COMMON_FLAGS "-std=gnu99 -Wall -Werror -Wno-missing-braces -fPIC -g3 -gdwarf-2 -msse4.2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE") ELSE () - SET(COMMON_FLAGS "-std=gnu99 -Wall -Werror -fPIC -malign-double -g3 -gdwarf-2 -malign-stringops -msse4.2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE") + SET(COMMON_FLAGS "-std=gnu99 -Wall -pg -Werror -fPIC -malign-double -g3 -gdwarf-2 -malign-stringops -msse4.2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE") ENDIF () ELSE () SET(COMMON_FLAGS "-std=gnu99 -Wall -Werror -fPIC -g -fsigned-char -fpack-struct=8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE") diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index 40b4c43fdd133723b10df290ca73584bd0ed0832..f652c65f5617c8c1cbd29715463237e786e0f7da 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -51,18 +51,15 @@ # number of threads per CPU core # numOfThreadsPerCore 1.0 -# number of vnodes per core in DNode -# numOfVnodesPerCore 8 +# number of vgroups per db +# maxVgroupsPerDb 0 + +# max number of tables per vnode +# maxTablesPerVnode 1000000 # the ratio of threads responsible for querying in the total thread # ratioOfQueryThreads 0.5 -# number of total vnodes in DNode -# numOfTotalVnodes 0 - -# max number of tables per vnode -# maxtablesPerVnode 1000 - # interval of check load balance when the management node is in normal operation # balanceInterval 300 diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 4e05e1ce4c7fea9719e6249bd4b8ed48e5dce4d4..cae67673e91f2e7625a641b78b22c2de9eff557d 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -198,6 +198,10 @@ void taos_fetch_rows_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, int), voi SSqlRes *pRes = &pSql->res; SSqlCmd *pCmd = &pSql->cmd; + // user-defined callback function is stored in fetchFp + pSql->fetchFp = fp; + pSql->fp = tscAsyncFetchRowsProxy; + if (pRes->qhandle == 0) { tscError("qhandle is NULL"); pRes->code = TSDB_CODE_TSC_INVALID_QHANDLE; @@ -205,10 +209,6 @@ void taos_fetch_rows_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, int), voi return; } - // user-defined callback function is stored in fetchFp - pSql->fetchFp = fp; - pSql->fp = tscAsyncFetchRowsProxy; - pSql->param = param; tscResetForNextRetrieve(pRes); diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 3bcbe37b81055a609c88e06429002a96f2e4df1e..9d80c7ed50944f14a5687d3034d5368552861cb1 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -4962,6 +4962,7 @@ static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) { pMsg->commitTime = htonl(pCreateDb->commitTime); pMsg->minRowsPerFileBlock = htonl(pCreateDb->minRowsPerBlock); pMsg->maxRowsPerFileBlock = htonl(pCreateDb->maxRowsPerBlock); + pMsg->fsyncPeriod = htonl(pCreateDb->fsyncPeriod); pMsg->compression = pCreateDb->compressionLevel; pMsg->walLevel = (char)pCreateDb->walLevel; pMsg->replications = pCreateDb->replica; @@ -5529,6 +5530,13 @@ int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCMCreateDbMsg* pCreate) { return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg); } + val = htonl(pCreate->fsyncPeriod); + if (val != -1 && (val < TSDB_MIN_FSYNC_PERIOD || val > TSDB_MAX_FSYNC_PERIOD)) { + snprintf(msg, tListLen(msg), "invalid db option fsyncPeriod: %d valid range: [%d, %d]", val, + TSDB_MIN_FSYNC_PERIOD, TSDB_MAX_FSYNC_PERIOD); + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg); + } + if (pCreate->compression != -1 && (pCreate->compression < TSDB_MIN_COMP_LEVEL || pCreate->compression > TSDB_MAX_COMP_LEVEL)) { snprintf(msg, tListLen(msg), "invalid db option compression: %d valid range: [%d, %d]", pCreate->compression, diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h index fbdfc84f5ffc26815c8318ff93f494af7801b6d9..c42fccc37231c1634da0601a3c113ad815be3cb2 100644 --- a/src/common/inc/tglobal.h +++ b/src/common/inc/tglobal.h @@ -68,7 +68,9 @@ extern int64_t tsMaxRetentWindow; // db parameters in client extern int32_t tsCacheBlockSize; extern int32_t tsBlocksPerVnode; +extern int32_t tsMinTablePerVnode; extern int32_t tsMaxTablePerVnode; +extern int32_t tsTableIncStepPerVnode; extern int32_t tsMaxVgroupsPerDb; extern int16_t tsDaysPerFile; extern int32_t tsDaysToKeep; @@ -78,6 +80,7 @@ extern int16_t tsCommitTime; // seconds extern int32_t tsTimePrecision; extern int16_t tsCompression; extern int16_t tsWAL; +extern int32_t tsFsyncPeriod; extern int32_t tsReplications; // balance diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c index a8ef3f8e8d348b6b67fae6cc1dcd3f810b57e3ec..f2324e786a5af6adae9ff7546456e4f0517bd7c6 100644 --- a/src/common/src/tglobal.c +++ b/src/common/src/tglobal.c @@ -38,7 +38,7 @@ uint16_t tsDnodeShellPort = 6030; // udp[6035-6039] tcp[6035] uint16_t tsDnodeDnodePort = 6035; // udp/tcp uint16_t tsSyncPort = 6040; int32_t tsStatusInterval = 1; // second -int16_t tsNumOfVnodesPerCore = 8; +int16_t tsNumOfVnodesPerCore = 32; int16_t tsNumOfTotalVnodes = TSDB_INVALID_VNODE_NUM; int32_t tsNumOfMnodes = 3; int32_t tsEnableVnodeBak = 1; @@ -110,9 +110,13 @@ int16_t tsCommitTime = TSDB_DEFAULT_COMMIT_TIME; // seconds int32_t tsTimePrecision = TSDB_DEFAULT_PRECISION; int16_t tsCompression = TSDB_DEFAULT_COMP_LEVEL; int16_t tsWAL = TSDB_DEFAULT_WAL_LEVEL; +int32_t tsFsyncPeriod = TSDB_DEFAULT_FSYNC_PERIOD; int32_t tsReplications = TSDB_DEFAULT_DB_REPLICA_OPTION; int32_t tsMaxVgroupsPerDb = 0; +int32_t tsMinTablePerVnode = 100; int32_t tsMaxTablePerVnode = TSDB_DEFAULT_TABLES; +int32_t tsTableIncStepPerVnode = TSDB_TABLES_STEP; + // balance int32_t tsEnableBalance = 1; int32_t tsAlternativeRole = 0; @@ -389,16 +393,6 @@ static void doInitGlobalConfig() { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); - cfg.option = "numOfVnodesPerCore"; - cfg.ptr = &tsNumOfVnodesPerCore; - cfg.valType = TAOS_CFG_VTYPE_INT16; - cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; - cfg.minValue = 1; - cfg.maxValue = 64; - cfg.ptrLength = 0; - cfg.unitType = TAOS_CFG_UTYPE_NONE; - taosInitConfigOption(cfg); - cfg.option = "numOfTotalVnodes"; cfg.ptr = &tsNumOfTotalVnodes; cfg.valType = TAOS_CFG_VTYPE_INT16; @@ -622,6 +616,26 @@ static void doInitGlobalConfig() { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); + cfg.option = "minTablesPerVnode"; + cfg.ptr = &tsMinTablePerVnode; + cfg.valType = TAOS_CFG_VTYPE_INT32; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; + cfg.minValue = TSDB_MIN_TABLES; + cfg.maxValue = TSDB_MAX_TABLES; + cfg.ptrLength = 0; + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + + cfg.option = "tableIncStepPerVnode"; + cfg.ptr = &tsTableIncStepPerVnode; + cfg.valType = TAOS_CFG_VTYPE_INT32; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; + cfg.minValue = TSDB_MIN_TABLES; + cfg.maxValue = TSDB_MAX_TABLES; + cfg.ptrLength = 0; + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + cfg.option = "cache"; cfg.ptr = &tsCacheBlockSize; cfg.valType = TAOS_CFG_VTYPE_INT32; @@ -702,6 +716,16 @@ static void doInitGlobalConfig() { cfg.unitType = TAOS_CFG_UTYPE_NONE; taosInitConfigOption(cfg); + cfg.option = "fsync"; + cfg.ptr = &tsFsyncPeriod; + cfg.valType = TAOS_CFG_VTYPE_INT32; + cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW; + cfg.minValue = TSDB_MIN_FSYNC_PERIOD; + cfg.maxValue = TSDB_MAX_FSYNC_PERIOD; + cfg.ptrLength = 0; + cfg.unitType = TAOS_CFG_UTYPE_NONE; + taosInitConfigOption(cfg); + cfg.option = "replica"; cfg.ptr = &tsReplications; cfg.valType = TAOS_CFG_VTYPE_INT32; diff --git a/src/dnode/src/dnodeMgmt.c b/src/dnode/src/dnodeMgmt.c index d0c42c4412f8430856fb044b662ac930f8be8bd1..4577a5c31d0b66e348b6c45c60f28227e7bb65be 100644 --- a/src/dnode/src/dnodeMgmt.c +++ b/src/dnode/src/dnodeMgmt.c @@ -401,6 +401,7 @@ static int32_t dnodeProcessCreateVnodeMsg(SRpcMsg *rpcMsg) { pCreate->cfg.daysToKeep = htonl(pCreate->cfg.daysToKeep); pCreate->cfg.minRowsPerFileBlock = htonl(pCreate->cfg.minRowsPerFileBlock); pCreate->cfg.maxRowsPerFileBlock = htonl(pCreate->cfg.maxRowsPerFileBlock); + pCreate->cfg.fsyncPeriod = htonl(pCreate->cfg.fsyncPeriod); pCreate->cfg.commitTime = htonl(pCreate->cfg.commitTime); for (int32_t j = 0; j < pCreate->cfg.replications; ++j) { diff --git a/src/dnode/src/dnodePeer.c b/src/dnode/src/dnodePeer.c index 6ab51889345366a6075db599eb4c0facbe509e8b..18fdb4d090ec44d1a546718d6a1412485cbbb227 100644 --- a/src/dnode/src/dnodePeer.c +++ b/src/dnode/src/dnodePeer.c @@ -60,7 +60,7 @@ int32_t dnodeInitServer() { rpcInit.label = "DND-S"; rpcInit.numOfThreads = 1; rpcInit.cfp = dnodeProcessReqMsgFromDnode; - rpcInit.sessions = 100; + rpcInit.sessions = TSDB_MAX_VNODES; rpcInit.connType = TAOS_CONN_SERVER; rpcInit.idleTime = tsShellActivityTimer * 1000; @@ -122,7 +122,7 @@ int32_t dnodeInitClient() { rpcInit.label = "DND-C"; rpcInit.numOfThreads = 1; rpcInit.cfp = dnodeProcessRspFromDnode; - rpcInit.sessions = 100; + rpcInit.sessions = TSDB_MAX_VNODES; rpcInit.connType = TAOS_CONN_CLIENT; rpcInit.idleTime = tsShellActivityTimer * 1000; rpcInit.user = "t"; diff --git a/src/dnode/src/dnodeSystem.c b/src/dnode/src/dnodeSystem.c index 971bd0a110781f17b88c278b61fd98558cff2627..4eba81e29d6e365b7be4000e0c57ad9dfe1a1501 100644 --- a/src/dnode/src/dnodeSystem.c +++ b/src/dnode/src/dnodeSystem.c @@ -70,7 +70,13 @@ int32_t main(int32_t argc, char *argv[]) { } #endif #ifdef TAOS_RANDOM_FILE_FAIL - else if (strcmp(argv[i], "--random-file-fail-factor") == 0) { + else if (strcmp(argv[i], "--random-file-fail-output") == 0) { + if ((i < argc - 1) && (argv[i + 1][0] != '-')) { + taosSetRandomFileFailOutput(argv[++i]); + } else { + taosSetRandomFileFailOutput(NULL); + } + } else if (strcmp(argv[i], "--random-file-fail-factor") == 0) { if ( (i+1) < argc ) { int factor = atoi(argv[i+1]); printf("The factor of random failure is %d\n", factor); diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h index eb3c3abc840121043e7a36ef884f63f4c5caef57..7696c91bdf5deb862c050486aafce257d26f7ae3 100644 --- a/src/inc/taosdef.h +++ b/src/inc/taosdef.h @@ -274,8 +274,8 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size); #define TSDB_DEFAULT_PAYLOAD_SIZE 5120 // default payload size, greater than PATH_MAX value #define TSDB_EXTRA_PAYLOAD_SIZE 128 // extra bytes for auth #define TSDB_CQ_SQL_SIZE 1024 -#define TSDB_MAX_VNODES 256 -#define TSDB_MIN_VNODES 50 +#define TSDB_MAX_VNODES 2048 +#define TSDB_MIN_VNODES 256 #define TSDB_INVALID_VNODE_NUM 0 #define TSDB_DNODE_ROLE_ANY 0 @@ -296,9 +296,9 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size); #define TSDB_DEFAULT_TOTAL_BLOCKS 4 #define TSDB_MIN_TABLES 4 -#define TSDB_MAX_TABLES 5000000 -#define TSDB_DEFAULT_TABLES 200000 -#define TSDB_TABLES_STEP 10000 +#define TSDB_MAX_TABLES 10000000 +#define TSDB_DEFAULT_TABLES 1000000 +#define TSDB_TABLES_STEP 1000 #define TSDB_MIN_DAYS_PER_FILE 1 #define TSDB_MAX_DAYS_PER_FILE 3650 @@ -332,6 +332,10 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size); #define TSDB_MAX_WAL_LEVEL 2 #define TSDB_DEFAULT_WAL_LEVEL 1 +#define TSDB_MIN_FSYNC_PERIOD 0 +#define TSDB_MAX_FSYNC_PERIOD 180000 // millisecond +#define TSDB_DEFAULT_FSYNC_PERIOD 3000 // three second + #define TSDB_MIN_DB_REPLICA_OPTION 1 #define TSDB_MAX_DB_REPLICA_OPTION 3 #define TSDB_DEFAULT_DB_REPLICA_OPTION 1 diff --git a/src/inc/taoserror.h b/src/inc/taoserror.h index 07b55b6acb6ee30db0b6cdc3aacaf74108ec89ef..3503e39d317107a06206bb25f9b09ced723b4c06 100644 --- a/src/inc/taoserror.h +++ b/src/inc/taoserror.h @@ -209,6 +209,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_QRY_NO_DISKSPACE, 0, 0x0702, "query no d TAOS_DEFINE_ERROR(TSDB_CODE_QRY_OUT_OF_MEMORY, 0, 0x0703, "query out of memory") TAOS_DEFINE_ERROR(TSDB_CODE_QRY_APP_ERROR, 0, 0x0704, "query app error") TAOS_DEFINE_ERROR(TSDB_CODE_QRY_DUP_JOIN_KEY, 0, 0x0705, "query duplicated join key") +TAOS_DEFINE_ERROR(TSDB_CODE_QRY_EXCEED_TAGS_LIMIT, 0, 0x0706, "query tag conditon too many") // grant TAOS_DEFINE_ERROR(TSDB_CODE_GRANT_EXPIRED, 0, 0x0800, "grant expired") diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index d96e9f68d5a33addb84ca08d286be7b88b62db30..dec3f60b649a9f852c4ca01925f9d27023badc13 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -515,6 +515,7 @@ typedef struct { int32_t minRowsPerFileBlock; int32_t maxRowsPerFileBlock; int32_t commitTime; + int32_t fsyncPeriod; uint8_t precision; // time resolution int8_t compression; int8_t walLevel; @@ -608,6 +609,7 @@ typedef struct { int32_t minRowsPerFileBlock; int32_t maxRowsPerFileBlock; int32_t commitTime; + int32_t fsyncPeriod; int8_t precision; int8_t compression; int8_t walLevel; diff --git a/src/inc/ttokendef.h b/src/inc/ttokendef.h index b313d6ebb1a86bca699f1517b6b16cdc16ed3150..0b63e9e71d5cc76cd2b4b1eec3997181e7c5c706 100644 --- a/src/inc/ttokendef.h +++ b/src/inc/ttokendef.h @@ -110,117 +110,117 @@ #define TK_BLOCKS 92 #define TK_CTIME 93 #define TK_WAL 94 -#define TK_COMP 95 -#define TK_PRECISION 96 -#define TK_LP 97 -#define TK_RP 98 -#define TK_TAGS 99 -#define TK_USING 100 -#define TK_AS 101 -#define TK_COMMA 102 -#define TK_NULL 103 -#define TK_SELECT 104 -#define TK_UNION 105 -#define TK_ALL 106 -#define TK_FROM 107 -#define TK_VARIABLE 108 -#define TK_INTERVAL 109 -#define TK_FILL 110 -#define TK_SLIDING 111 -#define TK_ORDER 112 -#define TK_BY 113 -#define TK_ASC 114 -#define TK_DESC 115 -#define TK_GROUP 116 -#define TK_HAVING 117 -#define TK_LIMIT 118 -#define TK_OFFSET 119 -#define TK_SLIMIT 120 -#define TK_SOFFSET 121 -#define TK_WHERE 122 -#define TK_NOW 123 -#define TK_RESET 124 -#define TK_QUERY 125 -#define TK_ADD 126 -#define TK_COLUMN 127 -#define TK_TAG 128 -#define TK_CHANGE 129 -#define TK_SET 130 -#define TK_KILL 131 -#define TK_CONNECTION 132 -#define TK_STREAM 133 -#define TK_COLON 134 -#define TK_ABORT 135 -#define TK_AFTER 136 -#define TK_ATTACH 137 -#define TK_BEFORE 138 -#define TK_BEGIN 139 -#define TK_CASCADE 140 -#define TK_CLUSTER 141 -#define TK_CONFLICT 142 -#define TK_COPY 143 -#define TK_DEFERRED 144 -#define TK_DELIMITERS 145 -#define TK_DETACH 146 -#define TK_EACH 147 -#define TK_END 148 -#define TK_EXPLAIN 149 -#define TK_FAIL 150 -#define TK_FOR 151 -#define TK_IGNORE 152 -#define TK_IMMEDIATE 153 -#define TK_INITIALLY 154 -#define TK_INSTEAD 155 -#define TK_MATCH 156 -#define TK_KEY 157 -#define TK_OF 158 -#define TK_RAISE 159 -#define TK_REPLACE 160 -#define TK_RESTRICT 161 -#define TK_ROW 162 -#define TK_STATEMENT 163 -#define TK_TRIGGER 164 -#define TK_VIEW 165 -#define TK_COUNT 166 -#define TK_SUM 167 -#define TK_AVG 168 -#define TK_MIN 169 -#define TK_MAX 170 -#define TK_FIRST 171 -#define TK_LAST 172 -#define TK_TOP 173 -#define TK_BOTTOM 174 -#define TK_STDDEV 175 -#define TK_PERCENTILE 176 -#define TK_APERCENTILE 177 -#define TK_LEASTSQUARES 178 -#define TK_HISTOGRAM 179 -#define TK_DIFF 180 -#define TK_SPREAD 181 -#define TK_TWA 182 -#define TK_INTERP 183 -#define TK_LAST_ROW 184 -#define TK_RATE 185 -#define TK_IRATE 186 -#define TK_SUM_RATE 187 -#define TK_SUM_IRATE 188 -#define TK_AVG_RATE 189 -#define TK_AVG_IRATE 190 -#define TK_TBID 191 -#define TK_SEMI 192 -#define TK_NONE 193 -#define TK_PREV 194 -#define TK_LINEAR 195 -#define TK_IMPORT 196 -#define TK_METRIC 197 -#define TK_TBNAME 198 -#define TK_JOIN 199 -#define TK_METRICS 200 -#define TK_STABLE 201 -#define TK_INSERT 202 -#define TK_INTO 203 -#define TK_VALUES 204 - +#define TK_FSYNC 95 +#define TK_COMP 96 +#define TK_PRECISION 97 +#define TK_LP 98 +#define TK_RP 99 +#define TK_TAGS 100 +#define TK_USING 101 +#define TK_AS 102 +#define TK_COMMA 103 +#define TK_NULL 104 +#define TK_SELECT 105 +#define TK_UNION 106 +#define TK_ALL 107 +#define TK_FROM 108 +#define TK_VARIABLE 109 +#define TK_INTERVAL 110 +#define TK_FILL 111 +#define TK_SLIDING 112 +#define TK_ORDER 113 +#define TK_BY 114 +#define TK_ASC 115 +#define TK_DESC 116 +#define TK_GROUP 117 +#define TK_HAVING 118 +#define TK_LIMIT 119 +#define TK_OFFSET 120 +#define TK_SLIMIT 121 +#define TK_SOFFSET 122 +#define TK_WHERE 123 +#define TK_NOW 124 +#define TK_RESET 125 +#define TK_QUERY 126 +#define TK_ADD 127 +#define TK_COLUMN 128 +#define TK_TAG 129 +#define TK_CHANGE 130 +#define TK_SET 131 +#define TK_KILL 132 +#define TK_CONNECTION 133 +#define TK_STREAM 134 +#define TK_COLON 135 +#define TK_ABORT 136 +#define TK_AFTER 137 +#define TK_ATTACH 138 +#define TK_BEFORE 139 +#define TK_BEGIN 140 +#define TK_CASCADE 141 +#define TK_CLUSTER 142 +#define TK_CONFLICT 143 +#define TK_COPY 144 +#define TK_DEFERRED 145 +#define TK_DELIMITERS 146 +#define TK_DETACH 147 +#define TK_EACH 148 +#define TK_END 149 +#define TK_EXPLAIN 150 +#define TK_FAIL 151 +#define TK_FOR 152 +#define TK_IGNORE 153 +#define TK_IMMEDIATE 154 +#define TK_INITIALLY 155 +#define TK_INSTEAD 156 +#define TK_MATCH 157 +#define TK_KEY 158 +#define TK_OF 159 +#define TK_RAISE 160 +#define TK_REPLACE 161 +#define TK_RESTRICT 162 +#define TK_ROW 163 +#define TK_STATEMENT 164 +#define TK_TRIGGER 165 +#define TK_VIEW 166 +#define TK_COUNT 167 +#define TK_SUM 168 +#define TK_AVG 169 +#define TK_MIN 170 +#define TK_MAX 171 +#define TK_FIRST 172 +#define TK_LAST 173 +#define TK_TOP 174 +#define TK_BOTTOM 175 +#define TK_STDDEV 176 +#define TK_PERCENTILE 177 +#define TK_APERCENTILE 178 +#define TK_LEASTSQUARES 179 +#define TK_HISTOGRAM 180 +#define TK_DIFF 181 +#define TK_SPREAD 182 +#define TK_TWA 183 +#define TK_INTERP 184 +#define TK_LAST_ROW 185 +#define TK_RATE 186 +#define TK_IRATE 187 +#define TK_SUM_RATE 188 +#define TK_SUM_IRATE 189 +#define TK_AVG_RATE 190 +#define TK_AVG_IRATE 191 +#define TK_TBID 192 +#define TK_SEMI 193 +#define TK_NONE 194 +#define TK_PREV 195 +#define TK_LINEAR 196 +#define TK_IMPORT 197 +#define TK_METRIC 198 +#define TK_TBNAME 199 +#define TK_JOIN 200 +#define TK_METRICS 201 +#define TK_STABLE 202 +#define TK_INSERT 203 +#define TK_INTO 204 +#define TK_VALUES 205 #define TK_SPACE 300 #define TK_COMMENT 301 diff --git a/src/inc/twal.h b/src/inc/twal.h index 8c2c3c69a1261ea0d86ac8d3b09c435a74b65085..4fdb7aa275d539ae63129e038c4ae50f59552e1f 100644 --- a/src/inc/twal.h +++ b/src/inc/twal.h @@ -35,6 +35,7 @@ typedef struct { typedef struct { int8_t walLevel; // wal level + int32_t fsyncPeriod; // millisecond int8_t wals; // number of WAL files; int8_t keep; // keep the wal file when closed } SWalCfg; diff --git a/src/kit/taosmigrate/taosmigrateVnodeCfg.c b/src/kit/taosmigrate/taosmigrateVnodeCfg.c index b925fb10aa3bb59951726497b3c77a7a8d5ef142..e830ef78f554445d6455bff71e9457ea2645ef9e 100644 --- a/src/kit/taosmigrate/taosmigrateVnodeCfg.c +++ b/src/kit/taosmigrate/taosmigrateVnodeCfg.c @@ -48,6 +48,7 @@ static int32_t saveVnodeCfg(SVnodeObj *pVnode, char* cfgFile) len += snprintf(content + len, maxLen - len, " \"precision\": %d,\n", pVnode->tsdbCfg.precision); len += snprintf(content + len, maxLen - len, " \"compression\": %d,\n", pVnode->tsdbCfg.compression); len += snprintf(content + len, maxLen - len, " \"walLevel\": %d,\n", pVnode->walCfg.walLevel); + len += snprintf(content + len, maxLen - len, " \"fsync\": %d,\n", pVnode->walCfg.fsyncPeriod); len += snprintf(content + len, maxLen - len, " \"replica\": %d,\n", pVnode->syncCfg.replica); len += snprintf(content + len, maxLen - len, " \"wals\": %d,\n", pVnode->walCfg.wals); len += snprintf(content + len, maxLen - len, " \"quorum\": %d,\n", pVnode->syncCfg.quorum); @@ -212,6 +213,13 @@ static int32_t readVnodeCfg(SVnodeObj *pVnode, char* cfgFile) } pVnode->walCfg.walLevel = (int8_t) walLevel->valueint; + cJSON *fsyncPeriod = cJSON_GetObjectItem(root, "fsync"); + if (!fsyncPeriod || fsyncPeriod->type != cJSON_Number) { + printf("vgId:%d, failed to read vnode cfg, fsyncPeriod not found\n", pVnode->vgId); + goto PARSE_OVER; + } + pVnode->walCfg.fsyncPeriod = fsyncPeriod->valueint; + cJSON *wals = cJSON_GetObjectItem(root, "wals"); if (!wals || wals->type != cJSON_Number) { printf("vgId:%d, failed to read vnode cfg, wals not found\n", pVnode->vgId); diff --git a/src/mnode/inc/mnodeDef.h b/src/mnode/inc/mnodeDef.h index 90c2ff9e66d01a7fc89f4a1d8861025bc7668e7b..b7489a9fc56553c55ea4097a5df65b3a34f7b54b 100644 --- a/src/mnode/inc/mnodeDef.h +++ b/src/mnode/inc/mnodeDef.h @@ -160,6 +160,7 @@ typedef struct { int32_t minRowsPerFileBlock; int32_t maxRowsPerFileBlock; int32_t commitTime; + int32_t fsyncPeriod; int8_t precision; int8_t compression; int8_t walLevel; diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index e8183e9089bd97cc40c20368cfcfa25ca450a368..e3b1603856237693ee7d857f0129bd107925349e 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -287,14 +287,14 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { return TSDB_CODE_MND_INVALID_DB_OPTION; } - if (pCfg->replications < TSDB_MIN_DB_REPLICA_OPTION || pCfg->replications > TSDB_MAX_DB_REPLICA_OPTION) { - mError("invalid db option replications:%d valid range: [%d, %d]", pCfg->replications, TSDB_MIN_DB_REPLICA_OPTION, - TSDB_MAX_DB_REPLICA_OPTION); + if (pCfg->fsyncPeriod < TSDB_MIN_FSYNC_PERIOD || pCfg->fsyncPeriod > TSDB_MAX_FSYNC_PERIOD) { + mError("invalid db option fsyncPeriod:%d, valid range: [%d, %d]", pCfg->fsyncPeriod, TSDB_MIN_FSYNC_PERIOD, TSDB_MAX_FSYNC_PERIOD); return TSDB_CODE_MND_INVALID_DB_OPTION; } - if (pCfg->walLevel < TSDB_MIN_WAL_LEVEL) { - mError("invalid db option walLevel:%d must be greater than 0", pCfg->walLevel); + if (pCfg->replications < TSDB_MIN_DB_REPLICA_OPTION || pCfg->replications > TSDB_MAX_DB_REPLICA_OPTION) { + mError("invalid db option replications:%d valid range: [%d, %d]", pCfg->replications, TSDB_MIN_DB_REPLICA_OPTION, + TSDB_MAX_DB_REPLICA_OPTION); return TSDB_CODE_MND_INVALID_DB_OPTION; } @@ -318,6 +318,7 @@ static void mnodeSetDefaultDbCfg(SDbCfg *pCfg) { if (pCfg->daysToKeep2 < 0) pCfg->daysToKeep2 = pCfg->daysToKeep; if (pCfg->minRowsPerFileBlock < 0) pCfg->minRowsPerFileBlock = tsMinRowsInFileBlock; if (pCfg->maxRowsPerFileBlock < 0) pCfg->maxRowsPerFileBlock = tsMaxRowsInFileBlock; + if (pCfg->fsyncPeriod <0) pCfg->fsyncPeriod = tsFsyncPeriod; if (pCfg->commitTime < 0) pCfg->commitTime = tsCommitTime; if (pCfg->precision < 0) pCfg->precision = tsTimePrecision; if (pCfg->compression < 0) pCfg->compression = tsCompression; @@ -367,6 +368,7 @@ static int32_t mnodeCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate, void *pMs .daysToKeep2 = pCreate->daysToKeep2, .minRowsPerFileBlock = pCreate->minRowsPerFileBlock, .maxRowsPerFileBlock = pCreate->maxRowsPerFileBlock, + .fsyncPeriod = pCreate->fsyncPeriod, .commitTime = pCreate->commitTime, .precision = pCreate->precision, .compression = pCreate->compression, @@ -559,6 +561,12 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn pSchema[cols].bytes = htons(pShow->bytes[cols]); cols++; + pShow->bytes[cols] = 4; + pSchema[cols].type = TSDB_DATA_TYPE_INT; + strcpy(pSchema[cols].name, "fsync"); + pSchema[cols].bytes = htons(pShow->bytes[cols]); + cols++; + pShow->bytes[cols] = 1; pSchema[cols].type = TSDB_DATA_TYPE_TINYINT; strcpy(pSchema[cols].name, "comp"); @@ -682,6 +690,10 @@ static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *(int8_t *)pWrite = pDb->cfg.walLevel; cols++; + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; + *(int32_t *)pWrite = pDb->cfg.fsyncPeriod; + cols++; + pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; *(int8_t *)pWrite = pDb->cfg.compression; cols++; @@ -758,6 +770,7 @@ static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg) { pCreate->daysToKeep1 = htonl(pCreate->daysToKeep1); pCreate->daysToKeep2 = htonl(pCreate->daysToKeep2); pCreate->commitTime = htonl(pCreate->commitTime); + pCreate->fsyncPeriod = htonl(pCreate->fsyncPeriod); pCreate->minRowsPerFileBlock = htonl(pCreate->minRowsPerFileBlock); pCreate->maxRowsPerFileBlock = htonl(pCreate->maxRowsPerFileBlock); @@ -785,6 +798,7 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) { int32_t minRows = htonl(pAlter->minRowsPerFileBlock); int32_t maxRows = htonl(pAlter->maxRowsPerFileBlock); int32_t commitTime = htonl(pAlter->commitTime); + int32_t fsyncPeriod = htonl(pAlter->fsyncPeriod); int8_t compression = pAlter->compression; int8_t walLevel = pAlter->walLevel; int8_t replications = pAlter->replications; @@ -861,6 +875,11 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) { terrno = TSDB_CODE_MND_INVALID_DB_OPTION; } + if (fsyncPeriod >= 0 && fsyncPeriod != pDb->cfg.fsyncPeriod) { + mError("db:%s, can't alter fsyncPeriod option", pDb->name); + terrno = TSDB_CODE_MND_INVALID_DB_OPTION; + } + if (replications > 0 && replications != pDb->cfg.replications) { mDebug("db:%s, replications:%d change to %d", pDb->name, pDb->cfg.replications, replications); newCfg.replications = replications; diff --git a/src/mnode/src/mnodeProfile.c b/src/mnode/src/mnodeProfile.c index af4a09a45a1fc314a648ec528cb4caaf9860df7a..9121f31131bc0cafa85830409bf9d40390da6790 100644 --- a/src/mnode/src/mnodeProfile.c +++ b/src/mnode/src/mnodeProfile.c @@ -115,7 +115,7 @@ SConnObj *mnodeAccquireConn(int32_t connId, char *user, uint32_t ip, uint16_t po uint64_t expireTime = CONN_KEEP_TIME * 1000 + (uint64_t)taosGetTimestampMs(); SConnObj *pConn = taosCacheUpdateExpireTimeByName(tsMnodeConnCache, &connId, sizeof(int32_t), expireTime); if (pConn == NULL) { - mError("connId:%d, is already destroyed, user:%s ip:%s:%u", connId, user, taosIpStr(ip), port); + mDebug("connId:%d, is already destroyed, user:%s ip:%s:%u", connId, user, taosIpStr(ip), port); return NULL; } diff --git a/src/mnode/src/mnodeSdb.c b/src/mnode/src/mnodeSdb.c index c8e4ae956c2158f908c20c4aa264ff6b718c0f61..40b9784e0e0d0570f8271e3017d1fdbea20667b9 100644 --- a/src/mnode/src/mnodeSdb.c +++ b/src/mnode/src/mnodeSdb.c @@ -170,7 +170,7 @@ static void *sdbGetTableFromId(int32_t tableId) { } static int32_t sdbInitWal() { - SWalCfg walCfg = {.walLevel = 2, .wals = 2, .keep = 1}; + SWalCfg walCfg = {.walLevel = 2, .wals = 2, .keep = 1, .fsyncPeriod = 0}; char temp[TSDB_FILENAME_LEN]; sprintf(temp, "%s/wal", tsMnodeDir); tsSdbObj.wal = walOpen(temp, &walCfg); diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c index 28661dc1adccac634079112eb9b02a889774febe..80c4fc95abd7b8e9a4314f5c032ad79da48312d3 100644 --- a/src/mnode/src/mnodeTable.c +++ b/src/mnode/src/mnodeTable.c @@ -1740,11 +1740,13 @@ static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) { return code; } - if (pMsg->pVgroup == NULL) { - pMsg->pVgroup = pVgroup; - mnodeIncVgroupRef(pVgroup); + if (pMsg->pVgroup != NULL) { + mnodeDecVgroupRef(pMsg->pVgroup); } + pMsg->pVgroup = pVgroup; + mnodeIncVgroupRef(pVgroup); + mDebug("app:%p:%p, table:%s, allocated in vgroup, vgId:%d sid:%d", pMsg->rpcMsg.ahandle, pMsg, pCreate->tableId, pVgroup->vgId, sid); diff --git a/src/mnode/src/mnodeVgroup.c b/src/mnode/src/mnodeVgroup.c index 5658f4bcbf17ac2f6f0fa7981f6abf3c170dada7..05e300d242ef04b1460ebf4993d7ca0b7a2a600a 100644 --- a/src/mnode/src/mnodeVgroup.c +++ b/src/mnode/src/mnodeVgroup.c @@ -323,7 +323,7 @@ static int32_t mnodeAllocVgroupIdPool(SVgObj *pInputVgroup) { if (pDb == NULL) return TSDB_CODE_MND_APP_ERROR; int32_t minIdPoolSize = TSDB_MAX_TABLES; - int32_t maxIdPoolSize = TSDB_MIN_TABLES; + int32_t maxIdPoolSize = tsMinTablePerVnode; for (int32_t v = 0; v < pDb->numOfVgroups; ++v) { SVgObj *pVgroup = pDb->vgList[v]; if (pVgroup == NULL) continue; @@ -347,10 +347,10 @@ static int32_t mnodeAllocVgroupIdPool(SVgObj *pInputVgroup) { // realloc all vgroups in db int32_t newIdPoolSize; - if (minIdPoolSize * 4 < TSDB_TABLES_STEP) { + if (minIdPoolSize * 4 < tsTableIncStepPerVnode) { newIdPoolSize = minIdPoolSize * 4; } else { - newIdPoolSize = ((minIdPoolSize / TSDB_TABLES_STEP) + 1) * TSDB_TABLES_STEP; + newIdPoolSize = ((minIdPoolSize / tsTableIncStepPerVnode) + 1) * tsTableIncStepPerVnode; } if (newIdPoolSize > tsMaxTablePerVnode) { @@ -471,6 +471,8 @@ static int32_t mnodeCreateVgroupCb(SMnodeMsg *pMsg, int32_t code) { } pMsg->expected = pVgroup->numOfVnodes; + pMsg->successed = 0; + pMsg->received = 0; mnodeSendCreateVgroupMsg(pVgroup, pMsg); return TSDB_CODE_MND_ACTION_IN_PROGRESS; @@ -755,6 +757,7 @@ SMDCreateVnodeMsg *mnodeBuildCreateVnodeMsg(SVgObj *pVgroup) { pCfg->daysToKeep2 = htonl(pDb->cfg.daysToKeep2); pCfg->minRowsPerFileBlock = htonl(pDb->cfg.minRowsPerFileBlock); pCfg->maxRowsPerFileBlock = htonl(pDb->cfg.maxRowsPerFileBlock); + pCfg->fsyncPeriod = htonl(pDb->cfg.fsyncPeriod); pCfg->commitTime = htonl(pDb->cfg.commitTime); pCfg->precision = pDb->cfg.precision; pCfg->compression = pDb->cfg.compression; @@ -836,6 +839,8 @@ static void mnodeProcessCreateVnodeRsp(SRpcMsg *rpcMsg) { pVgroup->vgId, tstrerror(rpcMsg->code), mnodeMsg->received, mnodeMsg->successed, mnodeMsg->expected, mnodeMsg->rpcMsg.handle, rpcMsg->ahandle); + assert(mnodeMsg->received <= mnodeMsg->expected); + if (mnodeMsg->received != mnodeMsg->expected) return; if (mnodeMsg->received == mnodeMsg->successed) { diff --git a/src/plugins/http/src/httpContext.c b/src/plugins/http/src/httpContext.c index 98fba9cb3b3f39a70fd102721a022ad923e0e43c..cefcca78215da2267001099aa7f728527f481ffa 100644 --- a/src/plugins/http/src/httpContext.c +++ b/src/plugins/http/src/httpContext.c @@ -137,7 +137,7 @@ void httpReleaseContext(HttpContext *pContext) { assert(refCount >= 0); HttpContext **ppContext = pContext->ppContext; - httpDebug("context:%p, is releasd, data:%p refCount:%d", pContext, ppContext, refCount); + httpDebug("context:%p, is released, data:%p refCount:%d", pContext, ppContext, refCount); if (tsHttpServer.contextCache != NULL) { taosCacheRelease(tsHttpServer.contextCache, (void **)(&ppContext), false); diff --git a/src/plugins/http/src/httpSql.c b/src/plugins/http/src/httpSql.c index 7a515d124ebee78cb7d574a9f340d4e3f62d7cc2..a01cb07a98cdff914dfb474b05c376ebca91a09d 100644 --- a/src/plugins/http/src/httpSql.c +++ b/src/plugins/http/src/httpSql.c @@ -47,6 +47,10 @@ void httpProcessMultiSqlRetrieveCallBack(void *param, TAOS_RES *result, int numO } } + // if (tscResultsetFetchCompleted(result)) { + // isContinue = false; + // } + if (isContinue) { // retrieve next batch of rows httpDebug("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, continue retrieve, numOfRows:%d, sql:%s", @@ -75,7 +79,8 @@ void httpProcessMultiSqlCallBack(void *param, TAOS_RES *result, int code) { HttpContext *pContext = (HttpContext *)param; if (pContext == NULL) return; - HttpSqlCmds * multiCmds = pContext->multiCmds; + code = taos_errno(result); + HttpSqlCmds *multiCmds = pContext->multiCmds; HttpEncodeMethod *encode = pContext->encodeMethod; HttpSqlCmd *singleCmd = multiCmds->cmds + multiCmds->pos; @@ -109,8 +114,8 @@ void httpProcessMultiSqlCallBack(void *param, TAOS_RES *result, int code) { return; } - int num_fields = taos_field_count(result); - if (num_fields == 0) { + bool isUpdate = tscIsUpdateQuery(result); + if (isUpdate) { // not select or show commands int affectRows = taos_affected_rows(result); httpDebug("context:%p, fd:%d, ip:%s, user:%s, process pos:%d, affect rows:%d, sql:%s", @@ -221,9 +226,9 @@ void httpProcessSingleSqlRetrieveCallBack(void *param, TAOS_RES *result, int num if (numOfRows < 0) { httpError("context:%p, fd:%d, ip:%s, user:%s, retrieve failed, code:%s", pContext, pContext->fd, pContext->ipstr, pContext->user, tstrerror(numOfRows)); - } - - taos_free_result(result); + } + + taos_free_result(result); if (encode->stopJsonFp) { (encode->stopJsonFp)(pContext, &pContext->singleCmd); @@ -238,6 +243,7 @@ void httpProcessSingleSqlCallBack(void *param, TAOS_RES *result, int unUsedCode) if (pContext == NULL) return; int32_t code = taos_errno(result); + HttpEncodeMethod *encode = pContext->encodeMethod; if (code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) { diff --git a/src/query/inc/qExecutor.h b/src/query/inc/qExecutor.h index cdf5f9612cf192cc5ba445f232e408531cfc3afa..405ab7e26eac6cf1848510209af7302f08b8dcf0 100644 --- a/src/query/inc/qExecutor.h +++ b/src/query/inc/qExecutor.h @@ -121,7 +121,6 @@ typedef struct SQueryCostInfo { uint32_t loadBlockStatis; uint32_t discardBlocks; uint64_t elapsedTime; - uint64_t ioTime; uint64_t computTime; } SQueryCostInfo; @@ -201,7 +200,7 @@ typedef struct SQInfo { */ int32_t tableIndex; int32_t numOfGroupResultPages; - void* pBuf; // allocated buffer for STableQueryInfo, sizeof(STableQueryInfo)*numOfTables; + void* pBuf; // allocated buffer for STableQueryInfo, sizeof(STableQueryInfo)*numOfTables; } SQInfo; diff --git a/src/query/inc/qUtil.h b/src/query/inc/qUtil.h index 8aa3168efbdf942922f880c79062beb5e8687980..78ae7be03046cbe2636a8c456708b2b5ff4fc089 100644 --- a/src/query/inc/qUtil.h +++ b/src/query/inc/qUtil.h @@ -23,7 +23,7 @@ void copyTimeWindowResBuf(SQueryRuntimeEnv* pRuntimeEnv, SWindowResult* dst, con int32_t initWindowResInfo(SWindowResInfo* pWindowResInfo, SQueryRuntimeEnv* pRuntimeEnv, int32_t size, int32_t threshold, int16_t type); -void cleanupTimeWindowInfo(SWindowResInfo* pWindowResInfo, int32_t numOfCols); +void cleanupTimeWindowInfo(SWindowResInfo* pWindowResInfo); void resetTimeWindowInfo(SQueryRuntimeEnv* pRuntimeEnv, SWindowResInfo* pWindowResInfo); void clearFirstNTimeWindow(SQueryRuntimeEnv *pRuntimeEnv, int32_t num); @@ -43,9 +43,7 @@ static FORCE_INLINE SWindowResult *getWindowResult(SWindowResInfo *pWindowResInf bool isWindowResClosed(SWindowResInfo *pWindowResInfo, int32_t slot); -void createQueryResultInfo(SQuery *pQuery, SWindowResult *pResultRow, bool isSTableQuery, size_t interBufSize); - -//char *getPosInResultPage(SQueryRuntimeEnv *pRuntimeEnv, int32_t columnIndex, SWindowResult *pResult); +int32_t createQueryResultInfo(SQuery *pQuery, SWindowResult *pResultRow, bool isSTableQuery, size_t interBufSize); static FORCE_INLINE char *getPosInResultPage(SQueryRuntimeEnv *pRuntimeEnv, int32_t columnIndex, SWindowResult *pResult) { assert(pResult != NULL && pRuntimeEnv != NULL); diff --git a/src/query/inc/qsqlparser.h b/src/query/inc/qsqlparser.h index 704f3e74187ef1686be1ec7babd30b3fe2b2b1e1..9e8706cf9220c2a0d0e55fb0a8f1028a876da9d4 100644 --- a/src/query/inc/qsqlparser.h +++ b/src/query/inc/qsqlparser.h @@ -116,6 +116,7 @@ typedef struct SCreateDBInfo { int32_t daysPerFile; int32_t minRowsPerBlock; int32_t maxRowsPerBlock; + int32_t fsyncPeriod; int64_t commitTime; int32_t walLevel; int32_t compressionLevel; diff --git a/src/query/inc/sql.y b/src/query/inc/sql.y index b4ea1254b7094a8f9a3f83d55da63d990dc21b09..d709b4f838280ade6f43e419a5927216de417be5 100644 --- a/src/query/inc/sql.y +++ b/src/query/inc/sql.y @@ -221,6 +221,7 @@ maxrows(Y) ::= MAXROWS INTEGER(X). { Y = X; } blocks(Y) ::= BLOCKS INTEGER(X). { Y = X; } ctime(Y) ::= CTIME INTEGER(X). { Y = X; } wal(Y) ::= WAL INTEGER(X). { Y = X; } +fsync(Y) ::= FSYNC INTEGER(X). { Y = X; } comp(Y) ::= COMP INTEGER(X). { Y = X; } prec(Y) ::= PRECISION STRING(X). { Y = X; } @@ -236,6 +237,7 @@ db_optr(Y) ::= db_optr(Z) maxrows(X). { Y = Z; Y.maxRowsPerBlock = strtod db_optr(Y) ::= db_optr(Z) blocks(X). { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) ctime(X). { Y = Z; Y.commitTime = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) wal(X). { Y = Z; Y.walLevel = strtol(X.z, NULL, 10); } +db_optr(Y) ::= db_optr(Z) fsync(X). { Y = Z; Y.fsyncPeriod = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) prec(X). { Y = Z; Y.precision = X; } db_optr(Y) ::= db_optr(Z) keep(X). { Y = Z; Y.keep = X; } @@ -249,6 +251,7 @@ alter_db_optr(Y) ::= alter_db_optr(Z) keep(X). { Y = Z; Y.keep = X; } alter_db_optr(Y) ::= alter_db_optr(Z) blocks(X). { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) wal(X). { Y = Z; Y.walLevel = strtol(X.z, NULL, 10); } +alter_db_optr(Y) ::= alter_db_optr(Z) fsync(X). { Y = Z; Y.fsyncPeriod = strtod(X.z, NULL, 10); } %type typename {TAOS_FIELD} typename(A) ::= ids(X). { diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index d1349bd221ba18684097b25ad48b30f57d879c15..100c8c77fdec568c3323fc81bf6047c404f16760 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -144,7 +144,7 @@ static void setExecParams(SQuery *pQuery, SQLFunctionCtx *pCtx, void* inputData, SDataStatis *pStatis, void *param, int32_t colIndex); static void initCtxOutputBuf(SQueryRuntimeEnv *pRuntimeEnv); -static void destroyTableQueryInfo(STableQueryInfo *pTableQueryInfo, int32_t numOfCols); +static void destroyTableQueryInfo(STableQueryInfo *pTableQueryInfo); static void resetCtxOutputBuf(SQueryRuntimeEnv *pRuntimeEnv); static bool hasMainOutput(SQuery *pQuery); static void buildTagQueryResult(SQInfo *pQInfo); @@ -1583,7 +1583,7 @@ static void teardownQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv) { SQInfo* pQInfo = (SQInfo*) GET_QINFO_ADDR(pRuntimeEnv); qDebug("QInfo:%p teardown runtime env", pQInfo); - cleanupTimeWindowInfo(&pRuntimeEnv->windowResInfo, pQuery->numOfOutput); + cleanupTimeWindowInfo(&pRuntimeEnv->windowResInfo); if (pRuntimeEnv->pCtx != NULL) { for (int32_t i = 0; i < pQuery->numOfOutput; ++i) { @@ -1921,17 +1921,6 @@ static FORCE_INLINE int32_t getNumOfRowsInResultPage(SQuery *pQuery, bool topBot return (DEFAULT_INTERN_BUF_PAGE_SIZE - sizeof(tFilePage)) / rowSize; } -//char *getPosInResultPage(SQueryRuntimeEnv *pRuntimeEnv, int32_t columnIndex, SWindowResult *pResult) { -// assert(pResult != NULL && pRuntimeEnv != NULL); -// -// SQuery *pQuery = pRuntimeEnv->pQuery; -// tFilePage *page = GET_RES_BUF_PAGE_BY_ID(pRuntimeEnv->pResultBuf, pResult->pos.pageId); -// int32_t realRowId = pResult->pos.rowId * GET_ROW_PARAM_FOR_MULTIOUTPUT(pQuery, pRuntimeEnv->topBotQuery, pRuntimeEnv->stableQuery); -// -// return ((char *)page->data) + pRuntimeEnv->offset[columnIndex] * pRuntimeEnv->numOfRowsPerPage + -// pQuery->pSelectExpr[columnIndex].bytes * realRowId; -//} - #define IS_PREFILTER_TYPE(_t) ((_t) != TSDB_DATA_TYPE_BINARY && (_t) != TSDB_DATA_TYPE_NCHAR) static bool needToLoadDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SDataStatis *pDataStatis, SQLFunctionCtx *pCtx, @@ -2543,11 +2532,7 @@ void UNUSED_FUNC displayInterResult(tFilePage **pdata, SQueryRuntimeEnv* pRuntim switch (pQuery->pSelectExpr[i].type) { case TSDB_DATA_TYPE_BINARY: { -// int32_t colIndex = pQuery->pSelectExpr[i].base.colInfo.colIndex; int32_t type = pQuery->pSelectExpr[i].type; -// } else { -// type = pMeterObj->schema[colIndex].type; -// } printBinaryData(pQuery->pSelectExpr[i].base.functionId, pdata[i]->data + pQuery->pSelectExpr[i].bytes * j, type); break; @@ -3016,17 +3001,22 @@ void switchCtxOrder(SQueryRuntimeEnv *pRuntimeEnv) { } } -void createQueryResultInfo(SQuery *pQuery, SWindowResult *pResultRow, bool isSTableQuery, size_t interBufSize) { +int32_t createQueryResultInfo(SQuery *pQuery, SWindowResult *pResultRow, bool isSTableQuery, size_t interBufSize) { int32_t numOfCols = pQuery->numOfOutput; size_t size = numOfCols * sizeof(SResultInfo) + interBufSize; pResultRow->resultInfo = calloc(1, size); + if (pResultRow->resultInfo == NULL) { + return TSDB_CODE_QRY_OUT_OF_MEMORY; + } + pResultRow->pos = (SPosInfo) {-1, -1}; char* buf = (char*) pResultRow->resultInfo + numOfCols * sizeof(SResultInfo); // set the intermediate result output buffer setWindowResultInfo(pResultRow->resultInfo, pQuery, isSTableQuery, buf); + return TSDB_CODE_SUCCESS; } void resetCtxOutputBuf(SQueryRuntimeEnv *pRuntimeEnv) { @@ -3407,19 +3397,22 @@ static STableQueryInfo *createTableQueryInfo(SQueryRuntimeEnv *pRuntimeEnv, void if (QUERY_IS_INTERVAL_QUERY(pQuery) || pRuntimeEnv->groupbyNormalCol) { int32_t initialSize = 16; int32_t initialThreshold = 100; - initWindowResInfo(&pTableQueryInfo->windowResInfo, pRuntimeEnv, initialSize, initialThreshold, TSDB_DATA_TYPE_INT); + int32_t code = initWindowResInfo(&pTableQueryInfo->windowResInfo, pRuntimeEnv, initialSize, initialThreshold, TSDB_DATA_TYPE_INT); + if (code != TSDB_CODE_SUCCESS) { + return NULL; + } } else { // in other aggregate query, do not initialize the windowResInfo } return pTableQueryInfo; } -void destroyTableQueryInfo(STableQueryInfo *pTableQueryInfo, int32_t numOfCols) { +void destroyTableQueryInfo(STableQueryInfo *pTableQueryInfo) { if (pTableQueryInfo == NULL) { return; } - cleanupTimeWindowInfo(&pTableQueryInfo->windowResInfo, numOfCols); + cleanupTimeWindowInfo(&pTableQueryInfo->windowResInfo); } #define CHECK_QUERY_TIME_RANGE(_q, _tableInfo) \ @@ -3878,45 +3871,11 @@ int32_t doFillGapsInResults(SQueryRuntimeEnv* pRuntimeEnv, tFilePage **pDst, int static void queryCostStatis(SQInfo *pQInfo) { SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv; SQueryCostInfo *pSummary = &pRuntimeEnv->summary; -// if (pRuntimeEnv->pResultBuf == NULL) { -//// pSummary->tmpBufferInDisk = 0; -// } else { -//// pSummary->tmpBufferInDisk = getResBufSize(pRuntimeEnv->pResultBuf); -// } -// -// qDebug("QInfo:%p cost: comp blocks:%d, size:%d Bytes, elapsed time:%.2f ms", pQInfo, pSummary->readCompInfo, -// pSummary->totalCompInfoSize, pSummary->loadCompInfoUs / 1000.0); -// -// qDebug("QInfo:%p cost: field info: %d, size:%d Bytes, avg size:%.2f Bytes, elapsed time:%.2f ms", pQInfo, -// pSummary->readField, pSummary->totalFieldSize, (double)pSummary->totalFieldSize / pSummary->readField, -// pSummary->loadFieldUs / 1000.0); -// -// qDebug( -// "QInfo:%p cost: file blocks:%d, size:%d Bytes, elapsed time:%.2f ms, skipped:%d, in-memory gen null:%d Bytes", -// pQInfo, pSummary->readDiskBlocks, pSummary->totalBlockSize, pSummary->loadBlocksUs / 1000.0, -// pSummary->skippedFileBlocks, pSummary->totalGenData); - - qDebug("QInfo:%p :cost summary: elapsed time:%"PRId64" us, io time:%"PRId64" us, total blocks:%d, load block statis:%d," + + qDebug("QInfo:%p :cost summary: elapsed time:%"PRId64" us, total blocks:%d, load block statis:%d," " load data block:%d, total rows:%"PRId64 ", check rows:%"PRId64, - pQInfo, pSummary->elapsedTime, pSummary->ioTime, pSummary->totalBlocks, pSummary->loadBlockStatis, + pQInfo, pSummary->elapsedTime, pSummary->totalBlocks, pSummary->loadBlockStatis, pSummary->loadBlocks, pSummary->totalRows, pSummary->totalCheckedRows); - -// qDebug("QInfo:%p cost: temp file:%d Bytes", pQInfo, pSummary->tmpBufferInDisk); -// -// qDebug("QInfo:%p cost: file:%d, table:%d", pQInfo, pSummary->numOfFiles, pSummary->numOfTables); -// qDebug("QInfo:%p cost: seek ops:%d", pQInfo, pSummary->numOfSeek); -// -// double total = pSummary->fileTimeUs + pSummary->cacheTimeUs; -// double io = pSummary->loadCompInfoUs + pSummary->loadBlocksUs + pSummary->loadFieldUs; - -// double computing = total - io; -// -// qDebug( -// "QInfo:%p cost: total elapsed time:%.2f ms, file:%.2f ms(%.2f%), cache:%.2f ms(%.2f%). io:%.2f ms(%.2f%)," -// "comput:%.2fms(%.2f%)", -// pQInfo, total / 1000.0, pSummary->fileTimeUs / 1000.0, pSummary->fileTimeUs * 100 / total, -// pSummary->cacheTimeUs / 1000.0, pSummary->cacheTimeUs * 100 / total, io / 1000.0, io * 100 / total, -// computing / 1000.0, computing * 100 / total); } static void updateOffsetVal(SQueryRuntimeEnv *pRuntimeEnv, SDataBlockInfo *pBlockInfo) { @@ -4227,7 +4186,10 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, void *tsdb, int32_t vgId, bo type = TSDB_DATA_TYPE_INT; // group id } - initWindowResInfo(&pRuntimeEnv->windowResInfo, pRuntimeEnv, 32, 4096, type); + code = initWindowResInfo(&pRuntimeEnv->windowResInfo, pRuntimeEnv, 32, 4096, type); + if (code != TSDB_CODE_SUCCESS) { + return code; + } } } else if (pRuntimeEnv->groupbyNormalCol || QUERY_IS_INTERVAL_QUERY(pQuery)) { @@ -4244,7 +4206,10 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, void *tsdb, int32_t vgId, bo type = TSDB_DATA_TYPE_TIMESTAMP; } - initWindowResInfo(&pRuntimeEnv->windowResInfo, pRuntimeEnv, rows, 4096, type); + code = initWindowResInfo(&pRuntimeEnv->windowResInfo, pRuntimeEnv, rows, 4096, type); + if (code != TSDB_CODE_SUCCESS) { + return code; + } } if (pQuery->fillType != TSDB_FILL_NONE && !isPointInterpoQuery(pQuery)) { @@ -4733,8 +4698,6 @@ static void doRestoreContext(SQInfo *pQInfo) { static void doCloseAllTimeWindowAfterScan(SQInfo *pQInfo) { SQuery *pQuery = pQInfo->runtimeEnv.pQuery; -// int32_t step = GET_FORWARD_DIRECTION_FACTOR(pQuery->order.order); - if (QUERY_IS_INTERVAL_QUERY(pQuery)) { size_t numOfGroup = GET_NUM_OF_TABLEGROUP(pQInfo); for (int32_t i = 0; i < numOfGroup; ++i) { @@ -4744,7 +4707,6 @@ static void doCloseAllTimeWindowAfterScan(SQInfo *pQInfo) { for (int32_t j = 0; j < num; ++j) { STableQueryInfo* item = taosArrayGetP(group, j); closeAllTimeWindow(&item->windowResInfo); -// removeRedundantWindow(&item->windowResInfo, item->lastKey - step, step); } } } else { // close results for group result @@ -5417,10 +5379,11 @@ static int32_t buildAirthmeticExprFromMsg(SExprInfo *pArithExprInfo, SQueryTable qDebug("qmsg:%p create arithmetic expr from binary string: %s", pQueryMsg, pArithExprInfo->base.arg[0].argValue.pz); tExprNode* pExprNode = NULL; - TRY(32) { + TRY(TSDB_MAX_TAGS) { pExprNode = exprTreeFromBinary(pArithExprInfo->base.arg[0].argValue.pz, pArithExprInfo->base.arg[0].argBytes); } CATCH( code ) { CLEANUP_EXECUTE(); + qError("qmsg:%p failed to create arithmetic expression string from:%s, reason: %s", pQueryMsg, pArithExprInfo->base.arg[0].argValue.pz, tstrerror(code)); return code; } END_TRY @@ -5788,6 +5751,9 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList, size_t s = taosArrayGetSize(pa); SArray* p1 = taosArrayInit(s, POINTER_BYTES); + if (p1 == NULL) { + goto _cleanup; + } for(int32_t j = 0; j < s; ++j) { void* pTable = taosArrayGetP(pa, j); @@ -5802,6 +5768,9 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList, void* buf = pQInfo->pBuf + index * sizeof(STableQueryInfo); STableQueryInfo* item = createTableQueryInfo(&pQInfo->runtimeEnv, pTable, window, buf); + if (item == NULL) { + goto _cleanup; + } item->groupIndex = i; taosArrayPush(p1, &item); taosHashPut(pQInfo->tableqinfoGroupInfo.map, &id->tid, sizeof(id->tid), &item, POINTER_BYTES); @@ -5968,9 +5937,7 @@ static void freeQInfo(SQInfo *pQInfo) { size_t num = taosArrayGetSize(p); for(int32_t j = 0; j < num; ++j) { STableQueryInfo* item = taosArrayGetP(p, j); - if (item != NULL) { - destroyTableQueryInfo(item, pQuery->numOfOutput); - } + destroyTableQueryInfo(item); } taosArrayDestroy(p); @@ -6155,6 +6122,7 @@ int32_t qCreateQueryInfo(void* tsdb, int32_t vgId, SQueryTableMsg* pQueryMsg, vo code = tsdbQuerySTableByTagCond(tsdb, id->uid, tagCond, pQueryMsg->tagCondLen, pQueryMsg->tagNameRelType, tbnameCond, &tableGroupInfo, pGroupColIndex, numOfGroupByCols); if (code != TSDB_CODE_SUCCESS) { + qError("qmsg:%p failed to QueryStable, reason: %s", pQueryMsg, tstrerror(code)); goto _over; } } else { @@ -6314,7 +6282,6 @@ bool qHasMoreResultsToRetrieve(qinfo_t qinfo) { } if (ret) { -// T_REF_INC(pQInfo); qDebug("QInfo:%p has more results waits for client retrieve", pQInfo); } @@ -6370,6 +6337,7 @@ int32_t qKillQuery(qinfo_t qinfo) { return TSDB_CODE_QRY_INVALID_QHANDLE; } + sem_post(&pQInfo->dataReady); setQueryKilled(pQInfo); return TSDB_CODE_SUCCESS; } @@ -6582,13 +6550,14 @@ void** qRegisterQInfo(void* pMgmt, uint64_t qInfo) { SQueryMgmt *pQueryMgmt = pMgmt; if (pQueryMgmt->qinfoPool == NULL) { + qError("QInfo:%p failed to add qhandle into qMgmt, since qMgmt is closed", (void *)qInfo); return NULL; } pthread_mutex_lock(&pQueryMgmt->lock); if (pQueryMgmt->closed) { pthread_mutex_unlock(&pQueryMgmt->lock); - + qError("QInfo:%p failed to add qhandle into cache, since qMgmt is colsing", (void *)qInfo); return NULL; } else { uint64_t handleVal = (uint64_t) qInfo; diff --git a/src/query/src/qUtil.c b/src/query/src/qUtil.c index 8bb1233a49e7f1623b48f73e289783fbedcd14f7..4e71de830f31e4a517a78f86ddbcc71d21e2922c 100644 --- a/src/query/src/qUtil.c +++ b/src/query/src/qUtil.c @@ -50,8 +50,15 @@ int32_t initWindowResInfo(SWindowResInfo *pWindowResInfo, SQueryRuntimeEnv *pRun // use the pointer arraylist pWindowResInfo->pResult = calloc(threshold, sizeof(SWindowResult)); + if (pWindowResInfo->pResult == NULL) { + return TSDB_CODE_QRY_OUT_OF_MEMORY; + } + for (int32_t i = 0; i < pWindowResInfo->capacity; ++i) { - createQueryResultInfo(pRuntimeEnv->pQuery, &pWindowResInfo->pResult[i], pRuntimeEnv->stableQuery, pRuntimeEnv->interBufSize); + int32_t code = createQueryResultInfo(pRuntimeEnv->pQuery, &pWindowResInfo->pResult[i], pRuntimeEnv->stableQuery, pRuntimeEnv->interBufSize); + if (code != TSDB_CODE_SUCCESS) { + return code; + } } return TSDB_CODE_SUCCESS; @@ -65,7 +72,7 @@ void destroyTimeWindowRes(SWindowResult *pWindowRes) { free(pWindowRes->resultInfo); } -void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo, int32_t numOfCols) { +void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo) { if (pWindowResInfo == NULL) { return; } @@ -74,9 +81,10 @@ void cleanupTimeWindowInfo(SWindowResInfo *pWindowResInfo, int32_t numOfCols) { return; } - for (int32_t i = 0; i < pWindowResInfo->capacity; ++i) { - SWindowResult *pResult = &pWindowResInfo->pResult[i]; - destroyTimeWindowRes(pResult); + if (pWindowResInfo->pResult != NULL) { + for (int32_t i = 0; i < pWindowResInfo->capacity; ++i) { + destroyTimeWindowRes(&pWindowResInfo->pResult[i]); + } } taosHashCleanup(pWindowResInfo->hashList); diff --git a/src/query/src/qast.c b/src/query/src/qast.c index 03504a424420b08399bef0ddf54efac9e0f2312b..da4eb8f3baf67639615ec86b1f0b7b44269219e6 100644 --- a/src/query/src/qast.c +++ b/src/query/src/qast.c @@ -962,10 +962,13 @@ static UNUSED_FUNC char* exception_strdup(const char* str) { static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) { int32_t anchor = CLEANUP_GET_ANCHOR(); + if (CLEANUP_EXCEED_LIMIT()) { + THROW(TSDB_CODE_QRY_EXCEED_TAGS_LIMIT); + return NULL; + } tExprNode* pExpr = exception_calloc(1, sizeof(tExprNode)); CLEANUP_PUSH_VOID_PTR_PTR(true, tExprNodeDestroy, pExpr, NULL); - pExpr->nodeType = tbufReadUint8(br); if (pExpr->nodeType == TSQL_NODE_VALUE) { @@ -995,7 +998,6 @@ static tExprNode* exprTreeFromBinaryImpl(SBufferReader* br) { pExpr->_node.hasPK = tbufReadUint8(br); pExpr->_node.pLeft = exprTreeFromBinaryImpl(br); pExpr->_node.pRight = exprTreeFromBinaryImpl(br); - assert(pExpr->_node.pLeft != NULL && pExpr->_node.pRight != NULL); } diff --git a/src/query/src/qparserImpl.c b/src/query/src/qparserImpl.c index d4ac540d2fc725488bae83fb8890840f6ddb59a9..ecc11f8f4d76769d0d52b03f44813349aed29adc 100644 --- a/src/query/src/qparserImpl.c +++ b/src/query/src/qparserImpl.c @@ -896,6 +896,7 @@ void setDefaultCreateDbOption(SCreateDBInfo *pDBInfo) { pDBInfo->compressionLevel = -1; pDBInfo->walLevel = -1; + pDBInfo->fsyncPeriod = -1; pDBInfo->commitTime = -1; pDBInfo->maxTablesPerVnode = -1; diff --git a/src/query/src/qresultBuf.c b/src/query/src/qresultBuf.c index 6175008ef663123bc631b06ce45bb4094084c27a..ae1a95179bfd6478dfcb1109edf7d3f36aac97de 100644 --- a/src/query/src/qresultBuf.c +++ b/src/query/src/qresultBuf.c @@ -26,27 +26,24 @@ int32_t createDiskbasedResultBuffer(SDiskbasedResultBuf** pResultBuf, int32_t si pResBuf->path = strdup(path); pResBuf->fd = open(pResBuf->path, O_CREAT | O_RDWR, 0666); - - memset(path, 0, tListLen(path)); - if (!FD_VALID(pResBuf->fd)) { qError("failed to create tmp file: %s on disk. %s", pResBuf->path, strerror(errno)); - return TSDB_CODE_QRY_NO_DISKSPACE; + return TAOS_SYSTEM_ERROR(errno); } int32_t ret = ftruncate(pResBuf->fd, pResBuf->numOfPages * DEFAULT_INTERN_BUF_PAGE_SIZE); if (ret != TSDB_CODE_SUCCESS) { qError("failed to create tmp file: %s on disk. %s", pResBuf->path, strerror(errno)); - return TSDB_CODE_QRY_NO_DISKSPACE; + return TAOS_SYSTEM_ERROR(errno); } pResBuf->pBuf = mmap(NULL, pResBuf->totalBufSize, PROT_READ | PROT_WRITE, MAP_SHARED, pResBuf->fd, 0); if (pResBuf->pBuf == MAP_FAILED) { qError("QInfo:%p failed to map temp file: %s. %s", handle, pResBuf->path, strerror(errno)); - return TSDB_CODE_QRY_OUT_OF_MEMORY; // todo change error code + return TAOS_SYSTEM_ERROR(errno); } - qDebug("QInfo:%p create tmp file for output result: %s, %" PRId64 "bytes", handle, pResBuf->path, + qDebug("QInfo:%p create tmp file for output result:%s, %" PRId64 "bytes", handle, pResBuf->path, pResBuf->totalBufSize); return TSDB_CODE_SUCCESS; diff --git a/src/query/src/qtokenizer.c b/src/query/src/qtokenizer.c index 784dd9af678f3115f98d9f18811bb18b7eb8d549..0ea0ff7bf3c30f4fe8d12b1ed426f118b2d684c7 100644 --- a/src/query/src/qtokenizer.c +++ b/src/query/src/qtokenizer.c @@ -124,6 +124,7 @@ static SKeyword keywordTable[] = { {"CACHE", TK_CACHE}, {"CTIME", TK_CTIME}, {"WAL", TK_WAL}, + {"FSYNC", TK_FSYNC}, {"COMP", TK_COMP}, {"PRECISION", TK_PRECISION}, {"LP", TK_LP}, diff --git a/src/query/src/sql.c b/src/query/src/sql.c index eafb052593b121047e3388b7ead3e754ffd3e55d..ac9952bb97d9c333a5e4209318cf1b26d3fe4b9c 100644 --- a/src/query/src/sql.c +++ b/src/query/src/sql.c @@ -25,11 +25,11 @@ #include /************ Begin %include sections from the grammar ************************/ -#include -#include #include #include #include +#include +#include #include "qsqlparser.h" #include "tcmdtype.h" #include "tstoken.h" @@ -97,26 +97,26 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 270 +#define YYNOCODE 272 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SSQLToken typedef union { int yyinit; ParseTOKENTYPE yy0; - int yy150; - SQuerySQL* yy190; - SCreateAcctSQL yy219; - tSQLExprList* yy260; - SSubclauseInfo* yy263; - int64_t yy279; - SLimitVal yy284; - tVariantList* yy322; - TAOS_FIELD yy325; - tFieldList* yy369; - SCreateDBInfo yy374; - SCreateTableSQL* yy408; - tSQLExpr* yy500; - tVariant yy518; + SSubclauseInfo* yy25; + tSQLExpr* yy66; + SCreateAcctSQL yy73; + int yy82; + SQuerySQL* yy150; + SCreateDBInfo yy158; + TAOS_FIELD yy181; + SLimitVal yy188; + tSQLExprList* yy224; + int64_t yy271; + tVariant yy312; + SCreateTableSQL* yy374; + tFieldList* yy449; + tVariantList* yy494; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -126,17 +126,17 @@ typedef union { #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_STORE yypParser->pInfo = pInfo #define YYFALLBACK 1 -#define YYNSTATE 241 -#define YYNRULE 220 -#define YYNTOKEN 205 -#define YY_MAX_SHIFT 240 -#define YY_MIN_SHIFTREDUCE 397 -#define YY_MAX_SHIFTREDUCE 616 -#define YY_ERROR_ACTION 617 -#define YY_ACCEPT_ACTION 618 -#define YY_NO_ACTION 619 -#define YY_MIN_REDUCE 620 -#define YY_MAX_REDUCE 839 +#define YYNSTATE 242 +#define YYNRULE 223 +#define YYNTOKEN 206 +#define YY_MAX_SHIFT 241 +#define YY_MIN_SHIFTREDUCE 401 +#define YY_MAX_SHIFTREDUCE 623 +#define YY_ERROR_ACTION 624 +#define YY_ACCEPT_ACTION 625 +#define YY_NO_ACTION 626 +#define YY_MIN_REDUCE 627 +#define YY_MAX_REDUCE 849 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -202,216 +202,217 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (541) +#define YY_ACTTAB_COUNT (547) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 718, 438, 717, 11, 716, 134, 618, 240, 719, 439, - /* 10 */ 721, 720, 758, 41, 43, 21, 35, 36, 153, 238, - /* 20 */ 135, 29, 135, 438, 197, 39, 37, 40, 38, 158, - /* 30 */ 827, 439, 826, 34, 33, 139, 135, 32, 31, 30, - /* 40 */ 41, 43, 747, 35, 36, 157, 827, 166, 29, 733, - /* 50 */ 103, 197, 39, 37, 40, 38, 182, 21, 103, 99, - /* 60 */ 34, 33, 755, 155, 32, 31, 30, 398, 399, 400, - /* 70 */ 401, 402, 403, 404, 405, 406, 407, 408, 409, 239, - /* 80 */ 438, 736, 41, 43, 103, 35, 36, 103, 439, 168, - /* 90 */ 29, 732, 21, 197, 39, 37, 40, 38, 32, 31, - /* 100 */ 30, 56, 34, 33, 747, 781, 32, 31, 30, 43, - /* 110 */ 185, 35, 36, 782, 823, 192, 29, 21, 154, 197, - /* 120 */ 39, 37, 40, 38, 167, 572, 733, 8, 34, 33, - /* 130 */ 61, 113, 32, 31, 30, 659, 35, 36, 126, 59, - /* 140 */ 194, 29, 58, 17, 197, 39, 37, 40, 38, 215, - /* 150 */ 26, 733, 169, 34, 33, 214, 213, 32, 31, 30, - /* 160 */ 16, 233, 208, 232, 207, 206, 205, 231, 204, 230, - /* 170 */ 229, 203, 714, 219, 703, 704, 705, 706, 707, 708, - /* 180 */ 709, 710, 711, 712, 713, 162, 585, 50, 60, 576, - /* 190 */ 175, 579, 165, 582, 234, 162, 585, 179, 178, 576, - /* 200 */ 27, 579, 734, 582, 51, 162, 585, 12, 98, 576, - /* 210 */ 736, 579, 736, 582, 228, 26, 21, 159, 160, 34, - /* 220 */ 33, 196, 836, 32, 31, 30, 148, 159, 160, 76, - /* 230 */ 822, 533, 88, 87, 142, 228, 668, 159, 160, 126, - /* 240 */ 147, 553, 554, 39, 37, 40, 38, 821, 220, 544, - /* 250 */ 733, 34, 33, 46, 501, 32, 31, 30, 517, 525, - /* 260 */ 17, 514, 151, 515, 152, 516, 184, 26, 16, 233, - /* 270 */ 140, 232, 237, 236, 95, 231, 660, 230, 229, 126, - /* 280 */ 530, 42, 217, 216, 578, 18, 581, 181, 161, 170, - /* 290 */ 171, 42, 584, 577, 150, 580, 74, 78, 83, 86, - /* 300 */ 77, 42, 584, 574, 545, 602, 80, 583, 14, 13, - /* 310 */ 141, 586, 584, 143, 507, 13, 47, 583, 46, 73, - /* 320 */ 72, 116, 117, 68, 64, 67, 3, 583, 130, 128, - /* 330 */ 91, 90, 89, 506, 201, 48, 144, 22, 22, 575, - /* 340 */ 521, 519, 522, 520, 10, 9, 85, 84, 145, 146, - /* 350 */ 137, 133, 138, 735, 136, 792, 791, 163, 788, 518, - /* 360 */ 787, 164, 757, 727, 218, 100, 749, 774, 773, 114, - /* 370 */ 26, 115, 112, 670, 202, 131, 24, 211, 667, 212, - /* 380 */ 835, 70, 834, 832, 118, 688, 25, 183, 23, 132, - /* 390 */ 657, 79, 93, 540, 655, 186, 81, 82, 653, 652, - /* 400 */ 172, 190, 127, 746, 650, 649, 648, 647, 646, 638, - /* 410 */ 129, 644, 642, 52, 640, 44, 49, 195, 761, 762, - /* 420 */ 775, 191, 193, 189, 187, 28, 210, 75, 221, 222, - /* 430 */ 223, 224, 225, 199, 226, 227, 235, 53, 616, 174, - /* 440 */ 615, 149, 62, 173, 65, 176, 177, 614, 180, 651, - /* 450 */ 607, 184, 92, 527, 645, 541, 120, 689, 121, 122, - /* 460 */ 119, 123, 125, 124, 94, 104, 1, 731, 105, 111, - /* 470 */ 108, 106, 107, 109, 110, 2, 55, 57, 101, 156, - /* 480 */ 188, 5, 546, 102, 19, 6, 587, 20, 4, 15, - /* 490 */ 63, 7, 198, 478, 200, 475, 473, 472, 471, 469, - /* 500 */ 442, 209, 66, 45, 69, 71, 22, 503, 502, 500, - /* 510 */ 54, 463, 461, 453, 459, 455, 457, 451, 449, 477, - /* 520 */ 476, 474, 470, 468, 46, 440, 96, 413, 411, 620, - /* 530 */ 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, - /* 540 */ 97, + /* 0 */ 727, 442, 726, 11, 725, 625, 241, 508, 728, 443, + /* 10 */ 730, 731, 729, 41, 43, 524, 35, 36, 521, 134, + /* 20 */ 522, 29, 523, 442, 197, 39, 37, 40, 38, 153, + /* 30 */ 239, 443, 219, 34, 33, 217, 216, 32, 31, 30, + /* 40 */ 41, 43, 757, 35, 36, 139, 170, 171, 29, 135, + /* 50 */ 21, 197, 39, 37, 40, 38, 182, 833, 158, 837, + /* 60 */ 34, 33, 744, 768, 32, 31, 30, 402, 403, 404, + /* 70 */ 405, 406, 407, 408, 409, 410, 411, 412, 413, 240, + /* 80 */ 41, 43, 846, 35, 36, 742, 60, 135, 29, 135, + /* 90 */ 21, 197, 39, 37, 40, 38, 157, 837, 27, 836, + /* 100 */ 34, 33, 56, 228, 32, 31, 30, 103, 43, 8, + /* 110 */ 35, 36, 61, 113, 765, 29, 757, 525, 197, 39, + /* 120 */ 37, 40, 38, 166, 537, 743, 579, 34, 33, 18, + /* 130 */ 154, 32, 31, 30, 16, 234, 208, 233, 207, 206, + /* 140 */ 205, 232, 204, 231, 230, 229, 203, 723, 168, 711, + /* 150 */ 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, + /* 160 */ 722, 35, 36, 792, 103, 192, 29, 175, 155, 197, + /* 170 */ 39, 37, 40, 38, 179, 178, 21, 581, 34, 33, + /* 180 */ 442, 12, 32, 31, 30, 162, 592, 746, 443, 583, + /* 190 */ 17, 586, 76, 589, 103, 162, 592, 26, 228, 583, + /* 200 */ 148, 586, 99, 589, 103, 21, 88, 87, 142, 167, + /* 210 */ 165, 743, 169, 582, 147, 214, 213, 159, 160, 50, + /* 220 */ 791, 196, 74, 78, 83, 86, 77, 159, 160, 746, + /* 230 */ 235, 540, 80, 162, 592, 17, 51, 583, 215, 586, + /* 240 */ 743, 589, 26, 39, 37, 40, 38, 832, 194, 746, + /* 250 */ 58, 34, 33, 47, 185, 32, 31, 30, 666, 831, + /* 260 */ 59, 126, 181, 560, 561, 159, 160, 16, 234, 150, + /* 270 */ 233, 21, 48, 585, 232, 588, 231, 230, 229, 34, + /* 280 */ 33, 745, 42, 32, 31, 30, 116, 117, 68, 64, + /* 290 */ 67, 151, 42, 591, 32, 31, 30, 130, 128, 91, + /* 300 */ 90, 89, 675, 591, 220, 126, 743, 98, 590, 238, + /* 310 */ 237, 95, 667, 152, 26, 126, 532, 584, 590, 587, + /* 320 */ 551, 161, 552, 184, 46, 609, 14, 593, 514, 13, + /* 330 */ 42, 13, 46, 513, 201, 73, 72, 22, 22, 10, + /* 340 */ 9, 591, 528, 526, 529, 527, 85, 84, 802, 140, + /* 350 */ 141, 143, 801, 144, 163, 145, 590, 146, 798, 137, + /* 360 */ 3, 133, 138, 136, 797, 164, 759, 737, 218, 767, + /* 370 */ 100, 784, 783, 114, 112, 115, 677, 202, 131, 24, + /* 380 */ 211, 674, 212, 845, 70, 844, 26, 842, 118, 93, + /* 390 */ 695, 25, 547, 23, 186, 132, 664, 79, 662, 81, + /* 400 */ 82, 660, 659, 172, 190, 127, 657, 656, 655, 654, + /* 410 */ 653, 645, 129, 651, 649, 647, 52, 49, 756, 771, + /* 420 */ 104, 772, 44, 785, 195, 193, 191, 189, 187, 28, + /* 430 */ 210, 75, 221, 222, 223, 224, 225, 226, 199, 227, + /* 440 */ 236, 53, 623, 174, 173, 622, 62, 177, 149, 621, + /* 450 */ 183, 65, 176, 614, 658, 180, 92, 94, 652, 121, + /* 460 */ 125, 534, 120, 696, 741, 119, 110, 107, 105, 106, + /* 470 */ 122, 108, 123, 2, 111, 109, 124, 1, 184, 57, + /* 480 */ 55, 548, 156, 101, 188, 5, 553, 102, 6, 63, + /* 490 */ 594, 19, 4, 20, 15, 198, 7, 200, 483, 479, + /* 500 */ 477, 476, 475, 473, 446, 209, 66, 45, 69, 71, + /* 510 */ 22, 510, 509, 507, 54, 467, 465, 457, 463, 459, + /* 520 */ 461, 455, 453, 482, 481, 480, 478, 474, 472, 46, + /* 530 */ 444, 417, 415, 627, 626, 626, 626, 626, 626, 626, + /* 540 */ 626, 626, 626, 626, 626, 96, 97, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 225, 1, 227, 258, 229, 258, 206, 207, 233, 9, - /* 10 */ 235, 236, 209, 13, 14, 209, 16, 17, 208, 209, - /* 20 */ 258, 21, 258, 1, 24, 25, 26, 27, 28, 267, - /* 30 */ 268, 9, 268, 33, 34, 258, 258, 37, 38, 39, - /* 40 */ 13, 14, 242, 16, 17, 267, 268, 241, 21, 243, - /* 50 */ 209, 24, 25, 26, 27, 28, 256, 209, 209, 209, - /* 60 */ 33, 34, 259, 226, 37, 38, 39, 45, 46, 47, + /* 0 */ 226, 1, 228, 260, 230, 207, 208, 5, 234, 9, + /* 10 */ 236, 237, 238, 13, 14, 2, 16, 17, 5, 260, + /* 20 */ 7, 21, 9, 1, 24, 25, 26, 27, 28, 209, + /* 30 */ 210, 9, 210, 33, 34, 33, 34, 37, 38, 39, + /* 40 */ 13, 14, 244, 16, 17, 260, 33, 34, 21, 260, + /* 50 */ 210, 24, 25, 26, 27, 28, 258, 260, 269, 270, + /* 60 */ 33, 34, 240, 210, 37, 38, 39, 45, 46, 47, /* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 80 */ 1, 244, 13, 14, 209, 16, 17, 209, 9, 63, - /* 90 */ 21, 243, 209, 24, 25, 26, 27, 28, 37, 38, - /* 100 */ 39, 101, 33, 34, 242, 264, 37, 38, 39, 14, - /* 110 */ 260, 16, 17, 264, 258, 266, 21, 209, 256, 24, - /* 120 */ 25, 26, 27, 28, 241, 98, 243, 97, 33, 34, - /* 130 */ 100, 101, 37, 38, 39, 213, 16, 17, 216, 264, - /* 140 */ 262, 21, 264, 97, 24, 25, 26, 27, 28, 241, - /* 150 */ 104, 243, 126, 33, 34, 129, 130, 37, 38, 39, - /* 160 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - /* 170 */ 95, 96, 225, 209, 227, 228, 229, 230, 231, 232, - /* 180 */ 233, 234, 235, 236, 237, 1, 2, 102, 245, 5, - /* 190 */ 125, 7, 226, 9, 226, 1, 2, 132, 133, 5, - /* 200 */ 257, 7, 238, 9, 119, 1, 2, 44, 97, 5, - /* 210 */ 244, 7, 244, 9, 78, 104, 209, 33, 34, 33, - /* 220 */ 34, 37, 244, 37, 38, 39, 63, 33, 34, 72, - /* 230 */ 258, 37, 69, 70, 71, 78, 213, 33, 34, 216, - /* 240 */ 77, 114, 115, 25, 26, 27, 28, 258, 241, 98, - /* 250 */ 243, 33, 34, 102, 5, 37, 38, 39, 2, 98, - /* 260 */ 97, 5, 258, 7, 258, 9, 105, 104, 85, 86, - /* 270 */ 258, 88, 60, 61, 62, 92, 213, 94, 95, 216, - /* 280 */ 102, 97, 33, 34, 5, 107, 7, 124, 59, 33, - /* 290 */ 34, 97, 108, 5, 131, 7, 64, 65, 66, 67, - /* 300 */ 68, 97, 108, 1, 98, 98, 74, 123, 102, 102, - /* 310 */ 258, 98, 108, 258, 98, 102, 102, 123, 102, 127, - /* 320 */ 128, 64, 65, 66, 67, 68, 97, 123, 64, 65, - /* 330 */ 66, 67, 68, 98, 98, 121, 258, 102, 102, 37, - /* 340 */ 5, 5, 7, 7, 127, 128, 72, 73, 258, 258, - /* 350 */ 258, 258, 258, 244, 258, 239, 239, 239, 239, 103, - /* 360 */ 239, 239, 209, 240, 239, 209, 242, 265, 265, 209, - /* 370 */ 104, 209, 246, 209, 209, 209, 209, 209, 209, 209, - /* 380 */ 209, 209, 209, 209, 209, 209, 209, 242, 209, 209, - /* 390 */ 209, 209, 59, 108, 209, 261, 209, 209, 209, 209, - /* 400 */ 209, 261, 209, 255, 209, 209, 209, 209, 209, 209, - /* 410 */ 209, 209, 209, 118, 209, 117, 120, 112, 210, 210, - /* 420 */ 210, 111, 116, 110, 109, 122, 75, 84, 83, 49, - /* 430 */ 80, 82, 53, 210, 81, 79, 75, 210, 5, 5, - /* 440 */ 5, 210, 214, 134, 214, 134, 5, 5, 125, 210, - /* 450 */ 87, 105, 211, 98, 210, 98, 222, 224, 218, 221, - /* 460 */ 223, 219, 217, 220, 211, 254, 215, 242, 253, 247, - /* 470 */ 250, 252, 251, 249, 248, 212, 106, 102, 97, 1, - /* 480 */ 97, 113, 98, 97, 102, 113, 98, 102, 97, 97, - /* 490 */ 72, 97, 99, 9, 99, 5, 5, 5, 5, 5, - /* 500 */ 76, 15, 72, 16, 128, 128, 102, 5, 5, 98, - /* 510 */ 97, 5, 5, 5, 5, 5, 5, 5, 5, 5, - /* 520 */ 5, 5, 5, 5, 102, 76, 21, 59, 58, 0, - /* 530 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 540 */ 21, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 550 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 560 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 570 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 580 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 590 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 600 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 610 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 620 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 630 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 640 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 650 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 660 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 670 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 680 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 690 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 700 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 710 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 720 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 730 */ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - /* 740 */ 269, 269, 269, 269, 269, 269, + /* 80 */ 13, 14, 246, 16, 17, 245, 247, 260, 21, 260, + /* 90 */ 210, 24, 25, 26, 27, 28, 269, 270, 259, 270, + /* 100 */ 33, 34, 102, 78, 37, 38, 39, 210, 14, 98, + /* 110 */ 16, 17, 101, 102, 261, 21, 244, 104, 24, 25, + /* 120 */ 26, 27, 28, 243, 103, 245, 99, 33, 34, 108, + /* 130 */ 258, 37, 38, 39, 85, 86, 87, 88, 89, 90, + /* 140 */ 91, 92, 93, 94, 95, 96, 97, 226, 63, 228, + /* 150 */ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + /* 160 */ 239, 16, 17, 266, 210, 268, 21, 126, 227, 24, + /* 170 */ 25, 26, 27, 28, 133, 134, 210, 1, 33, 34, + /* 180 */ 1, 44, 37, 38, 39, 1, 2, 246, 9, 5, + /* 190 */ 98, 7, 72, 9, 210, 1, 2, 105, 78, 5, + /* 200 */ 63, 7, 210, 9, 210, 210, 69, 70, 71, 243, + /* 210 */ 227, 245, 127, 37, 77, 130, 131, 33, 34, 103, + /* 220 */ 266, 37, 64, 65, 66, 67, 68, 33, 34, 246, + /* 230 */ 227, 37, 74, 1, 2, 98, 120, 5, 243, 7, + /* 240 */ 245, 9, 105, 25, 26, 27, 28, 260, 264, 246, + /* 250 */ 266, 33, 34, 103, 262, 37, 38, 39, 214, 260, + /* 260 */ 266, 217, 125, 115, 116, 33, 34, 85, 86, 132, + /* 270 */ 88, 210, 122, 5, 92, 7, 94, 95, 96, 33, + /* 280 */ 34, 246, 98, 37, 38, 39, 64, 65, 66, 67, + /* 290 */ 68, 260, 98, 109, 37, 38, 39, 64, 65, 66, + /* 300 */ 67, 68, 214, 109, 243, 217, 245, 98, 124, 60, + /* 310 */ 61, 62, 214, 260, 105, 217, 99, 5, 124, 7, + /* 320 */ 99, 59, 99, 106, 103, 99, 103, 99, 99, 103, + /* 330 */ 98, 103, 103, 99, 99, 128, 129, 103, 103, 128, + /* 340 */ 129, 109, 5, 5, 7, 7, 72, 73, 241, 260, + /* 350 */ 260, 260, 241, 260, 241, 260, 124, 260, 241, 260, + /* 360 */ 98, 260, 260, 260, 241, 241, 244, 242, 241, 210, + /* 370 */ 210, 267, 267, 210, 248, 210, 210, 210, 210, 210, + /* 380 */ 210, 210, 210, 210, 210, 210, 105, 210, 210, 59, + /* 390 */ 210, 210, 109, 210, 263, 210, 210, 210, 210, 210, + /* 400 */ 210, 210, 210, 210, 263, 210, 210, 210, 210, 210, + /* 410 */ 210, 210, 210, 210, 210, 210, 119, 121, 257, 211, + /* 420 */ 256, 211, 118, 211, 113, 117, 112, 111, 110, 123, + /* 430 */ 75, 84, 83, 49, 80, 82, 53, 81, 211, 79, + /* 440 */ 75, 211, 5, 5, 135, 5, 215, 5, 211, 5, + /* 450 */ 244, 215, 135, 87, 211, 126, 212, 212, 211, 219, + /* 460 */ 218, 99, 223, 225, 244, 224, 250, 253, 255, 254, + /* 470 */ 222, 252, 220, 213, 249, 251, 221, 216, 106, 103, + /* 480 */ 107, 99, 1, 98, 98, 114, 99, 98, 114, 72, + /* 490 */ 99, 103, 98, 103, 98, 100, 98, 100, 9, 5, + /* 500 */ 5, 5, 5, 5, 76, 15, 72, 16, 129, 129, + /* 510 */ 103, 5, 5, 99, 98, 5, 5, 5, 5, 5, + /* 520 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 103, + /* 530 */ 76, 59, 58, 0, 271, 271, 271, 271, 271, 271, + /* 540 */ 271, 271, 271, 271, 271, 21, 21, 271, 271, 271, + /* 550 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 560 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 570 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 580 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 590 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 600 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 610 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 620 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 630 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 640 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 650 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 660 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 670 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 680 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 690 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 700 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 710 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 720 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 730 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 740 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271, + /* 750 */ 271, 271, 271, }; -#define YY_SHIFT_COUNT (240) +#define YY_SHIFT_COUNT (241) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (529) +#define YY_SHIFT_MAX (533) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 163, 75, 183, 184, 204, 79, 79, 79, 79, 79, - /* 10 */ 79, 0, 22, 204, 256, 256, 256, 46, 79, 79, - /* 20 */ 79, 79, 79, 157, 136, 136, 541, 194, 204, 204, - /* 30 */ 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - /* 40 */ 204, 204, 204, 204, 204, 256, 256, 249, 249, 249, - /* 50 */ 249, 249, 249, 30, 249, 111, 79, 79, 127, 127, - /* 60 */ 178, 79, 79, 79, 79, 79, 79, 79, 79, 79, - /* 70 */ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - /* 80 */ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, - /* 90 */ 79, 79, 79, 79, 79, 79, 79, 79, 266, 333, - /* 100 */ 333, 285, 285, 333, 295, 296, 298, 305, 306, 310, - /* 110 */ 313, 315, 303, 266, 333, 333, 351, 351, 333, 343, - /* 120 */ 345, 380, 350, 349, 379, 353, 356, 333, 361, 333, - /* 130 */ 361, 541, 541, 27, 69, 69, 69, 95, 120, 218, - /* 140 */ 218, 218, 232, 186, 186, 186, 186, 257, 264, 26, - /* 150 */ 65, 61, 61, 212, 161, 151, 206, 207, 213, 279, - /* 160 */ 288, 302, 229, 214, 85, 216, 235, 236, 192, 217, - /* 170 */ 335, 336, 274, 433, 309, 434, 435, 311, 441, 442, - /* 180 */ 363, 323, 346, 355, 370, 375, 357, 381, 478, 383, - /* 190 */ 384, 386, 382, 368, 385, 372, 388, 391, 392, 393, - /* 200 */ 394, 395, 418, 484, 490, 491, 492, 493, 494, 424, - /* 210 */ 486, 430, 487, 376, 377, 404, 502, 503, 411, 413, - /* 220 */ 404, 506, 507, 508, 509, 510, 511, 512, 513, 514, - /* 230 */ 515, 516, 517, 518, 422, 449, 505, 519, 468, 470, - /* 240 */ 529, + /* 0 */ 137, 49, 182, 184, 232, 179, 179, 179, 179, 179, + /* 10 */ 179, 0, 22, 232, 13, 13, 13, 92, 179, 179, + /* 20 */ 179, 179, 179, 120, 25, 25, 547, 194, 232, 232, + /* 30 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + /* 40 */ 232, 232, 232, 232, 232, 13, 13, 2, 2, 2, + /* 50 */ 2, 2, 2, 11, 2, 209, 179, 179, 148, 148, + /* 60 */ 21, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 70 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 80 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, + /* 90 */ 179, 179, 179, 179, 179, 179, 179, 179, 281, 330, + /* 100 */ 330, 283, 283, 330, 297, 296, 304, 311, 308, 314, + /* 110 */ 316, 318, 306, 281, 330, 330, 355, 355, 330, 347, + /* 120 */ 349, 384, 354, 353, 383, 356, 360, 330, 365, 330, + /* 130 */ 365, 547, 547, 27, 67, 67, 67, 94, 145, 218, + /* 140 */ 218, 218, 158, 246, 246, 246, 246, 222, 233, 85, + /* 150 */ 41, 257, 257, 249, 217, 221, 223, 226, 228, 268, + /* 160 */ 312, 176, 262, 150, 116, 229, 234, 235, 207, 211, + /* 170 */ 337, 338, 274, 437, 309, 438, 440, 317, 442, 444, + /* 180 */ 366, 329, 372, 362, 373, 376, 382, 385, 481, 386, + /* 190 */ 387, 389, 388, 371, 390, 374, 391, 394, 396, 395, + /* 200 */ 398, 397, 417, 489, 494, 495, 496, 497, 498, 428, + /* 210 */ 490, 434, 491, 379, 380, 407, 506, 507, 414, 416, + /* 220 */ 407, 510, 511, 512, 513, 514, 515, 516, 517, 518, + /* 230 */ 519, 520, 521, 522, 523, 426, 454, 524, 525, 472, + /* 240 */ 474, 533, }; #define YY_REDUCE_COUNT (132) -#define YY_REDUCE_MIN (-255) -#define YY_REDUCE_MAX (263) +#define YY_REDUCE_MIN (-257) +#define YY_REDUCE_MAX (261) static const short yy_reduce_ofst[] = { - /* 0 */ -200, -53, -225, -238, -222, -151, -122, -194, -117, -92, - /* 10 */ 7, -197, -190, -236, -163, -34, -32, -138, -150, -159, - /* 20 */ -125, -36, -152, -78, 23, 63, -57, -255, -253, -223, - /* 30 */ -144, -28, -11, 4, 6, 12, 52, 55, 78, 90, - /* 40 */ 91, 92, 93, 94, 96, -22, 109, 116, 117, 118, - /* 50 */ 119, 121, 122, 123, 125, 124, 153, 156, 102, 103, - /* 60 */ 126, 160, 162, 164, 165, 166, 167, 168, 169, 170, - /* 70 */ 171, 172, 173, 174, 175, 176, 177, 179, 180, 181, - /* 80 */ 182, 185, 187, 188, 189, 190, 191, 193, 195, 196, - /* 90 */ 197, 198, 199, 200, 201, 202, 203, 205, 145, 208, - /* 100 */ 209, 134, 140, 210, 148, 211, 215, 219, 221, 220, - /* 110 */ 224, 226, 222, 225, 223, 227, 228, 230, 231, 233, - /* 120 */ 237, 234, 240, 238, 242, 243, 245, 239, 241, 244, - /* 130 */ 253, 251, 263, + /* 0 */ -202, -79, -226, -211, -173, -103, -16, -120, -34, -5, + /* 10 */ 61, -147, -180, -171, -59, -17, 3, -128, -8, -46, + /* 20 */ -6, -178, -160, 44, 88, 98, -161, -257, -241, -215, + /* 30 */ -203, -13, -1, 31, 53, 89, 90, 91, 93, 95, + /* 40 */ 97, 99, 101, 102, 103, -164, 35, 107, 111, 113, + /* 50 */ 117, 123, 124, 125, 127, 122, 159, 160, 104, 105, + /* 60 */ 126, 163, 165, 166, 167, 168, 169, 170, 171, 172, + /* 70 */ 173, 174, 175, 177, 178, 180, 181, 183, 185, 186, + /* 80 */ 187, 188, 189, 190, 191, 192, 193, 195, 196, 197, + /* 90 */ 198, 199, 200, 201, 202, 203, 204, 205, 206, 208, + /* 100 */ 210, 131, 141, 212, 161, 164, 213, 215, 214, 219, + /* 110 */ 224, 216, 225, 220, 227, 230, 231, 236, 237, 238, + /* 120 */ 241, 239, 240, 248, 252, 255, 242, 243, 244, 247, + /* 130 */ 245, 261, 260, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 617, 669, 658, 829, 829, 617, 617, 617, 617, 617, - /* 10 */ 617, 759, 635, 829, 617, 617, 617, 617, 617, 617, - /* 20 */ 617, 617, 617, 671, 671, 671, 754, 617, 617, 617, - /* 30 */ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - /* 40 */ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - /* 50 */ 617, 617, 617, 617, 617, 617, 617, 617, 778, 778, - /* 60 */ 752, 617, 617, 617, 617, 617, 617, 617, 617, 617, - /* 70 */ 617, 617, 617, 617, 617, 617, 617, 617, 617, 656, - /* 80 */ 617, 654, 617, 617, 617, 617, 617, 617, 617, 617, - /* 90 */ 617, 617, 617, 617, 617, 643, 617, 617, 617, 637, - /* 100 */ 637, 617, 617, 637, 785, 789, 783, 771, 779, 770, - /* 110 */ 766, 765, 793, 617, 637, 637, 666, 666, 637, 687, - /* 120 */ 685, 683, 675, 681, 677, 679, 673, 637, 664, 637, - /* 130 */ 664, 702, 715, 617, 794, 828, 784, 812, 811, 824, - /* 140 */ 818, 817, 617, 816, 815, 814, 813, 617, 617, 617, - /* 150 */ 617, 820, 819, 617, 617, 617, 617, 617, 617, 617, - /* 160 */ 617, 617, 796, 790, 786, 617, 617, 617, 617, 617, - /* 170 */ 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - /* 180 */ 617, 617, 751, 617, 617, 760, 617, 617, 617, 617, - /* 190 */ 617, 617, 780, 617, 772, 617, 617, 617, 617, 617, - /* 200 */ 617, 728, 617, 617, 617, 617, 617, 617, 617, 617, - /* 210 */ 617, 617, 617, 617, 617, 833, 617, 617, 617, 722, - /* 220 */ 831, 617, 617, 617, 617, 617, 617, 617, 617, 617, - /* 230 */ 617, 617, 617, 617, 690, 617, 641, 639, 617, 633, - /* 240 */ 617, + /* 0 */ 624, 676, 665, 839, 839, 624, 624, 624, 624, 624, + /* 10 */ 624, 769, 642, 839, 624, 624, 624, 624, 624, 624, + /* 20 */ 624, 624, 624, 678, 678, 678, 764, 624, 624, 624, + /* 30 */ 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, + /* 40 */ 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, + /* 50 */ 624, 624, 624, 624, 624, 624, 624, 624, 788, 788, + /* 60 */ 762, 624, 624, 624, 624, 624, 624, 624, 624, 624, + /* 70 */ 624, 624, 624, 624, 624, 624, 624, 624, 624, 663, + /* 80 */ 624, 661, 624, 624, 624, 624, 624, 624, 624, 624, + /* 90 */ 624, 624, 624, 624, 624, 650, 624, 624, 624, 644, + /* 100 */ 644, 624, 624, 644, 795, 799, 793, 781, 789, 780, + /* 110 */ 776, 775, 803, 624, 644, 644, 673, 673, 644, 694, + /* 120 */ 692, 690, 682, 688, 684, 686, 680, 644, 671, 644, + /* 130 */ 671, 710, 724, 624, 804, 838, 794, 822, 821, 834, + /* 140 */ 828, 827, 624, 826, 825, 824, 823, 624, 624, 624, + /* 150 */ 624, 830, 829, 624, 624, 624, 624, 624, 624, 624, + /* 160 */ 624, 624, 806, 800, 796, 624, 624, 624, 624, 624, + /* 170 */ 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, + /* 180 */ 624, 624, 761, 624, 624, 770, 624, 624, 624, 624, + /* 190 */ 624, 624, 790, 624, 782, 624, 624, 624, 624, 624, + /* 200 */ 624, 738, 624, 624, 624, 624, 624, 624, 624, 624, + /* 210 */ 624, 624, 624, 624, 624, 843, 624, 624, 624, 732, + /* 220 */ 841, 624, 624, 624, 624, 624, 624, 624, 624, 624, + /* 230 */ 624, 624, 624, 624, 624, 697, 624, 648, 646, 624, + /* 240 */ 640, 624, }; /********** End of lemon-generated parsing tables *****************************/ @@ -526,6 +527,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* BLOCKS => nothing */ 0, /* CTIME => nothing */ 0, /* WAL => nothing */ + 0, /* FSYNC => nothing */ 0, /* COMP => nothing */ 0, /* PRECISION => nothing */ 0, /* LP => nothing */ @@ -817,180 +819,182 @@ static const char *const yyTokenName[] = { /* 92 */ "BLOCKS", /* 93 */ "CTIME", /* 94 */ "WAL", - /* 95 */ "COMP", - /* 96 */ "PRECISION", - /* 97 */ "LP", - /* 98 */ "RP", - /* 99 */ "TAGS", - /* 100 */ "USING", - /* 101 */ "AS", - /* 102 */ "COMMA", - /* 103 */ "NULL", - /* 104 */ "SELECT", - /* 105 */ "UNION", - /* 106 */ "ALL", - /* 107 */ "FROM", - /* 108 */ "VARIABLE", - /* 109 */ "INTERVAL", - /* 110 */ "FILL", - /* 111 */ "SLIDING", - /* 112 */ "ORDER", - /* 113 */ "BY", - /* 114 */ "ASC", - /* 115 */ "DESC", - /* 116 */ "GROUP", - /* 117 */ "HAVING", - /* 118 */ "LIMIT", - /* 119 */ "OFFSET", - /* 120 */ "SLIMIT", - /* 121 */ "SOFFSET", - /* 122 */ "WHERE", - /* 123 */ "NOW", - /* 124 */ "RESET", - /* 125 */ "QUERY", - /* 126 */ "ADD", - /* 127 */ "COLUMN", - /* 128 */ "TAG", - /* 129 */ "CHANGE", - /* 130 */ "SET", - /* 131 */ "KILL", - /* 132 */ "CONNECTION", - /* 133 */ "STREAM", - /* 134 */ "COLON", - /* 135 */ "ABORT", - /* 136 */ "AFTER", - /* 137 */ "ATTACH", - /* 138 */ "BEFORE", - /* 139 */ "BEGIN", - /* 140 */ "CASCADE", - /* 141 */ "CLUSTER", - /* 142 */ "CONFLICT", - /* 143 */ "COPY", - /* 144 */ "DEFERRED", - /* 145 */ "DELIMITERS", - /* 146 */ "DETACH", - /* 147 */ "EACH", - /* 148 */ "END", - /* 149 */ "EXPLAIN", - /* 150 */ "FAIL", - /* 151 */ "FOR", - /* 152 */ "IGNORE", - /* 153 */ "IMMEDIATE", - /* 154 */ "INITIALLY", - /* 155 */ "INSTEAD", - /* 156 */ "MATCH", - /* 157 */ "KEY", - /* 158 */ "OF", - /* 159 */ "RAISE", - /* 160 */ "REPLACE", - /* 161 */ "RESTRICT", - /* 162 */ "ROW", - /* 163 */ "STATEMENT", - /* 164 */ "TRIGGER", - /* 165 */ "VIEW", - /* 166 */ "COUNT", - /* 167 */ "SUM", - /* 168 */ "AVG", - /* 169 */ "MIN", - /* 170 */ "MAX", - /* 171 */ "FIRST", - /* 172 */ "LAST", - /* 173 */ "TOP", - /* 174 */ "BOTTOM", - /* 175 */ "STDDEV", - /* 176 */ "PERCENTILE", - /* 177 */ "APERCENTILE", - /* 178 */ "LEASTSQUARES", - /* 179 */ "HISTOGRAM", - /* 180 */ "DIFF", - /* 181 */ "SPREAD", - /* 182 */ "TWA", - /* 183 */ "INTERP", - /* 184 */ "LAST_ROW", - /* 185 */ "RATE", - /* 186 */ "IRATE", - /* 187 */ "SUM_RATE", - /* 188 */ "SUM_IRATE", - /* 189 */ "AVG_RATE", - /* 190 */ "AVG_IRATE", - /* 191 */ "TBID", - /* 192 */ "SEMI", - /* 193 */ "NONE", - /* 194 */ "PREV", - /* 195 */ "LINEAR", - /* 196 */ "IMPORT", - /* 197 */ "METRIC", - /* 198 */ "TBNAME", - /* 199 */ "JOIN", - /* 200 */ "METRICS", - /* 201 */ "STABLE", - /* 202 */ "INSERT", - /* 203 */ "INTO", - /* 204 */ "VALUES", - /* 205 */ "error", - /* 206 */ "program", - /* 207 */ "cmd", - /* 208 */ "dbPrefix", - /* 209 */ "ids", - /* 210 */ "cpxName", - /* 211 */ "ifexists", - /* 212 */ "alter_db_optr", - /* 213 */ "acct_optr", - /* 214 */ "ifnotexists", - /* 215 */ "db_optr", - /* 216 */ "pps", - /* 217 */ "tseries", - /* 218 */ "dbs", - /* 219 */ "streams", - /* 220 */ "storage", - /* 221 */ "qtime", - /* 222 */ "users", - /* 223 */ "conns", - /* 224 */ "state", - /* 225 */ "keep", - /* 226 */ "tagitemlist", - /* 227 */ "tables", - /* 228 */ "cache", - /* 229 */ "replica", - /* 230 */ "days", - /* 231 */ "minrows", - /* 232 */ "maxrows", - /* 233 */ "blocks", - /* 234 */ "ctime", - /* 235 */ "wal", - /* 236 */ "comp", - /* 237 */ "prec", - /* 238 */ "typename", - /* 239 */ "signed", - /* 240 */ "create_table_args", - /* 241 */ "columnlist", - /* 242 */ "select", - /* 243 */ "column", - /* 244 */ "tagitem", - /* 245 */ "selcollist", - /* 246 */ "from", - /* 247 */ "where_opt", - /* 248 */ "interval_opt", - /* 249 */ "fill_opt", - /* 250 */ "sliding_opt", - /* 251 */ "groupby_opt", - /* 252 */ "orderby_opt", - /* 253 */ "having_opt", - /* 254 */ "slimit_opt", - /* 255 */ "limit_opt", - /* 256 */ "union", - /* 257 */ "sclp", - /* 258 */ "expr", - /* 259 */ "as", - /* 260 */ "tablelist", - /* 261 */ "tmvar", - /* 262 */ "sortlist", - /* 263 */ "sortitem", - /* 264 */ "item", - /* 265 */ "sortorder", - /* 266 */ "grouplist", - /* 267 */ "exprlist", - /* 268 */ "expritem", + /* 95 */ "FSYNC", + /* 96 */ "COMP", + /* 97 */ "PRECISION", + /* 98 */ "LP", + /* 99 */ "RP", + /* 100 */ "TAGS", + /* 101 */ "USING", + /* 102 */ "AS", + /* 103 */ "COMMA", + /* 104 */ "NULL", + /* 105 */ "SELECT", + /* 106 */ "UNION", + /* 107 */ "ALL", + /* 108 */ "FROM", + /* 109 */ "VARIABLE", + /* 110 */ "INTERVAL", + /* 111 */ "FILL", + /* 112 */ "SLIDING", + /* 113 */ "ORDER", + /* 114 */ "BY", + /* 115 */ "ASC", + /* 116 */ "DESC", + /* 117 */ "GROUP", + /* 118 */ "HAVING", + /* 119 */ "LIMIT", + /* 120 */ "OFFSET", + /* 121 */ "SLIMIT", + /* 122 */ "SOFFSET", + /* 123 */ "WHERE", + /* 124 */ "NOW", + /* 125 */ "RESET", + /* 126 */ "QUERY", + /* 127 */ "ADD", + /* 128 */ "COLUMN", + /* 129 */ "TAG", + /* 130 */ "CHANGE", + /* 131 */ "SET", + /* 132 */ "KILL", + /* 133 */ "CONNECTION", + /* 134 */ "STREAM", + /* 135 */ "COLON", + /* 136 */ "ABORT", + /* 137 */ "AFTER", + /* 138 */ "ATTACH", + /* 139 */ "BEFORE", + /* 140 */ "BEGIN", + /* 141 */ "CASCADE", + /* 142 */ "CLUSTER", + /* 143 */ "CONFLICT", + /* 144 */ "COPY", + /* 145 */ "DEFERRED", + /* 146 */ "DELIMITERS", + /* 147 */ "DETACH", + /* 148 */ "EACH", + /* 149 */ "END", + /* 150 */ "EXPLAIN", + /* 151 */ "FAIL", + /* 152 */ "FOR", + /* 153 */ "IGNORE", + /* 154 */ "IMMEDIATE", + /* 155 */ "INITIALLY", + /* 156 */ "INSTEAD", + /* 157 */ "MATCH", + /* 158 */ "KEY", + /* 159 */ "OF", + /* 160 */ "RAISE", + /* 161 */ "REPLACE", + /* 162 */ "RESTRICT", + /* 163 */ "ROW", + /* 164 */ "STATEMENT", + /* 165 */ "TRIGGER", + /* 166 */ "VIEW", + /* 167 */ "COUNT", + /* 168 */ "SUM", + /* 169 */ "AVG", + /* 170 */ "MIN", + /* 171 */ "MAX", + /* 172 */ "FIRST", + /* 173 */ "LAST", + /* 174 */ "TOP", + /* 175 */ "BOTTOM", + /* 176 */ "STDDEV", + /* 177 */ "PERCENTILE", + /* 178 */ "APERCENTILE", + /* 179 */ "LEASTSQUARES", + /* 180 */ "HISTOGRAM", + /* 181 */ "DIFF", + /* 182 */ "SPREAD", + /* 183 */ "TWA", + /* 184 */ "INTERP", + /* 185 */ "LAST_ROW", + /* 186 */ "RATE", + /* 187 */ "IRATE", + /* 188 */ "SUM_RATE", + /* 189 */ "SUM_IRATE", + /* 190 */ "AVG_RATE", + /* 191 */ "AVG_IRATE", + /* 192 */ "TBID", + /* 193 */ "SEMI", + /* 194 */ "NONE", + /* 195 */ "PREV", + /* 196 */ "LINEAR", + /* 197 */ "IMPORT", + /* 198 */ "METRIC", + /* 199 */ "TBNAME", + /* 200 */ "JOIN", + /* 201 */ "METRICS", + /* 202 */ "STABLE", + /* 203 */ "INSERT", + /* 204 */ "INTO", + /* 205 */ "VALUES", + /* 206 */ "error", + /* 207 */ "program", + /* 208 */ "cmd", + /* 209 */ "dbPrefix", + /* 210 */ "ids", + /* 211 */ "cpxName", + /* 212 */ "ifexists", + /* 213 */ "alter_db_optr", + /* 214 */ "acct_optr", + /* 215 */ "ifnotexists", + /* 216 */ "db_optr", + /* 217 */ "pps", + /* 218 */ "tseries", + /* 219 */ "dbs", + /* 220 */ "streams", + /* 221 */ "storage", + /* 222 */ "qtime", + /* 223 */ "users", + /* 224 */ "conns", + /* 225 */ "state", + /* 226 */ "keep", + /* 227 */ "tagitemlist", + /* 228 */ "tables", + /* 229 */ "cache", + /* 230 */ "replica", + /* 231 */ "days", + /* 232 */ "minrows", + /* 233 */ "maxrows", + /* 234 */ "blocks", + /* 235 */ "ctime", + /* 236 */ "wal", + /* 237 */ "fsync", + /* 238 */ "comp", + /* 239 */ "prec", + /* 240 */ "typename", + /* 241 */ "signed", + /* 242 */ "create_table_args", + /* 243 */ "columnlist", + /* 244 */ "select", + /* 245 */ "column", + /* 246 */ "tagitem", + /* 247 */ "selcollist", + /* 248 */ "from", + /* 249 */ "where_opt", + /* 250 */ "interval_opt", + /* 251 */ "fill_opt", + /* 252 */ "sliding_opt", + /* 253 */ "groupby_opt", + /* 254 */ "orderby_opt", + /* 255 */ "having_opt", + /* 256 */ "slimit_opt", + /* 257 */ "limit_opt", + /* 258 */ "union", + /* 259 */ "sclp", + /* 260 */ "expr", + /* 261 */ "as", + /* 262 */ "tablelist", + /* 263 */ "tmvar", + /* 264 */ "sortlist", + /* 265 */ "sortitem", + /* 266 */ "item", + /* 267 */ "sortorder", + /* 268 */ "grouplist", + /* 269 */ "exprlist", + /* 270 */ "expritem", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1078,146 +1082,149 @@ static const char *const yyRuleName[] = { /* 77 */ "blocks ::= BLOCKS INTEGER", /* 78 */ "ctime ::= CTIME INTEGER", /* 79 */ "wal ::= WAL INTEGER", - /* 80 */ "comp ::= COMP INTEGER", - /* 81 */ "prec ::= PRECISION STRING", - /* 82 */ "db_optr ::=", - /* 83 */ "db_optr ::= db_optr tables", - /* 84 */ "db_optr ::= db_optr cache", - /* 85 */ "db_optr ::= db_optr replica", - /* 86 */ "db_optr ::= db_optr days", - /* 87 */ "db_optr ::= db_optr minrows", - /* 88 */ "db_optr ::= db_optr maxrows", - /* 89 */ "db_optr ::= db_optr blocks", - /* 90 */ "db_optr ::= db_optr ctime", - /* 91 */ "db_optr ::= db_optr wal", - /* 92 */ "db_optr ::= db_optr comp", - /* 93 */ "db_optr ::= db_optr prec", - /* 94 */ "db_optr ::= db_optr keep", - /* 95 */ "alter_db_optr ::=", - /* 96 */ "alter_db_optr ::= alter_db_optr replica", - /* 97 */ "alter_db_optr ::= alter_db_optr tables", - /* 98 */ "alter_db_optr ::= alter_db_optr keep", - /* 99 */ "alter_db_optr ::= alter_db_optr blocks", - /* 100 */ "alter_db_optr ::= alter_db_optr comp", - /* 101 */ "alter_db_optr ::= alter_db_optr wal", - /* 102 */ "typename ::= ids", - /* 103 */ "typename ::= ids LP signed RP", - /* 104 */ "signed ::= INTEGER", - /* 105 */ "signed ::= PLUS INTEGER", - /* 106 */ "signed ::= MINUS INTEGER", - /* 107 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", - /* 108 */ "create_table_args ::= LP columnlist RP", - /* 109 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", - /* 110 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", - /* 111 */ "create_table_args ::= AS select", - /* 112 */ "columnlist ::= columnlist COMMA column", - /* 113 */ "columnlist ::= column", - /* 114 */ "column ::= ids typename", - /* 115 */ "tagitemlist ::= tagitemlist COMMA tagitem", - /* 116 */ "tagitemlist ::= tagitem", - /* 117 */ "tagitem ::= INTEGER", - /* 118 */ "tagitem ::= FLOAT", - /* 119 */ "tagitem ::= STRING", - /* 120 */ "tagitem ::= BOOL", - /* 121 */ "tagitem ::= NULL", - /* 122 */ "tagitem ::= MINUS INTEGER", - /* 123 */ "tagitem ::= MINUS FLOAT", - /* 124 */ "tagitem ::= PLUS INTEGER", - /* 125 */ "tagitem ::= PLUS FLOAT", - /* 126 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", - /* 127 */ "union ::= select", - /* 128 */ "union ::= LP union RP", - /* 129 */ "union ::= union UNION ALL select", - /* 130 */ "union ::= union UNION ALL LP select RP", - /* 131 */ "cmd ::= union", - /* 132 */ "select ::= SELECT selcollist", - /* 133 */ "sclp ::= selcollist COMMA", - /* 134 */ "sclp ::=", - /* 135 */ "selcollist ::= sclp expr as", - /* 136 */ "selcollist ::= sclp STAR", - /* 137 */ "as ::= AS ids", - /* 138 */ "as ::= ids", - /* 139 */ "as ::=", - /* 140 */ "from ::= FROM tablelist", - /* 141 */ "tablelist ::= ids cpxName", - /* 142 */ "tablelist ::= tablelist COMMA ids cpxName", - /* 143 */ "tmvar ::= VARIABLE", - /* 144 */ "interval_opt ::= INTERVAL LP tmvar RP", - /* 145 */ "interval_opt ::=", - /* 146 */ "fill_opt ::=", - /* 147 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", - /* 148 */ "fill_opt ::= FILL LP ID RP", - /* 149 */ "sliding_opt ::= SLIDING LP tmvar RP", - /* 150 */ "sliding_opt ::=", - /* 151 */ "orderby_opt ::=", - /* 152 */ "orderby_opt ::= ORDER BY sortlist", - /* 153 */ "sortlist ::= sortlist COMMA item sortorder", - /* 154 */ "sortlist ::= item sortorder", - /* 155 */ "item ::= ids cpxName", - /* 156 */ "sortorder ::= ASC", - /* 157 */ "sortorder ::= DESC", - /* 158 */ "sortorder ::=", - /* 159 */ "groupby_opt ::=", - /* 160 */ "groupby_opt ::= GROUP BY grouplist", - /* 161 */ "grouplist ::= grouplist COMMA item", - /* 162 */ "grouplist ::= item", - /* 163 */ "having_opt ::=", - /* 164 */ "having_opt ::= HAVING expr", - /* 165 */ "limit_opt ::=", - /* 166 */ "limit_opt ::= LIMIT signed", - /* 167 */ "limit_opt ::= LIMIT signed OFFSET signed", - /* 168 */ "limit_opt ::= LIMIT signed COMMA signed", - /* 169 */ "slimit_opt ::=", - /* 170 */ "slimit_opt ::= SLIMIT signed", - /* 171 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", - /* 172 */ "slimit_opt ::= SLIMIT signed COMMA signed", - /* 173 */ "where_opt ::=", - /* 174 */ "where_opt ::= WHERE expr", - /* 175 */ "expr ::= LP expr RP", - /* 176 */ "expr ::= ID", - /* 177 */ "expr ::= ID DOT ID", - /* 178 */ "expr ::= ID DOT STAR", - /* 179 */ "expr ::= INTEGER", - /* 180 */ "expr ::= MINUS INTEGER", - /* 181 */ "expr ::= PLUS INTEGER", - /* 182 */ "expr ::= FLOAT", - /* 183 */ "expr ::= MINUS FLOAT", - /* 184 */ "expr ::= PLUS FLOAT", - /* 185 */ "expr ::= STRING", - /* 186 */ "expr ::= NOW", - /* 187 */ "expr ::= VARIABLE", - /* 188 */ "expr ::= BOOL", - /* 189 */ "expr ::= ID LP exprlist RP", - /* 190 */ "expr ::= ID LP STAR RP", - /* 191 */ "expr ::= expr AND expr", - /* 192 */ "expr ::= expr OR expr", - /* 193 */ "expr ::= expr LT expr", - /* 194 */ "expr ::= expr GT expr", - /* 195 */ "expr ::= expr LE expr", - /* 196 */ "expr ::= expr GE expr", - /* 197 */ "expr ::= expr NE expr", - /* 198 */ "expr ::= expr EQ expr", - /* 199 */ "expr ::= expr PLUS expr", - /* 200 */ "expr ::= expr MINUS expr", - /* 201 */ "expr ::= expr STAR expr", - /* 202 */ "expr ::= expr SLASH expr", - /* 203 */ "expr ::= expr REM expr", - /* 204 */ "expr ::= expr LIKE expr", - /* 205 */ "expr ::= expr IN LP exprlist RP", - /* 206 */ "exprlist ::= exprlist COMMA expritem", - /* 207 */ "exprlist ::= expritem", - /* 208 */ "expritem ::= expr", - /* 209 */ "expritem ::=", - /* 210 */ "cmd ::= RESET QUERY CACHE", - /* 211 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", - /* 212 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", - /* 213 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", - /* 214 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", - /* 215 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", - /* 216 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", - /* 217 */ "cmd ::= KILL CONNECTION INTEGER", - /* 218 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", - /* 219 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", + /* 80 */ "fsync ::= FSYNC INTEGER", + /* 81 */ "comp ::= COMP INTEGER", + /* 82 */ "prec ::= PRECISION STRING", + /* 83 */ "db_optr ::=", + /* 84 */ "db_optr ::= db_optr tables", + /* 85 */ "db_optr ::= db_optr cache", + /* 86 */ "db_optr ::= db_optr replica", + /* 87 */ "db_optr ::= db_optr days", + /* 88 */ "db_optr ::= db_optr minrows", + /* 89 */ "db_optr ::= db_optr maxrows", + /* 90 */ "db_optr ::= db_optr blocks", + /* 91 */ "db_optr ::= db_optr ctime", + /* 92 */ "db_optr ::= db_optr wal", + /* 93 */ "db_optr ::= db_optr fsync", + /* 94 */ "db_optr ::= db_optr comp", + /* 95 */ "db_optr ::= db_optr prec", + /* 96 */ "db_optr ::= db_optr keep", + /* 97 */ "alter_db_optr ::=", + /* 98 */ "alter_db_optr ::= alter_db_optr replica", + /* 99 */ "alter_db_optr ::= alter_db_optr tables", + /* 100 */ "alter_db_optr ::= alter_db_optr keep", + /* 101 */ "alter_db_optr ::= alter_db_optr blocks", + /* 102 */ "alter_db_optr ::= alter_db_optr comp", + /* 103 */ "alter_db_optr ::= alter_db_optr wal", + /* 104 */ "alter_db_optr ::= alter_db_optr fsync", + /* 105 */ "typename ::= ids", + /* 106 */ "typename ::= ids LP signed RP", + /* 107 */ "signed ::= INTEGER", + /* 108 */ "signed ::= PLUS INTEGER", + /* 109 */ "signed ::= MINUS INTEGER", + /* 110 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", + /* 111 */ "create_table_args ::= LP columnlist RP", + /* 112 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", + /* 113 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", + /* 114 */ "create_table_args ::= AS select", + /* 115 */ "columnlist ::= columnlist COMMA column", + /* 116 */ "columnlist ::= column", + /* 117 */ "column ::= ids typename", + /* 118 */ "tagitemlist ::= tagitemlist COMMA tagitem", + /* 119 */ "tagitemlist ::= tagitem", + /* 120 */ "tagitem ::= INTEGER", + /* 121 */ "tagitem ::= FLOAT", + /* 122 */ "tagitem ::= STRING", + /* 123 */ "tagitem ::= BOOL", + /* 124 */ "tagitem ::= NULL", + /* 125 */ "tagitem ::= MINUS INTEGER", + /* 126 */ "tagitem ::= MINUS FLOAT", + /* 127 */ "tagitem ::= PLUS INTEGER", + /* 128 */ "tagitem ::= PLUS FLOAT", + /* 129 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", + /* 130 */ "union ::= select", + /* 131 */ "union ::= LP union RP", + /* 132 */ "union ::= union UNION ALL select", + /* 133 */ "union ::= union UNION ALL LP select RP", + /* 134 */ "cmd ::= union", + /* 135 */ "select ::= SELECT selcollist", + /* 136 */ "sclp ::= selcollist COMMA", + /* 137 */ "sclp ::=", + /* 138 */ "selcollist ::= sclp expr as", + /* 139 */ "selcollist ::= sclp STAR", + /* 140 */ "as ::= AS ids", + /* 141 */ "as ::= ids", + /* 142 */ "as ::=", + /* 143 */ "from ::= FROM tablelist", + /* 144 */ "tablelist ::= ids cpxName", + /* 145 */ "tablelist ::= tablelist COMMA ids cpxName", + /* 146 */ "tmvar ::= VARIABLE", + /* 147 */ "interval_opt ::= INTERVAL LP tmvar RP", + /* 148 */ "interval_opt ::=", + /* 149 */ "fill_opt ::=", + /* 150 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", + /* 151 */ "fill_opt ::= FILL LP ID RP", + /* 152 */ "sliding_opt ::= SLIDING LP tmvar RP", + /* 153 */ "sliding_opt ::=", + /* 154 */ "orderby_opt ::=", + /* 155 */ "orderby_opt ::= ORDER BY sortlist", + /* 156 */ "sortlist ::= sortlist COMMA item sortorder", + /* 157 */ "sortlist ::= item sortorder", + /* 158 */ "item ::= ids cpxName", + /* 159 */ "sortorder ::= ASC", + /* 160 */ "sortorder ::= DESC", + /* 161 */ "sortorder ::=", + /* 162 */ "groupby_opt ::=", + /* 163 */ "groupby_opt ::= GROUP BY grouplist", + /* 164 */ "grouplist ::= grouplist COMMA item", + /* 165 */ "grouplist ::= item", + /* 166 */ "having_opt ::=", + /* 167 */ "having_opt ::= HAVING expr", + /* 168 */ "limit_opt ::=", + /* 169 */ "limit_opt ::= LIMIT signed", + /* 170 */ "limit_opt ::= LIMIT signed OFFSET signed", + /* 171 */ "limit_opt ::= LIMIT signed COMMA signed", + /* 172 */ "slimit_opt ::=", + /* 173 */ "slimit_opt ::= SLIMIT signed", + /* 174 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", + /* 175 */ "slimit_opt ::= SLIMIT signed COMMA signed", + /* 176 */ "where_opt ::=", + /* 177 */ "where_opt ::= WHERE expr", + /* 178 */ "expr ::= LP expr RP", + /* 179 */ "expr ::= ID", + /* 180 */ "expr ::= ID DOT ID", + /* 181 */ "expr ::= ID DOT STAR", + /* 182 */ "expr ::= INTEGER", + /* 183 */ "expr ::= MINUS INTEGER", + /* 184 */ "expr ::= PLUS INTEGER", + /* 185 */ "expr ::= FLOAT", + /* 186 */ "expr ::= MINUS FLOAT", + /* 187 */ "expr ::= PLUS FLOAT", + /* 188 */ "expr ::= STRING", + /* 189 */ "expr ::= NOW", + /* 190 */ "expr ::= VARIABLE", + /* 191 */ "expr ::= BOOL", + /* 192 */ "expr ::= ID LP exprlist RP", + /* 193 */ "expr ::= ID LP STAR RP", + /* 194 */ "expr ::= expr AND expr", + /* 195 */ "expr ::= expr OR expr", + /* 196 */ "expr ::= expr LT expr", + /* 197 */ "expr ::= expr GT expr", + /* 198 */ "expr ::= expr LE expr", + /* 199 */ "expr ::= expr GE expr", + /* 200 */ "expr ::= expr NE expr", + /* 201 */ "expr ::= expr EQ expr", + /* 202 */ "expr ::= expr PLUS expr", + /* 203 */ "expr ::= expr MINUS expr", + /* 204 */ "expr ::= expr STAR expr", + /* 205 */ "expr ::= expr SLASH expr", + /* 206 */ "expr ::= expr REM expr", + /* 207 */ "expr ::= expr LIKE expr", + /* 208 */ "expr ::= expr IN LP exprlist RP", + /* 209 */ "exprlist ::= exprlist COMMA expritem", + /* 210 */ "exprlist ::= expritem", + /* 211 */ "expritem ::= expr", + /* 212 */ "expritem ::=", + /* 213 */ "cmd ::= RESET QUERY CACHE", + /* 214 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", + /* 215 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", + /* 216 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", + /* 217 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", + /* 218 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", + /* 219 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", + /* 220 */ "cmd ::= KILL CONNECTION INTEGER", + /* 221 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", + /* 222 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", }; #endif /* NDEBUG */ @@ -1338,50 +1345,50 @@ static void yy_destructor( ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 225: /* keep */ - case 226: /* tagitemlist */ - case 249: /* fill_opt */ - case 251: /* groupby_opt */ - case 252: /* orderby_opt */ - case 262: /* sortlist */ - case 266: /* grouplist */ + case 226: /* keep */ + case 227: /* tagitemlist */ + case 251: /* fill_opt */ + case 253: /* groupby_opt */ + case 254: /* orderby_opt */ + case 264: /* sortlist */ + case 268: /* grouplist */ { -tVariantListDestroy((yypminor->yy322)); +tVariantListDestroy((yypminor->yy494)); } break; - case 241: /* columnlist */ + case 243: /* columnlist */ { -tFieldListDestroy((yypminor->yy369)); +tFieldListDestroy((yypminor->yy449)); } break; - case 242: /* select */ + case 244: /* select */ { -doDestroyQuerySql((yypminor->yy190)); +doDestroyQuerySql((yypminor->yy150)); } break; - case 245: /* selcollist */ - case 257: /* sclp */ - case 267: /* exprlist */ + case 247: /* selcollist */ + case 259: /* sclp */ + case 269: /* exprlist */ { -tSQLExprListDestroy((yypminor->yy260)); +tSQLExprListDestroy((yypminor->yy224)); } break; - case 247: /* where_opt */ - case 253: /* having_opt */ - case 258: /* expr */ - case 268: /* expritem */ + case 249: /* where_opt */ + case 255: /* having_opt */ + case 260: /* expr */ + case 270: /* expritem */ { -tSQLExprDestroy((yypminor->yy500)); +tSQLExprDestroy((yypminor->yy66)); } break; - case 256: /* union */ + case 258: /* union */ { -destroyAllSelectClause((yypminor->yy263)); +destroyAllSelectClause((yypminor->yy25)); } break; - case 263: /* sortitem */ + case 265: /* sortitem */ { -tVariantDestroy(&(yypminor->yy518)); +tVariantDestroy(&(yypminor->yy312)); } break; /********* End destructor definitions *****************************************/ @@ -1675,226 +1682,229 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 206, -1 }, /* (0) program ::= cmd */ - { 207, -2 }, /* (1) cmd ::= SHOW DATABASES */ - { 207, -2 }, /* (2) cmd ::= SHOW MNODES */ - { 207, -2 }, /* (3) cmd ::= SHOW DNODES */ - { 207, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */ - { 207, -2 }, /* (5) cmd ::= SHOW USERS */ - { 207, -2 }, /* (6) cmd ::= SHOW MODULES */ - { 207, -2 }, /* (7) cmd ::= SHOW QUERIES */ - { 207, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */ - { 207, -2 }, /* (9) cmd ::= SHOW STREAMS */ - { 207, -2 }, /* (10) cmd ::= SHOW CONFIGS */ - { 207, -2 }, /* (11) cmd ::= SHOW SCORES */ - { 207, -2 }, /* (12) cmd ::= SHOW GRANTS */ - { 207, -2 }, /* (13) cmd ::= SHOW VNODES */ - { 207, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */ - { 208, 0 }, /* (15) dbPrefix ::= */ - { 208, -2 }, /* (16) dbPrefix ::= ids DOT */ - { 210, 0 }, /* (17) cpxName ::= */ - { 210, -2 }, /* (18) cpxName ::= DOT ids */ - { 207, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */ - { 207, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */ - { 207, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */ - { 207, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */ - { 207, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */ - { 207, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */ - { 207, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */ - { 207, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */ - { 207, -3 }, /* (27) cmd ::= DROP DNODE ids */ - { 207, -3 }, /* (28) cmd ::= DROP USER ids */ - { 207, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */ - { 207, -2 }, /* (30) cmd ::= USE ids */ - { 207, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */ - { 207, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */ - { 207, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */ - { 207, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */ - { 207, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */ - { 207, -3 }, /* (36) cmd ::= ALTER LOCAL ids */ - { 207, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */ - { 207, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */ - { 207, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */ - { 207, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ - { 209, -1 }, /* (41) ids ::= ID */ - { 209, -1 }, /* (42) ids ::= STRING */ - { 211, -2 }, /* (43) ifexists ::= IF EXISTS */ - { 211, 0 }, /* (44) ifexists ::= */ - { 214, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */ - { 214, 0 }, /* (46) ifnotexists ::= */ - { 207, -3 }, /* (47) cmd ::= CREATE DNODE ids */ - { 207, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ - { 207, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ - { 207, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */ - { 216, 0 }, /* (51) pps ::= */ - { 216, -2 }, /* (52) pps ::= PPS INTEGER */ - { 217, 0 }, /* (53) tseries ::= */ - { 217, -2 }, /* (54) tseries ::= TSERIES INTEGER */ - { 218, 0 }, /* (55) dbs ::= */ - { 218, -2 }, /* (56) dbs ::= DBS INTEGER */ - { 219, 0 }, /* (57) streams ::= */ - { 219, -2 }, /* (58) streams ::= STREAMS INTEGER */ - { 220, 0 }, /* (59) storage ::= */ - { 220, -2 }, /* (60) storage ::= STORAGE INTEGER */ - { 221, 0 }, /* (61) qtime ::= */ - { 221, -2 }, /* (62) qtime ::= QTIME INTEGER */ - { 222, 0 }, /* (63) users ::= */ - { 222, -2 }, /* (64) users ::= USERS INTEGER */ - { 223, 0 }, /* (65) conns ::= */ - { 223, -2 }, /* (66) conns ::= CONNS INTEGER */ - { 224, 0 }, /* (67) state ::= */ - { 224, -2 }, /* (68) state ::= STATE ids */ - { 213, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ - { 225, -2 }, /* (70) keep ::= KEEP tagitemlist */ - { 227, -2 }, /* (71) tables ::= MAXTABLES INTEGER */ - { 228, -2 }, /* (72) cache ::= CACHE INTEGER */ - { 229, -2 }, /* (73) replica ::= REPLICA INTEGER */ - { 230, -2 }, /* (74) days ::= DAYS INTEGER */ - { 231, -2 }, /* (75) minrows ::= MINROWS INTEGER */ - { 232, -2 }, /* (76) maxrows ::= MAXROWS INTEGER */ - { 233, -2 }, /* (77) blocks ::= BLOCKS INTEGER */ - { 234, -2 }, /* (78) ctime ::= CTIME INTEGER */ - { 235, -2 }, /* (79) wal ::= WAL INTEGER */ - { 236, -2 }, /* (80) comp ::= COMP INTEGER */ - { 237, -2 }, /* (81) prec ::= PRECISION STRING */ - { 215, 0 }, /* (82) db_optr ::= */ - { 215, -2 }, /* (83) db_optr ::= db_optr tables */ - { 215, -2 }, /* (84) db_optr ::= db_optr cache */ - { 215, -2 }, /* (85) db_optr ::= db_optr replica */ - { 215, -2 }, /* (86) db_optr ::= db_optr days */ - { 215, -2 }, /* (87) db_optr ::= db_optr minrows */ - { 215, -2 }, /* (88) db_optr ::= db_optr maxrows */ - { 215, -2 }, /* (89) db_optr ::= db_optr blocks */ - { 215, -2 }, /* (90) db_optr ::= db_optr ctime */ - { 215, -2 }, /* (91) db_optr ::= db_optr wal */ - { 215, -2 }, /* (92) db_optr ::= db_optr comp */ - { 215, -2 }, /* (93) db_optr ::= db_optr prec */ - { 215, -2 }, /* (94) db_optr ::= db_optr keep */ - { 212, 0 }, /* (95) alter_db_optr ::= */ - { 212, -2 }, /* (96) alter_db_optr ::= alter_db_optr replica */ - { 212, -2 }, /* (97) alter_db_optr ::= alter_db_optr tables */ - { 212, -2 }, /* (98) alter_db_optr ::= alter_db_optr keep */ - { 212, -2 }, /* (99) alter_db_optr ::= alter_db_optr blocks */ - { 212, -2 }, /* (100) alter_db_optr ::= alter_db_optr comp */ - { 212, -2 }, /* (101) alter_db_optr ::= alter_db_optr wal */ - { 238, -1 }, /* (102) typename ::= ids */ - { 238, -4 }, /* (103) typename ::= ids LP signed RP */ - { 239, -1 }, /* (104) signed ::= INTEGER */ - { 239, -2 }, /* (105) signed ::= PLUS INTEGER */ - { 239, -2 }, /* (106) signed ::= MINUS INTEGER */ - { 207, -6 }, /* (107) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ - { 240, -3 }, /* (108) create_table_args ::= LP columnlist RP */ - { 240, -7 }, /* (109) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ - { 240, -7 }, /* (110) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ - { 240, -2 }, /* (111) create_table_args ::= AS select */ - { 241, -3 }, /* (112) columnlist ::= columnlist COMMA column */ - { 241, -1 }, /* (113) columnlist ::= column */ - { 243, -2 }, /* (114) column ::= ids typename */ - { 226, -3 }, /* (115) tagitemlist ::= tagitemlist COMMA tagitem */ - { 226, -1 }, /* (116) tagitemlist ::= tagitem */ - { 244, -1 }, /* (117) tagitem ::= INTEGER */ - { 244, -1 }, /* (118) tagitem ::= FLOAT */ - { 244, -1 }, /* (119) tagitem ::= STRING */ - { 244, -1 }, /* (120) tagitem ::= BOOL */ - { 244, -1 }, /* (121) tagitem ::= NULL */ - { 244, -2 }, /* (122) tagitem ::= MINUS INTEGER */ - { 244, -2 }, /* (123) tagitem ::= MINUS FLOAT */ - { 244, -2 }, /* (124) tagitem ::= PLUS INTEGER */ - { 244, -2 }, /* (125) tagitem ::= PLUS FLOAT */ - { 242, -12 }, /* (126) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ - { 256, -1 }, /* (127) union ::= select */ - { 256, -3 }, /* (128) union ::= LP union RP */ - { 256, -4 }, /* (129) union ::= union UNION ALL select */ - { 256, -6 }, /* (130) union ::= union UNION ALL LP select RP */ - { 207, -1 }, /* (131) cmd ::= union */ - { 242, -2 }, /* (132) select ::= SELECT selcollist */ - { 257, -2 }, /* (133) sclp ::= selcollist COMMA */ - { 257, 0 }, /* (134) sclp ::= */ - { 245, -3 }, /* (135) selcollist ::= sclp expr as */ - { 245, -2 }, /* (136) selcollist ::= sclp STAR */ - { 259, -2 }, /* (137) as ::= AS ids */ - { 259, -1 }, /* (138) as ::= ids */ - { 259, 0 }, /* (139) as ::= */ - { 246, -2 }, /* (140) from ::= FROM tablelist */ - { 260, -2 }, /* (141) tablelist ::= ids cpxName */ - { 260, -4 }, /* (142) tablelist ::= tablelist COMMA ids cpxName */ - { 261, -1 }, /* (143) tmvar ::= VARIABLE */ - { 248, -4 }, /* (144) interval_opt ::= INTERVAL LP tmvar RP */ - { 248, 0 }, /* (145) interval_opt ::= */ - { 249, 0 }, /* (146) fill_opt ::= */ - { 249, -6 }, /* (147) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ - { 249, -4 }, /* (148) fill_opt ::= FILL LP ID RP */ - { 250, -4 }, /* (149) sliding_opt ::= SLIDING LP tmvar RP */ - { 250, 0 }, /* (150) sliding_opt ::= */ - { 252, 0 }, /* (151) orderby_opt ::= */ - { 252, -3 }, /* (152) orderby_opt ::= ORDER BY sortlist */ - { 262, -4 }, /* (153) sortlist ::= sortlist COMMA item sortorder */ - { 262, -2 }, /* (154) sortlist ::= item sortorder */ - { 264, -2 }, /* (155) item ::= ids cpxName */ - { 265, -1 }, /* (156) sortorder ::= ASC */ - { 265, -1 }, /* (157) sortorder ::= DESC */ - { 265, 0 }, /* (158) sortorder ::= */ - { 251, 0 }, /* (159) groupby_opt ::= */ - { 251, -3 }, /* (160) groupby_opt ::= GROUP BY grouplist */ - { 266, -3 }, /* (161) grouplist ::= grouplist COMMA item */ - { 266, -1 }, /* (162) grouplist ::= item */ - { 253, 0 }, /* (163) having_opt ::= */ - { 253, -2 }, /* (164) having_opt ::= HAVING expr */ - { 255, 0 }, /* (165) limit_opt ::= */ - { 255, -2 }, /* (166) limit_opt ::= LIMIT signed */ - { 255, -4 }, /* (167) limit_opt ::= LIMIT signed OFFSET signed */ - { 255, -4 }, /* (168) limit_opt ::= LIMIT signed COMMA signed */ - { 254, 0 }, /* (169) slimit_opt ::= */ - { 254, -2 }, /* (170) slimit_opt ::= SLIMIT signed */ - { 254, -4 }, /* (171) slimit_opt ::= SLIMIT signed SOFFSET signed */ - { 254, -4 }, /* (172) slimit_opt ::= SLIMIT signed COMMA signed */ - { 247, 0 }, /* (173) where_opt ::= */ - { 247, -2 }, /* (174) where_opt ::= WHERE expr */ - { 258, -3 }, /* (175) expr ::= LP expr RP */ - { 258, -1 }, /* (176) expr ::= ID */ - { 258, -3 }, /* (177) expr ::= ID DOT ID */ - { 258, -3 }, /* (178) expr ::= ID DOT STAR */ - { 258, -1 }, /* (179) expr ::= INTEGER */ - { 258, -2 }, /* (180) expr ::= MINUS INTEGER */ - { 258, -2 }, /* (181) expr ::= PLUS INTEGER */ - { 258, -1 }, /* (182) expr ::= FLOAT */ - { 258, -2 }, /* (183) expr ::= MINUS FLOAT */ - { 258, -2 }, /* (184) expr ::= PLUS FLOAT */ - { 258, -1 }, /* (185) expr ::= STRING */ - { 258, -1 }, /* (186) expr ::= NOW */ - { 258, -1 }, /* (187) expr ::= VARIABLE */ - { 258, -1 }, /* (188) expr ::= BOOL */ - { 258, -4 }, /* (189) expr ::= ID LP exprlist RP */ - { 258, -4 }, /* (190) expr ::= ID LP STAR RP */ - { 258, -3 }, /* (191) expr ::= expr AND expr */ - { 258, -3 }, /* (192) expr ::= expr OR expr */ - { 258, -3 }, /* (193) expr ::= expr LT expr */ - { 258, -3 }, /* (194) expr ::= expr GT expr */ - { 258, -3 }, /* (195) expr ::= expr LE expr */ - { 258, -3 }, /* (196) expr ::= expr GE expr */ - { 258, -3 }, /* (197) expr ::= expr NE expr */ - { 258, -3 }, /* (198) expr ::= expr EQ expr */ - { 258, -3 }, /* (199) expr ::= expr PLUS expr */ - { 258, -3 }, /* (200) expr ::= expr MINUS expr */ - { 258, -3 }, /* (201) expr ::= expr STAR expr */ - { 258, -3 }, /* (202) expr ::= expr SLASH expr */ - { 258, -3 }, /* (203) expr ::= expr REM expr */ - { 258, -3 }, /* (204) expr ::= expr LIKE expr */ - { 258, -5 }, /* (205) expr ::= expr IN LP exprlist RP */ - { 267, -3 }, /* (206) exprlist ::= exprlist COMMA expritem */ - { 267, -1 }, /* (207) exprlist ::= expritem */ - { 268, -1 }, /* (208) expritem ::= expr */ - { 268, 0 }, /* (209) expritem ::= */ - { 207, -3 }, /* (210) cmd ::= RESET QUERY CACHE */ - { 207, -7 }, /* (211) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ - { 207, -7 }, /* (212) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ - { 207, -7 }, /* (213) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ - { 207, -7 }, /* (214) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ - { 207, -8 }, /* (215) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ - { 207, -9 }, /* (216) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ - { 207, -3 }, /* (217) cmd ::= KILL CONNECTION INTEGER */ - { 207, -5 }, /* (218) cmd ::= KILL STREAM INTEGER COLON INTEGER */ - { 207, -5 }, /* (219) cmd ::= KILL QUERY INTEGER COLON INTEGER */ + { 207, -1 }, /* (0) program ::= cmd */ + { 208, -2 }, /* (1) cmd ::= SHOW DATABASES */ + { 208, -2 }, /* (2) cmd ::= SHOW MNODES */ + { 208, -2 }, /* (3) cmd ::= SHOW DNODES */ + { 208, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */ + { 208, -2 }, /* (5) cmd ::= SHOW USERS */ + { 208, -2 }, /* (6) cmd ::= SHOW MODULES */ + { 208, -2 }, /* (7) cmd ::= SHOW QUERIES */ + { 208, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */ + { 208, -2 }, /* (9) cmd ::= SHOW STREAMS */ + { 208, -2 }, /* (10) cmd ::= SHOW CONFIGS */ + { 208, -2 }, /* (11) cmd ::= SHOW SCORES */ + { 208, -2 }, /* (12) cmd ::= SHOW GRANTS */ + { 208, -2 }, /* (13) cmd ::= SHOW VNODES */ + { 208, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */ + { 209, 0 }, /* (15) dbPrefix ::= */ + { 209, -2 }, /* (16) dbPrefix ::= ids DOT */ + { 211, 0 }, /* (17) cpxName ::= */ + { 211, -2 }, /* (18) cpxName ::= DOT ids */ + { 208, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */ + { 208, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */ + { 208, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */ + { 208, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */ + { 208, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */ + { 208, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */ + { 208, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */ + { 208, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */ + { 208, -3 }, /* (27) cmd ::= DROP DNODE ids */ + { 208, -3 }, /* (28) cmd ::= DROP USER ids */ + { 208, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */ + { 208, -2 }, /* (30) cmd ::= USE ids */ + { 208, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */ + { 208, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */ + { 208, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */ + { 208, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */ + { 208, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */ + { 208, -3 }, /* (36) cmd ::= ALTER LOCAL ids */ + { 208, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */ + { 208, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */ + { 208, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */ + { 208, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ + { 210, -1 }, /* (41) ids ::= ID */ + { 210, -1 }, /* (42) ids ::= STRING */ + { 212, -2 }, /* (43) ifexists ::= IF EXISTS */ + { 212, 0 }, /* (44) ifexists ::= */ + { 215, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */ + { 215, 0 }, /* (46) ifnotexists ::= */ + { 208, -3 }, /* (47) cmd ::= CREATE DNODE ids */ + { 208, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ + { 208, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ + { 208, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */ + { 217, 0 }, /* (51) pps ::= */ + { 217, -2 }, /* (52) pps ::= PPS INTEGER */ + { 218, 0 }, /* (53) tseries ::= */ + { 218, -2 }, /* (54) tseries ::= TSERIES INTEGER */ + { 219, 0 }, /* (55) dbs ::= */ + { 219, -2 }, /* (56) dbs ::= DBS INTEGER */ + { 220, 0 }, /* (57) streams ::= */ + { 220, -2 }, /* (58) streams ::= STREAMS INTEGER */ + { 221, 0 }, /* (59) storage ::= */ + { 221, -2 }, /* (60) storage ::= STORAGE INTEGER */ + { 222, 0 }, /* (61) qtime ::= */ + { 222, -2 }, /* (62) qtime ::= QTIME INTEGER */ + { 223, 0 }, /* (63) users ::= */ + { 223, -2 }, /* (64) users ::= USERS INTEGER */ + { 224, 0 }, /* (65) conns ::= */ + { 224, -2 }, /* (66) conns ::= CONNS INTEGER */ + { 225, 0 }, /* (67) state ::= */ + { 225, -2 }, /* (68) state ::= STATE ids */ + { 214, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ + { 226, -2 }, /* (70) keep ::= KEEP tagitemlist */ + { 228, -2 }, /* (71) tables ::= MAXTABLES INTEGER */ + { 229, -2 }, /* (72) cache ::= CACHE INTEGER */ + { 230, -2 }, /* (73) replica ::= REPLICA INTEGER */ + { 231, -2 }, /* (74) days ::= DAYS INTEGER */ + { 232, -2 }, /* (75) minrows ::= MINROWS INTEGER */ + { 233, -2 }, /* (76) maxrows ::= MAXROWS INTEGER */ + { 234, -2 }, /* (77) blocks ::= BLOCKS INTEGER */ + { 235, -2 }, /* (78) ctime ::= CTIME INTEGER */ + { 236, -2 }, /* (79) wal ::= WAL INTEGER */ + { 237, -2 }, /* (80) fsync ::= FSYNC INTEGER */ + { 238, -2 }, /* (81) comp ::= COMP INTEGER */ + { 239, -2 }, /* (82) prec ::= PRECISION STRING */ + { 216, 0 }, /* (83) db_optr ::= */ + { 216, -2 }, /* (84) db_optr ::= db_optr tables */ + { 216, -2 }, /* (85) db_optr ::= db_optr cache */ + { 216, -2 }, /* (86) db_optr ::= db_optr replica */ + { 216, -2 }, /* (87) db_optr ::= db_optr days */ + { 216, -2 }, /* (88) db_optr ::= db_optr minrows */ + { 216, -2 }, /* (89) db_optr ::= db_optr maxrows */ + { 216, -2 }, /* (90) db_optr ::= db_optr blocks */ + { 216, -2 }, /* (91) db_optr ::= db_optr ctime */ + { 216, -2 }, /* (92) db_optr ::= db_optr wal */ + { 216, -2 }, /* (93) db_optr ::= db_optr fsync */ + { 216, -2 }, /* (94) db_optr ::= db_optr comp */ + { 216, -2 }, /* (95) db_optr ::= db_optr prec */ + { 216, -2 }, /* (96) db_optr ::= db_optr keep */ + { 213, 0 }, /* (97) alter_db_optr ::= */ + { 213, -2 }, /* (98) alter_db_optr ::= alter_db_optr replica */ + { 213, -2 }, /* (99) alter_db_optr ::= alter_db_optr tables */ + { 213, -2 }, /* (100) alter_db_optr ::= alter_db_optr keep */ + { 213, -2 }, /* (101) alter_db_optr ::= alter_db_optr blocks */ + { 213, -2 }, /* (102) alter_db_optr ::= alter_db_optr comp */ + { 213, -2 }, /* (103) alter_db_optr ::= alter_db_optr wal */ + { 213, -2 }, /* (104) alter_db_optr ::= alter_db_optr fsync */ + { 240, -1 }, /* (105) typename ::= ids */ + { 240, -4 }, /* (106) typename ::= ids LP signed RP */ + { 241, -1 }, /* (107) signed ::= INTEGER */ + { 241, -2 }, /* (108) signed ::= PLUS INTEGER */ + { 241, -2 }, /* (109) signed ::= MINUS INTEGER */ + { 208, -6 }, /* (110) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ + { 242, -3 }, /* (111) create_table_args ::= LP columnlist RP */ + { 242, -7 }, /* (112) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ + { 242, -7 }, /* (113) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ + { 242, -2 }, /* (114) create_table_args ::= AS select */ + { 243, -3 }, /* (115) columnlist ::= columnlist COMMA column */ + { 243, -1 }, /* (116) columnlist ::= column */ + { 245, -2 }, /* (117) column ::= ids typename */ + { 227, -3 }, /* (118) tagitemlist ::= tagitemlist COMMA tagitem */ + { 227, -1 }, /* (119) tagitemlist ::= tagitem */ + { 246, -1 }, /* (120) tagitem ::= INTEGER */ + { 246, -1 }, /* (121) tagitem ::= FLOAT */ + { 246, -1 }, /* (122) tagitem ::= STRING */ + { 246, -1 }, /* (123) tagitem ::= BOOL */ + { 246, -1 }, /* (124) tagitem ::= NULL */ + { 246, -2 }, /* (125) tagitem ::= MINUS INTEGER */ + { 246, -2 }, /* (126) tagitem ::= MINUS FLOAT */ + { 246, -2 }, /* (127) tagitem ::= PLUS INTEGER */ + { 246, -2 }, /* (128) tagitem ::= PLUS FLOAT */ + { 244, -12 }, /* (129) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ + { 258, -1 }, /* (130) union ::= select */ + { 258, -3 }, /* (131) union ::= LP union RP */ + { 258, -4 }, /* (132) union ::= union UNION ALL select */ + { 258, -6 }, /* (133) union ::= union UNION ALL LP select RP */ + { 208, -1 }, /* (134) cmd ::= union */ + { 244, -2 }, /* (135) select ::= SELECT selcollist */ + { 259, -2 }, /* (136) sclp ::= selcollist COMMA */ + { 259, 0 }, /* (137) sclp ::= */ + { 247, -3 }, /* (138) selcollist ::= sclp expr as */ + { 247, -2 }, /* (139) selcollist ::= sclp STAR */ + { 261, -2 }, /* (140) as ::= AS ids */ + { 261, -1 }, /* (141) as ::= ids */ + { 261, 0 }, /* (142) as ::= */ + { 248, -2 }, /* (143) from ::= FROM tablelist */ + { 262, -2 }, /* (144) tablelist ::= ids cpxName */ + { 262, -4 }, /* (145) tablelist ::= tablelist COMMA ids cpxName */ + { 263, -1 }, /* (146) tmvar ::= VARIABLE */ + { 250, -4 }, /* (147) interval_opt ::= INTERVAL LP tmvar RP */ + { 250, 0 }, /* (148) interval_opt ::= */ + { 251, 0 }, /* (149) fill_opt ::= */ + { 251, -6 }, /* (150) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ + { 251, -4 }, /* (151) fill_opt ::= FILL LP ID RP */ + { 252, -4 }, /* (152) sliding_opt ::= SLIDING LP tmvar RP */ + { 252, 0 }, /* (153) sliding_opt ::= */ + { 254, 0 }, /* (154) orderby_opt ::= */ + { 254, -3 }, /* (155) orderby_opt ::= ORDER BY sortlist */ + { 264, -4 }, /* (156) sortlist ::= sortlist COMMA item sortorder */ + { 264, -2 }, /* (157) sortlist ::= item sortorder */ + { 266, -2 }, /* (158) item ::= ids cpxName */ + { 267, -1 }, /* (159) sortorder ::= ASC */ + { 267, -1 }, /* (160) sortorder ::= DESC */ + { 267, 0 }, /* (161) sortorder ::= */ + { 253, 0 }, /* (162) groupby_opt ::= */ + { 253, -3 }, /* (163) groupby_opt ::= GROUP BY grouplist */ + { 268, -3 }, /* (164) grouplist ::= grouplist COMMA item */ + { 268, -1 }, /* (165) grouplist ::= item */ + { 255, 0 }, /* (166) having_opt ::= */ + { 255, -2 }, /* (167) having_opt ::= HAVING expr */ + { 257, 0 }, /* (168) limit_opt ::= */ + { 257, -2 }, /* (169) limit_opt ::= LIMIT signed */ + { 257, -4 }, /* (170) limit_opt ::= LIMIT signed OFFSET signed */ + { 257, -4 }, /* (171) limit_opt ::= LIMIT signed COMMA signed */ + { 256, 0 }, /* (172) slimit_opt ::= */ + { 256, -2 }, /* (173) slimit_opt ::= SLIMIT signed */ + { 256, -4 }, /* (174) slimit_opt ::= SLIMIT signed SOFFSET signed */ + { 256, -4 }, /* (175) slimit_opt ::= SLIMIT signed COMMA signed */ + { 249, 0 }, /* (176) where_opt ::= */ + { 249, -2 }, /* (177) where_opt ::= WHERE expr */ + { 260, -3 }, /* (178) expr ::= LP expr RP */ + { 260, -1 }, /* (179) expr ::= ID */ + { 260, -3 }, /* (180) expr ::= ID DOT ID */ + { 260, -3 }, /* (181) expr ::= ID DOT STAR */ + { 260, -1 }, /* (182) expr ::= INTEGER */ + { 260, -2 }, /* (183) expr ::= MINUS INTEGER */ + { 260, -2 }, /* (184) expr ::= PLUS INTEGER */ + { 260, -1 }, /* (185) expr ::= FLOAT */ + { 260, -2 }, /* (186) expr ::= MINUS FLOAT */ + { 260, -2 }, /* (187) expr ::= PLUS FLOAT */ + { 260, -1 }, /* (188) expr ::= STRING */ + { 260, -1 }, /* (189) expr ::= NOW */ + { 260, -1 }, /* (190) expr ::= VARIABLE */ + { 260, -1 }, /* (191) expr ::= BOOL */ + { 260, -4 }, /* (192) expr ::= ID LP exprlist RP */ + { 260, -4 }, /* (193) expr ::= ID LP STAR RP */ + { 260, -3 }, /* (194) expr ::= expr AND expr */ + { 260, -3 }, /* (195) expr ::= expr OR expr */ + { 260, -3 }, /* (196) expr ::= expr LT expr */ + { 260, -3 }, /* (197) expr ::= expr GT expr */ + { 260, -3 }, /* (198) expr ::= expr LE expr */ + { 260, -3 }, /* (199) expr ::= expr GE expr */ + { 260, -3 }, /* (200) expr ::= expr NE expr */ + { 260, -3 }, /* (201) expr ::= expr EQ expr */ + { 260, -3 }, /* (202) expr ::= expr PLUS expr */ + { 260, -3 }, /* (203) expr ::= expr MINUS expr */ + { 260, -3 }, /* (204) expr ::= expr STAR expr */ + { 260, -3 }, /* (205) expr ::= expr SLASH expr */ + { 260, -3 }, /* (206) expr ::= expr REM expr */ + { 260, -3 }, /* (207) expr ::= expr LIKE expr */ + { 260, -5 }, /* (208) expr ::= expr IN LP exprlist RP */ + { 269, -3 }, /* (209) exprlist ::= exprlist COMMA expritem */ + { 269, -1 }, /* (210) exprlist ::= expritem */ + { 270, -1 }, /* (211) expritem ::= expr */ + { 270, 0 }, /* (212) expritem ::= */ + { 208, -3 }, /* (213) cmd ::= RESET QUERY CACHE */ + { 208, -7 }, /* (214) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + { 208, -7 }, /* (215) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + { 208, -7 }, /* (216) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + { 208, -7 }, /* (217) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + { 208, -8 }, /* (218) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + { 208, -9 }, /* (219) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + { 208, -3 }, /* (220) cmd ::= KILL CONNECTION INTEGER */ + { 208, -5 }, /* (221) cmd ::= KILL STREAM INTEGER COLON INTEGER */ + { 208, -5 }, /* (222) cmd ::= KILL QUERY INTEGER COLON INTEGER */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -2114,13 +2124,13 @@ static void yy_reduce( { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; case 38: /* cmd ::= ALTER DATABASE ids alter_db_optr */ -{ SSQLToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy374, &t);} +{ SSQLToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &t);} break; case 39: /* cmd ::= ALTER ACCOUNT ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy219);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy73);} break; case 40: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy219);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);} break; case 41: /* ids ::= ID */ case 42: /* ids ::= STRING */ yytestcase(yyruleno==42); @@ -2141,10 +2151,10 @@ static void yy_reduce( { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} break; case 48: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy219);} +{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);} break; case 49: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ -{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy374, &yymsp[-2].minor.yy0);} +{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &yymsp[-2].minor.yy0);} break; case 50: /* cmd ::= CREATE USER ids PASS ids */ { setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} @@ -2173,20 +2183,20 @@ static void yy_reduce( break; case 69: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ { - yylhsminor.yy219.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; - yylhsminor.yy219.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; - yylhsminor.yy219.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; - yylhsminor.yy219.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; - yylhsminor.yy219.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; - yylhsminor.yy219.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy219.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy219.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; - yylhsminor.yy219.stat = yymsp[0].minor.yy0; -} - yymsp[-8].minor.yy219 = yylhsminor.yy219; + yylhsminor.yy73.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; + yylhsminor.yy73.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; + yylhsminor.yy73.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; + yylhsminor.yy73.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; + yylhsminor.yy73.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; + yylhsminor.yy73.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy73.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy73.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; + yylhsminor.yy73.stat = yymsp[0].minor.yy0; +} + yymsp[-8].minor.yy73 = yylhsminor.yy73; break; case 70: /* keep ::= KEEP tagitemlist */ -{ yymsp[-1].minor.yy322 = yymsp[0].minor.yy322; } +{ yymsp[-1].minor.yy494 = yymsp[0].minor.yy494; } break; case 71: /* tables ::= MAXTABLES INTEGER */ case 72: /* cache ::= CACHE INTEGER */ yytestcase(yyruleno==72); @@ -2197,496 +2207,505 @@ static void yy_reduce( case 77: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==77); case 78: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==78); case 79: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==79); - case 80: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==80); - case 81: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==81); + case 80: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==80); + case 81: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==81); + case 82: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==82); { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } break; - case 82: /* db_optr ::= */ -{setDefaultCreateDbOption(&yymsp[1].minor.yy374);} + case 83: /* db_optr ::= */ +{setDefaultCreateDbOption(&yymsp[1].minor.yy158);} + break; + case 84: /* db_optr ::= db_optr tables */ + case 99: /* alter_db_optr ::= alter_db_optr tables */ yytestcase(yyruleno==99); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.maxTablesPerVnode = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; + break; + case 85: /* db_optr ::= db_optr cache */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 83: /* db_optr ::= db_optr tables */ - case 97: /* alter_db_optr ::= alter_db_optr tables */ yytestcase(yyruleno==97); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.maxTablesPerVnode = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 86: /* db_optr ::= db_optr replica */ + case 98: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==98); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 84: /* db_optr ::= db_optr cache */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 87: /* db_optr ::= db_optr days */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 85: /* db_optr ::= db_optr replica */ - case 96: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==96); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 88: /* db_optr ::= db_optr minrows */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 86: /* db_optr ::= db_optr days */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 89: /* db_optr ::= db_optr maxrows */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 87: /* db_optr ::= db_optr minrows */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 90: /* db_optr ::= db_optr blocks */ + case 101: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==101); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 88: /* db_optr ::= db_optr maxrows */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 91: /* db_optr ::= db_optr ctime */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 89: /* db_optr ::= db_optr blocks */ - case 99: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==99); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 92: /* db_optr ::= db_optr wal */ + case 103: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==103); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 90: /* db_optr ::= db_optr ctime */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 93: /* db_optr ::= db_optr fsync */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 91: /* db_optr ::= db_optr wal */ - case 101: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==101); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 94: /* db_optr ::= db_optr comp */ + case 102: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==102); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 92: /* db_optr ::= db_optr comp */ - case 100: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==100); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 95: /* db_optr ::= db_optr prec */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.precision = yymsp[0].minor.yy0; } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 93: /* db_optr ::= db_optr prec */ -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.precision = yymsp[0].minor.yy0; } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 96: /* db_optr ::= db_optr keep */ + case 100: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==100); +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.keep = yymsp[0].minor.yy494; } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 94: /* db_optr ::= db_optr keep */ - case 98: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==98); -{ yylhsminor.yy374 = yymsp[-1].minor.yy374; yylhsminor.yy374.keep = yymsp[0].minor.yy322; } - yymsp[-1].minor.yy374 = yylhsminor.yy374; + case 97: /* alter_db_optr ::= */ +{ setDefaultCreateDbOption(&yymsp[1].minor.yy158);} break; - case 95: /* alter_db_optr ::= */ -{ setDefaultCreateDbOption(&yymsp[1].minor.yy374);} + case 104: /* alter_db_optr ::= alter_db_optr fsync */ +{ yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy158 = yylhsminor.yy158; break; - case 102: /* typename ::= ids */ + case 105: /* typename ::= ids */ { yymsp[0].minor.yy0.type = 0; - tSQLSetColumnType (&yylhsminor.yy325, &yymsp[0].minor.yy0); + tSQLSetColumnType (&yylhsminor.yy181, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy325 = yylhsminor.yy325; + yymsp[0].minor.yy181 = yylhsminor.yy181; break; - case 103: /* typename ::= ids LP signed RP */ + case 106: /* typename ::= ids LP signed RP */ { - if (yymsp[-1].minor.yy279 <= 0) { + if (yymsp[-1].minor.yy271 <= 0) { yymsp[-3].minor.yy0.type = 0; - tSQLSetColumnType(&yylhsminor.yy325, &yymsp[-3].minor.yy0); + tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0); } else { - yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy279; // negative value of name length - tSQLSetColumnType(&yylhsminor.yy325, &yymsp[-3].minor.yy0); + yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy271; // negative value of name length + tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0); } } - yymsp[-3].minor.yy325 = yylhsminor.yy325; + yymsp[-3].minor.yy181 = yylhsminor.yy181; break; - case 104: /* signed ::= INTEGER */ -{ yylhsminor.yy279 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[0].minor.yy279 = yylhsminor.yy279; + case 107: /* signed ::= INTEGER */ +{ yylhsminor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[0].minor.yy271 = yylhsminor.yy271; break; - case 105: /* signed ::= PLUS INTEGER */ -{ yymsp[-1].minor.yy279 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + case 108: /* signed ::= PLUS INTEGER */ +{ yymsp[-1].minor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } break; - case 106: /* signed ::= MINUS INTEGER */ -{ yymsp[-1].minor.yy279 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} + case 109: /* signed ::= MINUS INTEGER */ +{ yymsp[-1].minor.yy271 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} break; - case 107: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ + case 110: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ { yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; setCreatedTableName(pInfo, &yymsp[-2].minor.yy0, &yymsp[-3].minor.yy0); } break; - case 108: /* create_table_args ::= LP columnlist RP */ + case 111: /* create_table_args ::= LP columnlist RP */ { - yymsp[-2].minor.yy408 = tSetCreateSQLElems(yymsp[-1].minor.yy369, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); - setSQLInfo(pInfo, yymsp[-2].minor.yy408, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-2].minor.yy374 = tSetCreateSQLElems(yymsp[-1].minor.yy449, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); + setSQLInfo(pInfo, yymsp[-2].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 109: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ + case 112: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ { - yymsp[-6].minor.yy408 = tSetCreateSQLElems(yymsp[-5].minor.yy369, yymsp[-1].minor.yy369, NULL, NULL, NULL, TSQL_CREATE_STABLE); - setSQLInfo(pInfo, yymsp[-6].minor.yy408, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-6].minor.yy374 = tSetCreateSQLElems(yymsp[-5].minor.yy449, yymsp[-1].minor.yy449, NULL, NULL, NULL, TSQL_CREATE_STABLE); + setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 110: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ + case 113: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; - yymsp[-6].minor.yy408 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy322, NULL, TSQL_CREATE_TABLE_FROM_STABLE); - setSQLInfo(pInfo, yymsp[-6].minor.yy408, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-6].minor.yy374 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy494, NULL, TSQL_CREATE_TABLE_FROM_STABLE); + setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 111: /* create_table_args ::= AS select */ + case 114: /* create_table_args ::= AS select */ { - yymsp[-1].minor.yy408 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy190, TSQL_CREATE_STREAM); - setSQLInfo(pInfo, yymsp[-1].minor.yy408, NULL, TSDB_SQL_CREATE_TABLE); + yymsp[-1].minor.yy374 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy150, TSQL_CREATE_STREAM); + setSQLInfo(pInfo, yymsp[-1].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE); } break; - case 112: /* columnlist ::= columnlist COMMA column */ -{yylhsminor.yy369 = tFieldListAppend(yymsp[-2].minor.yy369, &yymsp[0].minor.yy325); } - yymsp[-2].minor.yy369 = yylhsminor.yy369; + case 115: /* columnlist ::= columnlist COMMA column */ +{yylhsminor.yy449 = tFieldListAppend(yymsp[-2].minor.yy449, &yymsp[0].minor.yy181); } + yymsp[-2].minor.yy449 = yylhsminor.yy449; break; - case 113: /* columnlist ::= column */ -{yylhsminor.yy369 = tFieldListAppend(NULL, &yymsp[0].minor.yy325);} - yymsp[0].minor.yy369 = yylhsminor.yy369; + case 116: /* columnlist ::= column */ +{yylhsminor.yy449 = tFieldListAppend(NULL, &yymsp[0].minor.yy181);} + yymsp[0].minor.yy449 = yylhsminor.yy449; break; - case 114: /* column ::= ids typename */ + case 117: /* column ::= ids typename */ { - tSQLSetColumnInfo(&yylhsminor.yy325, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy325); + tSQLSetColumnInfo(&yylhsminor.yy181, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy181); } - yymsp[-1].minor.yy325 = yylhsminor.yy325; + yymsp[-1].minor.yy181 = yylhsminor.yy181; break; - case 115: /* tagitemlist ::= tagitemlist COMMA tagitem */ -{ yylhsminor.yy322 = tVariantListAppend(yymsp[-2].minor.yy322, &yymsp[0].minor.yy518, -1); } - yymsp[-2].minor.yy322 = yylhsminor.yy322; + case 118: /* tagitemlist ::= tagitemlist COMMA tagitem */ +{ yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); } + yymsp[-2].minor.yy494 = yylhsminor.yy494; break; - case 116: /* tagitemlist ::= tagitem */ -{ yylhsminor.yy322 = tVariantListAppend(NULL, &yymsp[0].minor.yy518, -1); } - yymsp[0].minor.yy322 = yylhsminor.yy322; + case 119: /* tagitemlist ::= tagitem */ +{ yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); } + yymsp[0].minor.yy494 = yylhsminor.yy494; break; - case 117: /* tagitem ::= INTEGER */ - case 118: /* tagitem ::= FLOAT */ yytestcase(yyruleno==118); - case 119: /* tagitem ::= STRING */ yytestcase(yyruleno==119); - case 120: /* tagitem ::= BOOL */ yytestcase(yyruleno==120); -{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy518, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy518 = yylhsminor.yy518; + case 120: /* tagitem ::= INTEGER */ + case 121: /* tagitem ::= FLOAT */ yytestcase(yyruleno==121); + case 122: /* tagitem ::= STRING */ yytestcase(yyruleno==122); + case 123: /* tagitem ::= BOOL */ yytestcase(yyruleno==123); +{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy312 = yylhsminor.yy312; break; - case 121: /* tagitem ::= NULL */ -{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy518, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy518 = yylhsminor.yy518; + case 124: /* tagitem ::= NULL */ +{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy312 = yylhsminor.yy312; break; - case 122: /* tagitem ::= MINUS INTEGER */ - case 123: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==123); - case 124: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==124); - case 125: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==125); + case 125: /* tagitem ::= MINUS INTEGER */ + case 126: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==126); + case 127: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==127); + case 128: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==128); { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; toTSDBType(yymsp[-1].minor.yy0.type); - tVariantCreate(&yylhsminor.yy518, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy518 = yylhsminor.yy518; + yymsp[-1].minor.yy312 = yylhsminor.yy312; break; - case 126: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ + case 129: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ { - yylhsminor.yy190 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy260, yymsp[-9].minor.yy322, yymsp[-8].minor.yy500, yymsp[-4].minor.yy322, yymsp[-3].minor.yy322, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy322, &yymsp[0].minor.yy284, &yymsp[-1].minor.yy284); + yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy224, yymsp[-9].minor.yy494, yymsp[-8].minor.yy66, yymsp[-4].minor.yy494, yymsp[-3].minor.yy494, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy494, &yymsp[0].minor.yy188, &yymsp[-1].minor.yy188); } - yymsp[-11].minor.yy190 = yylhsminor.yy190; + yymsp[-11].minor.yy150 = yylhsminor.yy150; break; - case 127: /* union ::= select */ -{ yylhsminor.yy263 = setSubclause(NULL, yymsp[0].minor.yy190); } - yymsp[0].minor.yy263 = yylhsminor.yy263; + case 130: /* union ::= select */ +{ yylhsminor.yy25 = setSubclause(NULL, yymsp[0].minor.yy150); } + yymsp[0].minor.yy25 = yylhsminor.yy25; break; - case 128: /* union ::= LP union RP */ -{ yymsp[-2].minor.yy263 = yymsp[-1].minor.yy263; } + case 131: /* union ::= LP union RP */ +{ yymsp[-2].minor.yy25 = yymsp[-1].minor.yy25; } break; - case 129: /* union ::= union UNION ALL select */ -{ yylhsminor.yy263 = appendSelectClause(yymsp[-3].minor.yy263, yymsp[0].minor.yy190); } - yymsp[-3].minor.yy263 = yylhsminor.yy263; + case 132: /* union ::= union UNION ALL select */ +{ yylhsminor.yy25 = appendSelectClause(yymsp[-3].minor.yy25, yymsp[0].minor.yy150); } + yymsp[-3].minor.yy25 = yylhsminor.yy25; break; - case 130: /* union ::= union UNION ALL LP select RP */ -{ yylhsminor.yy263 = appendSelectClause(yymsp[-5].minor.yy263, yymsp[-1].minor.yy190); } - yymsp[-5].minor.yy263 = yylhsminor.yy263; + case 133: /* union ::= union UNION ALL LP select RP */ +{ yylhsminor.yy25 = appendSelectClause(yymsp[-5].minor.yy25, yymsp[-1].minor.yy150); } + yymsp[-5].minor.yy25 = yylhsminor.yy25; break; - case 131: /* cmd ::= union */ -{ setSQLInfo(pInfo, yymsp[0].minor.yy263, NULL, TSDB_SQL_SELECT); } + case 134: /* cmd ::= union */ +{ setSQLInfo(pInfo, yymsp[0].minor.yy25, NULL, TSDB_SQL_SELECT); } break; - case 132: /* select ::= SELECT selcollist */ + case 135: /* select ::= SELECT selcollist */ { - yylhsminor.yy190 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy260, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy224, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } - yymsp[-1].minor.yy190 = yylhsminor.yy190; + yymsp[-1].minor.yy150 = yylhsminor.yy150; break; - case 133: /* sclp ::= selcollist COMMA */ -{yylhsminor.yy260 = yymsp[-1].minor.yy260;} - yymsp[-1].minor.yy260 = yylhsminor.yy260; + case 136: /* sclp ::= selcollist COMMA */ +{yylhsminor.yy224 = yymsp[-1].minor.yy224;} + yymsp[-1].minor.yy224 = yylhsminor.yy224; break; - case 134: /* sclp ::= */ -{yymsp[1].minor.yy260 = 0;} + case 137: /* sclp ::= */ +{yymsp[1].minor.yy224 = 0;} break; - case 135: /* selcollist ::= sclp expr as */ + case 138: /* selcollist ::= sclp expr as */ { - yylhsminor.yy260 = tSQLExprListAppend(yymsp[-2].minor.yy260, yymsp[-1].minor.yy500, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); + yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224, yymsp[-1].minor.yy66, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); } - yymsp[-2].minor.yy260 = yylhsminor.yy260; + yymsp[-2].minor.yy224 = yylhsminor.yy224; break; - case 136: /* selcollist ::= sclp STAR */ + case 139: /* selcollist ::= sclp STAR */ { tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL); - yylhsminor.yy260 = tSQLExprListAppend(yymsp[-1].minor.yy260, pNode, 0); + yylhsminor.yy224 = tSQLExprListAppend(yymsp[-1].minor.yy224, pNode, 0); } - yymsp[-1].minor.yy260 = yylhsminor.yy260; + yymsp[-1].minor.yy224 = yylhsminor.yy224; break; - case 137: /* as ::= AS ids */ + case 140: /* as ::= AS ids */ { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } break; - case 138: /* as ::= ids */ + case 141: /* as ::= ids */ { yylhsminor.yy0 = yymsp[0].minor.yy0; } yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 139: /* as ::= */ + case 142: /* as ::= */ { yymsp[1].minor.yy0.n = 0; } break; - case 140: /* from ::= FROM tablelist */ -{yymsp[-1].minor.yy322 = yymsp[0].minor.yy322;} + case 143: /* from ::= FROM tablelist */ +{yymsp[-1].minor.yy494 = yymsp[0].minor.yy494;} break; - case 141: /* tablelist ::= ids cpxName */ -{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy322 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);} - yymsp[-1].minor.yy322 = yylhsminor.yy322; + case 144: /* tablelist ::= ids cpxName */ +{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);} + yymsp[-1].minor.yy494 = yylhsminor.yy494; break; - case 142: /* tablelist ::= tablelist COMMA ids cpxName */ -{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy322 = tVariantListAppendToken(yymsp[-3].minor.yy322, &yymsp[-1].minor.yy0, -1); } - yymsp[-3].minor.yy322 = yylhsminor.yy322; + case 145: /* tablelist ::= tablelist COMMA ids cpxName */ +{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy494 = tVariantListAppendToken(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy0, -1); } + yymsp[-3].minor.yy494 = yylhsminor.yy494; break; - case 143: /* tmvar ::= VARIABLE */ + case 146: /* tmvar ::= VARIABLE */ {yylhsminor.yy0 = yymsp[0].minor.yy0;} yymsp[0].minor.yy0 = yylhsminor.yy0; break; - case 144: /* interval_opt ::= INTERVAL LP tmvar RP */ - case 149: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==149); + case 147: /* interval_opt ::= INTERVAL LP tmvar RP */ + case 152: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==152); {yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; } break; - case 145: /* interval_opt ::= */ - case 150: /* sliding_opt ::= */ yytestcase(yyruleno==150); + case 148: /* interval_opt ::= */ + case 153: /* sliding_opt ::= */ yytestcase(yyruleno==153); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; } break; - case 146: /* fill_opt ::= */ -{yymsp[1].minor.yy322 = 0; } + case 149: /* fill_opt ::= */ +{yymsp[1].minor.yy494 = 0; } break; - case 147: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ + case 150: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { tVariant A = {0}; toTSDBType(yymsp[-3].minor.yy0.type); tVariantCreate(&A, &yymsp[-3].minor.yy0); - tVariantListInsert(yymsp[-1].minor.yy322, &A, -1, 0); - yymsp[-5].minor.yy322 = yymsp[-1].minor.yy322; + tVariantListInsert(yymsp[-1].minor.yy494, &A, -1, 0); + yymsp[-5].minor.yy494 = yymsp[-1].minor.yy494; } break; - case 148: /* fill_opt ::= FILL LP ID RP */ + case 151: /* fill_opt ::= FILL LP ID RP */ { toTSDBType(yymsp[-1].minor.yy0.type); - yymsp[-3].minor.yy322 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); + yymsp[-3].minor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); } break; - case 151: /* orderby_opt ::= */ - case 159: /* groupby_opt ::= */ yytestcase(yyruleno==159); -{yymsp[1].minor.yy322 = 0;} + case 154: /* orderby_opt ::= */ + case 162: /* groupby_opt ::= */ yytestcase(yyruleno==162); +{yymsp[1].minor.yy494 = 0;} break; - case 152: /* orderby_opt ::= ORDER BY sortlist */ - case 160: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==160); -{yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;} + case 155: /* orderby_opt ::= ORDER BY sortlist */ + case 163: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==163); +{yymsp[-2].minor.yy494 = yymsp[0].minor.yy494;} break; - case 153: /* sortlist ::= sortlist COMMA item sortorder */ + case 156: /* sortlist ::= sortlist COMMA item sortorder */ { - yylhsminor.yy322 = tVariantListAppend(yymsp[-3].minor.yy322, &yymsp[-1].minor.yy518, yymsp[0].minor.yy150); + yylhsminor.yy494 = tVariantListAppend(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82); } - yymsp[-3].minor.yy322 = yylhsminor.yy322; + yymsp[-3].minor.yy494 = yylhsminor.yy494; break; - case 154: /* sortlist ::= item sortorder */ + case 157: /* sortlist ::= item sortorder */ { - yylhsminor.yy322 = tVariantListAppend(NULL, &yymsp[-1].minor.yy518, yymsp[0].minor.yy150); + yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82); } - yymsp[-1].minor.yy322 = yylhsminor.yy322; + yymsp[-1].minor.yy494 = yylhsminor.yy494; break; - case 155: /* item ::= ids cpxName */ + case 158: /* item ::= ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - tVariantCreate(&yylhsminor.yy518, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy518 = yylhsminor.yy518; + yymsp[-1].minor.yy312 = yylhsminor.yy312; break; - case 156: /* sortorder ::= ASC */ -{yymsp[0].minor.yy150 = TSDB_ORDER_ASC; } + case 159: /* sortorder ::= ASC */ +{yymsp[0].minor.yy82 = TSDB_ORDER_ASC; } break; - case 157: /* sortorder ::= DESC */ -{yymsp[0].minor.yy150 = TSDB_ORDER_DESC;} + case 160: /* sortorder ::= DESC */ +{yymsp[0].minor.yy82 = TSDB_ORDER_DESC;} break; - case 158: /* sortorder ::= */ -{yymsp[1].minor.yy150 = TSDB_ORDER_ASC;} + case 161: /* sortorder ::= */ +{yymsp[1].minor.yy82 = TSDB_ORDER_ASC;} break; - case 161: /* grouplist ::= grouplist COMMA item */ + case 164: /* grouplist ::= grouplist COMMA item */ { - yylhsminor.yy322 = tVariantListAppend(yymsp[-2].minor.yy322, &yymsp[0].minor.yy518, -1); + yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); } - yymsp[-2].minor.yy322 = yylhsminor.yy322; + yymsp[-2].minor.yy494 = yylhsminor.yy494; break; - case 162: /* grouplist ::= item */ + case 165: /* grouplist ::= item */ { - yylhsminor.yy322 = tVariantListAppend(NULL, &yymsp[0].minor.yy518, -1); + yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); } - yymsp[0].minor.yy322 = yylhsminor.yy322; + yymsp[0].minor.yy494 = yylhsminor.yy494; break; - case 163: /* having_opt ::= */ - case 173: /* where_opt ::= */ yytestcase(yyruleno==173); - case 209: /* expritem ::= */ yytestcase(yyruleno==209); -{yymsp[1].minor.yy500 = 0;} + case 166: /* having_opt ::= */ + case 176: /* where_opt ::= */ yytestcase(yyruleno==176); + case 212: /* expritem ::= */ yytestcase(yyruleno==212); +{yymsp[1].minor.yy66 = 0;} break; - case 164: /* having_opt ::= HAVING expr */ - case 174: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==174); -{yymsp[-1].minor.yy500 = yymsp[0].minor.yy500;} + case 167: /* having_opt ::= HAVING expr */ + case 177: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==177); +{yymsp[-1].minor.yy66 = yymsp[0].minor.yy66;} break; - case 165: /* limit_opt ::= */ - case 169: /* slimit_opt ::= */ yytestcase(yyruleno==169); -{yymsp[1].minor.yy284.limit = -1; yymsp[1].minor.yy284.offset = 0;} + case 168: /* limit_opt ::= */ + case 172: /* slimit_opt ::= */ yytestcase(yyruleno==172); +{yymsp[1].minor.yy188.limit = -1; yymsp[1].minor.yy188.offset = 0;} break; - case 166: /* limit_opt ::= LIMIT signed */ - case 170: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==170); -{yymsp[-1].minor.yy284.limit = yymsp[0].minor.yy279; yymsp[-1].minor.yy284.offset = 0;} + case 169: /* limit_opt ::= LIMIT signed */ + case 173: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==173); +{yymsp[-1].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-1].minor.yy188.offset = 0;} break; - case 167: /* limit_opt ::= LIMIT signed OFFSET signed */ - case 171: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==171); -{yymsp[-3].minor.yy284.limit = yymsp[-2].minor.yy279; yymsp[-3].minor.yy284.offset = yymsp[0].minor.yy279;} + case 170: /* limit_opt ::= LIMIT signed OFFSET signed */ + case 174: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==174); +{yymsp[-3].minor.yy188.limit = yymsp[-2].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[0].minor.yy271;} break; - case 168: /* limit_opt ::= LIMIT signed COMMA signed */ - case 172: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==172); -{yymsp[-3].minor.yy284.limit = yymsp[0].minor.yy279; yymsp[-3].minor.yy284.offset = yymsp[-2].minor.yy279;} + case 171: /* limit_opt ::= LIMIT signed COMMA signed */ + case 175: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==175); +{yymsp[-3].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[-2].minor.yy271;} break; - case 175: /* expr ::= LP expr RP */ -{yymsp[-2].minor.yy500 = yymsp[-1].minor.yy500; } + case 178: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy66 = yymsp[-1].minor.yy66; } break; - case 176: /* expr ::= ID */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 179: /* expr ::= ID */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 177: /* expr ::= ID DOT ID */ -{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 180: /* expr ::= ID DOT ID */ +{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 178: /* expr ::= ID DOT STAR */ -{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 181: /* expr ::= ID DOT STAR */ +{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 179: /* expr ::= INTEGER */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 182: /* expr ::= INTEGER */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 180: /* expr ::= MINUS INTEGER */ - case 181: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==181); -{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} - yymsp[-1].minor.yy500 = yylhsminor.yy500; + case 183: /* expr ::= MINUS INTEGER */ + case 184: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==184); +{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} + yymsp[-1].minor.yy66 = yylhsminor.yy66; break; - case 182: /* expr ::= FLOAT */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 185: /* expr ::= FLOAT */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 183: /* expr ::= MINUS FLOAT */ - case 184: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==184); -{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} - yymsp[-1].minor.yy500 = yylhsminor.yy500; + case 186: /* expr ::= MINUS FLOAT */ + case 187: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==187); +{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} + yymsp[-1].minor.yy66 = yylhsminor.yy66; break; - case 185: /* expr ::= STRING */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 188: /* expr ::= STRING */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 186: /* expr ::= NOW */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 189: /* expr ::= NOW */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 187: /* expr ::= VARIABLE */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 190: /* expr ::= VARIABLE */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 188: /* expr ::= BOOL */ -{yylhsminor.yy500 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 191: /* expr ::= BOOL */ +{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 189: /* expr ::= ID LP exprlist RP */ + case 192: /* expr ::= ID LP exprlist RP */ { - yylhsminor.yy500 = tSQLExprCreateFunction(yymsp[-1].minor.yy260, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); + yylhsminor.yy66 = tSQLExprCreateFunction(yymsp[-1].minor.yy224, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy500 = yylhsminor.yy500; + yymsp[-3].minor.yy66 = yylhsminor.yy66; break; - case 190: /* expr ::= ID LP STAR RP */ + case 193: /* expr ::= ID LP STAR RP */ { - yylhsminor.yy500 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); + yylhsminor.yy66 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy500 = yylhsminor.yy500; + yymsp[-3].minor.yy66 = yylhsminor.yy66; break; - case 191: /* expr ::= expr AND expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_AND);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 194: /* expr ::= expr AND expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_AND);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 192: /* expr ::= expr OR expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_OR); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 195: /* expr ::= expr OR expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_OR); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 193: /* expr ::= expr LT expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_LT);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 196: /* expr ::= expr LT expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LT);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 194: /* expr ::= expr GT expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_GT);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 197: /* expr ::= expr GT expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GT);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 195: /* expr ::= expr LE expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_LE);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 198: /* expr ::= expr LE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 196: /* expr ::= expr GE expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_GE);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 199: /* expr ::= expr GE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 197: /* expr ::= expr NE expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_NE);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 200: /* expr ::= expr NE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_NE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 198: /* expr ::= expr EQ expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_EQ);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 201: /* expr ::= expr EQ expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_EQ);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 199: /* expr ::= expr PLUS expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_PLUS); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 202: /* expr ::= expr PLUS expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_PLUS); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 200: /* expr ::= expr MINUS expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_MINUS); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 203: /* expr ::= expr MINUS expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_MINUS); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 201: /* expr ::= expr STAR expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_STAR); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 204: /* expr ::= expr STAR expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_STAR); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 202: /* expr ::= expr SLASH expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_DIVIDE);} - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 205: /* expr ::= expr SLASH expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_DIVIDE);} + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 203: /* expr ::= expr REM expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_REM); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 206: /* expr ::= expr REM expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_REM); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 204: /* expr ::= expr LIKE expr */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-2].minor.yy500, yymsp[0].minor.yy500, TK_LIKE); } - yymsp[-2].minor.yy500 = yylhsminor.yy500; + case 207: /* expr ::= expr LIKE expr */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LIKE); } + yymsp[-2].minor.yy66 = yylhsminor.yy66; break; - case 205: /* expr ::= expr IN LP exprlist RP */ -{yylhsminor.yy500 = tSQLExprCreate(yymsp[-4].minor.yy500, (tSQLExpr*)yymsp[-1].minor.yy260, TK_IN); } - yymsp[-4].minor.yy500 = yylhsminor.yy500; + case 208: /* expr ::= expr IN LP exprlist RP */ +{yylhsminor.yy66 = tSQLExprCreate(yymsp[-4].minor.yy66, (tSQLExpr*)yymsp[-1].minor.yy224, TK_IN); } + yymsp[-4].minor.yy66 = yylhsminor.yy66; break; - case 206: /* exprlist ::= exprlist COMMA expritem */ -{yylhsminor.yy260 = tSQLExprListAppend(yymsp[-2].minor.yy260,yymsp[0].minor.yy500,0);} - yymsp[-2].minor.yy260 = yylhsminor.yy260; + case 209: /* exprlist ::= exprlist COMMA expritem */ +{yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224,yymsp[0].minor.yy66,0);} + yymsp[-2].minor.yy224 = yylhsminor.yy224; break; - case 207: /* exprlist ::= expritem */ -{yylhsminor.yy260 = tSQLExprListAppend(0,yymsp[0].minor.yy500,0);} - yymsp[0].minor.yy260 = yylhsminor.yy260; + case 210: /* exprlist ::= expritem */ +{yylhsminor.yy224 = tSQLExprListAppend(0,yymsp[0].minor.yy66,0);} + yymsp[0].minor.yy224 = yylhsminor.yy224; break; - case 208: /* expritem ::= expr */ -{yylhsminor.yy500 = yymsp[0].minor.yy500;} - yymsp[0].minor.yy500 = yylhsminor.yy500; + case 211: /* expritem ::= expr */ +{yylhsminor.yy66 = yymsp[0].minor.yy66;} + yymsp[0].minor.yy66 = yylhsminor.yy66; break; - case 210: /* cmd ::= RESET QUERY CACHE */ + case 213: /* cmd ::= RESET QUERY CACHE */ { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} break; - case 211: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + case 214: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy369, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); + SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 212: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + case 215: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2697,14 +2716,14 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 213: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + case 216: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy369, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); + SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 214: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + case 217: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2715,7 +2734,7 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 215: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + case 218: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; @@ -2729,25 +2748,25 @@ static void yy_reduce( setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 216: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + case 219: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; toTSDBType(yymsp[-2].minor.yy0.type); tVariantList* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); - A = tVariantListAppend(A, &yymsp[0].minor.yy518, -1); + A = tVariantListAppend(A, &yymsp[0].minor.yy312, -1); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 217: /* cmd ::= KILL CONNECTION INTEGER */ + case 220: /* cmd ::= KILL CONNECTION INTEGER */ {setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} break; - case 218: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ + case 221: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);} break; - case 219: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ + case 222: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);} break; default: diff --git a/src/tsdb/inc/tsdbMain.h b/src/tsdb/inc/tsdbMain.h index 7d1a5a52de8cf4982f85e68b388007718a7aa741..bfc1aa89322353316783cfc37f0219e6f601b847 100644 --- a/src/tsdb/inc/tsdbMain.h +++ b/src/tsdb/inc/tsdbMain.h @@ -96,6 +96,11 @@ typedef struct { } STsdbBufPool; // ------------------ tsdbMemTable.c +typedef struct { + STable * pTable; + SSkipListIterator *pIter; +} SCommitIter; + typedef struct { uint64_t uid; TSKEY keyFirst; @@ -206,10 +211,10 @@ typedef struct { int64_t offset : 63; int32_t algorithm : 8; int32_t numOfRows : 24; - int32_t sversion; int32_t len; + int32_t keyLen; // key column length, keyOffset = offset+sizeof(SCompData)+sizeof(SCompCol)*numOfCols int16_t numOfSubBlocks; - int16_t numOfCols; + int16_t numOfCols; // not including timestamp column TSKEY keyFirst; TSKEY keyLast; } SCompBlock; @@ -377,6 +382,24 @@ int tsdbUnRefMemTable(STsdbRepo* pRepo, SMemTable* pMemTable); int tsdbTakeMemSnapshot(STsdbRepo* pRepo, SMemTable** pMem, SMemTable** pIMem); void* tsdbAllocBytes(STsdbRepo* pRepo, int bytes); int tsdbAsyncCommit(STsdbRepo* pRepo); +int tsdbLoadDataFromCache(STable* pTable, SSkipListIterator* pIter, TSKEY maxKey, int maxRowsToRead, SDataCols* pCols, + TSKEY* filterKeys, int nFilterKeys); + +static FORCE_INLINE SDataRow tsdbNextIterRow(SSkipListIterator* pIter) { + if (pIter == NULL) return NULL; + + SSkipListNode* node = tSkipListIterGet(pIter); + if (node == NULL) return NULL; + + return SL_GET_NODE_DATA(node); +} + +static FORCE_INLINE TSKEY tsdbNextIterKey(SSkipListIterator* pIter) { + SDataRow row = tsdbNextIterRow(pIter); + if (row == NULL) return -1; + + return dataRowKey(row); +} // ------------------ tsdbFile.c #define TSDB_KEY_FILEID(key, daysPerFile, precision) ((key) / tsMsPerDay[(precision)] / (daysPerFile)) @@ -421,25 +444,36 @@ void tsdbRemoveFileGroup(STsdbRepo* pRepo, SFileGroup* pFGroup); #define helperType(h) (h)->type #define helperRepo(h) (h)->pRepo #define helperState(h) (h)->state - -int tsdbInitReadHelper(SRWHelper* pHelper, STsdbRepo* pRepo); -int tsdbInitWriteHelper(SRWHelper* pHelper, STsdbRepo* pRepo); -void tsdbDestroyHelper(SRWHelper* pHelper); -void tsdbResetHelper(SRWHelper* pHelper); -int tsdbSetAndOpenHelperFile(SRWHelper* pHelper, SFileGroup* pGroup); -int tsdbCloseHelperFile(SRWHelper* pHelper, bool hasError); -void tsdbSetHelperTable(SRWHelper* pHelper, STable* pTable, STsdbRepo* pRepo); -int tsdbWriteDataBlock(SRWHelper* pHelper, SDataCols* pDataCols); -int tsdbMoveLastBlockIfNeccessary(SRWHelper* pHelper); -int tsdbWriteCompInfo(SRWHelper* pHelper); -int tsdbWriteCompIdx(SRWHelper* pHelper); -int tsdbLoadCompIdx(SRWHelper* pHelper, void* target); -int tsdbLoadCompInfo(SRWHelper* pHelper, void* target); -int tsdbLoadCompData(SRWHelper* phelper, SCompBlock* pcompblock, void* target); -void tsdbGetDataStatis(SRWHelper* pHelper, SDataStatis* pStatis, int numOfCols); -int tsdbLoadBlockDataCols(SRWHelper* pHelper, SCompBlock* pCompBlock, SCompInfo* pCompInfo, int16_t* colIds, - int numOfColIds); -int tsdbLoadBlockData(SRWHelper* pHelper, SCompBlock* pCompBlock, SCompInfo* pCompInfo); +#define TSDB_NLAST_FILE_OPENED(h) ((h)->files.nLastF.fd > 0) + +int tsdbInitReadHelper(SRWHelper* pHelper, STsdbRepo* pRepo); +int tsdbInitWriteHelper(SRWHelper* pHelper, STsdbRepo* pRepo); +void tsdbDestroyHelper(SRWHelper* pHelper); +void tsdbResetHelper(SRWHelper* pHelper); +int tsdbSetAndOpenHelperFile(SRWHelper* pHelper, SFileGroup* pGroup); +int tsdbCloseHelperFile(SRWHelper* pHelper, bool hasError); +void tsdbSetHelperTable(SRWHelper* pHelper, STable* pTable, STsdbRepo* pRepo); +int tsdbCommitTableData(SRWHelper* pHelper, SCommitIter* pCommitIter, SDataCols* pDataCols, TSKEY maxKey); +int tsdbMoveLastBlockIfNeccessary(SRWHelper* pHelper); +int tsdbWriteCompInfo(SRWHelper* pHelper); +int tsdbWriteCompIdx(SRWHelper* pHelper); +int tsdbLoadCompIdx(SRWHelper* pHelper, void* target); +int tsdbLoadCompInfo(SRWHelper* pHelper, void* target); +int tsdbLoadCompData(SRWHelper* phelper, SCompBlock* pcompblock, void* target); +void tsdbGetDataStatis(SRWHelper* pHelper, SDataStatis* pStatis, int numOfCols); +int tsdbLoadBlockDataCols(SRWHelper* pHelper, SCompBlock* pCompBlock, SCompInfo* pCompInfo, int16_t* colIds, + int numOfColIds); +int tsdbLoadBlockData(SRWHelper* pHelper, SCompBlock* pCompBlock, SCompInfo* pCompInfo); + +static FORCE_INLINE int compTSKEY(const void* key1, const void* key2) { + if (*(TSKEY*)key1 > *(TSKEY*)key2) { + return 1; + } else if (*(TSKEY*)key1 == *(TSKEY*)key2) { + return 0; + } else { + return -1; + } +} // ------------------ tsdbMain.c #define REPO_ID(r) (r)->config.tsdbId diff --git a/src/tsdb/src/tsdbMemTable.c b/src/tsdb/src/tsdbMemTable.c index 675e44f458ae78c6798ca38f8e350b944640d6ed..1cd212b216d73c9824323c2c7e0e62a8188bd548 100644 --- a/src/tsdb/src/tsdbMemTable.c +++ b/src/tsdb/src/tsdbMemTable.c @@ -18,11 +18,6 @@ #define TSDB_DATA_SKIPLIST_LEVEL 5 -typedef struct { - STable * pTable; - SSkipListIterator *pIter; -} SCommitIter; - static FORCE_INLINE STsdbBufBlock *tsdbGetCurrBufBlock(STsdbRepo *pRepo); static void tsdbFreeBytes(STsdbRepo *pRepo, void *ptr, int bytes); @@ -34,14 +29,11 @@ static char * tsdbGetTsTupleKey(const void *data); static void * tsdbCommitData(void *arg); static int tsdbCommitMeta(STsdbRepo *pRepo); static void tsdbEndCommit(STsdbRepo *pRepo); -static TSKEY tsdbNextIterKey(SCommitIter *pIter); static int tsdbHasDataToCommit(SCommitIter *iters, int nIters, TSKEY minKey, TSKEY maxKey); static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SCommitIter *iters, SRWHelper *pHelper, SDataCols *pDataCols); static void tsdbGetFidKeyRange(int daysPerFile, int8_t precision, int fileId, TSKEY *minKey, TSKEY *maxKey); -static SCommitIter *tsdbCreateTableIters(STsdbRepo *pRepo); -static void tsdbDestroyTableIters(SCommitIter *iters, int maxTables); -static int tsdbReadRowsFromCache(STsdbMeta *pMeta, STable *pTable, SSkipListIterator *pIter, TSKEY maxKey, - int maxRowsToRead, SDataCols *pCols); +static SCommitIter *tsdbCreateCommitIters(STsdbRepo *pRepo); +static void tsdbDestroyCommitIters(SCommitIter *iters, int maxTables); // ---------------- INTERNAL FUNCTIONS ---------------- int tsdbInsertRowToMem(STsdbRepo *pRepo, SDataRow row, STable *pTable) { @@ -252,6 +244,66 @@ int tsdbAsyncCommit(STsdbRepo *pRepo) { return 0; } +int tsdbLoadDataFromCache(STable *pTable, SSkipListIterator *pIter, TSKEY maxKey, int maxRowsToRead, SDataCols *pCols, + TSKEY *filterKeys, int nFilterKeys) { + ASSERT(maxRowsToRead > 0 && nFilterKeys >= 0); + if (pIter == NULL) return 0; + STSchema *pSchema = NULL; + int numOfRows = 0; + TSKEY keyNext = 0; + int filterIter = 0; + + if (nFilterKeys != 0) { // for filter purpose + ASSERT(filterKeys != NULL); + keyNext = tsdbNextIterKey(pIter); + if (keyNext < 0 || keyNext > maxKey) return numOfRows; + void *ptr = taosbsearch((void *)(&keyNext), (void *)filterKeys, nFilterKeys, sizeof(TSKEY), compTSKEY, TD_GE); + filterIter = (ptr == NULL) ? nFilterKeys : (POINTER_DISTANCE(ptr, filterKeys) / sizeof(TSKEY)); + } + + do { + if (numOfRows >= maxRowsToRead) break; + + SDataRow row = tsdbNextIterRow(pIter); + if (row == NULL) break; + + keyNext = dataRowKey(row); + if (keyNext < 0 || keyNext > maxKey) break; + + bool keyFiltered = false; + if (nFilterKeys != 0) { + while (true) { + if (filterIter >= nFilterKeys) break; + if (keyNext == filterKeys[filterIter]) { + keyFiltered = true; + filterIter++; + break; + } else if (keyNext < filterKeys[filterIter]) { + break; + } else { + filterIter++; + } + } + } + + if (!keyFiltered) { + if (pCols) { + if (pSchema == NULL || schemaVersion(pSchema) != dataRowVersion(row)) { + pSchema = tsdbGetTableSchemaImpl(pTable, false, false, dataRowVersion(row)); + if (pSchema == NULL) { + ASSERT(0); + } + } + + tdAppendDataRowToDataCol(row, pSchema, pCols); + } + numOfRows++; + } + } while (tSkipListIterNext(pIter)); + + return numOfRows; +} + // ---------------- LOCAL FUNCTIONS ---------------- static FORCE_INLINE STsdbBufBlock *tsdbGetCurrBufBlock(STsdbRepo *pRepo) { ASSERT(pRepo != NULL); @@ -378,7 +430,7 @@ static void *tsdbCommitData(void *arg) { // Create the iterator to read from cache if (pMem->numOfRows > 0) { - iters = tsdbCreateTableIters(pRepo); + iters = tsdbCreateCommitIters(pRepo); if (iters == NULL) { tsdbError("vgId:%d failed to create commit iterator since %s", REPO_ID(pRepo), tstrerror(terrno)); goto _exit; @@ -418,7 +470,7 @@ static void *tsdbCommitData(void *arg) { _exit: tdFreeDataCols(pDataCols); - tsdbDestroyTableIters(iters, pCfg->maxTables); + tsdbDestroyCommitIters(iters, pCfg->maxTables); tsdbDestroyHelper(&whelper); tsdbEndCommit(pRepo); tsdbInfo("vgId:%d commit over", pRepo->config.tsdbId); @@ -479,19 +531,9 @@ static void tsdbEndCommit(STsdbRepo *pRepo) { if (pRepo->appH.notifyStatus) pRepo->appH.notifyStatus(pRepo->appH.appH, TSDB_STATUS_COMMIT_OVER); } -static TSKEY tsdbNextIterKey(SCommitIter *pIter) { - if (pIter == NULL) return -1; - - SSkipListNode *node = tSkipListIterGet(pIter->pIter); - if (node == NULL) return -1; - - SDataRow row = SL_GET_NODE_DATA(node); - return dataRowKey(row); -} - static int tsdbHasDataToCommit(SCommitIter *iters, int nIters, TSKEY minKey, TSKEY maxKey) { for (int i = 0; i < nIters; i++) { - TSKEY nextKey = tsdbNextIterKey(iters + i); + TSKEY nextKey = tsdbNextIterKey((iters + i)->pIter); if (nextKey > 0 && (nextKey >= minKey && nextKey <= maxKey)) return 1; } return 0; @@ -504,7 +546,6 @@ static void tsdbGetFidKeyRange(int daysPerFile, int8_t precision, int fileId, TS static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SCommitIter *iters, SRWHelper *pHelper, SDataCols *pDataCols) { char * dataDir = NULL; - STsdbMeta * pMeta = pRepo->tsdbMeta; STsdbCfg * pCfg = &pRepo->config; STsdbFileH *pFileH = pRepo->tsdbFileH; SFileGroup *pGroup = NULL; @@ -549,33 +590,13 @@ static int tsdbCommitToFile(STsdbRepo *pRepo, int fid, SCommitIter *iters, SRWHe if (pIter->pIter != NULL) { tdInitDataCols(pDataCols, tsdbGetTableSchemaImpl(pIter->pTable, false, false, -1)); - int maxRowsToRead = pCfg->maxRowsPerFileBlock * 4 / 5; - int nLoop = 0; - while (true) { - int rowsRead = tsdbReadRowsFromCache(pMeta, pIter->pTable, pIter->pIter, maxKey, maxRowsToRead, pDataCols); - ASSERT(rowsRead >= 0); - if (pDataCols->numOfRows == 0) break; - nLoop++; - - ASSERT(dataColsKeyFirst(pDataCols) >= minKey && dataColsKeyFirst(pDataCols) <= maxKey); - ASSERT(dataColsKeyLast(pDataCols) >= minKey && dataColsKeyLast(pDataCols) <= maxKey); - - int rowsWritten = tsdbWriteDataBlock(pHelper, pDataCols); - ASSERT(rowsWritten != 0); - if (rowsWritten < 0) { - taosRUnLockLatch(&(pIter->pTable->latch)); - tsdbError("vgId:%d failed to write data block to table %s tid %d uid %" PRIu64 " since %s", REPO_ID(pRepo), - TABLE_CHAR_NAME(pIter->pTable), TABLE_TID(pIter->pTable), TABLE_UID(pIter->pTable), - tstrerror(terrno)); - goto _err; - } - ASSERT(rowsWritten <= pDataCols->numOfRows); - - tdPopDataColsPoints(pDataCols, rowsWritten); - maxRowsToRead = pCfg->maxRowsPerFileBlock * 4 / 5 - pDataCols->numOfRows; + if (tsdbCommitTableData(pHelper, pIter, pDataCols, maxKey) < 0) { + taosRUnLockLatch(&(pIter->pTable->latch)); + tsdbError("vgId:%d failed to write data of table %s tid %d uid %" PRIu64 " since %s", REPO_ID(pRepo), + TABLE_CHAR_NAME(pIter->pTable), TABLE_TID(pIter->pTable), TABLE_UID(pIter->pTable), + tstrerror(terrno)); + goto _err; } - - ASSERT(pDataCols->numOfRows == 0); } taosRUnLockLatch(&(pIter->pTable->latch)); @@ -615,7 +636,7 @@ _err: return -1; } -static SCommitIter *tsdbCreateTableIters(STsdbRepo *pRepo) { +static SCommitIter *tsdbCreateCommitIters(STsdbRepo *pRepo) { STsdbCfg * pCfg = &(pRepo->config); SMemTable *pMem = pRepo->imem; STsdbMeta *pMeta = pRepo->tsdbMeta; @@ -645,21 +666,18 @@ static SCommitIter *tsdbCreateTableIters(STsdbRepo *pRepo) { goto _err; } - if (!tSkipListIterNext(iters[i].pIter)) { - terrno = TSDB_CODE_TDB_NO_TABLE_DATA_IN_MEM; - goto _err; - } + tSkipListIterNext(iters[i].pIter); } } return iters; _err: - tsdbDestroyTableIters(iters, pCfg->maxTables); + tsdbDestroyCommitIters(iters, pCfg->maxTables); return NULL; } -static void tsdbDestroyTableIters(SCommitIter *iters, int maxTables) { +static void tsdbDestroyCommitIters(SCommitIter *iters, int maxTables) { if (iters == NULL) return; for (int i = 1; i < maxTables; i++) { @@ -670,35 +688,4 @@ static void tsdbDestroyTableIters(SCommitIter *iters, int maxTables) { } free(iters); -} - -static int tsdbReadRowsFromCache(STsdbMeta *pMeta, STable *pTable, SSkipListIterator *pIter, TSKEY maxKey, int maxRowsToRead, SDataCols *pCols) { - ASSERT(maxRowsToRead > 0); - if (pIter == NULL) return 0; - STSchema *pSchema = NULL; - - int numOfRows = 0; - - do { - if (numOfRows >= maxRowsToRead) break; - - SSkipListNode *node = tSkipListIterGet(pIter); - if (node == NULL) break; - - SDataRow row = SL_GET_NODE_DATA(node); - if (dataRowKey(row) > maxKey) break; - - if (pSchema == NULL || schemaVersion(pSchema) != dataRowVersion(row)) { - pSchema = tsdbGetTableSchemaImpl(pTable, true, false, dataRowVersion(row)); - if (pSchema == NULL) { - // TODO: deal with the error here - ASSERT(0); - } - } - - tdAppendDataRowToDataCol(row, pSchema, pCols); - numOfRows++; - } while (tSkipListIterNext(pIter)); - - return numOfRows; } \ No newline at end of file diff --git a/src/tsdb/src/tsdbMeta.c b/src/tsdb/src/tsdbMeta.c index 6d65e1e743724ba456fc3e979dde96deea7f68d3..fcf9b04e4ae07d6a3d2d7fd136534b26bb2839a3 100644 --- a/src/tsdb/src/tsdbMeta.c +++ b/src/tsdb/src/tsdbMeta.c @@ -727,7 +727,7 @@ static STable *tsdbNewTable(STableCfg *pCfg, bool isSuper) { T_REF_INC(pTable); - tsdbDebug("table %s tid %d uid %" PRIu64 " is created", TABLE_CHAR_NAME(pTable), TABLE_TID(pTable), + tsdbTrace("table %s tid %d uid %" PRIu64 " is created", TABLE_CHAR_NAME(pTable), TABLE_TID(pTable), TABLE_UID(pTable)); return pTable; @@ -740,7 +740,7 @@ _err: static void tsdbFreeTable(STable *pTable) { if (pTable) { if (pTable->name != NULL) - tsdbDebug("table %s tid %d uid %" PRIu64 " is destroyed", TABLE_CHAR_NAME(pTable), TABLE_TID(pTable), + tsdbTrace("table %s tid %d uid %" PRIu64 " is freed", TABLE_CHAR_NAME(pTable), TABLE_TID(pTable), TABLE_UID(pTable)); tfree(TABLE_NAME(pTable)); if (TABLE_TYPE(pTable) != TSDB_CHILD_TABLE) { diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c index 5dd465147593cd2a581a89dc462daeefe7c86ea5..040b4a5334a148e4242d1c1d01d3eb95b16ba61e 100644 --- a/src/tsdb/src/tsdbRWHelper.c +++ b/src/tsdb/src/tsdbRWHelper.c @@ -22,39 +22,44 @@ #include "tfile.h" #define TSDB_GET_COMPCOL_LEN(nCols) (sizeof(SCompData) + sizeof(SCompCol) * (nCols) + sizeof(TSCKSUM)) - -static bool tsdbShouldCreateNewLast(SRWHelper *pHelper); -static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDataCols, int rowsToWrite, - SCompBlock *pCompBlock, bool isLast, bool isSuperBlock); -static int compareKeyBlock(const void *arg1, const void *arg2); -static int tsdbMergeDataWithBlock(SRWHelper *pHelper, int blkIdx, SDataCols *pDataCols); -static int compTSKEY(const void *key1, const void *key2); -static int tsdbAdjustInfoSizeIfNeeded(SRWHelper *pHelper, size_t esize); -static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx); -static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx, int rowsAdded); -static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx); -static int tsdbGetRowsInRange(SDataCols *pDataCols, TSKEY minKey, TSKEY maxKey); -static void tsdbResetHelperFileImpl(SRWHelper *pHelper); -static int tsdbInitHelperFile(SRWHelper *pHelper); -static void tsdbDestroyHelperFile(SRWHelper *pHelper); -static void tsdbResetHelperTableImpl(SRWHelper *pHelper); -static void tsdbResetHelperTable(SRWHelper *pHelper); -static void tsdbInitHelperTable(SRWHelper *pHelper); -static void tsdbDestroyHelperTable(SRWHelper *pHelper); -static void tsdbResetHelperBlockImpl(SRWHelper *pHelper); -static void tsdbResetHelperBlock(SRWHelper *pHelper); -static int tsdbInitHelperBlock(SRWHelper *pHelper); -static int tsdbInitHelper(SRWHelper *pHelper, STsdbRepo *pRepo, tsdb_rw_helper_t type); -static int tsdbCheckAndDecodeColumnData(SDataCol *pDataCol, char *content, int32_t len, int8_t comp, int numOfRows, - int maxPoints, char *buffer, int bufferSize); -static int tsdbLoadBlockDataColsImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDataCols *pDataCols, int16_t *colIds, - int numOfColIds); -static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDataCols *pDataCols); -static int tsdbEncodeSCompIdx(void **buf, SCompIdx *pIdx); +#define TSDB_KEY_COL_OFFSET 0 +#define TSDB_GET_COMPBLOCK_IDX(h, b) (POINTER_DISTANCE(b, (h)->pCompInfo->blocks)/sizeof(SCompBlock)) + +static bool tsdbShouldCreateNewLast(SRWHelper *pHelper); +static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDataCols, SCompBlock *pCompBlock, + bool isLast, bool isSuperBlock); +static int compareKeyBlock(const void *arg1, const void *arg2); +static int tsdbAdjustInfoSizeIfNeeded(SRWHelper *pHelper, size_t esize); +static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx); +static int tsdbAddSubBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx, int rowsAdded); +static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int blkIdx); +static void tsdbResetHelperFileImpl(SRWHelper *pHelper); +static int tsdbInitHelperFile(SRWHelper *pHelper); +static void tsdbDestroyHelperFile(SRWHelper *pHelper); +static void tsdbResetHelperTableImpl(SRWHelper *pHelper); +static void tsdbResetHelperTable(SRWHelper *pHelper); +static void tsdbInitHelperTable(SRWHelper *pHelper); +static void tsdbDestroyHelperTable(SRWHelper *pHelper); +static void tsdbResetHelperBlockImpl(SRWHelper *pHelper); +static void tsdbResetHelperBlock(SRWHelper *pHelper); +static int tsdbInitHelperBlock(SRWHelper *pHelper); +static int tsdbInitHelper(SRWHelper *pHelper, STsdbRepo *pRepo, tsdb_rw_helper_t type); +static int tsdbCheckAndDecodeColumnData(SDataCol *pDataCol, char *content, int32_t len, int8_t comp, int numOfRows, + int maxPoints, char *buffer, int bufferSize); +static int tsdbLoadBlockDataColsImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDataCols *pDataCols, int16_t *colIds, + int numOfColIds); +static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDataCols *pDataCols); +static int tsdbEncodeSCompIdx(void **buf, SCompIdx *pIdx); static void *tsdbDecodeSCompIdx(void *buf, SCompIdx *pIdx); +static int tsdbProcessAppendCommit(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols *pDataCols, TSKEY maxKey); static void tsdbDestroyHelperBlock(SRWHelper *pHelper); static int tsdbLoadColData(SRWHelper *pHelper, SFile *pFile, SCompBlock *pCompBlock, SCompCol *pCompCol, SDataCol *pDataCol); +static int tsdbWriteBlockToProperFile(SRWHelper *pHelper, SDataCols *pDataCols, SCompBlock *pCompBlock); +static int tsdbProcessMergeCommit(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols *pDataCols, TSKEY maxKey, + int *blkIdx); +static int tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIter *pCommitIter, SDataCols *pTarget, + TSKEY maxKey, int maxRows); // ---------------------- INTERNAL FUNCTIONS ---------------------- int tsdbInitReadHelper(SRWHelper *pHelper, STsdbRepo *pRepo) { @@ -225,84 +230,41 @@ void tsdbSetHelperTable(SRWHelper *pHelper, STable *pTable, STsdbRepo *pRepo) { tdInitDataCols(pHelper->pDataCols[1], pSchema); SCompIdx *pIdx = pHelper->pCompIdx + pTable->tableId.tid; - if (pIdx->offset > 0 && pIdx->hasLast) { - pHelper->hasOldLastBlock = true; + if (pIdx->offset > 0) { + if (pIdx->uid != TABLE_UID(pTable)) { + memset((void *)pIdx, 0, sizeof(SCompIdx)); + } else { + if (pIdx->hasLast) pHelper->hasOldLastBlock = true; + } } helperSetState(pHelper, TSDB_HELPER_TABLE_SET); ASSERT(pHelper->state == ((TSDB_HELPER_TABLE_SET << 1) - 1)); } -/** - * Write part of of points from pDataCols to file - * - * @return: number of points written to file successfully - * -1 for failure - */ -int tsdbWriteDataBlock(SRWHelper *pHelper, SDataCols *pDataCols) { +int tsdbCommitTableData(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols *pDataCols, TSKEY maxKey) { ASSERT(helperType(pHelper) == TSDB_WRITE_HELPER); - ASSERT(pDataCols->numOfRows > 0); - SCompBlock compBlock; - int rowsToWrite = 0; - TSKEY keyFirst = dataColsKeyFirst(pDataCols); + SCompIdx * pIdx = &(pHelper->pCompIdx[TABLE_TID(pCommitIter->pTable)]); + int blkIdx = 0; - STsdbCfg *pCfg = &pHelper->pRepo->config; + ASSERT(pIdx->offset == 0 || pIdx->uid == TABLE_UID(pCommitIter->pTable)); + if (tsdbLoadCompInfo(pHelper, NULL) < 0) return -1; - ASSERT(helperHasState(pHelper, TSDB_HELPER_IDX_LOAD)); - SCompIdx *pIdx = pHelper->pCompIdx + pHelper->tableInfo.tid; // for change purpose + while (true) { + ASSERT(blkIdx <= pIdx->numOfBlocks); + TSKEY keyFirst = tsdbNextIterKey(pCommitIter->pIter); + if (keyFirst < 0 || keyFirst > maxKey) break; // iter over - // Load the SCompInfo part if neccessary - ASSERT(helperHasState(pHelper, TSDB_HELPER_TABLE_SET)); - if (tsdbLoadCompInfo(pHelper, NULL) < 0) goto _err; - - if (pIdx->offset == 0 || (!pIdx->hasLast && keyFirst > pIdx->maxKey)) { // Just append as a super block - ASSERT(pHelper->hasOldLastBlock == false); - rowsToWrite = pDataCols->numOfRows; - SFile *pWFile = NULL; - bool isLast = false; - - if (rowsToWrite >= pCfg->minRowsPerFileBlock) { - pWFile = &(pHelper->files.dataF); + if (pIdx->len <= 0 || keyFirst > pIdx->maxKey) { + if (tsdbProcessAppendCommit(pHelper, pCommitIter, pDataCols, maxKey) < 0) return -1; + blkIdx = pIdx->numOfBlocks; } else { - isLast = true; - pWFile = (pHelper->files.nLastF.fd > 0) ? &(pHelper->files.nLastF) : &(pHelper->files.lastF); - } - - if (tsdbWriteBlockToFile(pHelper, pWFile, pDataCols, rowsToWrite, &compBlock, isLast, true) < 0) goto _err; - - if (tsdbInsertSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks) < 0) goto _err; - } else { // (Has old data) AND ((has last block) OR (key overlap)), need to merge the block - SCompBlock *pCompBlock = taosbsearch((void *)(&keyFirst), (void *)(pHelper->pCompInfo->blocks), pIdx->numOfBlocks, - sizeof(SCompBlock), compareKeyBlock, TD_GE); - - int blkIdx = (pCompBlock == NULL) ? (pIdx->numOfBlocks - 1) : (pCompBlock - pHelper->pCompInfo->blocks); - - if (pCompBlock == NULL) { // No key overlap, must has last block, just merge with the last block - ASSERT(pIdx->hasLast && pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last); - rowsToWrite = tsdbMergeDataWithBlock(pHelper, blkIdx, pDataCols); - if (rowsToWrite < 0) goto _err; - } else { // Has key overlap - - if (compareKeyBlock((void *)(&keyFirst), (void *)pCompBlock) == 0) { - // Key overlap with the block, must merge with the block - - rowsToWrite = tsdbMergeDataWithBlock(pHelper, blkIdx, pDataCols); - if (rowsToWrite < 0) goto _err; - } else { // Save as a super block in the middle - rowsToWrite = tsdbGetRowsInRange(pDataCols, 0, pCompBlock->keyFirst - 1); - ASSERT(rowsToWrite > 0); - if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.dataF), pDataCols, rowsToWrite, &compBlock, false, true) < 0) - goto _err; - if (tsdbInsertSuperBlock(pHelper, &compBlock, blkIdx) < 0) goto _err; - } + if (tsdbProcessMergeCommit(pHelper, pCommitIter, pDataCols, maxKey, &blkIdx) < 0) return -1; } } - return rowsToWrite; - -_err: - return -1; + return 0; } int tsdbMoveLastBlockIfNeccessary(SRWHelper *pHelper) { @@ -310,29 +272,42 @@ int tsdbMoveLastBlockIfNeccessary(SRWHelper *pHelper) { ASSERT(helperType(pHelper) == TSDB_WRITE_HELPER); SCompIdx * pIdx = pHelper->pCompIdx + pHelper->tableInfo.tid; - SCompBlock compBlock; - if ((pHelper->files.nLastF.fd > 0) && (pHelper->hasOldLastBlock)) { + SCompBlock compBlock = {0}; + if (TSDB_NLAST_FILE_OPENED(pHelper) && (pHelper->hasOldLastBlock)) { if (tsdbLoadCompInfo(pHelper, NULL) < 0) return -1; - SCompBlock *pCompBlock = pHelper->pCompInfo->blocks + pIdx->numOfBlocks - 1; + SCompBlock *pCompBlock = blockAtIdx(pHelper, pIdx->numOfBlocks - 1); ASSERT(pCompBlock->last); if (pCompBlock->numOfSubBlocks > 1) { - if (tsdbLoadBlockData(pHelper, blockAtIdx(pHelper, pIdx->numOfBlocks - 1), NULL) < 0) return -1; - ASSERT(pHelper->pDataCols[0]->numOfRows > 0 && pHelper->pDataCols[0]->numOfRows < pCfg->minRowsPerFileBlock); - if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.nLastF), pHelper->pDataCols[0], - pHelper->pDataCols[0]->numOfRows, &compBlock, true, true) < 0) + if (tsdbLoadBlockData(pHelper, pCompBlock, NULL) < 0) return -1; + ASSERT(pHelper->pDataCols[0]->numOfRows == pCompBlock->numOfRows && + pHelper->pDataCols[0]->numOfRows < pCfg->minRowsPerFileBlock); + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.nLastF), pHelper->pDataCols[0], &compBlock, true, true) < 0) return -1; if (tsdbUpdateSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks - 1) < 0) return -1; - } else { - if (lseek(pHelper->files.lastF.fd, pCompBlock->offset, SEEK_SET) < 0) return -1; + if (lseek(pHelper->files.lastF.fd, pCompBlock->offset, SEEK_SET) < 0) { + tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.lastF.fname, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } pCompBlock->offset = lseek(pHelper->files.nLastF.fd, 0, SEEK_END); - if (pCompBlock->offset < 0) return -1; + if (pCompBlock->offset < 0) { + tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.nLastF.fname, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } - if (tsendfile(pHelper->files.nLastF.fd, pHelper->files.lastF.fd, NULL, pCompBlock->len) < pCompBlock->len) + if (tsendfile(pHelper->files.nLastF.fd, pHelper->files.lastF.fd, NULL, pCompBlock->len) < pCompBlock->len) { + tsdbError("vgId:%d failed to sendfile from file %s to file %s since %s", REPO_ID(pHelper->pRepo), + pHelper->files.lastF.fname, pHelper->files.nLastF.fname, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); return -1; + } } pHelper->hasOldLastBlock = false; @@ -365,27 +340,30 @@ int tsdbWriteCompInfo(SRWHelper *pHelper) { } } } else { - pHelper->pCompInfo->delimiter = TSDB_FILE_DELIMITER; - pHelper->pCompInfo->uid = pHelper->tableInfo.uid; - pHelper->pCompInfo->checksum = 0; - ASSERT((pIdx->len - sizeof(SCompInfo) - sizeof(TSCKSUM)) % sizeof(SCompBlock) == 0); - taosCalcChecksumAppend(0, (uint8_t *)pHelper->pCompInfo, pIdx->len); - offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END); - if (offset < 0) { - tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.nHeadF.fname, - strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; - } - pIdx->offset = offset; - pIdx->uid = pHelper->tableInfo.uid; - ASSERT(pIdx->offset >= TSDB_FILE_HEAD_SIZE); + if (pIdx->len > 0) { + pHelper->pCompInfo->delimiter = TSDB_FILE_DELIMITER; + pHelper->pCompInfo->uid = pHelper->tableInfo.uid; + pHelper->pCompInfo->checksum = 0; + ASSERT(pIdx->len > sizeof(SCompInfo) + sizeof(TSCKSUM) && + (pIdx->len - sizeof(SCompInfo) - sizeof(TSCKSUM)) % sizeof(SCompBlock) == 0); + taosCalcChecksumAppend(0, (uint8_t *)pHelper->pCompInfo, pIdx->len); + offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END); + if (offset < 0) { + tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.nHeadF.fname, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } + pIdx->offset = offset; + pIdx->uid = pHelper->tableInfo.uid; + ASSERT(pIdx->offset >= TSDB_FILE_HEAD_SIZE); - if (twrite(pHelper->files.nHeadF.fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) { - tsdbError("vgId:%d failed to write %d bytes to file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len, - pHelper->files.nHeadF.fname, strerror(errno)); - terrno = TAOS_SYSTEM_ERROR(errno); - return -1; + if (twrite(pHelper->files.nHeadF.fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) { + tsdbError("vgId:%d failed to write %d bytes to file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len, + pHelper->files.nHeadF.fname, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } } } @@ -397,7 +375,12 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) { ASSERT(helperType(pHelper) == TSDB_WRITE_HELPER); off_t offset = lseek(pHelper->files.nHeadF.fd, 0, SEEK_END); - if (offset < 0) return -1; + if (offset < 0) { + tsdbError("vgId:%d failed to lseek file %s to end since %s", REPO_ID(pHelper->pRepo), pHelper->files.nHeadF.fname, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } SFile *pFile = &(pHelper->files.nHeadF); pFile->info.offset = offset; @@ -409,6 +392,10 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) { int drift = POINTER_DISTANCE(buf, pHelper->pBuffer); if (tsizeof(pHelper->pBuffer) - drift < 128) { pHelper->pBuffer = trealloc(pHelper->pBuffer, tsizeof(pHelper->pBuffer) * 2); + if (pHelper->pBuffer == NULL) { + terrno = TSDB_CODE_TDB_OUT_OF_MEMORY; + return -1; + } } buf = POINTER_SHIFT(pHelper->pBuffer, drift); taosEncodeVariantU32(&buf, i); @@ -419,7 +406,12 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) { int tsize = (char *)buf - (char *)pHelper->pBuffer + sizeof(TSCKSUM); taosCalcChecksumAppend(0, (uint8_t *)pHelper->pBuffer, tsize); - if (twrite(pHelper->files.nHeadF.fd, (void *)pHelper->pBuffer, tsize) < tsize) return -1; + if (twrite(pHelper->files.nHeadF.fd, (void *)pHelper->pBuffer, tsize) < tsize) { + tsdbError("vgId:%d failed to write %d bytes to file %s since %s", REPO_ID(pHelper->pRepo), tsize, + pHelper->files.nHeadF.fname, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } pFile->info.len = tsize; return 0; } @@ -496,11 +488,29 @@ int tsdbLoadCompInfo(SRWHelper *pHelper, void *target) { if (!helperHasState(pHelper, TSDB_HELPER_INFO_LOAD)) { if (pIdx->offset > 0) { - if (lseek(fd, pIdx->offset, SEEK_SET) < 0) return -1; + ASSERT(pIdx->uid == pHelper->tableInfo.uid); + if (lseek(fd, pIdx->offset, SEEK_SET) < 0) { + tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pHelper->files.headF.fname, + strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } pHelper->pCompInfo = trealloc((void *)pHelper->pCompInfo, pIdx->len); - if (tread(fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) return -1; - if (!taosCheckChecksumWhole((uint8_t *)pHelper->pCompInfo, pIdx->len)) return -1; + if (tread(fd, (void *)(pHelper->pCompInfo), pIdx->len) < pIdx->len) { + tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len, + pHelper->files.headF.fname, strerror(errno)); + terrno = TAOS_SYSTEM_ERROR(errno); + return -1; + } + if (!taosCheckChecksumWhole((uint8_t *)pHelper->pCompInfo, pIdx->len)) { + tsdbError("vgId:%d file %s SCompInfo part is corrupted, tid %d uid %" PRIu64, REPO_ID(pHelper->pRepo), + pHelper->files.headF.fname, pHelper->tableInfo.tid, pHelper->tableInfo.uid); + terrno = TSDB_CODE_TDB_FILE_CORRUPTED; + return -1; + } + + ASSERT(pIdx->uid == pHelper->pCompInfo->uid); } helperSetState(pHelper, TSDB_HELPER_INFO_LOAD); @@ -628,13 +638,14 @@ static bool tsdbShouldCreateNewLast(SRWHelper *pHelper) { return false; } -static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDataCols, int rowsToWrite, - SCompBlock *pCompBlock, bool isLast, bool isSuperBlock) { +static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDataCols, SCompBlock *pCompBlock, + bool isLast, bool isSuperBlock) { STsdbCfg * pCfg = &(pHelper->pRepo->config); SCompData *pCompData = (SCompData *)(pHelper->pBuffer); int64_t offset = 0; + int rowsToWrite = pDataCols->numOfRows; - ASSERT(rowsToWrite > 0 && rowsToWrite <= pDataCols->numOfRows && rowsToWrite <= pCfg->maxRowsPerFileBlock); + ASSERT(rowsToWrite > 0 && rowsToWrite <= pCfg->maxRowsPerFileBlock); ASSERT(isLast ? rowsToWrite < pCfg->minRowsPerFileBlock : true); offset = lseek(pFile->fd, 0, SEEK_END); @@ -646,7 +657,7 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa } int nColsNotAllNull = 0; - for (int ncol = 0; ncol < pDataCols->numOfCols; ncol++) { + for (int ncol = 1; ncol < pDataCols->numOfCols; ncol++) { // ncol from 1, we skip the timestamp column SDataCol *pDataCol = pDataCols->cols + ncol; SCompCol *pCompCol = pCompData->cols + nColsNotAllNull; @@ -658,7 +669,7 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa pCompCol->colId = pDataCol->colId; pCompCol->type = pDataCol->type; - if (tDataTypeDesc[pDataCol->type].getStatisFunc && ncol != 0) { + if (tDataTypeDesc[pDataCol->type].getStatisFunc) { (*tDataTypeDesc[pDataCol->type].getStatisFunc)( (TSKEY *)(pDataCols->cols[0].pData), pDataCol->pData, rowsToWrite, &(pCompCol->min), &(pCompCol->max), &(pCompCol->sum), &(pCompCol->minIndex), &(pCompCol->maxIndex), &(pCompCol->numOfNull)); @@ -666,24 +677,24 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa nColsNotAllNull++; } - ASSERT(nColsNotAllNull > 0 && nColsNotAllNull <= pDataCols->numOfCols); + ASSERT(nColsNotAllNull >= 0 && nColsNotAllNull <= pDataCols->numOfCols); // Compress the data if neccessary int tcol = 0; int32_t toffset = 0; int32_t tsize = TSDB_GET_COMPCOL_LEN(nColsNotAllNull); int32_t lsize = tsize; + int32_t keyLen = 0; for (int ncol = 0; ncol < pDataCols->numOfCols; ncol++) { if (tcol >= nColsNotAllNull) break; SDataCol *pDataCol = pDataCols->cols + ncol; SCompCol *pCompCol = pCompData->cols + tcol; - if (pDataCol->colId != pCompCol->colId) continue; - void *tptr = (void *)((char *)pCompData + lsize); - - pCompCol->offset = toffset; + if (ncol != 0 && (pDataCol->colId != pCompCol->colId)) continue; + void *tptr = POINTER_SHIFT(pCompData, lsize); + int32_t flen = 0; // final length int32_t tlen = dataColGetNEleLen(pDataCol, rowsToWrite); if (pCfg->compression) { @@ -695,22 +706,29 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa } } - pCompCol->len = (*(tDataTypeDesc[pDataCol->type].compFunc))((char *)pDataCol->pData, tlen, rowsToWrite, tptr, - tsizeof(pHelper->pBuffer) - lsize, pCfg->compression, - pHelper->compBuffer, tsizeof(pHelper->compBuffer)); + flen = (*(tDataTypeDesc[pDataCol->type].compFunc))((char *)pDataCol->pData, tlen, rowsToWrite, tptr, + tsizeof(pHelper->pBuffer) - lsize, pCfg->compression, + pHelper->compBuffer, tsizeof(pHelper->compBuffer)); } else { - pCompCol->len = tlen; - memcpy(tptr, pDataCol->pData, pCompCol->len); + flen = tlen; + memcpy(tptr, pDataCol->pData, flen); } // Add checksum - ASSERT(pCompCol->len > 0); - pCompCol->len += sizeof(TSCKSUM); - taosCalcChecksumAppend(0, (uint8_t *)tptr, pCompCol->len); + ASSERT(flen > 0); + flen += sizeof(TSCKSUM); + taosCalcChecksumAppend(0, (uint8_t *)tptr, flen); + + if (ncol != 0) { + pCompCol->offset = toffset; + pCompCol->len = flen; + tcol++; + } else { + keyLen = flen; + } - toffset += pCompCol->len; - lsize += pCompCol->len; - tcol++; + toffset += flen; + lsize += flen; } pCompData->delimiter = TSDB_FILE_DELIMITER; @@ -732,14 +750,14 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa pCompBlock->offset = offset; pCompBlock->algorithm = pCfg->compression; pCompBlock->numOfRows = rowsToWrite; - pCompBlock->sversion = pHelper->tableInfo.sversion; - pCompBlock->len = (int32_t)lsize; + pCompBlock->len = lsize; + pCompBlock->keyLen = keyLen; pCompBlock->numOfSubBlocks = isSuperBlock ? 1 : 0; pCompBlock->numOfCols = nColsNotAllNull; pCompBlock->keyFirst = dataColsKeyFirst(pDataCols); pCompBlock->keyLast = dataColsKeyAt(pDataCols, rowsToWrite - 1); - tsdbTrace("vgId:%d tid:%d a block of data is written to file %s, offset %" PRId64 + tsdbDebug("vgId:%d tid:%d a block of data is written to file %s, offset %" PRId64 " numOfRows %d len %d numOfCols %" PRId16 " keyFirst %" PRId64 " keyLast %" PRId64, REPO_ID(helperRepo(pHelper)), pHelper->tableInfo.tid, pFile->fname, (int64_t)(pCompBlock->offset), (int)(pCompBlock->numOfRows), pCompBlock->len, pCompBlock->numOfCols, pCompBlock->keyFirst, @@ -764,136 +782,6 @@ static int compareKeyBlock(const void *arg1, const void *arg2) { return 0; } -static int tsdbMergeDataWithBlock(SRWHelper *pHelper, int blkIdx, SDataCols *pDataCols) { - // TODO: set pHelper->hasOldBlock - int rowsWritten = 0; - SCompBlock compBlock = {0}; - STsdbCfg * pCfg = &pHelper->pRepo->config; - - ASSERT(pDataCols->numOfRows > 0); - TSKEY keyFirst = dataColsKeyFirst(pDataCols); - - SCompIdx *pIdx = pHelper->pCompIdx + pHelper->tableInfo.tid; - ASSERT(blkIdx < pIdx->numOfBlocks); - - // SCompBlock *pCompBlock = pHelper->pCompInfo->blocks + blkIdx; - ASSERT(blockAtIdx(pHelper, blkIdx)->numOfSubBlocks >= 1); - ASSERT(keyFirst >= blockAtIdx(pHelper, blkIdx)->keyFirst); - // ASSERT(compareKeyBlock((void *)&keyFirst, (void *)pCompBlock) == 0); - - if (keyFirst > blockAtIdx(pHelper, blkIdx)->keyLast) { // Merge with the last block by append - ASSERT(blockAtIdx(pHelper, blkIdx)->numOfRows < pCfg->minRowsPerFileBlock && blkIdx == pIdx->numOfBlocks - 1); - int defaultRowsToWrite = pCfg->maxRowsPerFileBlock * 4 / 5; // TODO: make a interface - - rowsWritten = MIN((defaultRowsToWrite - blockAtIdx(pHelper, blkIdx)->numOfRows), pDataCols->numOfRows); - if ((blockAtIdx(pHelper, blkIdx)->numOfSubBlocks < TSDB_MAX_SUBBLOCKS) && - (blockAtIdx(pHelper, blkIdx)->numOfRows + rowsWritten < pCfg->minRowsPerFileBlock) && - (pHelper->files.nLastF.fd) < 0) { - if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.lastF), pDataCols, rowsWritten, &compBlock, true, false) < 0) - goto _err; - if (tsdbAddSubBlock(pHelper, &compBlock, blkIdx, rowsWritten) < 0) goto _err; - } else { - // Load - if (tsdbLoadBlockData(pHelper, blockAtIdx(pHelper, blkIdx), NULL) < 0) goto _err; - ASSERT(pHelper->pDataCols[0]->numOfRows <= blockAtIdx(pHelper, blkIdx)->numOfRows); - // Merge - if (tdMergeDataCols(pHelper->pDataCols[0], pDataCols, rowsWritten) < 0) goto _err; - // Write - SFile *pWFile = NULL; - bool isLast = false; - if (pHelper->pDataCols[0]->numOfRows >= pCfg->minRowsPerFileBlock) { - pWFile = &(pHelper->files.dataF); - } else { - isLast = true; - pWFile = (pHelper->files.nLastF.fd > 0) ? &(pHelper->files.nLastF) : &(pHelper->files.lastF); - } - if (tsdbWriteBlockToFile(pHelper, pWFile, pHelper->pDataCols[0], pHelper->pDataCols[0]->numOfRows, &compBlock, - isLast, true) < 0) - goto _err; - if (tsdbUpdateSuperBlock(pHelper, &compBlock, blkIdx) < 0) goto _err; - } - - ASSERT(pHelper->hasOldLastBlock); - pHelper->hasOldLastBlock = false; - } else { - // Key must overlap with the block - ASSERT(keyFirst <= blockAtIdx(pHelper, blkIdx)->keyLast); - - TSKEY keyLimit = (blkIdx == pIdx->numOfBlocks - 1) ? INT64_MAX : blockAtIdx(pHelper, blkIdx + 1)->keyFirst - 1; - - // rows1: number of rows must merge in this block - int rows1 = - tsdbGetRowsInRange(pDataCols, blockAtIdx(pHelper, blkIdx)->keyFirst, blockAtIdx(pHelper, blkIdx)->keyLast); - // rows2: max number of rows the block can have more - int rows2 = pCfg->maxRowsPerFileBlock - blockAtIdx(pHelper, blkIdx)->numOfRows; - // rows3: number of rows between this block and the next block - int rows3 = tsdbGetRowsInRange(pDataCols, blockAtIdx(pHelper, blkIdx)->keyFirst, keyLimit); - - ASSERT(rows3 >= rows1); - - if ((rows2 >= rows1) && (blockAtIdx(pHelper, blkIdx)->numOfSubBlocks < TSDB_MAX_SUBBLOCKS) && - ((!blockAtIdx(pHelper, blkIdx)->last) || - ((rows1 + blockAtIdx(pHelper, blkIdx)->numOfRows < pCfg->minRowsPerFileBlock) && - (pHelper->files.nLastF.fd < 0)))) { - rowsWritten = rows1; - bool isLast = false; - SFile *pFile = NULL; - - if (blockAtIdx(pHelper, blkIdx)->last) { - isLast = true; - pFile = &(pHelper->files.lastF); - } else { - pFile = &(pHelper->files.dataF); - } - - if (tsdbWriteBlockToFile(pHelper, pFile, pDataCols, rows1, &compBlock, isLast, false) < 0) goto _err; - if (tsdbAddSubBlock(pHelper, &compBlock, blkIdx, rowsWritten) < 0) goto _err; - } else { // Load-Merge-Write - // Load - if (tsdbLoadBlockData(pHelper, blockAtIdx(pHelper, blkIdx), NULL) < 0) goto _err; - if (blockAtIdx(pHelper, blkIdx)->last) pHelper->hasOldLastBlock = false; - - rowsWritten = rows3; - - int iter1 = 0; // iter over pHelper->pDataCols[0] - int iter2 = 0; // iter over pDataCols - int round = 0; - // tdResetDataCols(pHelper->pDataCols[1]); - while (true) { - if (iter1 >= pHelper->pDataCols[0]->numOfRows && iter2 >= rows3) break; - tdMergeTwoDataCols(pHelper->pDataCols[1], pHelper->pDataCols[0], &iter1, pHelper->pDataCols[0]->numOfRows, - pDataCols, &iter2, rowsWritten, pCfg->maxRowsPerFileBlock * 4 / 5); - ASSERT(pHelper->pDataCols[1]->numOfRows > 0); - if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.dataF), pHelper->pDataCols[1], - pHelper->pDataCols[1]->numOfRows, &compBlock, false, true) < 0) - goto _err; - if (round == 0) { - tsdbUpdateSuperBlock(pHelper, &compBlock, blkIdx); - } else { - tsdbInsertSuperBlock(pHelper, &compBlock, blkIdx); - } - round++; - blkIdx++; - } - } - } - - return rowsWritten; - -_err: - return -1; -} - -static int compTSKEY(const void *key1, const void *key2) { - if (*(TSKEY *)key1 > *(TSKEY *)key2) { - return 1; - } else if (*(TSKEY *)key1 == *(TSKEY *)key2) { - return 0; - } else { - return -1; - } -} - static int tsdbAdjustInfoSizeIfNeeded(SRWHelper *pHelper, size_t esize) { if (tsizeof((void *)pHelper->pCompInfo) <= esize) { size_t tsize = esize + sizeof(SCompBlock) * 16; @@ -911,7 +799,7 @@ static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int ASSERT(pCompBlock->numOfSubBlocks == 1); // Adjust memory if no more room - if (pIdx->len == 0) pIdx->len = sizeof(SCompData) + sizeof(TSCKSUM); + if (pIdx->len == 0) pIdx->len = sizeof(SCompInfo) + sizeof(TSCKSUM); if (tsdbAdjustInfoSizeIfNeeded(pHelper, pIdx->len + sizeof(SCompInfo)) < 0) goto _err; // Change the offset @@ -925,22 +813,22 @@ static int tsdbInsertSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int if (tsize > 0) { ASSERT(sizeof(SCompInfo) + sizeof(SCompBlock) * (blkIdx + 1) < tsizeof(pHelper->pCompInfo)); ASSERT(sizeof(SCompInfo) + sizeof(SCompBlock) * (blkIdx + 1) + tsize <= tsizeof(pHelper->pCompInfo)); - memmove((void *)((char *)pHelper->pCompInfo + sizeof(SCompInfo) + sizeof(SCompBlock) * (blkIdx + 1)), - (void *)((char *)pHelper->pCompInfo + sizeof(SCompInfo) + sizeof(SCompBlock) * blkIdx), tsize); + memmove(POINTER_SHIFT(pHelper->pCompInfo, sizeof(SCompInfo) + sizeof(SCompBlock) * (blkIdx + 1)), + POINTER_SHIFT(pHelper->pCompInfo, sizeof(SCompInfo) + sizeof(SCompBlock) * blkIdx), tsize); } pHelper->pCompInfo->blocks[blkIdx] = *pCompBlock; pIdx->numOfBlocks++; pIdx->len += sizeof(SCompBlock); ASSERT(pIdx->len <= tsizeof(pHelper->pCompInfo)); - pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].keyLast; - pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last; + pIdx->maxKey = blockAtIdx(pHelper, pIdx->numOfBlocks - 1)->keyLast; + pIdx->hasLast = blockAtIdx(pHelper, pIdx->numOfBlocks - 1)->last; if (pIdx->numOfBlocks > 1) { ASSERT(pHelper->pCompInfo->blocks[0].keyLast < pHelper->pCompInfo->blocks[1].keyFirst); } - tsdbTrace("vgId:%d tid:%d a super block is inserted at index %d", REPO_ID(pHelper->pRepo), pHelper->tableInfo.tid, + tsdbDebug("vgId:%d tid:%d a super block is inserted at index %d", REPO_ID(pHelper->pRepo), pHelper->tableInfo.tid, blkIdx); return 0; @@ -1048,8 +936,8 @@ static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int if (pSCompBlock->numOfSubBlocks > 1) { size_t tsize = pIdx->len - (pSCompBlock->offset + pSCompBlock->len); if (tsize > 0) { - memmove((void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset), - (void *)((char *)(pHelper->pCompInfo) + pSCompBlock->offset + pSCompBlock->len), tsize); + memmove(POINTER_SHIFT(pHelper->pCompInfo, pSCompBlock->offset), + POINTER_SHIFT(pHelper->pCompInfo, pSCompBlock->offset + pSCompBlock->len), tsize); } for (int i = blkIdx + 1; i < pIdx->numOfBlocks; i++) { @@ -1062,8 +950,8 @@ static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int *pSCompBlock = *pCompBlock; - pIdx->maxKey = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].keyLast; - pIdx->hasLast = pHelper->pCompInfo->blocks[pIdx->numOfBlocks - 1].last; + pIdx->maxKey = blockAtIdx(pHelper, pIdx->numOfBlocks - 1)->keyLast; + pIdx->hasLast = blockAtIdx(pHelper, pIdx->numOfBlocks - 1)->last; tsdbDebug("vgId:%d tid:%d a super block is updated at index %d", REPO_ID(pHelper->pRepo), pHelper->tableInfo.tid, blkIdx); @@ -1071,30 +959,6 @@ static int tsdbUpdateSuperBlock(SRWHelper *pHelper, SCompBlock *pCompBlock, int return 0; } -// Get the number of rows in range [minKey, maxKey] -static int tsdbGetRowsInRange(SDataCols *pDataCols, TSKEY minKey, TSKEY maxKey) { - if (pDataCols->numOfRows == 0) return 0; - - ASSERT(minKey <= maxKey); - TSKEY keyFirst = dataColsKeyFirst(pDataCols); - TSKEY keyLast = dataColsKeyLast(pDataCols); - ASSERT(keyFirst <= keyLast); - - if (minKey > keyLast || maxKey < keyFirst) return 0; - - void *ptr1 = taosbsearch((void *)&minKey, (void *)pDataCols->cols[0].pData, pDataCols->numOfRows, sizeof(TSKEY), - compTSKEY, TD_GE); - ASSERT(ptr1 != NULL); - - void *ptr2 = taosbsearch((void *)&maxKey, (void *)pDataCols->cols[0].pData, pDataCols->numOfRows, sizeof(TSKEY), - compTSKEY, TD_LE); - ASSERT(ptr2 != NULL); - - if ((TSKEY *)ptr2 - (TSKEY *)ptr1 < 0) return 0; - - return ((TSKEY *)ptr2 - (TSKEY *)ptr1) + 1; -} - static void tsdbResetHelperFileImpl(SRWHelper *pHelper) { memset((void *)&pHelper->files, 0, sizeof(pHelper->files)); pHelper->files.fid = -1; @@ -1250,7 +1114,8 @@ static int tsdbLoadColData(SRWHelper *pHelper, SFile *pFile, SCompBlock *pCompBl return -1; } - if (lseek(pFile->fd, pCompCol->offset, SEEK_SET) < 0) { + int64_t offset = pCompBlock->offset + TSDB_GET_COMPCOL_LEN(pCompBlock->numOfCols) + pCompCol->offset; + if (lseek(pFile->fd, offset, SEEK_SET) < 0) { tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pFile->fname, strerror(errno)); terrno = TAOS_SYSTEM_ERROR(errno); return -1; @@ -1276,10 +1141,15 @@ static int tsdbLoadColData(SRWHelper *pHelper, SFile *pFile, SCompBlock *pCompBl static int tsdbLoadBlockDataColsImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDataCols *pDataCols, int16_t *colIds, int numOfColIds) { ASSERT(pCompBlock->numOfSubBlocks <= 1); + ASSERT(colIds[0] == 0); - SFile * pFile = (pCompBlock->last) ? &(pHelper->files.lastF) : &(pHelper->files.dataF); + SFile * pFile = (pCompBlock->last) ? &(pHelper->files.lastF) : &(pHelper->files.dataF); + SCompCol compCol = {0}; - if (tsdbLoadCompData(pHelper, pCompBlock, NULL) < 0) goto _err; + // If only load timestamp column, no need to load SCompData part + if (numOfColIds > 1 && tsdbLoadCompData(pHelper, pCompBlock, NULL) < 0) goto _err; + + pDataCols->numOfRows = pCompBlock->numOfRows; int dcol = 0; int ccol = 0; @@ -1298,23 +1168,31 @@ static int tsdbLoadBlockDataColsImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, ASSERT(pDataCol->colId == colId); - while (ccol < pCompBlock->numOfCols) { - pCompCol = &pHelper->pCompData->cols[ccol]; - if (pCompCol->colId >= colId) break; - ccol++; - } + if (colId == 0) { // load the key row + compCol.colId = colId; + compCol.len = pCompBlock->keyLen; + compCol.type = pDataCol->type; + compCol.offset = TSDB_KEY_COL_OFFSET; + pCompCol = &compCol; + } else { // load non-key rows + while (ccol < pCompBlock->numOfCols) { + pCompCol = &pHelper->pCompData->cols[ccol]; + if (pCompCol->colId >= colId) break; + ccol++; + } - if (ccol >= pCompBlock->numOfCols || pCompCol->colId > colId) { - dataColSetNEleNull(pDataCol, pCompBlock->numOfRows, pDataCols->maxPoints); - dcol++; - continue; - } + if (ccol >= pCompBlock->numOfCols || pCompCol->colId > colId) { + dataColSetNEleNull(pDataCol, pCompBlock->numOfRows, pDataCols->maxPoints); + dcol++; + continue; + } - ASSERT(pCompCol->colId == pDataCol->colId); + ASSERT(pCompCol->colId == pDataCol->colId); + } if (tsdbLoadColData(pHelper, pFile, pCompBlock, pCompCol, pDataCol) < 0) goto _err; dcol++; - ccol++; + if (colId != 0) ccol++; } return 0; @@ -1362,8 +1240,8 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa pDataCols->numOfRows = pCompBlock->numOfRows; // Recover the data - int ccol = 0; - int dcol = 0; + int ccol = 0; // loop iter for SCompCol object + int dcol = 0; // loop iter for SDataCols object while (dcol < pDataCols->numOfCols) { SDataCol *pDataCol = &(pDataCols->cols[dcol]); if (ccol >= pCompData->numOfCols) { @@ -1373,12 +1251,23 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa continue; } - SCompCol *pCompCol = &(pCompData->cols[ccol]); + int16_t tcolId = 0; + int32_t toffset = TSDB_KEY_COL_OFFSET; + int32_t tlen = pCompBlock->keyLen; + + if (dcol != 0) { + SCompCol *pCompCol = &(pCompData->cols[ccol]); + tcolId = pCompCol->colId; + toffset = pCompCol->offset; + tlen = pCompCol->len; + } else { + ASSERT(pDataCol->colId == tcolId); + } - if (pCompCol->colId == pDataCol->colId) { + if (tcolId == pDataCol->colId) { if (pCompBlock->algorithm == TWO_STAGE_COMP) { int zsize = pDataCol->bytes * pCompBlock->numOfRows + COMP_OVERFLOW_BYTES; - if (pCompCol->type == TSDB_DATA_TYPE_BINARY || pCompCol->type == TSDB_DATA_TYPE_NCHAR) { + if (pDataCol->type == TSDB_DATA_TYPE_BINARY || pDataCol->type == TSDB_DATA_TYPE_NCHAR) { zsize += (sizeof(VarDataLenT) * pCompBlock->numOfRows); } pHelper->compBuffer = trealloc(pHelper->compBuffer, zsize); @@ -1387,16 +1276,16 @@ static int tsdbLoadBlockDataImpl(SRWHelper *pHelper, SCompBlock *pCompBlock, SDa goto _err; } } - if (tsdbCheckAndDecodeColumnData(pDataCol, (char *)pCompData + tsize + pCompCol->offset, pCompCol->len, - pCompBlock->algorithm, pCompBlock->numOfRows, pDataCols->maxPoints, - pHelper->compBuffer, tsizeof(pHelper->compBuffer)) < 0) { - tsdbError("vgId:%d file %s is broken at column %d offset %" PRId64, REPO_ID(pHelper->pRepo), pFile->fname, - pCompCol->colId, (int64_t)pCompCol->offset); + if (tsdbCheckAndDecodeColumnData(pDataCol, (char *)pCompData + tsize + toffset, tlen, pCompBlock->algorithm, + pCompBlock->numOfRows, pDataCols->maxPoints, pHelper->compBuffer, + tsizeof(pHelper->compBuffer)) < 0) { + tsdbError("vgId:%d file %s is broken at column %d block offset %" PRId64 " column offset %d", + REPO_ID(pHelper->pRepo), pFile->fname, tcolId, (int64_t)pCompBlock->offset, toffset); goto _err; } + if (dcol != 0) ccol++; dcol++; - ccol++; - } else if (pCompCol->colId < pDataCol->colId) { + } else if (tcolId < pDataCol->colId) { ccol++; } else { // Set current column as NULL and forward @@ -1442,3 +1331,250 @@ static void *tsdbDecodeSCompIdx(void *buf, SCompIdx *pIdx) { return buf; } + +static int tsdbProcessAppendCommit(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols *pDataCols, TSKEY maxKey) { + STsdbCfg * pCfg = &(pHelper->pRepo->config); + STable * pTable = pCommitIter->pTable; + SCompIdx * pIdx = pHelper->pCompIdx + TABLE_TID(pTable); + TSKEY keyFirst = tsdbNextIterKey(pCommitIter->pIter); + int defaultRowsInBlock = pCfg->maxRowsPerFileBlock * 4 / 5; + SCompBlock compBlock = {0}; + + ASSERT(pIdx->len <= 0 || keyFirst > pIdx->maxKey); + if (pIdx->hasLast) { // append to with last block + ASSERT(pIdx->len > 0); + SCompBlock *pCompBlock = blockAtIdx(pHelper, pIdx->numOfBlocks - 1); + ASSERT(pCompBlock->last && pCompBlock->numOfRows < pCfg->minRowsPerFileBlock); + tdResetDataCols(pDataCols); + int rowsRead = tsdbLoadDataFromCache(pTable, pCommitIter->pIter, maxKey, defaultRowsInBlock - pCompBlock->numOfRows, + pDataCols, NULL, 0); + ASSERT(rowsRead > 0 && rowsRead == pDataCols->numOfRows); + if (rowsRead + pCompBlock->numOfRows < pCfg->minRowsPerFileBlock && + pCompBlock->numOfSubBlocks < TSDB_MAX_SUBBLOCKS && !TSDB_NLAST_FILE_OPENED(pHelper)) { + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.lastF), pDataCols, &compBlock, true, false) < 0) return -1; + if (tsdbAddSubBlock(pHelper, &compBlock, pIdx->numOfBlocks - 1, rowsRead) < 0) return -1; + } else { + if (tsdbLoadBlockData(pHelper, pCompBlock, NULL) < 0) return -1; + ASSERT(pHelper->pDataCols[0]->numOfRows == pCompBlock->numOfRows); + + if (tdMergeDataCols(pHelper->pDataCols[0], pDataCols, pDataCols->numOfRows) < 0) return -1; + ASSERT(pHelper->pDataCols[0]->numOfRows == pCompBlock->numOfRows + pDataCols->numOfRows); + + if (tsdbWriteBlockToProperFile(pHelper, pHelper->pDataCols[0], &compBlock) < 0) return -1; + if (tsdbUpdateSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks - 1) < 0) return -1; + } + + if (pHelper->hasOldLastBlock) pHelper->hasOldLastBlock = false; + } else { + ASSERT(!pHelper->hasOldLastBlock); + tdResetDataCols(pDataCols); + int rowsRead = tsdbLoadDataFromCache(pTable, pCommitIter->pIter, maxKey, defaultRowsInBlock, pDataCols, NULL, 0); + ASSERT(rowsRead > 0 && rowsRead == pDataCols->numOfRows); + + if (tsdbWriteBlockToProperFile(pHelper, pDataCols, &compBlock) < 0) return -1; + if (tsdbInsertSuperBlock(pHelper, &compBlock, pIdx->numOfBlocks) < 0) return -1; + } + + return 0; +} + +static int tsdbProcessMergeCommit(SRWHelper *pHelper, SCommitIter *pCommitIter, SDataCols *pDataCols, TSKEY maxKey, + int *blkIdx) { + STsdbCfg * pCfg = &(pHelper->pRepo->config); + STable * pTable = pCommitIter->pTable; + SCompIdx * pIdx = pHelper->pCompIdx + TABLE_TID(pTable); + SCompBlock compBlock = {0}; + TSKEY keyFirst = tsdbNextIterKey(pCommitIter->pIter); + int defaultRowsInBlock = pCfg->maxRowsPerFileBlock * 4 / 5; + SDataCols *pDataCols0 = pHelper->pDataCols[0]; + + SSkipListIterator slIter = {0}; + + ASSERT(keyFirst <= pIdx->maxKey); + + SCompBlock *pCompBlock = taosbsearch((void *)(&keyFirst), (void *)blockAtIdx(pHelper, *blkIdx), + pIdx->numOfBlocks - *blkIdx, sizeof(SCompBlock), compareKeyBlock, TD_GE); + ASSERT(pCompBlock != NULL); + int tblkIdx = TSDB_GET_COMPBLOCK_IDX(pHelper, pCompBlock); + + if (pCompBlock->last) { + ASSERT(pCompBlock->numOfRows < pCfg->minRowsPerFileBlock && tblkIdx == pIdx->numOfBlocks - 1); + int16_t colId = 0; + slIter = *(pCommitIter->pIter); + if (tsdbLoadBlockDataCols(pHelper, pCompBlock, NULL, &colId, 1) < 0) return -1; + ASSERT(pDataCols0->numOfRows == pCompBlock->numOfRows); + + int rows1 = defaultRowsInBlock - pCompBlock->numOfRows; + int rows2 = + tsdbLoadDataFromCache(pTable, &slIter, maxKey, rows1, NULL, pDataCols0->cols[0].pData, pDataCols0->numOfRows); + if (rows2 == 0) { // all data filtered out + *(pCommitIter->pIter) = slIter; + } else { + if (rows1 + rows2 < pCfg->minRowsPerFileBlock && pCompBlock->numOfSubBlocks < TSDB_MAX_SUBBLOCKS && + !TSDB_NLAST_FILE_OPENED(pHelper)) { + tdResetDataCols(pDataCols); + int rowsRead = tsdbLoadDataFromCache(pTable, pCommitIter->pIter, maxKey, rows1, pDataCols, + pDataCols0->cols[0].pData, pDataCols0->numOfRows); + ASSERT(rowsRead == rows2 && rowsRead == pDataCols->numOfRows); + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.lastF), pDataCols, &compBlock, true, false) < 0) return -1; + if (tsdbAddSubBlock(pHelper, &compBlock, tblkIdx, rowsRead) < 0) return -1; + tblkIdx++; + } else { + if (tsdbLoadBlockData(pHelper, pCompBlock, NULL) < 0) return -1; + int round = 0; + int dIter = 0; + while (true) { + tdResetDataCols(pDataCols); + int rowsRead = + tsdbLoadAndMergeFromCache(pDataCols0, &dIter, pCommitIter, pDataCols, maxKey, defaultRowsInBlock); + if (rowsRead == 0) break; + + if (tsdbWriteBlockToProperFile(pHelper, pDataCols, &compBlock) < 0) return -1; + if (round == 0) { + if (tsdbUpdateSuperBlock(pHelper, &compBlock, tblkIdx) < 0) return -1; + } else { + if (tsdbInsertSuperBlock(pHelper, &compBlock, tblkIdx) < 0) return -1; + } + + tblkIdx++; + round++; + } + } + if (pHelper->hasOldLastBlock) pHelper->hasOldLastBlock = false; + } + } else { + TSKEY keyLimit = (tblkIdx == pIdx->numOfBlocks - 1) ? maxKey : (pCompBlock[1].keyFirst - 1); + TSKEY blkKeyFirst = pCompBlock->keyFirst; + TSKEY blkKeyLast = pCompBlock->keyLast; + + if (keyFirst < blkKeyFirst) { + while (true) { + tdResetDataCols(pDataCols); + int rowsRead = + tsdbLoadDataFromCache(pTable, pCommitIter->pIter, blkKeyFirst - 1, defaultRowsInBlock, pDataCols, NULL, 0); + if (rowsRead == 0) break; + + ASSERT(rowsRead == pDataCols->numOfRows); + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.dataF), pDataCols, &compBlock, false, true) < 0) return -1; + if (tsdbInsertSuperBlock(pHelper, &compBlock, tblkIdx) < 0) return -1; + tblkIdx++; + } + } else { + ASSERT(keyFirst <= blkKeyLast); + int16_t colId = 0; + if (tsdbLoadBlockDataCols(pHelper, pCompBlock, NULL, &colId, 1) < 0) return -1; + ASSERT(pDataCols0->numOfRows == pCompBlock->numOfRows); + + slIter = *(pCommitIter->pIter); + int rows1 = (pCfg->maxRowsPerFileBlock - pCompBlock->numOfRows); + int rows2 = tsdbLoadDataFromCache(pTable, &slIter, blkKeyLast, INT_MAX, NULL, pDataCols0->cols[0].pData, + pDataCols0->numOfRows); + + if (rows2 == 0) { // all filtered out + *(pCommitIter->pIter) = slIter; + } else { + int rows3 = tsdbLoadDataFromCache(pTable, &slIter, keyLimit, INT_MAX, NULL, NULL, 0) + rows2; + ASSERT(rows3 >= rows2); + + if (pCompBlock->numOfSubBlocks < TSDB_MAX_SUBBLOCKS && rows1 >= rows2) { + int rows = (rows1 >= rows3) ? rows3 : rows2; + tdResetDataCols(pDataCols); + int rowsRead = tsdbLoadDataFromCache(pTable, pCommitIter->pIter, keyLimit, rows, pDataCols, + pDataCols0->cols[0].pData, pDataCols0->numOfRows); + ASSERT(rowsRead == rows && rowsRead == pDataCols->numOfRows); + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.dataF), pDataCols, &compBlock, false, false) < 0) + return -1; + if (tsdbAddSubBlock(pHelper, &compBlock, tblkIdx, rowsRead) < 0) return -1; + tblkIdx++; + } else { + if (tsdbLoadBlockData(pHelper, pCompBlock, NULL) < 0) return -1; + int round = 0; + int dIter = 0; + while (true) { + int rowsRead = + tsdbLoadAndMergeFromCache(pDataCols0, &dIter, pCommitIter, pDataCols, keyLimit, defaultRowsInBlock); + if (rowsRead == 0) break; + + if (tsdbWriteBlockToFile(pHelper, &(pHelper->files.dataF), pDataCols, &compBlock, false, true) < 0) + return -1; + if (round == 0) { + if (tsdbUpdateSuperBlock(pHelper, &compBlock, tblkIdx) < 0) return -1; + } else { + if (tsdbInsertSuperBlock(pHelper, &compBlock, tblkIdx) < 0) return -1; + } + + round++; + tblkIdx++; + } + } + } + } + } + + *blkIdx = tblkIdx; + return 0; +} + +static int tsdbLoadAndMergeFromCache(SDataCols *pDataCols, int *iter, SCommitIter *pCommitIter, SDataCols *pTarget, + TSKEY maxKey, int maxRows) { + int numOfRows = 0; + TSKEY key1 = INT64_MAX; + TSKEY key2 = INT64_MAX; + STSchema *pSchema = NULL; + + ASSERT(maxRows > 0 && dataColsKeyLast(pDataCols) <= maxKey); + tdResetDataCols(pTarget); + + while (true) { + key1 = (*iter >= pDataCols->numOfRows) ? INT64_MAX : dataColsKeyAt(pDataCols, *iter); + SDataRow row = tsdbNextIterRow(pCommitIter->pIter); + key2 = (row == NULL || dataRowKey(row) > maxKey) ? INT64_MAX : dataRowKey(row); + + if (key1 == INT64_MAX && key2 == INT64_MAX) break; + + if (key1 <= key2) { + for (int i = 0; i < pDataCols->numOfCols; i++) { + dataColAppendVal(pTarget->cols + i, tdGetColDataOfRow(pDataCols->cols + i, *iter), pTarget->numOfRows, + pTarget->maxPoints); + } + pTarget->numOfRows++; + (*iter)++; + if (key1 == key2) tSkipListIterNext(pCommitIter->pIter); + } else { + if (pSchema == NULL || schemaVersion(pSchema) != dataRowVersion(row)) { + pSchema = tsdbGetTableSchemaImpl(pCommitIter->pTable, false, false, dataRowVersion(row)); + ASSERT(pSchema != NULL); + } + + tdAppendDataRowToDataCol(row, pSchema, pTarget); + tSkipListIterNext(pCommitIter->pIter); + } + + numOfRows++; + if (numOfRows >= maxRows) break; + ASSERT(numOfRows == pTarget->numOfRows && numOfRows <= pTarget->maxPoints); + } + + return numOfRows; +} + +static int tsdbWriteBlockToProperFile(SRWHelper *pHelper, SDataCols *pDataCols, SCompBlock *pCompBlock) { + STsdbCfg *pCfg = &(pHelper->pRepo->config); + SFile * pFile = NULL; + bool isLast = false; + + ASSERT(pDataCols->numOfRows > 0); + + if (pDataCols->numOfRows >= pCfg->minRowsPerFileBlock) { + pFile = &(pHelper->files.dataF); + } else { + isLast = true; + pFile = TSDB_NLAST_FILE_OPENED(pHelper) ? &(pHelper->files.nLastF) : &(pHelper->files.lastF); + } + + ASSERT(pFile->fd > 0); + + if (tsdbWriteBlockToFile(pHelper, pFile, pDataCols, pCompBlock, isLast, true) < 0) return -1; + + return 0; +} \ No newline at end of file diff --git a/src/tsdb/src/tsdbRead.c b/src/tsdb/src/tsdbRead.c index fee8784b88183b86c2a3a417e697f802f63dcad8..7249e7472cc3fb2edcec2f155cf1367fe45e59d8 100644 --- a/src/tsdb/src/tsdbRead.c +++ b/src/tsdb/src/tsdbRead.c @@ -93,7 +93,7 @@ typedef struct SBlockOrderSupporter { typedef struct SIOCostSummary { int64_t blockLoadTime; int64_t statisInfoLoadTime; - int64_t blockMergeTime; + int64_t checkForNextTime; } SIOCostSummary; typedef struct STsdbQueryHandle { @@ -388,7 +388,7 @@ SDataRow getSDataRowInTableMem(STableCheckInfo* pCheckInfo) { return NULL; } -bool moveToNextRow(STableCheckInfo* pCheckInfo) { +static bool moveToNextRow(STableCheckInfo* pCheckInfo) { bool hasNext = false; if (pCheckInfo->chosen == 0) { if (pCheckInfo->iter != NULL) { @@ -587,22 +587,13 @@ static int32_t getFileCompInfo(STsdbQueryHandle* pQueryHandle, int32_t* numOfBlo .uid = (_checkInfo)->tableId.uid}) - static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo) { STsdbRepo *pRepo = pQueryHandle->pTsdb; - - // TODO refactor - SCompData* data = calloc(1, sizeof(SCompData) + sizeof(SCompCol) * pBlock->numOfCols); - - data->numOfCols = pBlock->numOfCols; - data->uid = pCheckInfo->pTableObj->tableId.uid; - - bool blockLoaded = false; - int64_t st = taosGetTimestampUs(); + bool blockLoaded = false; + int64_t st = taosGetTimestampUs(); if (pCheckInfo->pDataCols == NULL) { STsdbMeta* pMeta = tsdbGetMeta(pRepo); - // TODO pCheckInfo->pDataCols = tdNewDataCols(pMeta->maxRowBytes, pMeta->maxCols, pRepo->config.maxRowsPerFileBlock); } @@ -611,9 +602,10 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo tdInitDataCols(pQueryHandle->rhelper.pDataCols[0], pSchema); tdInitDataCols(pQueryHandle->rhelper.pDataCols[1], pSchema); -// int16_t* colIds = pQueryHandle->defaultLoadColumn->pData; -// int32_t ret = tsdbLoadBlockDataCols(&(pQueryHandle->rhelper), pBlock, pCheckInfo->pCompInfo, colIds, QH_GET_NUM_OF_COLS(pQueryHandle)); - if (tsdbLoadBlockData(&(pQueryHandle->rhelper), pBlock, pCheckInfo->pCompInfo) == 0) { + int16_t* colIds = pQueryHandle->defaultLoadColumn->pData; + int32_t ret = tsdbLoadBlockDataCols(&(pQueryHandle->rhelper), pBlock, pCheckInfo->pCompInfo, colIds, QH_GET_NUM_OF_COLS(pQueryHandle)); +// int32_t ret = tsdbLoadBlockData(&(pQueryHandle->rhelper), pBlock, pCheckInfo->pCompInfo); + if (ret == TSDB_CODE_SUCCESS) { SDataBlockLoadInfo* pBlockLoadInfo = &pQueryHandle->dataBlockLoadInfo; pBlockLoadInfo->fileGroup = pQueryHandle->pFileGroup; @@ -627,12 +619,10 @@ static bool doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlo assert(pCols->numOfRows != 0 && pCols->numOfRows <= pBlock->numOfRows); pBlock->numOfRows = pCols->numOfRows; - tfree(data); - - int64_t et = taosGetTimestampUs() - st; - pQueryHandle->cost.blockLoadTime += et; - tsdbDebug("%p load file block into buffer, elapsed time:%"PRId64 " us", pQueryHandle, et); + int64_t elapsedTime = (taosGetTimestampUs() - st); + pQueryHandle->cost.blockLoadTime += elapsedTime; + tsdbDebug("%p load file block into buffer, elapsed time:%"PRId64 " us", pQueryHandle, elapsedTime); return blockLoaded; } @@ -1492,7 +1482,10 @@ static bool doHasDataInBuffer(STsdbQueryHandle* pQueryHandle) { // handle data in cache situation bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) { STsdbQueryHandle* pQueryHandle = (STsdbQueryHandle*) pHandle; - + + int64_t stime = taosGetTimestampUs(); + int64_t elapsedTime = stime; + size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo); assert(numOfTables > 0); @@ -1609,6 +1602,8 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) { } if (exists) { + elapsedTime = taosGetTimestampUs() - stime; + pQueryHandle->cost.checkForNextTime += elapsedTime; return exists; } @@ -1617,7 +1612,11 @@ bool tsdbNextDataBlock(TsdbQueryHandleT* pHandle) { } // TODO: opt by consider the scan order - return doHasDataInBuffer(pQueryHandle); + bool ret = doHasDataInBuffer(pQueryHandle); + + elapsedTime = taosGetTimestampUs() - stime; + pQueryHandle->cost.checkForNextTime += elapsedTime; + return ret; } void changeQueryHandleForLastrowQuery(TsdbQueryHandleT pqHandle) { @@ -1895,8 +1894,6 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) { } } -SArray* tsdbRetrieveDataRow(TsdbQueryHandleT* pQueryHandle, SArray* pIdList, SQueryRowCond* pCond) { return NULL; } - static int32_t getAllTableList(STable* pSuperTable, SArray* list) { SSkipListIterator* iter = tSkipListCreateIter(pSuperTable->pIndex); while (tSkipListIterNext(iter)) { @@ -2214,7 +2211,7 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T* tsdb, uint64_t uid, const char* pT int32_t ret = TSDB_CODE_SUCCESS; tExprNode* expr = NULL; - TRY(32) { + TRY(TSDB_MAX_TAGS) { expr = exprTreeFromTableName(tbnameCond); if (expr == NULL) { expr = exprTreeFromBinary(pTagCond, len); @@ -2238,7 +2235,8 @@ int32_t tsdbQuerySTableByTagCond(TSDB_REPO_T* tsdb, uint64_t uid, const char* pT } CATCH( code ) { CLEANUP_EXECUTE(); - ret = code; + terrno = code; + goto _error; // TODO: more error handling } END_TRY @@ -2364,8 +2362,9 @@ void tsdbCleanupQueryHandle(TsdbQueryHandleT queryHandle) { tsdbDestroyHelper(&pQueryHandle->rhelper); - tsdbDebug(":io-cost summary: statis-info time:%"PRId64"us, datablock time:%" PRId64"us ,%p", pQueryHandle->cost.statisInfoLoadTime, - pQueryHandle->cost.blockLoadTime, pQueryHandle->qinfo); + SIOCostSummary* pCost = &pQueryHandle->cost; + tsdbDebug(":io-cost summary: statis-info:%"PRId64"us, datablock:%" PRId64"us, check data:%"PRId64"us, %p", + pCost->statisInfoLoadTime, pCost->blockLoadTime, pCost->checkForNextTime, pQueryHandle->qinfo); tfree(pQueryHandle); } diff --git a/src/util/inc/exception.h b/src/util/inc/exception.h index 52cd03d83082ae44b163d92f12f017b853b90e3b..38f94bfe283e41e4418ed6ab1673efb82acc44a0 100644 --- a/src/util/inc/exception.h +++ b/src/util/inc/exception.h @@ -78,6 +78,7 @@ void cleanupPush_int_ptr ( bool failOnly, void* func, void* arg ); int32_t cleanupGetActionCount(); void cleanupExecuteTo( int32_t anchor, bool failed ); void cleanupExecute( SExceptionNode* node, bool failed ); +bool cleanupExceedLimit(); #define CLEANUP_PUSH_VOID_PTR_PTR( failOnly, func, arg1, arg2 ) cleanupPush_void_ptr_ptr( (failOnly), (void*)(func), (void*)(arg1), (void*)(arg2) ) #define CLEANUP_PUSH_VOID_PTR_BOOL( failOnly, func, arg1, arg2 ) cleanupPush_void_ptr_bool( (failOnly), (void*)(func), (void*)(arg1), (bool)(arg2) ) @@ -91,7 +92,7 @@ void cleanupExecute( SExceptionNode* node, bool failed ); #define CLEANUP_GET_ANCHOR() cleanupGetActionCount() #define CLEANUP_EXECUTE_TO( anchor, failed ) cleanupExecuteTo( (anchor), (failed) ) - +#define CLEANUP_EXCEED_LIMIT() cleanupExceedLimit() //////////////////////////////////////////////////////////////////////////////// // functions & macros for exception handling diff --git a/src/util/inc/tfile.h b/src/util/inc/tfile.h index 04e500743c1c64d1ec6f636d92cc8904d7a4a2a2..de52a409674b9518fa908bd8131024c5b1c58010 100644 --- a/src/util/inc/tfile.h +++ b/src/util/inc/tfile.h @@ -19,13 +19,14 @@ #ifdef TAOS_RANDOM_FILE_FAIL void taosSetRandomFileFailFactor(int factor); -ssize_t taos_tread(int fd, void *buf, size_t count); -ssize_t taos_twrite(int fd, void *buf, size_t count); -off_t taos_lseek(int fd, off_t offset, int whence); +void taosSetRandomFileFailOutput(const char *path); +ssize_t taos_tread(int fd, void *buf, size_t count, const char *file, uint32_t line); +ssize_t taos_twrite(int fd, void *buf, size_t count, const char *file, uint32_t line); +off_t taos_lseek(int fd, off_t offset, int whence, const char *file, uint32_t line); -#define tread(fd, buf, count) taos_tread(fd, buf, count) -#define twrite(fd, buf, count) taos_twrite(fd, buf, count) -#define lseek(fd, offset, whence) taos_lseek(fd, offset, whence) +#define tread(fd, buf, count) taos_tread(fd, buf, count, __FILE__, __LINE__) +#define twrite(fd, buf, count) taos_twrite(fd, buf, count, __FILE__, __LINE__) +#define lseek(fd, offset, whence) taos_lseek(fd, offset, whence, __FILE__, __LINE__) #endif // TAOS_RANDOM_FILE_FAIL diff --git a/src/util/src/exception.c b/src/util/src/exception.c index e1f6516fe7d95de3e9ef986af85ca6923944c2d9..0b716b6aba31d3554b252e1b9be46d9341391f13 100644 --- a/src/util/src/exception.c +++ b/src/util/src/exception.c @@ -147,3 +147,6 @@ void cleanupExecuteTo( int32_t anchor, bool failed ) { void cleanupExecute( SExceptionNode* node, bool failed ) { doExecuteCleanup( node, 0, failed ); } +bool cleanupExceedLimit() { + return expList->numCleanupAction >= expList->maxCleanupAction; +} diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index df63d567c795c69b031c6ab97112a1b51d0c2e94..072e9939de3c672a80cebe93b2075a347991411a 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -294,7 +294,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v } } else { // old data exists, update the node pNode = taosUpdateCacheImpl(pCacheObj, pOld, key, keyLen, pData, dataSize, duration * 1000L); - uDebug("cache:%s, key:%p, %p exist in cache, updated", pCacheObj->name, key, pNode->data); + uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode->data, pOld); } __cache_unlock(pCacheObj); @@ -307,26 +307,30 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen return NULL; } + void *pData = NULL; + __cache_rd_lock(pCacheObj); - + SCacheDataNode **ptNode = (SCacheDataNode **)taosHashGet(pCacheObj->pHashTable, key, keyLen); int32_t ref = 0; if (ptNode != NULL) { ref = T_REF_INC(*ptNode); + pData = (*ptNode)->data; } + __cache_unlock(pCacheObj); - - if (ptNode != NULL) { + + if (pData != NULL) { atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1); - uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, (*ptNode)->data, ref); + uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, ref); } else { atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1); uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); } - + atomic_add_fetch_32(&pCacheObj->statistics.totalAccess, 1); - return (ptNode != NULL) ? (*ptNode)->data : NULL; + return pData; } void* taosCacheUpdateExpireTimeByName(SCacheObj *pCacheObj, void *key, size_t keyLen, uint64_t expireTime) { @@ -453,21 +457,20 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { } else { uDebug("cache:%s, key:%p, %p is released, refcnt:%d", pCacheObj->name, pNode->key, pNode->data, T_REF_VAL_GET(pNode) - 1); + __cache_wr_lock(pCacheObj); + // NOTE: once refcount is decrease, pNode may be freed by other thread immediately. int32_t ref = T_REF_DEC(pNode); - if (inTrashCan) { + if (inTrashCan && (ref == 0)) { // Remove it if the ref count is 0. // The ref count does not need to load and check again after lock acquired, since ref count can not be increased when // the node is in trashcan. - if (ref == 0) { - __cache_wr_lock(pCacheObj); - assert(pNode->pTNodeHeader->pData == pNode); - taosRemoveFromTrashCan(pCacheObj, pNode->pTNodeHeader); - __cache_unlock(pCacheObj); - } - + assert(pNode->pTNodeHeader->pData == pNode); + taosRemoveFromTrashCan(pCacheObj, pNode->pTNodeHeader); } + + __cache_unlock(pCacheObj); } // else { diff --git a/src/util/src/tfile.c b/src/util/src/tfile.c index 92eeaef1262cec6d3ee5c5d09ba0c02b4b2b097d..d1a9c2461518a787920eac6de591b320a265d20d 100644 --- a/src/util/src/tfile.c +++ b/src/util/src/tfile.c @@ -29,14 +29,55 @@ #ifdef TAOS_RANDOM_FILE_FAIL static int random_file_fail_factor = 20; +static FILE *fpRandomFileFailOutput = NULL; void taosSetRandomFileFailFactor(int factor) { random_file_fail_factor = factor; } + +static void close_random_file_fail_output() +{ + if (fpRandomFileFailOutput != NULL) { + if (fpRandomFileFailOutput != stdout) { + fclose(fpRandomFileFailOutput); + } + fpRandomFileFailOutput = NULL; + } +} + +static void random_file_fail_output_sig(int sig) +{ + fprintf(fpRandomFileFailOutput, "signal %d received.\n", sig); + + struct sigaction act = {0}; + act.sa_handler = SIG_DFL; + sigaction(sig, &act, NULL); + + close_random_file_fail_output(); + exit(EXIT_FAILURE); +} + +void taosSetRandomFileFailOutput(const char *path) +{ + if (path == NULL) { + fpRandomFileFailOutput = stdout; + } else if ((fpRandomFileFailOutput = fopen(path, "w")) != NULL) { + atexit(close_random_file_fail_output); + } else { + printf("failed to open random file fail log file '%s', errno=%d\n", path, errno); + return; + } + + struct sigaction act = {0}; + act.sa_handler = random_file_fail_output_sig; + sigaction(SIGFPE, &act, NULL); + sigaction(SIGSEGV, &act, NULL); + sigaction(SIGILL, &act, NULL); +} #endif -ssize_t taos_tread(int fd, void *buf, size_t count) +ssize_t taos_tread(int fd, void *buf, size_t count, const char *file, uint32_t line) { #ifdef TAOS_RANDOM_FILE_FAIL if (random_file_fail_factor > 0) { @@ -49,7 +90,7 @@ ssize_t taos_tread(int fd, void *buf, size_t count) return tread(fd, buf, count); } -ssize_t taos_twrite(int fd, void *buf, size_t count) +ssize_t taos_twrite(int fd, void *buf, size_t count, const char *file, uint32_t line) { #ifdef TAOS_RANDOM_FILE_FAIL if (random_file_fail_factor > 0) { @@ -62,7 +103,7 @@ ssize_t taos_twrite(int fd, void *buf, size_t count) return twrite(fd, buf, count); } -off_t taos_lseek(int fd, off_t offset, int whence) +off_t taos_lseek(int fd, off_t offset, int whence, const char *file, uint32_t line) { #ifdef TAOS_RANDOM_FILE_FAIL if (random_file_fail_factor > 0) { diff --git a/src/vnode/src/vnodeMain.c b/src/vnode/src/vnodeMain.c index 695a55d47638c1b0e05651be24d2480b9d5b975c..49f648b74db924f22249d3264b93e6701cf0068a 100644 --- a/src/vnode/src/vnodeMain.c +++ b/src/vnode/src/vnodeMain.c @@ -59,7 +59,7 @@ int32_t vnodeInitResources() { vnodeInitWriteFp(); vnodeInitReadFp(); - tsDnodeVnodesHash = taosHashInit(TSDB_MAX_VNODES, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true); + tsDnodeVnodesHash = taosHashInit(TSDB_MIN_VNODES, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), true); if (tsDnodeVnodesHash == NULL) { vError("failed to init vnode list"); return TSDB_CODE_VND_OUT_OF_MEMORY; @@ -69,6 +69,7 @@ int32_t vnodeInitResources() { } void vnodeCleanupResources() { + if (tsDnodeVnodesHash != NULL) { taosHashCleanup(tsDnodeVnodesHash); tsDnodeVnodesHash = NULL; @@ -137,7 +138,7 @@ int32_t vnodeCreate(SMDCreateVnodeMsg *pVnodeCfg) { return TSDB_CODE_VND_INIT_FAILED; } - vInfo("vgId:%d, vnode is created, clog:%d", pVnodeCfg->cfg.vgId, pVnodeCfg->cfg.walLevel); + vInfo("vgId:%d, vnode is created, walLevel:%d fsyncPeriod:%d", pVnodeCfg->cfg.vgId, pVnodeCfg->cfg.walLevel, pVnodeCfg->cfg.fsyncPeriod); code = vnodeOpen(pVnodeCfg->cfg.vgId, rootDir); return code; @@ -618,6 +619,7 @@ static int32_t vnodeSaveCfg(SMDCreateVnodeMsg *pVnodeCfg) { len += snprintf(content + len, maxLen - len, " \"precision\": %d,\n", pVnodeCfg->cfg.precision); len += snprintf(content + len, maxLen - len, " \"compression\": %d,\n", pVnodeCfg->cfg.compression); len += snprintf(content + len, maxLen - len, " \"walLevel\": %d,\n", pVnodeCfg->cfg.walLevel); + len += snprintf(content + len, maxLen - len, " \"fsync\": %d,\n", pVnodeCfg->cfg.fsyncPeriod); len += snprintf(content + len, maxLen - len, " \"replica\": %d,\n", pVnodeCfg->cfg.replications); len += snprintf(content + len, maxLen - len, " \"wals\": %d,\n", pVnodeCfg->cfg.wals); len += snprintf(content + len, maxLen - len, " \"quorum\": %d,\n", pVnodeCfg->cfg.quorum); @@ -782,6 +784,13 @@ static int32_t vnodeReadCfg(SVnodeObj *pVnode) { } pVnode->walCfg.walLevel = (int8_t) walLevel->valueint; + cJSON *fsyncPeriod = cJSON_GetObjectItem(root, "fsync"); + if (!walLevel || walLevel->type != cJSON_Number) { + vError("vgId:%d, failed to read vnode cfg, fsyncPeriod not found", pVnode->vgId); + goto PARSE_OVER; + } + pVnode->walCfg.fsyncPeriod = fsyncPeriod->valueint; + cJSON *wals = cJSON_GetObjectItem(root, "wals"); if (!wals || wals->type != cJSON_Number) { vError("vgId:%d, failed to read vnode cfg, wals not found", pVnode->vgId); diff --git a/src/vnode/src/vnodeRead.c b/src/vnode/src/vnodeRead.c index 987783711b2452b17c56568fe4c63ed506c51e30..f529b713cf659d923e64ba8bf49798a0dde0f195 100644 --- a/src/vnode/src/vnodeRead.c +++ b/src/vnode/src/vnodeRead.c @@ -108,9 +108,10 @@ static int32_t vnodeProcessQueryMsg(SVnodeObj *pVnode, SReadMsg *pReadMsg) { if (code == TSDB_CODE_SUCCESS) { handle = qRegisterQInfo(pVnode->qMgmt, (uint64_t) pQInfo); if (handle == NULL) { // failed to register qhandle + vError("vgId:%d QInfo:%p register qhandle failed, return to app, code:%s", pVnode->vgId, (void *)pQInfo, + tstrerror(pRsp->code)); pRsp->code = TSDB_CODE_QRY_INVALID_QHANDLE; qDestroyQueryInfo(pQInfo); // destroy it directly - vError("vgId:%d QInfo:%p register qhandle failed, return to app, code:%s", pVnode->vgId, (void*) pQInfo, tstrerror(pRsp->code)); } else { assert(*handle == pQInfo); pRsp->qhandle = htobe64((uint64_t) pQInfo); diff --git a/src/wal/src/walMain.c b/src/wal/src/walMain.c index 94a0fdc956577d9cc2e35f6bd780dcb6b8b33950..9001d29415ec73373511159349fb64c4c4c8c566 100644 --- a/src/wal/src/walMain.c +++ b/src/wal/src/walMain.c @@ -25,6 +25,7 @@ #include "tlog.h" #include "tchecksum.h" #include "tutil.h" +#include "ttimer.h" #include "taoserror.h" #include "twal.h" #include "tqueue.h" @@ -44,6 +45,9 @@ typedef struct { int fd; int keep; int level; + int32_t fsyncPeriod; + void *timer; + void *signature; int max; // maximum number of wal files uint32_t id; // increase continuously int num; // number of wal files @@ -52,10 +56,23 @@ typedef struct { pthread_mutex_t mutex; } SWal; +static void *walTmrCtrl = NULL; +static int tsWalNum = 0; +static pthread_once_t walModuleInit = PTHREAD_ONCE_INIT; static uint32_t walSignature = 0xFAFBFDFE; -static int walHandleExistingFiles(const char *path); -static int walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp); -static int walRemoveWalFiles(const char *path); +static int walHandleExistingFiles(const char *path); +static int walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp); +static int walRemoveWalFiles(const char *path); +static void walProcessFsyncTimer(void *param, void *tmrId); +static void walRelease(SWal *pWal); + +static void walModuleInitFunc() { + walTmrCtrl = taosTmrInit(1000, 100, 300000, "WAL"); + if (walTmrCtrl == NULL) + walModuleInit = PTHREAD_ONCE_INIT; + else + wDebug("WAL module is initialized"); +} void *walOpen(const char *path, const SWalCfg *pCfg) { SWal *pWal = calloc(sizeof(SWal), 1); @@ -64,20 +81,38 @@ void *walOpen(const char *path, const SWalCfg *pCfg) { return NULL; } + pthread_once(&walModuleInit, walModuleInitFunc); + if (walTmrCtrl == NULL) { + free(pWal); + terrno = TAOS_SYSTEM_ERROR(errno); + return NULL; + } + + atomic_add_fetch_32(&tsWalNum, 1); pWal->fd = -1; pWal->max = pCfg->wals; pWal->id = 0; pWal->num = 0; pWal->level = pCfg->walLevel; pWal->keep = pCfg->keep; + pWal->fsyncPeriod = pCfg->fsyncPeriod; + pWal->signature = pWal; tstrncpy(pWal->path, path, sizeof(pWal->path)); pthread_mutex_init(&pWal->mutex, NULL); + if (pWal->fsyncPeriod > 0 && pWal->level == TAOS_WAL_FSYNC) { + pWal->timer = taosTmrStart(walProcessFsyncTimer, pWal->fsyncPeriod, pWal, walTmrCtrl); + if (pWal->timer == NULL) { + terrno = TAOS_SYSTEM_ERROR(errno); + walRelease(pWal); + return NULL; + } + } + if (tmkdir(path, 0755) != 0) { terrno = TAOS_SYSTEM_ERROR(errno); wError("wal:%s, failed to create directory(%s)", path, strerror(errno)); - pthread_mutex_destroy(&pWal->mutex); - free(pWal); + walRelease(pWal); pWal = NULL; } @@ -89,12 +124,11 @@ void *walOpen(const char *path, const SWalCfg *pCfg) { if (pWal && pWal->fd <0) { terrno = TAOS_SYSTEM_ERROR(errno); wError("wal:%s, failed to open(%s)", path, strerror(errno)); - pthread_mutex_destroy(&pWal->mutex); - free(pWal); + walRelease(pWal); pWal = NULL; } - if (pWal) wDebug("wal:%s, it is open, level:%d", path, pWal->level); + if (pWal) wDebug("wal:%s, it is open, level:%d fsyncPeriod:%d", path, pWal->level, pWal->fsyncPeriod); return pWal; } @@ -102,7 +136,8 @@ void walClose(void *handle) { if (handle == NULL) return; SWal *pWal = handle; - close(pWal->fd); + tclose(pWal->fd); + if (pWal->timer) taosTmrStopA(&pWal->timer); if (pWal->keep == 0) { // remove all files in the directory @@ -118,9 +153,7 @@ void walClose(void *handle) { wDebug("wal:%s, it is closed and kept", pWal->name); } - pthread_mutex_destroy(&pWal->mutex); - - free(pWal); + walRelease(pWal); } int walRenew(void *handle) { @@ -194,9 +227,9 @@ int walWrite(void *handle, SWalHead *pHead) { void walFsync(void *handle) { SWal *pWal = handle; - if (pWal == NULL) return; + if (pWal == NULL || pWal->level != TAOS_WAL_FSYNC || pWal->fd < 0) return; - if (pWal->level == TAOS_WAL_FSYNC && pWal->fd >=0) { + if (pWal->fsyncPeriod == 0) { if (fsync(pWal->fd) < 0) { wError("wal:%s, fsync failed(%s)", pWal->name, strerror(errno)); } @@ -303,6 +336,20 @@ int walGetWalFile(void *handle, char *name, uint32_t *index) { return code; } +static void walRelease(SWal *pWal) { + + pthread_mutex_destroy(&pWal->mutex); + pWal->signature = NULL; + free(pWal); + + if (atomic_sub_fetch_32(&tsWalNum, 1) == 0) { + if (walTmrCtrl) taosTmrCleanUp(walTmrCtrl); + walTmrCtrl = NULL; + walModuleInit = PTHREAD_ONCE_INIT; + wDebug("WAL module is cleaned up"); + } +} + static int walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp) { char *name = pWal->name; @@ -433,3 +480,15 @@ static int walRemoveWalFiles(const char *path) { return terrno; } +static void walProcessFsyncTimer(void *param, void *tmrId) { + SWal *pWal = param; + + if (pWal->signature != pWal) return; + if (pWal->fd < 0) return; + + if (fsync(pWal->fd) < 0) { + wError("wal:%s, fsync failed(%s)", pWal->name, strerror(errno)); + } + + pWal->timer = taosTmrStart(walProcessFsyncTimer, pWal->fsyncPeriod, pWal, walTmrCtrl); +} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a6070a2fc1e35adb517ef7636b3a1ea78f0f5610..4e7e9a87ea6810c362bd676cd9152f61bc08e29d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -12,3 +12,4 @@ SET(CMAKE_VERBOSE_MAKEFILE ON) ADD_SUBDIRECTORY(examples/c) ADD_SUBDIRECTORY(tsim) ADD_SUBDIRECTORY(test/c) +ADD_SUBDIRECTORY(comparisonTest/tdengine) diff --git a/tests/comparisonTest/tdengine/CMakeLists.txt b/tests/comparisonTest/tdengine/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..ccdeefcdaf5a111b62f3d3bae09bf52da2c6b726 --- /dev/null +++ b/tests/comparisonTest/tdengine/CMakeLists.txt @@ -0,0 +1,12 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +PROJECT(TDengine) + +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/util/inc) +INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/common/inc) +INCLUDE_DIRECTORIES(${TD_OS_DIR}/inc) + +IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) + add_executable(tdengineTest tdengineTest.c) + target_link_libraries(tdengineTest taos_static tutil common pthread) +ENDIF() diff --git a/tests/comparisonTest/tdengine/tdengineTest.c b/tests/comparisonTest/tdengine/tdengineTest.c index a2b048214f6a3189e95cb289fdd425dba6eede52..de925263376933f55b5fc67d25d7a253da65d2b6 100644 --- a/tests/comparisonTest/tdengine/tdengineTest.c +++ b/tests/comparisonTest/tdengine/tdengineTest.c @@ -7,6 +7,7 @@ #include #include #include +#include typedef struct { char sql[256]; @@ -123,19 +124,21 @@ void writeDataImp(void *param) { if (taos == NULL) taos_error(taos); - int code = taos_query(taos, "use db"); + TAOS_RES* result = taos_query(taos, "use db"); + int32_t code = taos_errno(result); if (code != 0) { taos_error(taos); } + taos_free_result(result); - char sql[65000]; + char *sql = calloc(1, 8*1024*1024); int sqlLen = 0; int lastMachineid = 0; int counter = 0; int totalRecords = 0; for (int j = pThread->sID; j <= pThread->eID; j++) { - char fileName[256]; + char fileName[300]; sprintf(fileName, "%s/testdata%d.csv", arguments.dataDir, j); FILE *fp = fopen(fileName, "r"); @@ -162,7 +165,7 @@ void writeDataImp(void *param) { int64_t timestamp; int temperature; float humidity; - sscanf(line, "%d%s%d%lld%d%f", &machineid, machinename, &machinegroup, ×tamp, &temperature, &humidity); + sscanf(line, "%d%s%d%" PRId64 "%d%f", &machineid, machinename, &machinegroup, ×tamp, &temperature, &humidity); if (counter == 0) { sqlLen = sprintf(sql, "insert into"); @@ -174,14 +177,16 @@ void writeDataImp(void *param) { machineid, machineid, machinename, machinegroup); } - sqlLen += sprintf(sql + sqlLen, "(%lld,%d,%f)", timestamp, temperature, humidity); + sqlLen += sprintf(sql + sqlLen, "(%" PRId64 ",%d,%f)", timestamp, temperature, humidity); counter++; if (counter >= arguments.rowsPerRequest) { - int code = taos_query(taos, sql); + TAOS_RES *result = taos_query(taos, sql); + int32_t code = taos_errno(result); if (code != 0) { - printf("thread:%d error:%d reason:%s\n", pThread->pid, code, taos_errstr(taos)); + printf("thread:%d error:%d reason:%s\n", pThread->threadId, code, taos_errstr(taos)); } + taos_free_result(result); totalRecords += counter; counter = 0; @@ -194,15 +199,18 @@ void writeDataImp(void *param) { } if (counter > 0) { - int code = taos_query(taos, sql); + TAOS_RES *result = taos_query(taos, sql); + int32_t code = taos_errno(result); if (code != 0) { - printf("thread:%d error:%d reason:%s\n", pThread->pid, code, taos_errstr(taos)); + printf("thread:%d error:%d reason:%s\n", pThread->threadId, code, taos_errstr(taos)); } + taos_free_result(result); totalRecords += counter; } __sync_fetch_and_add(&statis.totalRows, totalRecords); + free(sql); } void writeData() { @@ -215,19 +223,23 @@ void writeData() { taos_init(); void *taos = taos_connect("127.0.0.1", "root", "taosdata", NULL, 0); - if (taos == NULL) - taos_error(taos); + if (taos == NULL) taos_error(taos); - int code = taos_query(taos, "create database if not exists db"); + TAOS_RES *result = taos_query(taos, "create database if not exists db"); + int32_t code = taos_errno(result); if (code != 0) { taos_error(taos); } + taos_free_result(result); - code = taos_query(taos, "create table if not exists db.devices(ts timestamp, temperature int, humidity float) " - "tags(devid int, devname binary(16), devgroup int)"); + result = taos_query(taos, + "create table if not exists db.devices(ts timestamp, temperature int, humidity float) " + "tags(devid int, devname binary(16), devgroup int)"); + code = taos_errno(result); if (code != 0) { taos_error(taos); } + taos_free_result(result); int64_t st = getTimeStampMs(); @@ -292,17 +304,12 @@ void readData() { int64_t st = getTimeStampMs(); - int code = taos_query(taos, line); + TAOS_RES *result = taos_query(taos, line); + int32_t code = taos_errno(result); if (code != 0) { taos_error(taos); } - void *result = taos_use_result(taos); - if (result == NULL) { - printf("failed to get result, reason:%s\n", taos_errstr(taos)); - exit(1); - } - TAOS_ROW row; int rows = 0; //int num_fields = taos_field_count(taos); diff --git a/tests/pytest/util/dnodes.py b/tests/pytest/util/dnodes.py index 0341b3f136663305adf6a860c8224da31bac7891..b67f509cc69e26a5a2b9d2c6a003f4c073f2533b 100644 --- a/tests/pytest/util/dnodes.py +++ b/tests/pytest/util/dnodes.py @@ -28,7 +28,9 @@ class TDSimClient: "locale": "en_US.UTF-8", "charset": "UTF-8", "asyncLog": "0", - "maxTablesPerVnode": "4", + "minTablesPerVnode": "4", + "maxTablesPerVnode": "1000", + "tableIncStepPerVnode": "10000", "maxVgroupsPerDb": "1000", "sdbDebugFlag": "143", "rpcDebugFlag": "135", diff --git a/tests/script/general/http/restful_full.sim b/tests/script/general/http/restful_full.sim index 7edf39484537767a3f7e49b5a3b2fa73583928e0..8545b8d2cd57c09996554a1b7d80ed4510c993f6 100644 --- a/tests/script/general/http/restful_full.sim +++ b/tests/script/general/http/restful_full.sim @@ -81,7 +81,7 @@ print =============== step2 - no db #11 system_content curl -H 'Authorization: Taosd /KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04' -d 'show databases' 127.0.0.1:6020/rest/sql print 11-> $system_content -if $system_content != @{"status":"succ","head":["name","created_time","ntables","vgroups","replica","days","keep1,keep2,keep(D)","cache(MB)","blocks","minrows","maxrows","wallevel","comp","precision","status"],"data":[],"rows":0}@ then +if $system_content != @{"status":"succ","head":["name","created_time","ntables","vgroups","replica","days","keep1,keep2,keep(D)","cache(MB)","blocks","minrows","maxrows","wallevel","fsync","comp","precision","status"],"data":[],"rows":0}@ then return -1 endi diff --git a/tests/script/general/parser/testSuite.sim b/tests/script/general/parser/testSuite.sim index 26a6a39815b75712465fbdc045e96cd8cefa933a..c6981d29022dca56198d6655379472c905984285 100644 --- a/tests/script/general/parser/testSuite.sim +++ b/tests/script/general/parser/testSuite.sim @@ -26,7 +26,7 @@ sleep 2000 run general/parser/fill.sim sleep 2000 run general/parser/fill_stb.sim -sleep 2000 +sleep 2000 #run general/parser/fill_us.sim # sleep 2000 run general/parser/first_last.sim @@ -91,13 +91,11 @@ run general/parser/select_with_tags.sim sleep 2000 run general/parser/groupby.sim sleep 2000 +run general/parser/tags_filter.sim +sleep 2000 run general/parser/union.sim sleep 2000 run general/parser/sliding.sim -sleep 2000 -run general/parser/fill_us.sim -sleep 2000 -run general/parser/tags_filter.sim #sleep 2000 #run general/parser/repeatStream.sim diff --git a/tests/script/sh/deploy.sh b/tests/script/sh/deploy.sh index 5573db0739612e7c0905cc6a4f8970f5c1283f72..55d66ad87257092a216c2f40c0a06d196c449bd1 100755 --- a/tests/script/sh/deploy.sh +++ b/tests/script/sh/deploy.sh @@ -111,38 +111,40 @@ echo "serverPort ${NODE}" >> $TAOS_CFG echo "dataDir $DATA_DIR" >> $TAOS_CFG echo "logDir $LOG_DIR" >> $TAOS_CFG echo "debugFlag 131" >> $TAOS_CFG -echo "mDebugFlag 135" >> $TAOS_CFG -echo "sdbDebugFlag 135" >> $TAOS_CFG -echo "dDebugFlag 135" >> $TAOS_CFG -echo "vDebugFlag 135" >> $TAOS_CFG -echo "tsdbDebugFlag 135" >> $TAOS_CFG +echo "mDebugFlag 131" >> $TAOS_CFG +echo "sdbDebugFlag 131" >> $TAOS_CFG +echo "dDebugFlag 131" >> $TAOS_CFG +echo "vDebugFlag 131" >> $TAOS_CFG +echo "tsdbDebugFlag 131" >> $TAOS_CFG echo "cDebugFlag 135" >> $TAOS_CFG -echo "jnidebugFlag 135" >> $TAOS_CFG -echo "odbcdebugFlag 135" >> $TAOS_CFG -echo "httpDebugFlag 135" >> $TAOS_CFG +echo "jnidebugFlag 131" >> $TAOS_CFG +echo "odbcdebugFlag 131" >> $TAOS_CFG +echo "httpDebugFlag 143" >> $TAOS_CFG echo "monitorDebugFlag 131" >> $TAOS_CFG echo "mqttDebugFlag 131" >> $TAOS_CFG -echo "qdebugFlag 135" >> $TAOS_CFG -echo "rpcDebugFlag 135" >> $TAOS_CFG +echo "qdebugFlag 131" >> $TAOS_CFG +echo "rpcDebugFlag 131" >> $TAOS_CFG echo "tmrDebugFlag 131" >> $TAOS_CFG -echo "udebugFlag 135" >> $TAOS_CFG -echo "sdebugFlag 135" >> $TAOS_CFG -echo "wdebugFlag 135" >> $TAOS_CFG +echo "udebugFlag 131" >> $TAOS_CFG +echo "sdebugFlag 131" >> $TAOS_CFG +echo "wdebugFlag 131" >> $TAOS_CFG echo "monitor 0" >> $TAOS_CFG echo "monitorInterval 1" >> $TAOS_CFG echo "http 0" >> $TAOS_CFG echo "numOfThreadsPerCore 2.0" >> $TAOS_CFG echo "defaultPass taosdata" >> $TAOS_CFG -echo "numOfLogLines 10000000" >> $TAOS_CFG +echo "numOfLogLines 20000000" >> $TAOS_CFG echo "mnodeEqualVnodeNum 0" >> $TAOS_CFG echo "clog 2" >> $TAOS_CFG echo "statusInterval 1" >> $TAOS_CFG echo "numOfTotalVnodes 4" >> $TAOS_CFG echo "maxVgroupsPerDb 4" >> $TAOS_CFG +echo "minTablesPerVnode 4" >> $TAOS_CFG echo "maxTablesPerVnode 1000" >> $TAOS_CFG +echo "tableIncStepPerVnode 10000" >> $TAOS_CFG echo "asyncLog 0" >> $TAOS_CFG echo "numOfMnodes 1" >> $TAOS_CFG echo "locale en_US.UTF-8" >> $TAOS_CFG -echo "anyIp 0" >> $TAOS_CFG +echo "fsync 0" >> $TAOS_CFG diff --git a/tests/script/tmp/prepare.sim b/tests/script/tmp/prepare.sim index 85146bd4c312085fd3a090c2053c6e429c5f7b23..459f6e7665c6f1bbb15b3a0e4de8c1529128be13 100644 --- a/tests/script/tmp/prepare.sim +++ b/tests/script/tmp/prepare.sim @@ -25,10 +25,15 @@ system sh/cfg.sh -n dnode2 -c numOfTotalVnodes -v 20 system sh/cfg.sh -n dnode3 -c numOfTotalVnodes -v 20 system sh/cfg.sh -n dnode4 -c numOfTotalVnodes -v 20 -system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 20 -system sh/cfg.sh -n dnode2 -c maxVgroupsPerDb -v 20 -system sh/cfg.sh -n dnode3 -c maxVgroupsPerDb -v 20 -system sh/cfg.sh -n dnode4 -c maxVgroupsPerDb -v 20 +system sh/cfg.sh -n dnode1 -c maxVgroupsPerDb -v 2 +system sh/cfg.sh -n dnode2 -c maxVgroupsPerDb -v 2 +system sh/cfg.sh -n dnode3 -c maxVgroupsPerDb -v 2 +system sh/cfg.sh -n dnode4 -c maxVgroupsPerDb -v 2 + +system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 100000 +system sh/cfg.sh -n dnode2 -c maxTablesPerVnode -v 100000 +system sh/cfg.sh -n dnode3 -c maxTablesPerVnode -v 100000 +system sh/cfg.sh -n dnode4 -c maxTablesPerVnode -v 100000 system sh/cfg.sh -n dnode1 -c http -v 1 system sh/cfg.sh -n dnode2 -c http -v 1 diff --git a/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim b/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim index 8a586321e1773febe1bd3475d03fa9baab4e02d1..c8663b0009b08ce234ebf69953c2da6f4798b7d6 100644 --- a/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim +++ b/tests/script/unique/arbitrator/sync_replica3_dnodeChang_DropAddAlterTableDropDb.sim @@ -29,7 +29,7 @@ system sh/cfg.sh -n dnode2 -c alternativeRole -v 2 system sh/cfg.sh -n dnode3 -c alternativeRole -v 2 system sh/cfg.sh -n dnode4 -c alternativeRole -v 2 -$totalTableNum = 10 +$totalTableNum = 40 system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v $totalTableNum system sh/cfg.sh -n dnode2 -c maxtablesPerVnode -v $totalTableNum system sh/cfg.sh -n dnode3 -c maxtablesPerVnode -v $totalTableNum @@ -65,9 +65,10 @@ sleep 3000 $totalTableNum = 20 $sleepTimer = 3000 +$maxTables = $totalTableNum * 2 $db = db -print create database $db replica 3 maxTables $totalTableNum -sql create database $db replica 3 maxTables $totalTableNum +print create database $db replica 3 maxTables $maxTables +sql create database $db replica 3 maxTables $maxTables sql use $db # create table , insert data diff --git a/tests/script/unique/cluster/client5.sim b/tests/script/unique/cluster/client5.sim index 5960b28fdda98b330c0a106716dcc45ab05757d5..1fe6298ae7efd78ffb25c58d9ffaa13e29c22d36 100644 --- a/tests/script/unique/cluster/client5.sim +++ b/tests/script/unique/cluster/client5.sim @@ -1,113 +1,53 @@ $tblStart = 0 $tblEnd = 2000 $tsStart = 1325347200000 # 2012-01-01 00:00:00.000 +$tsEnd = 1325347210000 ############################################################### sql connect +$db = db1 +$stb = stb1 +#subtable: tb0 - tb4999 +#print create table $stb (ts timestamp, c1 int) tags(t1 int, t2 binary(16)) + +sleep 20000 # wait other client insert data loop_lable: print ====================== client5 start loop query -$db = db2 -$stb = stb2 - -print create database if not exists $db replica 2 -sql create database if not exists $db replica 2 -sql use $db - -print ==== client4start create table -$i = $tblStart -while $i < $tblEnd - $tb = dtb . $i - sql create table $tb (ts timestamp, c1 int) - $i = $i + 1 -endw - - -print ==== client4start insert, include multi table data in one insert sql -$totalRows = 0 -$totalRowsPerTbl = 0 - -$rowsPerLoop = 100 -$ts = $tsStart - -$i = $tblStart -while $i < $tblEnd - $tb0 = dtb . $i - $i = $i + 1 - $tb1 = dtb . $i - $i = $i + 1 - $tb2 = dtb . $i - $i = $i + 1 - $tb3 = dtb . $i - $i = $i + 1 - $tb4 = dtb . $i - $i = $i + 1 - - $x = 0 - while $x < $rowsPerLoop - sql insert into $tb0 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb1 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb2 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb3 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb4 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) - $x = $x + 20 - $ts = $ts + 40a - endw - - $totalRowsPerTbl = $totalRowsPerTbl + $x - $x = $x * 5 - $totalRows = $totalRows + $x -endw - -sql select count(*) from tb10 -if $data00 != $totalRowsPerTbl then - print data00 $data00 totalRowsPerTbl $totalRowsPerTbl - print ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - print ************ client4 insert loss: $deltaRows ***** - print ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -endi - - -print ====client4 start alter table -$i = $tblStart -while $i < $tblEnd - $tb = dtb . $i - sql alter table $tb add c2 float - $i = $i + 1 -endw - -print ====client4 continue insert, include multi table data in one insert sql - -$i = $tblStart -while $i < $tblEnd - $tb0 = dtb . $i - $i = $i + 1 - $tb1 = dtb . $i - $i = $i + 1 - $tb2 = dtb . $i - $i = $i + 1 - $tb3 = dtb . $i - $i = $i + 1 - $tb4 = dtb . $i - $i = $i + 1 - - $x = 0 - while $x < $rowsPerLoop - sql insert into $tb0 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb1 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb2 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb3 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) $tb4 values ( $ts + 0a , $x ) ( $ts + 2a , $x ) ( $ts + 4a , $x ) ( $ts + 6a , $x ) ( $ts + 8a , $x ) ( $ts + 10a , $x ) ( $ts + 12a , $x ) ( $ts + 14a , $x ) ( $ts + 16a , $x ) ( $ts + 18a , $x ) ( $ts + 20a , $x ) ( $ts + 22a , $x ) ( $ts + 24a , $x ) ( $ts + 26a , $x ) ( $ts + 28a , $x ) ( $ts + 30a , $x ) ( $ts + 32a , $x ) ( $ts + 34a , $x ) ( $ts + 36a , $x ) ( $ts + 38a , $x ) - $x = $x + 20 - $ts = $ts + 40a - endw - - $totalRowsPerTbl = $totalRowsPerTbl + $x - $x = $x * 5 - $totalRows = $totalRows + $x -endw - -sql select count(*) from tb10 -if $data00 != $totalRowsPerTbl then - print data00 $data00 totalRowsPerTbl $totalRowsPerTbl - print ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - print ************ client4 insert loss: $deltaRows ***** - print ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -endi +sql use $db + +sql select count(*) from $stb + +$tsQueryStart = $tsStart +$tsQueryStart = $tsStart + 90000 +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart order by ts asc limit 500 offset 7 +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart order by ts desc limit 500 offset 7 + +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client1_0' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client1_1' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client1_2' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client1_3' + +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client2_0' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client2_1' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client2_2' +sql select * from $stb where ts > $tsQueryStart and ts < $tsQueryStart and t2 == 'client2_3' + +sql select min(c1) from $stb +sql select max(c1) from $stb +sql select first(*) from $stb +sql select last(*) from $stb +sql select last_row(*) from $stb +sql select sum(c1) from $stb +sql select avg(c1) from $stb + +sql select min(c1) from tb1 +sql select max(c1) from tb10 +sql select first(*) from tb100 +sql select last(*) from tb1000 +sql select last_row(*) from tb20 +sql select sum(c1) from tb200 +sql select avg(c1) from tb2000 -print ====================== client4 drop database -sql drop if exists database $db goto loop_lable \ No newline at end of file diff --git a/tests/script/unique/cluster/cluster_main1.sim b/tests/script/unique/cluster/cluster_main1.sim index 82e1e2be838893657c77e73caa326141318666a5..e05c30aa6d0a4caa6351cd2adb75e0fd4a0d2d8a 100644 --- a/tests/script/unique/cluster/cluster_main1.sim +++ b/tests/script/unique/cluster/cluster_main1.sim @@ -80,6 +80,7 @@ run_back unique/cluster/main1_client1_2.sim run_back unique/cluster/main1_client1_3.sim run_back unique/cluster/client3.sim run_back unique/cluster/client4.sim +run_back unique/cluster/client5.sim sleep 20000 diff --git a/tests/script/unique/cluster/cluster_main2.sim b/tests/script/unique/cluster/cluster_main2.sim index e5fe3f2a217e7eaf5135544818e6210ddd0f33b2..9c682de041981abd3855217eb6e7bf1c9606c4da 100644 --- a/tests/script/unique/cluster/cluster_main2.sim +++ b/tests/script/unique/cluster/cluster_main2.sim @@ -84,6 +84,7 @@ run_back unique/cluster/main2_client2_2.sim run_back unique/cluster/main2_client2_3.sim run_back unique/cluster/client3.sim run_back unique/cluster/client4.sim +run_back unique/cluster/client5.sim sleep 20000