提交 afacc551 编写于 作者: S Shengliang Guan

Merge remote-tracking branch 'origin/develop' into feature/platform

......@@ -4992,6 +4992,7 @@ static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) {
pMsg->compression = pCreateDb->compressionLevel;
pMsg->walLevel = (char)pCreateDb->walLevel;
pMsg->replications = pCreateDb->replica;
pMsg->quorum = pCreateDb->quorum;
pMsg->ignoreExist = pCreateDb->ignoreExists;
}
......@@ -5522,6 +5523,13 @@ int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCMCreateDbMsg* pCreate) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
}
if (pCreate->quorum != -1 &&
(pCreate->quorum < TSDB_MIN_DB_REPLICA_OPTION || pCreate->quorum > TSDB_MAX_DB_REPLICA_OPTION)) {
snprintf(msg, tListLen(msg), "invalid db option quorum: %d valid range: [%d, %d]", pCreate->quorum,
TSDB_MIN_DB_REPLICA_OPTION, TSDB_MAX_DB_REPLICA_OPTION);
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
}
int32_t val = htonl(pCreate->daysPerFile);
if (val != -1 && (val < TSDB_MIN_DAYS_PER_FILE || val > TSDB_MAX_DAYS_PER_FILE)) {
snprintf(msg, tListLen(msg), "invalid db option daysPerFile: %d valid range: [%d, %d]", val,
......
......@@ -80,6 +80,7 @@ extern int16_t tsCompression;
extern int16_t tsWAL;
extern int32_t tsFsyncPeriod;
extern int32_t tsReplications;
extern int32_t tsQuorum;
// balance
extern int32_t tsEnableBalance;
......
......@@ -109,6 +109,7 @@ 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 tsQuorum = TSDB_DEFAULT_DB_QUORUM_OPTION;
int32_t tsMaxVgroupsPerDb = 0;
int32_t tsMinTablePerVnode = 100;
int32_t tsMaxTablePerVnode = TSDB_DEFAULT_TABLES;
......@@ -742,6 +743,16 @@ static void doInitGlobalConfig() {
cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg);
cfg.option = "quorum";
cfg.ptr = &tsQuorum;
cfg.valType = TAOS_CFG_VTYPE_INT32;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
cfg.minValue = TSDB_MIN_DB_REPLICA_OPTION;
cfg.maxValue = TSDB_MAX_DB_REPLICA_OPTION;
cfg.ptrLength = 0;
cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg);
cfg.option = "mqttBrokerAddress";
cfg.ptr = tsMqttBrokerAddress;
cfg.valType = TAOS_CFG_VTYPE_STRING;
......@@ -1338,4 +1349,4 @@ bool taosCheckBalanceCfgOptions(const char *option, int32_t *vnodeId, int32_t *d
}
return true;
}
\ No newline at end of file
}
......@@ -338,6 +338,7 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
#define TSDB_MIN_DB_REPLICA_OPTION 1
#define TSDB_MAX_DB_REPLICA_OPTION 3
#define TSDB_DEFAULT_DB_REPLICA_OPTION 1
#define TSDB_DEFAULT_DB_QUORUM_OPTION 1
#define TSDB_MAX_JOIN_TABLE_NUM 5
#define TSDB_MAX_UNION_CLAUSE 5
......
......@@ -522,6 +522,7 @@ typedef struct {
int8_t compression;
int8_t walLevel;
int8_t replications;
int8_t quorum;
int8_t ignoreExist;
} SCMCreateDbMsg, SCMAlterDbMsg;
......
......@@ -104,123 +104,125 @@
#define TK_MAXTABLES 86
#define TK_CACHE 87
#define TK_REPLICA 88
#define TK_DAYS 89
#define TK_MINROWS 90
#define TK_MAXROWS 91
#define TK_BLOCKS 92
#define TK_CTIME 93
#define TK_WAL 94
#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_QUORUM 89
#define TK_DAYS 90
#define TK_MINROWS 91
#define TK_MAXROWS 92
#define TK_BLOCKS 93
#define TK_CTIME 94
#define TK_WAL 95
#define TK_FSYNC 96
#define TK_COMP 97
#define TK_PRECISION 98
#define TK_LP 99
#define TK_RP 100
#define TK_TAGS 101
#define TK_USING 102
#define TK_AS 103
#define TK_COMMA 104
#define TK_NULL 105
#define TK_SELECT 106
#define TK_UNION 107
#define TK_ALL 108
#define TK_FROM 109
#define TK_VARIABLE 110
#define TK_INTERVAL 111
#define TK_FILL 112
#define TK_SLIDING 113
#define TK_ORDER 114
#define TK_BY 115
#define TK_ASC 116
#define TK_DESC 117
#define TK_GROUP 118
#define TK_HAVING 119
#define TK_LIMIT 120
#define TK_OFFSET 121
#define TK_SLIMIT 122
#define TK_SOFFSET 123
#define TK_WHERE 124
#define TK_NOW 125
#define TK_RESET 126
#define TK_QUERY 127
#define TK_ADD 128
#define TK_COLUMN 129
#define TK_TAG 130
#define TK_CHANGE 131
#define TK_SET 132
#define TK_KILL 133
#define TK_CONNECTION 134
#define TK_STREAM 135
#define TK_COLON 136
#define TK_ABORT 137
#define TK_AFTER 138
#define TK_ATTACH 139
#define TK_BEFORE 140
#define TK_BEGIN 141
#define TK_CASCADE 142
#define TK_CLUSTER 143
#define TK_CONFLICT 144
#define TK_COPY 145
#define TK_DEFERRED 146
#define TK_DELIMITERS 147
#define TK_DETACH 148
#define TK_EACH 149
#define TK_END 150
#define TK_EXPLAIN 151
#define TK_FAIL 152
#define TK_FOR 153
#define TK_IGNORE 154
#define TK_IMMEDIATE 155
#define TK_INITIALLY 156
#define TK_INSTEAD 157
#define TK_MATCH 158
#define TK_KEY 159
#define TK_OF 160
#define TK_RAISE 161
#define TK_REPLACE 162
#define TK_RESTRICT 163
#define TK_ROW 164
#define TK_STATEMENT 165
#define TK_TRIGGER 166
#define TK_VIEW 167
#define TK_COUNT 168
#define TK_SUM 169
#define TK_AVG 170
#define TK_MIN 171
#define TK_MAX 172
#define TK_FIRST 173
#define TK_LAST 174
#define TK_TOP 175
#define TK_BOTTOM 176
#define TK_STDDEV 177
#define TK_PERCENTILE 178
#define TK_APERCENTILE 179
#define TK_LEASTSQUARES 180
#define TK_HISTOGRAM 181
#define TK_DIFF 182
#define TK_SPREAD 183
#define TK_TWA 184
#define TK_INTERP 185
#define TK_LAST_ROW 186
#define TK_RATE 187
#define TK_IRATE 188
#define TK_SUM_RATE 189
#define TK_SUM_IRATE 190
#define TK_AVG_RATE 191
#define TK_AVG_IRATE 192
#define TK_TBID 193
#define TK_SEMI 194
#define TK_NONE 195
#define TK_PREV 196
#define TK_LINEAR 197
#define TK_IMPORT 198
#define TK_METRIC 199
#define TK_TBNAME 200
#define TK_JOIN 201
#define TK_METRICS 202
#define TK_STABLE 203
#define TK_INSERT 204
#define TK_INTO 205
#define TK_VALUES 206
#define TK_SPACE 300
#define TK_COMMENT 301
......
......@@ -171,6 +171,7 @@ typedef struct {
int8_t compression;
int8_t walLevel;
int8_t replications;
int8_t quorum;
int8_t reserved[12];
} SDbCfg;
......
......@@ -301,6 +301,12 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) {
return TSDB_CODE_MND_INVALID_DB_OPTION;
}
if (pCfg->quorum < TSDB_MIN_DB_REPLICA_OPTION || pCfg->quorum > TSDB_MAX_DB_REPLICA_OPTION) {
mError("invalid db option quorum:%d valid range: [%d, %d]", pCfg->quorum, TSDB_MIN_DB_REPLICA_OPTION,
TSDB_MAX_DB_REPLICA_OPTION);
return TSDB_CODE_MND_INVALID_DB_OPTION;
}
return TSDB_CODE_SUCCESS;
}
......@@ -320,6 +326,7 @@ static void mnodeSetDefaultDbCfg(SDbCfg *pCfg) {
if (pCfg->compression < 0) pCfg->compression = tsCompression;
if (pCfg->walLevel < 0) pCfg->walLevel = tsWAL;
if (pCfg->replications < 0) pCfg->replications = tsReplications;
if (pCfg->quorum < 0) pCfg->quorum = tsQuorum;
}
static int32_t mnodeCreateDbCb(SMnodeMsg *pMsg, int32_t code) {
......@@ -371,7 +378,8 @@ static int32_t mnodeCreateDb(SAcctObj *pAcct, SCMCreateDbMsg *pCreate, void *pMs
.precision = pCreate->precision,
.compression = pCreate->compression,
.walLevel = pCreate->walLevel,
.replications = pCreate->replications
.replications = pCreate->replications,
.quorum = pCreate->quorum
};
mnodeSetDefaultDbCfg(&pDb->cfg);
......@@ -509,6 +517,12 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn
pSchema[cols].bytes = htons(pShow->bytes[cols]);
cols++;
pShow->bytes[cols] = 2;
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
strcpy(pSchema[cols].name, "quorum");
pSchema[cols].bytes = htons(pShow->bytes[cols]);
cols++;
pShow->bytes[cols] = 2;
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
strcpy(pSchema[cols].name, "days");
......@@ -655,6 +669,10 @@ static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void
*(int16_t *)pWrite = pDb->cfg.replications;
cols++;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
*(int16_t *)pWrite = pDb->cfg.quorum;
cols++;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
*(int16_t *)pWrite = pDb->cfg.daysPerFile;
cols++;
......@@ -804,6 +822,7 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) {
int8_t compression = pAlter->compression;
int8_t walLevel = pAlter->walLevel;
int8_t replications = pAlter->replications;
int8_t quorum = pAlter->quorum;
int8_t precision = pAlter->precision;
terrno = TSDB_CODE_SUCCESS;
......@@ -902,6 +921,11 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SCMAlterDbMsg *pAlter) {
}
}
if (quorum >= 0 && quorum != pDb->cfg.quorum) {
mDebug("db:%s, quorum:%d change to %d", pDb->name, pDb->cfg.quorum, quorum);
newCfg.compression = quorum;
}
return newCfg;
}
......
......@@ -801,7 +801,7 @@ static SMDCreateVnodeMsg *mnodeBuildVnodeMsg(SVgObj *pVgroup) {
pCfg->walLevel = pDb->cfg.walLevel;
pCfg->replications = (int8_t) pVgroup->numOfVnodes;
pCfg->wals = 3;
pCfg->quorum = 1;
pCfg->quorum = pDb->cfg.quorum;
SMDVnodeDesc *pNodes = pVnode->nodes;
for (int32_t j = 0; j < pVgroup->numOfVnodes; ++j) {
......
......@@ -119,6 +119,7 @@ typedef struct SCreateDBInfo {
int32_t fsyncPeriod;
int64_t commitTime;
int32_t walLevel;
int32_t quorum;
int32_t compressionLevel;
SSQLToken precision;
bool ignoreExists;
......
......@@ -215,6 +215,7 @@ keep(Y) ::= KEEP tagitemlist(X). { Y = X; }
tables(Y) ::= MAXTABLES INTEGER(X). { Y = X; }
cache(Y) ::= CACHE INTEGER(X). { Y = X; }
replica(Y) ::= REPLICA INTEGER(X). { Y = X; }
quorum(Y) ::= QUORUM INTEGER(X). { Y = X; }
days(Y) ::= DAYS INTEGER(X). { Y = X; }
minrows(Y) ::= MINROWS INTEGER(X). { Y = X; }
maxrows(Y) ::= MAXROWS INTEGER(X). { Y = X; }
......@@ -231,6 +232,7 @@ db_optr(Y) ::= . {setDefaultCreateDbOption(&Y);}
db_optr(Y) ::= db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) days(X). { Y = Z; Y.daysPerFile = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) minrows(X). { Y = Z; Y.minRowsPerBlock = strtod(X.z, NULL); }
db_optr(Y) ::= db_optr(Z) maxrows(X). { Y = Z; Y.maxRowsPerBlock = strtod(X.z, NULL); }
......@@ -246,6 +248,7 @@ db_optr(Y) ::= db_optr(Z) keep(X). { Y = Z; Y.keep = X; }
alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y);}
alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); }
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); }
......
......@@ -907,6 +907,7 @@ void setDefaultCreateDbOption(SCreateDBInfo *pDBInfo) {
pDBInfo->daysPerFile = -1;
pDBInfo->replica = -1;
pDBInfo->quorum = -1;
pDBInfo->keep = NULL;
memset(&pDBInfo->precision, 0, sizeof(SSQLToken));
......
......@@ -116,6 +116,7 @@ static SKeyword keywordTable[] = {
{"STATE", TK_STATE},
{"KEEP", TK_KEEP},
{"REPLICA", TK_REPLICA},
{"QUORUM", TK_QUORUM},
{"DAYS", TK_DAYS},
{"MINROWS", TK_MINROWS},
{"MAXROWS", TK_MAXROWS},
......
......@@ -97,26 +97,26 @@
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
#define YYNOCODE 272
#define YYNOCODE 274
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SSQLToken
typedef union {
int yyinit;
ParseTOKENTYPE yy0;
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;
int yy46;
tSQLExpr* yy64;
tVariant yy134;
SCreateAcctSQL yy149;
int64_t yy207;
SLimitVal yy216;
TAOS_FIELD yy223;
SSubclauseInfo* yy231;
SCreateDBInfo yy268;
tSQLExprList* yy290;
SQuerySQL* yy414;
SCreateTableSQL* yy470;
tVariantList* yy498;
tFieldList* yy523;
} 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 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
#define YYNSTATE 243
#define YYNRULE 226
#define YYNTOKEN 207
#define YY_MAX_SHIFT 242
#define YY_MIN_SHIFTREDUCE 405
#define YY_MAX_SHIFTREDUCE 630
#define YY_ERROR_ACTION 631
#define YY_ACCEPT_ACTION 632
#define YY_NO_ACTION 633
#define YY_MIN_REDUCE 634
#define YY_MAX_REDUCE 859
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
......@@ -202,217 +202,218 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (547)
#define YY_ACTTAB_COUNT (552)
static const YYACTIONTYPE yy_action[] = {
/* 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,
/* 0 */ 103, 446, 135, 673, 632, 242, 126, 515, 135, 447,
/* 10 */ 135, 158, 847, 41, 43, 11, 35, 36, 846, 157,
/* 20 */ 847, 29, 134, 446, 197, 39, 37, 40, 38, 155,
/* 30 */ 103, 447, 139, 34, 33, 217, 216, 32, 31, 30,
/* 40 */ 41, 43, 767, 35, 36, 32, 31, 30, 29, 756,
/* 50 */ 446, 197, 39, 37, 40, 38, 182, 802, 447, 192,
/* 60 */ 34, 33, 21, 21, 32, 31, 30, 406, 407, 408,
/* 70 */ 409, 410, 411, 412, 413, 414, 415, 416, 417, 241,
/* 80 */ 41, 43, 228, 35, 36, 194, 843, 58, 29, 21,
/* 90 */ 842, 197, 39, 37, 40, 38, 166, 167, 753, 753,
/* 100 */ 34, 33, 168, 56, 32, 31, 30, 778, 841, 16,
/* 110 */ 235, 208, 234, 233, 207, 206, 205, 232, 204, 231,
/* 120 */ 230, 229, 203, 215, 151, 753, 732, 586, 719, 720,
/* 130 */ 721, 722, 723, 724, 725, 726, 727, 728, 729, 730,
/* 140 */ 731, 43, 8, 35, 36, 61, 113, 21, 29, 153,
/* 150 */ 240, 197, 39, 37, 40, 38, 239, 238, 95, 775,
/* 160 */ 34, 33, 165, 99, 32, 31, 30, 169, 35, 36,
/* 170 */ 214, 213, 592, 29, 595, 103, 197, 39, 37, 40,
/* 180 */ 38, 220, 756, 753, 236, 34, 33, 175, 12, 32,
/* 190 */ 31, 30, 162, 599, 179, 178, 590, 767, 593, 103,
/* 200 */ 596, 161, 162, 599, 756, 17, 590, 148, 593, 152,
/* 210 */ 596, 154, 26, 88, 87, 142, 185, 567, 568, 16,
/* 220 */ 235, 147, 234, 233, 159, 160, 219, 232, 196, 231,
/* 230 */ 230, 229, 801, 76, 159, 160, 162, 599, 547, 228,
/* 240 */ 590, 3, 593, 17, 596, 74, 78, 83, 86, 77,
/* 250 */ 26, 39, 37, 40, 38, 80, 59, 754, 21, 34,
/* 260 */ 33, 544, 60, 32, 31, 30, 18, 140, 159, 160,
/* 270 */ 181, 737, 539, 736, 27, 734, 735, 150, 682, 184,
/* 280 */ 738, 126, 740, 741, 739, 674, 531, 141, 126, 528,
/* 290 */ 42, 529, 558, 530, 752, 591, 46, 594, 34, 33,
/* 300 */ 42, 598, 32, 31, 30, 116, 117, 68, 64, 67,
/* 310 */ 588, 598, 143, 50, 73, 72, 597, 170, 171, 130,
/* 320 */ 128, 91, 90, 89, 98, 47, 597, 144, 559, 616,
/* 330 */ 51, 26, 14, 13, 42, 145, 600, 521, 520, 201,
/* 340 */ 13, 46, 22, 22, 48, 598, 589, 10, 9, 535,
/* 350 */ 533, 536, 534, 85, 84, 146, 137, 133, 856, 138,
/* 360 */ 597, 136, 755, 812, 811, 163, 808, 807, 164, 777,
/* 370 */ 747, 218, 794, 100, 793, 769, 114, 115, 26, 684,
/* 380 */ 112, 202, 131, 183, 24, 211, 681, 212, 855, 532,
/* 390 */ 70, 854, 93, 852, 118, 702, 554, 25, 23, 132,
/* 400 */ 671, 79, 52, 186, 669, 81, 82, 667, 666, 172,
/* 410 */ 127, 664, 190, 663, 662, 661, 660, 652, 129, 658,
/* 420 */ 49, 656, 654, 766, 781, 782, 795, 104, 195, 44,
/* 430 */ 193, 191, 189, 187, 210, 105, 75, 28, 221, 199,
/* 440 */ 222, 223, 53, 225, 224, 149, 226, 62, 65, 703,
/* 450 */ 227, 237, 630, 173, 174, 629, 177, 665, 628, 119,
/* 460 */ 176, 92, 121, 125, 120, 751, 122, 123, 659, 124,
/* 470 */ 108, 106, 107, 109, 110, 111, 94, 1, 2, 621,
/* 480 */ 180, 184, 541, 55, 57, 555, 101, 156, 188, 198,
/* 490 */ 19, 63, 5, 560, 102, 4, 6, 601, 20, 15,
/* 500 */ 7, 488, 484, 200, 482, 481, 480, 477, 450, 209,
/* 510 */ 66, 45, 22, 69, 71, 517, 516, 514, 471, 54,
/* 520 */ 469, 461, 467, 463, 465, 459, 457, 487, 486, 485,
/* 530 */ 483, 479, 478, 476, 46, 448, 421, 419, 634, 633,
/* 540 */ 633, 633, 633, 633, 633, 633, 633, 633, 633, 633,
/* 550 */ 96, 97,
};
static const YYCODETYPE yy_lookahead[] = {
/* 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,
/* 0 */ 211, 1, 262, 215, 208, 209, 218, 5, 262, 9,
/* 10 */ 262, 271, 272, 13, 14, 262, 16, 17, 272, 271,
/* 20 */ 272, 21, 262, 1, 24, 25, 26, 27, 28, 228,
/* 30 */ 211, 9, 262, 33, 34, 33, 34, 37, 38, 39,
/* 40 */ 13, 14, 246, 16, 17, 37, 38, 39, 21, 248,
/* 50 */ 1, 24, 25, 26, 27, 28, 260, 268, 9, 270,
/* 60 */ 33, 34, 211, 211, 37, 38, 39, 45, 46, 47,
/* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
/* 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,
/* 80 */ 13, 14, 78, 16, 17, 266, 262, 268, 21, 211,
/* 90 */ 262, 24, 25, 26, 27, 28, 245, 245, 247, 247,
/* 100 */ 33, 34, 63, 103, 37, 38, 39, 211, 262, 85,
/* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
/* 120 */ 96, 97, 98, 245, 262, 247, 227, 100, 229, 230,
/* 130 */ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
/* 140 */ 241, 14, 99, 16, 17, 102, 103, 211, 21, 210,
/* 150 */ 211, 24, 25, 26, 27, 28, 60, 61, 62, 263,
/* 160 */ 33, 34, 228, 211, 37, 38, 39, 128, 16, 17,
/* 170 */ 131, 132, 5, 21, 7, 211, 24, 25, 26, 27,
/* 180 */ 28, 245, 248, 247, 228, 33, 34, 127, 44, 37,
/* 190 */ 38, 39, 1, 2, 134, 135, 5, 246, 7, 211,
/* 200 */ 9, 59, 1, 2, 248, 99, 5, 63, 7, 262,
/* 210 */ 9, 260, 106, 69, 70, 71, 264, 116, 117, 85,
/* 220 */ 86, 77, 88, 89, 33, 34, 211, 93, 37, 95,
/* 230 */ 96, 97, 268, 72, 33, 34, 1, 2, 37, 78,
/* 240 */ 5, 99, 7, 99, 9, 64, 65, 66, 67, 68,
/* 250 */ 106, 25, 26, 27, 28, 74, 268, 242, 211, 33,
/* 260 */ 34, 104, 249, 37, 38, 39, 109, 262, 33, 34,
/* 270 */ 126, 227, 100, 229, 261, 231, 232, 133, 215, 107,
/* 280 */ 236, 218, 238, 239, 240, 215, 2, 262, 218, 5,
/* 290 */ 99, 7, 100, 9, 247, 5, 104, 7, 33, 34,
/* 300 */ 99, 110, 37, 38, 39, 64, 65, 66, 67, 68,
/* 310 */ 1, 110, 262, 104, 129, 130, 125, 33, 34, 64,
/* 320 */ 65, 66, 67, 68, 99, 104, 125, 262, 100, 100,
/* 330 */ 121, 106, 104, 104, 99, 262, 100, 100, 100, 100,
/* 340 */ 104, 104, 104, 104, 123, 110, 37, 129, 130, 5,
/* 350 */ 5, 7, 7, 72, 73, 262, 262, 262, 248, 262,
/* 360 */ 125, 262, 248, 243, 243, 243, 243, 243, 243, 211,
/* 370 */ 244, 243, 269, 211, 269, 246, 211, 211, 106, 211,
/* 380 */ 250, 211, 211, 246, 211, 211, 211, 211, 211, 105,
/* 390 */ 211, 211, 59, 211, 211, 211, 110, 211, 211, 211,
/* 400 */ 211, 211, 120, 265, 211, 211, 211, 211, 211, 211,
/* 410 */ 211, 211, 265, 211, 211, 211, 211, 211, 211, 211,
/* 420 */ 122, 211, 211, 259, 212, 212, 212, 258, 114, 119,
/* 430 */ 118, 113, 112, 111, 75, 257, 84, 124, 83, 212,
/* 440 */ 49, 80, 212, 53, 82, 212, 81, 216, 216, 226,
/* 450 */ 79, 75, 5, 136, 5, 5, 5, 212, 5, 225,
/* 460 */ 136, 213, 220, 219, 224, 246, 223, 221, 212, 222,
/* 470 */ 254, 256, 255, 253, 252, 251, 213, 217, 214, 87,
/* 480 */ 127, 107, 100, 108, 104, 100, 99, 1, 99, 101,
/* 490 */ 104, 72, 115, 100, 99, 99, 115, 100, 104, 99,
/* 500 */ 99, 9, 5, 101, 5, 5, 5, 5, 76, 15,
/* 510 */ 72, 16, 104, 130, 130, 5, 5, 100, 5, 99,
/* 520 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 530 */ 5, 5, 5, 5, 104, 76, 59, 58, 0, 273,
/* 540 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 550 */ 21, 21, 273, 273, 273, 273, 273, 273, 273, 273,
/* 560 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 570 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 580 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 590 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 600 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 610 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 620 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 630 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 640 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 650 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 660 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 670 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 680 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 690 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 700 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 710 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 720 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 730 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 740 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
/* 750 */ 273, 273, 273, 273, 273, 273, 273, 273, 273,
};
#define YY_SHIFT_COUNT (241)
#define YY_SHIFT_COUNT (242)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (533)
#define YY_SHIFT_MAX (538)
static const unsigned short int yy_shift_ofst[] = {
/* 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,
/* 0 */ 144, 24, 134, 191, 235, 49, 49, 49, 49, 49,
/* 10 */ 49, 0, 22, 235, 284, 284, 284, 106, 49, 49,
/* 20 */ 49, 49, 49, 161, 4, 4, 552, 201, 235, 235,
/* 30 */ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
/* 40 */ 235, 235, 235, 235, 235, 284, 284, 2, 2, 2,
/* 50 */ 2, 2, 2, 43, 2, 225, 49, 49, 101, 101,
/* 60 */ 157, 49, 49, 49, 49, 49, 49, 49, 49, 49,
/* 70 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
/* 80 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
/* 90 */ 49, 49, 49, 49, 49, 49, 49, 49, 272, 333,
/* 100 */ 333, 286, 286, 333, 282, 298, 310, 314, 312, 318,
/* 110 */ 320, 322, 313, 272, 333, 333, 359, 359, 333, 352,
/* 120 */ 355, 391, 361, 362, 390, 365, 371, 333, 376, 333,
/* 130 */ 376, 552, 552, 27, 67, 67, 67, 127, 152, 226,
/* 140 */ 226, 226, 181, 265, 265, 265, 265, 241, 255, 39,
/* 150 */ 60, 8, 8, 96, 172, 192, 228, 229, 236, 167,
/* 160 */ 290, 309, 142, 221, 209, 237, 238, 239, 185, 218,
/* 170 */ 344, 345, 281, 447, 317, 449, 450, 324, 451, 453,
/* 180 */ 392, 353, 374, 382, 375, 380, 385, 387, 486, 389,
/* 190 */ 393, 395, 386, 377, 394, 381, 397, 396, 400, 388,
/* 200 */ 401, 402, 419, 492, 497, 499, 500, 501, 502, 432,
/* 210 */ 494, 438, 495, 383, 384, 408, 510, 511, 417, 420,
/* 220 */ 408, 513, 515, 516, 517, 518, 519, 520, 521, 522,
/* 230 */ 523, 524, 525, 526, 527, 528, 430, 459, 529, 530,
/* 240 */ 477, 479, 538,
};
#define YY_REDUCE_COUNT (132)
#define YY_REDUCE_MIN (-257)
#define YY_REDUCE_MAX (261)
#define YY_REDUCE_MIN (-260)
#define YY_REDUCE_MAX (264)
static const short yy_reduce_ofst[] = {
/* 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,
/* 0 */ -204, -101, 44, -260, -252, -211, -181, -149, -148, -122,
/* 10 */ -64, -104, -61, -254, -199, -66, -44, -49, -48, -36,
/* 20 */ -12, 15, 47, -212, 63, 70, 13, -247, -240, -230,
/* 30 */ -176, -172, -154, -138, -53, 5, 25, 50, 65, 73,
/* 40 */ 93, 94, 95, 97, 99, 110, 114, 120, 121, 122,
/* 50 */ 123, 124, 125, 126, 128, 129, 158, 162, 103, 105,
/* 60 */ 130, 165, 166, 168, 170, 171, 173, 174, 175, 176,
/* 70 */ 177, 179, 180, 182, 183, 184, 186, 187, 188, 189,
/* 80 */ 190, 193, 194, 195, 196, 197, 198, 199, 200, 202,
/* 90 */ 203, 204, 205, 206, 207, 208, 210, 211, 137, 212,
/* 100 */ 213, 138, 147, 214, 164, 169, 178, 215, 217, 216,
/* 110 */ 220, 222, 224, 219, 227, 230, 231, 232, 233, 223,
/* 120 */ 234, 240, 242, 243, 246, 247, 244, 245, 248, 256,
/* 130 */ 263, 260, 264,
};
static const YYACTIONTYPE yy_default[] = {
/* 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,
/* 0 */ 631, 683, 672, 849, 849, 631, 631, 631, 631, 631,
/* 10 */ 631, 779, 649, 849, 631, 631, 631, 631, 631, 631,
/* 20 */ 631, 631, 631, 685, 685, 685, 774, 631, 631, 631,
/* 30 */ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
/* 40 */ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
/* 50 */ 631, 631, 631, 631, 631, 631, 631, 631, 798, 798,
/* 60 */ 772, 631, 631, 631, 631, 631, 631, 631, 631, 631,
/* 70 */ 631, 631, 631, 631, 631, 631, 631, 631, 631, 670,
/* 80 */ 631, 668, 631, 631, 631, 631, 631, 631, 631, 631,
/* 90 */ 631, 631, 631, 631, 631, 657, 631, 631, 631, 651,
/* 100 */ 651, 631, 631, 651, 805, 809, 803, 791, 799, 790,
/* 110 */ 786, 785, 813, 631, 651, 651, 680, 680, 651, 701,
/* 120 */ 699, 697, 689, 695, 691, 693, 687, 651, 678, 651,
/* 130 */ 678, 718, 733, 631, 814, 848, 804, 832, 831, 844,
/* 140 */ 838, 837, 631, 836, 835, 834, 833, 631, 631, 631,
/* 150 */ 631, 840, 839, 631, 631, 631, 631, 631, 631, 631,
/* 160 */ 631, 631, 816, 810, 806, 631, 631, 631, 631, 631,
/* 170 */ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
/* 180 */ 631, 631, 771, 631, 631, 780, 631, 631, 631, 631,
/* 190 */ 631, 631, 800, 631, 792, 631, 631, 631, 631, 631,
/* 200 */ 631, 748, 631, 631, 631, 631, 631, 631, 631, 631,
/* 210 */ 631, 631, 631, 631, 631, 853, 631, 631, 631, 742,
/* 220 */ 851, 631, 631, 631, 631, 631, 631, 631, 631, 631,
/* 230 */ 631, 631, 631, 631, 631, 631, 704, 631, 655, 653,
/* 240 */ 631, 647, 631,
};
/********** End of lemon-generated parsing tables *****************************/
......@@ -521,6 +522,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* MAXTABLES => nothing */
0, /* CACHE => nothing */
0, /* REPLICA => nothing */
0, /* QUORUM => nothing */
0, /* DAYS => nothing */
0, /* MINROWS => nothing */
0, /* MAXROWS => nothing */
......@@ -813,188 +815,190 @@ static const char *const yyTokenName[] = {
/* 86 */ "MAXTABLES",
/* 87 */ "CACHE",
/* 88 */ "REPLICA",
/* 89 */ "DAYS",
/* 90 */ "MINROWS",
/* 91 */ "MAXROWS",
/* 92 */ "BLOCKS",
/* 93 */ "CTIME",
/* 94 */ "WAL",
/* 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",
/* 89 */ "QUORUM",
/* 90 */ "DAYS",
/* 91 */ "MINROWS",
/* 92 */ "MAXROWS",
/* 93 */ "BLOCKS",
/* 94 */ "CTIME",
/* 95 */ "WAL",
/* 96 */ "FSYNC",
/* 97 */ "COMP",
/* 98 */ "PRECISION",
/* 99 */ "LP",
/* 100 */ "RP",
/* 101 */ "TAGS",
/* 102 */ "USING",
/* 103 */ "AS",
/* 104 */ "COMMA",
/* 105 */ "NULL",
/* 106 */ "SELECT",
/* 107 */ "UNION",
/* 108 */ "ALL",
/* 109 */ "FROM",
/* 110 */ "VARIABLE",
/* 111 */ "INTERVAL",
/* 112 */ "FILL",
/* 113 */ "SLIDING",
/* 114 */ "ORDER",
/* 115 */ "BY",
/* 116 */ "ASC",
/* 117 */ "DESC",
/* 118 */ "GROUP",
/* 119 */ "HAVING",
/* 120 */ "LIMIT",
/* 121 */ "OFFSET",
/* 122 */ "SLIMIT",
/* 123 */ "SOFFSET",
/* 124 */ "WHERE",
/* 125 */ "NOW",
/* 126 */ "RESET",
/* 127 */ "QUERY",
/* 128 */ "ADD",
/* 129 */ "COLUMN",
/* 130 */ "TAG",
/* 131 */ "CHANGE",
/* 132 */ "SET",
/* 133 */ "KILL",
/* 134 */ "CONNECTION",
/* 135 */ "STREAM",
/* 136 */ "COLON",
/* 137 */ "ABORT",
/* 138 */ "AFTER",
/* 139 */ "ATTACH",
/* 140 */ "BEFORE",
/* 141 */ "BEGIN",
/* 142 */ "CASCADE",
/* 143 */ "CLUSTER",
/* 144 */ "CONFLICT",
/* 145 */ "COPY",
/* 146 */ "DEFERRED",
/* 147 */ "DELIMITERS",
/* 148 */ "DETACH",
/* 149 */ "EACH",
/* 150 */ "END",
/* 151 */ "EXPLAIN",
/* 152 */ "FAIL",
/* 153 */ "FOR",
/* 154 */ "IGNORE",
/* 155 */ "IMMEDIATE",
/* 156 */ "INITIALLY",
/* 157 */ "INSTEAD",
/* 158 */ "MATCH",
/* 159 */ "KEY",
/* 160 */ "OF",
/* 161 */ "RAISE",
/* 162 */ "REPLACE",
/* 163 */ "RESTRICT",
/* 164 */ "ROW",
/* 165 */ "STATEMENT",
/* 166 */ "TRIGGER",
/* 167 */ "VIEW",
/* 168 */ "COUNT",
/* 169 */ "SUM",
/* 170 */ "AVG",
/* 171 */ "MIN",
/* 172 */ "MAX",
/* 173 */ "FIRST",
/* 174 */ "LAST",
/* 175 */ "TOP",
/* 176 */ "BOTTOM",
/* 177 */ "STDDEV",
/* 178 */ "PERCENTILE",
/* 179 */ "APERCENTILE",
/* 180 */ "LEASTSQUARES",
/* 181 */ "HISTOGRAM",
/* 182 */ "DIFF",
/* 183 */ "SPREAD",
/* 184 */ "TWA",
/* 185 */ "INTERP",
/* 186 */ "LAST_ROW",
/* 187 */ "RATE",
/* 188 */ "IRATE",
/* 189 */ "SUM_RATE",
/* 190 */ "SUM_IRATE",
/* 191 */ "AVG_RATE",
/* 192 */ "AVG_IRATE",
/* 193 */ "TBID",
/* 194 */ "SEMI",
/* 195 */ "NONE",
/* 196 */ "PREV",
/* 197 */ "LINEAR",
/* 198 */ "IMPORT",
/* 199 */ "METRIC",
/* 200 */ "TBNAME",
/* 201 */ "JOIN",
/* 202 */ "METRICS",
/* 203 */ "STABLE",
/* 204 */ "INSERT",
/* 205 */ "INTO",
/* 206 */ "VALUES",
/* 207 */ "error",
/* 208 */ "program",
/* 209 */ "cmd",
/* 210 */ "dbPrefix",
/* 211 */ "ids",
/* 212 */ "cpxName",
/* 213 */ "ifexists",
/* 214 */ "alter_db_optr",
/* 215 */ "acct_optr",
/* 216 */ "ifnotexists",
/* 217 */ "db_optr",
/* 218 */ "pps",
/* 219 */ "tseries",
/* 220 */ "dbs",
/* 221 */ "streams",
/* 222 */ "storage",
/* 223 */ "qtime",
/* 224 */ "users",
/* 225 */ "conns",
/* 226 */ "state",
/* 227 */ "keep",
/* 228 */ "tagitemlist",
/* 229 */ "tables",
/* 230 */ "cache",
/* 231 */ "replica",
/* 232 */ "quorum",
/* 233 */ "days",
/* 234 */ "minrows",
/* 235 */ "maxrows",
/* 236 */ "blocks",
/* 237 */ "ctime",
/* 238 */ "wal",
/* 239 */ "fsync",
/* 240 */ "comp",
/* 241 */ "prec",
/* 242 */ "typename",
/* 243 */ "signed",
/* 244 */ "create_table_args",
/* 245 */ "columnlist",
/* 246 */ "select",
/* 247 */ "column",
/* 248 */ "tagitem",
/* 249 */ "selcollist",
/* 250 */ "from",
/* 251 */ "where_opt",
/* 252 */ "interval_opt",
/* 253 */ "fill_opt",
/* 254 */ "sliding_opt",
/* 255 */ "groupby_opt",
/* 256 */ "orderby_opt",
/* 257 */ "having_opt",
/* 258 */ "slimit_opt",
/* 259 */ "limit_opt",
/* 260 */ "union",
/* 261 */ "sclp",
/* 262 */ "expr",
/* 263 */ "as",
/* 264 */ "tablelist",
/* 265 */ "tmvar",
/* 266 */ "sortlist",
/* 267 */ "sortitem",
/* 268 */ "item",
/* 269 */ "sortorder",
/* 270 */ "grouplist",
/* 271 */ "exprlist",
/* 272 */ "expritem",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
......@@ -1076,155 +1080,158 @@ static const char *const yyRuleName[] = {
/* 71 */ "tables ::= MAXTABLES INTEGER",
/* 72 */ "cache ::= CACHE INTEGER",
/* 73 */ "replica ::= REPLICA INTEGER",
/* 74 */ "days ::= DAYS INTEGER",
/* 75 */ "minrows ::= MINROWS INTEGER",
/* 76 */ "maxrows ::= MAXROWS INTEGER",
/* 77 */ "blocks ::= BLOCKS INTEGER",
/* 78 */ "ctime ::= CTIME INTEGER",
/* 79 */ "wal ::= WAL 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",
/* 74 */ "quorum ::= QUORUM INTEGER",
/* 75 */ "days ::= DAYS INTEGER",
/* 76 */ "minrows ::= MINROWS INTEGER",
/* 77 */ "maxrows ::= MAXROWS INTEGER",
/* 78 */ "blocks ::= BLOCKS INTEGER",
/* 79 */ "ctime ::= CTIME INTEGER",
/* 80 */ "wal ::= WAL INTEGER",
/* 81 */ "fsync ::= FSYNC INTEGER",
/* 82 */ "comp ::= COMP INTEGER",
/* 83 */ "prec ::= PRECISION STRING",
/* 84 */ "db_optr ::=",
/* 85 */ "db_optr ::= db_optr tables",
/* 86 */ "db_optr ::= db_optr cache",
/* 87 */ "db_optr ::= db_optr replica",
/* 88 */ "db_optr ::= db_optr quorum",
/* 89 */ "db_optr ::= db_optr days",
/* 90 */ "db_optr ::= db_optr minrows",
/* 91 */ "db_optr ::= db_optr maxrows",
/* 92 */ "db_optr ::= db_optr blocks",
/* 93 */ "db_optr ::= db_optr ctime",
/* 94 */ "db_optr ::= db_optr wal",
/* 95 */ "db_optr ::= db_optr fsync",
/* 96 */ "db_optr ::= db_optr comp",
/* 97 */ "db_optr ::= db_optr prec",
/* 98 */ "db_optr ::= db_optr keep",
/* 99 */ "alter_db_optr ::=",
/* 100 */ "alter_db_optr ::= alter_db_optr replica",
/* 101 */ "alter_db_optr ::= alter_db_optr quorum",
/* 102 */ "alter_db_optr ::= alter_db_optr tables",
/* 103 */ "alter_db_optr ::= alter_db_optr keep",
/* 104 */ "alter_db_optr ::= alter_db_optr blocks",
/* 105 */ "alter_db_optr ::= alter_db_optr comp",
/* 106 */ "alter_db_optr ::= alter_db_optr wal",
/* 107 */ "alter_db_optr ::= alter_db_optr fsync",
/* 108 */ "typename ::= ids",
/* 109 */ "typename ::= ids LP signed RP",
/* 110 */ "signed ::= INTEGER",
/* 111 */ "signed ::= PLUS INTEGER",
/* 112 */ "signed ::= MINUS INTEGER",
/* 113 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args",
/* 114 */ "create_table_args ::= LP columnlist RP",
/* 115 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP",
/* 116 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP",
/* 117 */ "create_table_args ::= AS select",
/* 118 */ "columnlist ::= columnlist COMMA column",
/* 119 */ "columnlist ::= column",
/* 120 */ "column ::= ids typename",
/* 121 */ "tagitemlist ::= tagitemlist COMMA tagitem",
/* 122 */ "tagitemlist ::= tagitem",
/* 123 */ "tagitem ::= INTEGER",
/* 124 */ "tagitem ::= FLOAT",
/* 125 */ "tagitem ::= STRING",
/* 126 */ "tagitem ::= BOOL",
/* 127 */ "tagitem ::= NULL",
/* 128 */ "tagitem ::= MINUS INTEGER",
/* 129 */ "tagitem ::= MINUS FLOAT",
/* 130 */ "tagitem ::= PLUS INTEGER",
/* 131 */ "tagitem ::= PLUS FLOAT",
/* 132 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
/* 133 */ "union ::= select",
/* 134 */ "union ::= LP union RP",
/* 135 */ "union ::= union UNION ALL select",
/* 136 */ "union ::= union UNION ALL LP select RP",
/* 137 */ "cmd ::= union",
/* 138 */ "select ::= SELECT selcollist",
/* 139 */ "sclp ::= selcollist COMMA",
/* 140 */ "sclp ::=",
/* 141 */ "selcollist ::= sclp expr as",
/* 142 */ "selcollist ::= sclp STAR",
/* 143 */ "as ::= AS ids",
/* 144 */ "as ::= ids",
/* 145 */ "as ::=",
/* 146 */ "from ::= FROM tablelist",
/* 147 */ "tablelist ::= ids cpxName",
/* 148 */ "tablelist ::= tablelist COMMA ids cpxName",
/* 149 */ "tmvar ::= VARIABLE",
/* 150 */ "interval_opt ::= INTERVAL LP tmvar RP",
/* 151 */ "interval_opt ::=",
/* 152 */ "fill_opt ::=",
/* 153 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 154 */ "fill_opt ::= FILL LP ID RP",
/* 155 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 156 */ "sliding_opt ::=",
/* 157 */ "orderby_opt ::=",
/* 158 */ "orderby_opt ::= ORDER BY sortlist",
/* 159 */ "sortlist ::= sortlist COMMA item sortorder",
/* 160 */ "sortlist ::= item sortorder",
/* 161 */ "item ::= ids cpxName",
/* 162 */ "sortorder ::= ASC",
/* 163 */ "sortorder ::= DESC",
/* 164 */ "sortorder ::=",
/* 165 */ "groupby_opt ::=",
/* 166 */ "groupby_opt ::= GROUP BY grouplist",
/* 167 */ "grouplist ::= grouplist COMMA item",
/* 168 */ "grouplist ::= item",
/* 169 */ "having_opt ::=",
/* 170 */ "having_opt ::= HAVING expr",
/* 171 */ "limit_opt ::=",
/* 172 */ "limit_opt ::= LIMIT signed",
/* 173 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 174 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 175 */ "slimit_opt ::=",
/* 176 */ "slimit_opt ::= SLIMIT signed",
/* 177 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 178 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 179 */ "where_opt ::=",
/* 180 */ "where_opt ::= WHERE expr",
/* 181 */ "expr ::= LP expr RP",
/* 182 */ "expr ::= ID",
/* 183 */ "expr ::= ID DOT ID",
/* 184 */ "expr ::= ID DOT STAR",
/* 185 */ "expr ::= INTEGER",
/* 186 */ "expr ::= MINUS INTEGER",
/* 187 */ "expr ::= PLUS INTEGER",
/* 188 */ "expr ::= FLOAT",
/* 189 */ "expr ::= MINUS FLOAT",
/* 190 */ "expr ::= PLUS FLOAT",
/* 191 */ "expr ::= STRING",
/* 192 */ "expr ::= NOW",
/* 193 */ "expr ::= VARIABLE",
/* 194 */ "expr ::= BOOL",
/* 195 */ "expr ::= ID LP exprlist RP",
/* 196 */ "expr ::= ID LP STAR RP",
/* 197 */ "expr ::= expr AND expr",
/* 198 */ "expr ::= expr OR expr",
/* 199 */ "expr ::= expr LT expr",
/* 200 */ "expr ::= expr GT expr",
/* 201 */ "expr ::= expr LE expr",
/* 202 */ "expr ::= expr GE expr",
/* 203 */ "expr ::= expr NE expr",
/* 204 */ "expr ::= expr EQ expr",
/* 205 */ "expr ::= expr PLUS expr",
/* 206 */ "expr ::= expr MINUS expr",
/* 207 */ "expr ::= expr STAR expr",
/* 208 */ "expr ::= expr SLASH expr",
/* 209 */ "expr ::= expr REM expr",
/* 210 */ "expr ::= expr LIKE expr",
/* 211 */ "expr ::= expr IN LP exprlist RP",
/* 212 */ "exprlist ::= exprlist COMMA expritem",
/* 213 */ "exprlist ::= expritem",
/* 214 */ "expritem ::= expr",
/* 215 */ "expritem ::=",
/* 216 */ "cmd ::= RESET QUERY CACHE",
/* 217 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 218 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 219 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 220 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 221 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 222 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 223 */ "cmd ::= KILL CONNECTION INTEGER",
/* 224 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 225 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
};
#endif /* NDEBUG */
......@@ -1345,50 +1352,50 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
case 226: /* keep */
case 227: /* tagitemlist */
case 251: /* fill_opt */
case 253: /* groupby_opt */
case 254: /* orderby_opt */
case 264: /* sortlist */
case 268: /* grouplist */
case 227: /* keep */
case 228: /* tagitemlist */
case 253: /* fill_opt */
case 255: /* groupby_opt */
case 256: /* orderby_opt */
case 266: /* sortlist */
case 270: /* grouplist */
{
tVariantListDestroy((yypminor->yy494));
tVariantListDestroy((yypminor->yy498));
}
break;
case 243: /* columnlist */
case 245: /* columnlist */
{
tFieldListDestroy((yypminor->yy449));
tFieldListDestroy((yypminor->yy523));
}
break;
case 244: /* select */
case 246: /* select */
{
doDestroyQuerySql((yypminor->yy150));
doDestroyQuerySql((yypminor->yy414));
}
break;
case 247: /* selcollist */
case 259: /* sclp */
case 269: /* exprlist */
case 249: /* selcollist */
case 261: /* sclp */
case 271: /* exprlist */
{
tSQLExprListDestroy((yypminor->yy224));
tSQLExprListDestroy((yypminor->yy290));
}
break;
case 249: /* where_opt */
case 255: /* having_opt */
case 260: /* expr */
case 270: /* expritem */
case 251: /* where_opt */
case 257: /* having_opt */
case 262: /* expr */
case 272: /* expritem */
{
tSQLExprDestroy((yypminor->yy66));
tSQLExprDestroy((yypminor->yy64));
}
break;
case 258: /* union */
case 260: /* union */
{
destroyAllSelectClause((yypminor->yy25));
destroyAllSelectClause((yypminor->yy231));
}
break;
case 265: /* sortitem */
case 267: /* sortitem */
{
tVariantDestroy(&(yypminor->yy312));
tVariantDestroy(&(yypminor->yy134));
}
break;
/********* End destructor definitions *****************************************/
......@@ -1682,229 +1689,232 @@ 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[] = {
{ 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 */
{ 208, -1 }, /* (0) program ::= cmd */
{ 209, -2 }, /* (1) cmd ::= SHOW DATABASES */
{ 209, -2 }, /* (2) cmd ::= SHOW MNODES */
{ 209, -2 }, /* (3) cmd ::= SHOW DNODES */
{ 209, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */
{ 209, -2 }, /* (5) cmd ::= SHOW USERS */
{ 209, -2 }, /* (6) cmd ::= SHOW MODULES */
{ 209, -2 }, /* (7) cmd ::= SHOW QUERIES */
{ 209, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */
{ 209, -2 }, /* (9) cmd ::= SHOW STREAMS */
{ 209, -2 }, /* (10) cmd ::= SHOW CONFIGS */
{ 209, -2 }, /* (11) cmd ::= SHOW SCORES */
{ 209, -2 }, /* (12) cmd ::= SHOW GRANTS */
{ 209, -2 }, /* (13) cmd ::= SHOW VNODES */
{ 209, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */
{ 210, 0 }, /* (15) dbPrefix ::= */
{ 210, -2 }, /* (16) dbPrefix ::= ids DOT */
{ 212, 0 }, /* (17) cpxName ::= */
{ 212, -2 }, /* (18) cpxName ::= DOT ids */
{ 209, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */
{ 209, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{ 209, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */
{ 209, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{ 209, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */
{ 209, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 209, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */
{ 209, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */
{ 209, -3 }, /* (27) cmd ::= DROP DNODE ids */
{ 209, -3 }, /* (28) cmd ::= DROP USER ids */
{ 209, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */
{ 209, -2 }, /* (30) cmd ::= USE ids */
{ 209, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */
{ 209, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */
{ 209, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 209, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */
{ 209, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */
{ 209, -3 }, /* (36) cmd ::= ALTER LOCAL ids */
{ 209, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */
{ 209, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 209, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 209, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 211, -1 }, /* (41) ids ::= ID */
{ 211, -1 }, /* (42) ids ::= STRING */
{ 213, -2 }, /* (43) ifexists ::= IF EXISTS */
{ 213, 0 }, /* (44) ifexists ::= */
{ 216, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */
{ 216, 0 }, /* (46) ifnotexists ::= */
{ 209, -3 }, /* (47) cmd ::= CREATE DNODE ids */
{ 209, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 209, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 209, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */
{ 218, 0 }, /* (51) pps ::= */
{ 218, -2 }, /* (52) pps ::= PPS INTEGER */
{ 219, 0 }, /* (53) tseries ::= */
{ 219, -2 }, /* (54) tseries ::= TSERIES INTEGER */
{ 220, 0 }, /* (55) dbs ::= */
{ 220, -2 }, /* (56) dbs ::= DBS INTEGER */
{ 221, 0 }, /* (57) streams ::= */
{ 221, -2 }, /* (58) streams ::= STREAMS INTEGER */
{ 222, 0 }, /* (59) storage ::= */
{ 222, -2 }, /* (60) storage ::= STORAGE INTEGER */
{ 223, 0 }, /* (61) qtime ::= */
{ 223, -2 }, /* (62) qtime ::= QTIME INTEGER */
{ 224, 0 }, /* (63) users ::= */
{ 224, -2 }, /* (64) users ::= USERS INTEGER */
{ 225, 0 }, /* (65) conns ::= */
{ 225, -2 }, /* (66) conns ::= CONNS INTEGER */
{ 226, 0 }, /* (67) state ::= */
{ 226, -2 }, /* (68) state ::= STATE ids */
{ 215, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 227, -2 }, /* (70) keep ::= KEEP tagitemlist */
{ 229, -2 }, /* (71) tables ::= MAXTABLES INTEGER */
{ 230, -2 }, /* (72) cache ::= CACHE INTEGER */
{ 231, -2 }, /* (73) replica ::= REPLICA INTEGER */
{ 232, -2 }, /* (74) quorum ::= QUORUM INTEGER */
{ 233, -2 }, /* (75) days ::= DAYS INTEGER */
{ 234, -2 }, /* (76) minrows ::= MINROWS INTEGER */
{ 235, -2 }, /* (77) maxrows ::= MAXROWS INTEGER */
{ 236, -2 }, /* (78) blocks ::= BLOCKS INTEGER */
{ 237, -2 }, /* (79) ctime ::= CTIME INTEGER */
{ 238, -2 }, /* (80) wal ::= WAL INTEGER */
{ 239, -2 }, /* (81) fsync ::= FSYNC INTEGER */
{ 240, -2 }, /* (82) comp ::= COMP INTEGER */
{ 241, -2 }, /* (83) prec ::= PRECISION STRING */
{ 217, 0 }, /* (84) db_optr ::= */
{ 217, -2 }, /* (85) db_optr ::= db_optr tables */
{ 217, -2 }, /* (86) db_optr ::= db_optr cache */
{ 217, -2 }, /* (87) db_optr ::= db_optr replica */
{ 217, -2 }, /* (88) db_optr ::= db_optr quorum */
{ 217, -2 }, /* (89) db_optr ::= db_optr days */
{ 217, -2 }, /* (90) db_optr ::= db_optr minrows */
{ 217, -2 }, /* (91) db_optr ::= db_optr maxrows */
{ 217, -2 }, /* (92) db_optr ::= db_optr blocks */
{ 217, -2 }, /* (93) db_optr ::= db_optr ctime */
{ 217, -2 }, /* (94) db_optr ::= db_optr wal */
{ 217, -2 }, /* (95) db_optr ::= db_optr fsync */
{ 217, -2 }, /* (96) db_optr ::= db_optr comp */
{ 217, -2 }, /* (97) db_optr ::= db_optr prec */
{ 217, -2 }, /* (98) db_optr ::= db_optr keep */
{ 214, 0 }, /* (99) alter_db_optr ::= */
{ 214, -2 }, /* (100) alter_db_optr ::= alter_db_optr replica */
{ 214, -2 }, /* (101) alter_db_optr ::= alter_db_optr quorum */
{ 214, -2 }, /* (102) alter_db_optr ::= alter_db_optr tables */
{ 214, -2 }, /* (103) alter_db_optr ::= alter_db_optr keep */
{ 214, -2 }, /* (104) alter_db_optr ::= alter_db_optr blocks */
{ 214, -2 }, /* (105) alter_db_optr ::= alter_db_optr comp */
{ 214, -2 }, /* (106) alter_db_optr ::= alter_db_optr wal */
{ 214, -2 }, /* (107) alter_db_optr ::= alter_db_optr fsync */
{ 242, -1 }, /* (108) typename ::= ids */
{ 242, -4 }, /* (109) typename ::= ids LP signed RP */
{ 243, -1 }, /* (110) signed ::= INTEGER */
{ 243, -2 }, /* (111) signed ::= PLUS INTEGER */
{ 243, -2 }, /* (112) signed ::= MINUS INTEGER */
{ 209, -6 }, /* (113) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */
{ 244, -3 }, /* (114) create_table_args ::= LP columnlist RP */
{ 244, -7 }, /* (115) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */
{ 244, -7 }, /* (116) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */
{ 244, -2 }, /* (117) create_table_args ::= AS select */
{ 245, -3 }, /* (118) columnlist ::= columnlist COMMA column */
{ 245, -1 }, /* (119) columnlist ::= column */
{ 247, -2 }, /* (120) column ::= ids typename */
{ 228, -3 }, /* (121) tagitemlist ::= tagitemlist COMMA tagitem */
{ 228, -1 }, /* (122) tagitemlist ::= tagitem */
{ 248, -1 }, /* (123) tagitem ::= INTEGER */
{ 248, -1 }, /* (124) tagitem ::= FLOAT */
{ 248, -1 }, /* (125) tagitem ::= STRING */
{ 248, -1 }, /* (126) tagitem ::= BOOL */
{ 248, -1 }, /* (127) tagitem ::= NULL */
{ 248, -2 }, /* (128) tagitem ::= MINUS INTEGER */
{ 248, -2 }, /* (129) tagitem ::= MINUS FLOAT */
{ 248, -2 }, /* (130) tagitem ::= PLUS INTEGER */
{ 248, -2 }, /* (131) tagitem ::= PLUS FLOAT */
{ 246, -12 }, /* (132) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ 260, -1 }, /* (133) union ::= select */
{ 260, -3 }, /* (134) union ::= LP union RP */
{ 260, -4 }, /* (135) union ::= union UNION ALL select */
{ 260, -6 }, /* (136) union ::= union UNION ALL LP select RP */
{ 209, -1 }, /* (137) cmd ::= union */
{ 246, -2 }, /* (138) select ::= SELECT selcollist */
{ 261, -2 }, /* (139) sclp ::= selcollist COMMA */
{ 261, 0 }, /* (140) sclp ::= */
{ 249, -3 }, /* (141) selcollist ::= sclp expr as */
{ 249, -2 }, /* (142) selcollist ::= sclp STAR */
{ 263, -2 }, /* (143) as ::= AS ids */
{ 263, -1 }, /* (144) as ::= ids */
{ 263, 0 }, /* (145) as ::= */
{ 250, -2 }, /* (146) from ::= FROM tablelist */
{ 264, -2 }, /* (147) tablelist ::= ids cpxName */
{ 264, -4 }, /* (148) tablelist ::= tablelist COMMA ids cpxName */
{ 265, -1 }, /* (149) tmvar ::= VARIABLE */
{ 252, -4 }, /* (150) interval_opt ::= INTERVAL LP tmvar RP */
{ 252, 0 }, /* (151) interval_opt ::= */
{ 253, 0 }, /* (152) fill_opt ::= */
{ 253, -6 }, /* (153) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 253, -4 }, /* (154) fill_opt ::= FILL LP ID RP */
{ 254, -4 }, /* (155) sliding_opt ::= SLIDING LP tmvar RP */
{ 254, 0 }, /* (156) sliding_opt ::= */
{ 256, 0 }, /* (157) orderby_opt ::= */
{ 256, -3 }, /* (158) orderby_opt ::= ORDER BY sortlist */
{ 266, -4 }, /* (159) sortlist ::= sortlist COMMA item sortorder */
{ 266, -2 }, /* (160) sortlist ::= item sortorder */
{ 268, -2 }, /* (161) item ::= ids cpxName */
{ 269, -1 }, /* (162) sortorder ::= ASC */
{ 269, -1 }, /* (163) sortorder ::= DESC */
{ 269, 0 }, /* (164) sortorder ::= */
{ 255, 0 }, /* (165) groupby_opt ::= */
{ 255, -3 }, /* (166) groupby_opt ::= GROUP BY grouplist */
{ 270, -3 }, /* (167) grouplist ::= grouplist COMMA item */
{ 270, -1 }, /* (168) grouplist ::= item */
{ 257, 0 }, /* (169) having_opt ::= */
{ 257, -2 }, /* (170) having_opt ::= HAVING expr */
{ 259, 0 }, /* (171) limit_opt ::= */
{ 259, -2 }, /* (172) limit_opt ::= LIMIT signed */
{ 259, -4 }, /* (173) limit_opt ::= LIMIT signed OFFSET signed */
{ 259, -4 }, /* (174) limit_opt ::= LIMIT signed COMMA signed */
{ 258, 0 }, /* (175) slimit_opt ::= */
{ 258, -2 }, /* (176) slimit_opt ::= SLIMIT signed */
{ 258, -4 }, /* (177) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 258, -4 }, /* (178) slimit_opt ::= SLIMIT signed COMMA signed */
{ 251, 0 }, /* (179) where_opt ::= */
{ 251, -2 }, /* (180) where_opt ::= WHERE expr */
{ 262, -3 }, /* (181) expr ::= LP expr RP */
{ 262, -1 }, /* (182) expr ::= ID */
{ 262, -3 }, /* (183) expr ::= ID DOT ID */
{ 262, -3 }, /* (184) expr ::= ID DOT STAR */
{ 262, -1 }, /* (185) expr ::= INTEGER */
{ 262, -2 }, /* (186) expr ::= MINUS INTEGER */
{ 262, -2 }, /* (187) expr ::= PLUS INTEGER */
{ 262, -1 }, /* (188) expr ::= FLOAT */
{ 262, -2 }, /* (189) expr ::= MINUS FLOAT */
{ 262, -2 }, /* (190) expr ::= PLUS FLOAT */
{ 262, -1 }, /* (191) expr ::= STRING */
{ 262, -1 }, /* (192) expr ::= NOW */
{ 262, -1 }, /* (193) expr ::= VARIABLE */
{ 262, -1 }, /* (194) expr ::= BOOL */
{ 262, -4 }, /* (195) expr ::= ID LP exprlist RP */
{ 262, -4 }, /* (196) expr ::= ID LP STAR RP */
{ 262, -3 }, /* (197) expr ::= expr AND expr */
{ 262, -3 }, /* (198) expr ::= expr OR expr */
{ 262, -3 }, /* (199) expr ::= expr LT expr */
{ 262, -3 }, /* (200) expr ::= expr GT expr */
{ 262, -3 }, /* (201) expr ::= expr LE expr */
{ 262, -3 }, /* (202) expr ::= expr GE expr */
{ 262, -3 }, /* (203) expr ::= expr NE expr */
{ 262, -3 }, /* (204) expr ::= expr EQ expr */
{ 262, -3 }, /* (205) expr ::= expr PLUS expr */
{ 262, -3 }, /* (206) expr ::= expr MINUS expr */
{ 262, -3 }, /* (207) expr ::= expr STAR expr */
{ 262, -3 }, /* (208) expr ::= expr SLASH expr */
{ 262, -3 }, /* (209) expr ::= expr REM expr */
{ 262, -3 }, /* (210) expr ::= expr LIKE expr */
{ 262, -5 }, /* (211) expr ::= expr IN LP exprlist RP */
{ 271, -3 }, /* (212) exprlist ::= exprlist COMMA expritem */
{ 271, -1 }, /* (213) exprlist ::= expritem */
{ 272, -1 }, /* (214) expritem ::= expr */
{ 272, 0 }, /* (215) expritem ::= */
{ 209, -3 }, /* (216) cmd ::= RESET QUERY CACHE */
{ 209, -7 }, /* (217) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 209, -7 }, /* (218) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 209, -7 }, /* (219) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 209, -7 }, /* (220) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 209, -8 }, /* (221) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 209, -9 }, /* (222) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 209, -3 }, /* (223) cmd ::= KILL CONNECTION INTEGER */
{ 209, -5 }, /* (224) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 209, -5 }, /* (225) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
static void yy_accept(yyParser*); /* Forward Declaration */
......@@ -2124,13 +2134,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.yy158, &t);}
{ SSQLToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &t);}
break;
case 39: /* cmd ::= ALTER ACCOUNT ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy73);}
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy149);}
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.yy73);}
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);}
break;
case 41: /* ids ::= ID */
case 42: /* ids ::= STRING */ yytestcase(yyruleno==42);
......@@ -2151,10 +2161,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.yy73);}
{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);}
break;
case 49: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &yymsp[-2].minor.yy0);}
{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &yymsp[-2].minor.yy0);}
break;
case 50: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
......@@ -2183,529 +2193,535 @@ static void yy_reduce(
break;
case 69: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
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;
yylhsminor.yy149.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy149.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy149.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy149.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy149.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy149.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy149.stat = yymsp[0].minor.yy0;
}
yymsp[-8].minor.yy149 = yylhsminor.yy149;
break;
case 70: /* keep ::= KEEP tagitemlist */
{ yymsp[-1].minor.yy494 = yymsp[0].minor.yy494; }
{ yymsp[-1].minor.yy498 = yymsp[0].minor.yy498; }
break;
case 71: /* tables ::= MAXTABLES INTEGER */
case 72: /* cache ::= CACHE INTEGER */ yytestcase(yyruleno==72);
case 73: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==73);
case 74: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==74);
case 75: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==75);
case 76: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==76);
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: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==80);
case 81: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==81);
case 82: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==82);
case 74: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==74);
case 75: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==75);
case 76: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==76);
case 77: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==77);
case 78: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==78);
case 79: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==79);
case 80: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==80);
case 81: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==81);
case 82: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==82);
case 83: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==83);
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
case 83: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy158);}
case 84: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy268);}
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;
case 85: /* db_optr ::= db_optr tables */
case 102: /* alter_db_optr ::= alter_db_optr tables */ yytestcase(yyruleno==102);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxTablesPerVnode = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
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;
case 86: /* db_optr ::= db_optr cache */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 87: /* db_optr ::= db_optr replica */
case 100: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==100);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 88: /* db_optr ::= db_optr quorum */
case 101: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==101);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 89: /* db_optr ::= db_optr days */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 90: /* db_optr ::= db_optr minrows */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 91: /* db_optr ::= db_optr maxrows */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 92: /* db_optr ::= db_optr blocks */
case 104: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==104);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 93: /* db_optr ::= db_optr ctime */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 94: /* db_optr ::= db_optr wal */
case 106: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==106);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 95: /* db_optr ::= db_optr fsync */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 96: /* db_optr ::= db_optr comp */
case 105: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==105);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 97: /* db_optr ::= db_optr prec */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
case 97: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy158);}
case 98: /* db_optr ::= db_optr keep */
case 103: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==103);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.keep = yymsp[0].minor.yy498; }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
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;
case 99: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy268);}
break;
case 105: /* typename ::= ids */
case 107: /* alter_db_optr ::= alter_db_optr fsync */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268;
break;
case 108: /* typename ::= ids */
{
yymsp[0].minor.yy0.type = 0;
tSQLSetColumnType (&yylhsminor.yy181, &yymsp[0].minor.yy0);
tSQLSetColumnType (&yylhsminor.yy223, &yymsp[0].minor.yy0);
}
yymsp[0].minor.yy181 = yylhsminor.yy181;
yymsp[0].minor.yy223 = yylhsminor.yy223;
break;
case 106: /* typename ::= ids LP signed RP */
case 109: /* typename ::= ids LP signed RP */
{
if (yymsp[-1].minor.yy271 <= 0) {
if (yymsp[-1].minor.yy207 <= 0) {
yymsp[-3].minor.yy0.type = 0;
tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0);
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0);
} else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy271; // negative value of name length
tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0);
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy207; // negative value of name length
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0);
}
}
yymsp[-3].minor.yy181 = yylhsminor.yy181;
yymsp[-3].minor.yy223 = yylhsminor.yy223;
break;
case 107: /* signed ::= INTEGER */
{ yylhsminor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy271 = yylhsminor.yy271;
case 110: /* signed ::= INTEGER */
{ yylhsminor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy207 = yylhsminor.yy207;
break;
case 108: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
case 111: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break;
case 109: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy271 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
case 112: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy207 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break;
case 110: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */
case 113: /* 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 111: /* create_table_args ::= LP columnlist RP */
case 114: /* create_table_args ::= LP columnlist RP */
{
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);
yymsp[-2].minor.yy470 = tSetCreateSQLElems(yymsp[-1].minor.yy523, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE);
setSQLInfo(pInfo, yymsp[-2].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
}
break;
case 112: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */
case 115: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */
{
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);
yymsp[-6].minor.yy470 = tSetCreateSQLElems(yymsp[-5].minor.yy523, yymsp[-1].minor.yy523, NULL, NULL, NULL, TSQL_CREATE_STABLE);
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
}
break;
case 113: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */
case 116: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
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);
yymsp[-6].minor.yy470 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy498, NULL, TSQL_CREATE_TABLE_FROM_STABLE);
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
}
break;
case 114: /* create_table_args ::= AS select */
case 117: /* create_table_args ::= AS select */
{
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);
yymsp[-1].minor.yy470 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy414, TSQL_CREATE_STREAM);
setSQLInfo(pInfo, yymsp[-1].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
}
break;
case 115: /* columnlist ::= columnlist COMMA column */
{yylhsminor.yy449 = tFieldListAppend(yymsp[-2].minor.yy449, &yymsp[0].minor.yy181); }
yymsp[-2].minor.yy449 = yylhsminor.yy449;
case 118: /* columnlist ::= columnlist COMMA column */
{yylhsminor.yy523 = tFieldListAppend(yymsp[-2].minor.yy523, &yymsp[0].minor.yy223); }
yymsp[-2].minor.yy523 = yylhsminor.yy523;
break;
case 116: /* columnlist ::= column */
{yylhsminor.yy449 = tFieldListAppend(NULL, &yymsp[0].minor.yy181);}
yymsp[0].minor.yy449 = yylhsminor.yy449;
case 119: /* columnlist ::= column */
{yylhsminor.yy523 = tFieldListAppend(NULL, &yymsp[0].minor.yy223);}
yymsp[0].minor.yy523 = yylhsminor.yy523;
break;
case 117: /* column ::= ids typename */
case 120: /* column ::= ids typename */
{
tSQLSetColumnInfo(&yylhsminor.yy181, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy181);
tSQLSetColumnInfo(&yylhsminor.yy223, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy223);
}
yymsp[-1].minor.yy181 = yylhsminor.yy181;
yymsp[-1].minor.yy223 = yylhsminor.yy223;
break;
case 118: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); }
yymsp[-2].minor.yy494 = yylhsminor.yy494;
case 121: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1); }
yymsp[-2].minor.yy498 = yylhsminor.yy498;
break;
case 119: /* tagitemlist ::= tagitem */
{ yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); }
yymsp[0].minor.yy494 = yylhsminor.yy494;
case 122: /* tagitemlist ::= tagitem */
{ yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); }
yymsp[0].minor.yy498 = yylhsminor.yy498;
break;
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;
case 123: /* tagitem ::= INTEGER */
case 124: /* tagitem ::= FLOAT */ yytestcase(yyruleno==124);
case 125: /* tagitem ::= STRING */ yytestcase(yyruleno==125);
case 126: /* tagitem ::= BOOL */ yytestcase(yyruleno==126);
{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134;
break;
case 124: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy312 = yylhsminor.yy312;
case 127: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134;
break;
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);
case 128: /* tagitem ::= MINUS INTEGER */
case 129: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==129);
case 130: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==130);
case 131: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==131);
{
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.yy312, &yymsp[-1].minor.yy0);
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0);
}
yymsp[-1].minor.yy312 = yylhsminor.yy312;
yymsp[-1].minor.yy134 = yylhsminor.yy134;
break;
case 129: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
case 132: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
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);
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy290, yymsp[-9].minor.yy498, yymsp[-8].minor.yy64, yymsp[-4].minor.yy498, yymsp[-3].minor.yy498, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy498, &yymsp[0].minor.yy216, &yymsp[-1].minor.yy216);
}
yymsp[-11].minor.yy150 = yylhsminor.yy150;
yymsp[-11].minor.yy414 = yylhsminor.yy414;
break;
case 130: /* union ::= select */
{ yylhsminor.yy25 = setSubclause(NULL, yymsp[0].minor.yy150); }
yymsp[0].minor.yy25 = yylhsminor.yy25;
case 133: /* union ::= select */
{ yylhsminor.yy231 = setSubclause(NULL, yymsp[0].minor.yy414); }
yymsp[0].minor.yy231 = yylhsminor.yy231;
break;
case 131: /* union ::= LP union RP */
{ yymsp[-2].minor.yy25 = yymsp[-1].minor.yy25; }
case 134: /* union ::= LP union RP */
{ yymsp[-2].minor.yy231 = yymsp[-1].minor.yy231; }
break;
case 132: /* union ::= union UNION ALL select */
{ yylhsminor.yy25 = appendSelectClause(yymsp[-3].minor.yy25, yymsp[0].minor.yy150); }
yymsp[-3].minor.yy25 = yylhsminor.yy25;
case 135: /* union ::= union UNION ALL select */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-3].minor.yy231, yymsp[0].minor.yy414); }
yymsp[-3].minor.yy231 = yylhsminor.yy231;
break;
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;
case 136: /* union ::= union UNION ALL LP select RP */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-5].minor.yy231, yymsp[-1].minor.yy414); }
yymsp[-5].minor.yy231 = yylhsminor.yy231;
break;
case 134: /* cmd ::= union */
{ setSQLInfo(pInfo, yymsp[0].minor.yy25, NULL, TSDB_SQL_SELECT); }
case 137: /* cmd ::= union */
{ setSQLInfo(pInfo, yymsp[0].minor.yy231, NULL, TSDB_SQL_SELECT); }
break;
case 135: /* select ::= SELECT selcollist */
case 138: /* select ::= SELECT selcollist */
{
yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy224, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy290, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
}
yymsp[-1].minor.yy150 = yylhsminor.yy150;
yymsp[-1].minor.yy414 = yylhsminor.yy414;
break;
case 136: /* sclp ::= selcollist COMMA */
{yylhsminor.yy224 = yymsp[-1].minor.yy224;}
yymsp[-1].minor.yy224 = yylhsminor.yy224;
case 139: /* sclp ::= selcollist COMMA */
{yylhsminor.yy290 = yymsp[-1].minor.yy290;}
yymsp[-1].minor.yy290 = yylhsminor.yy290;
break;
case 137: /* sclp ::= */
{yymsp[1].minor.yy224 = 0;}
case 140: /* sclp ::= */
{yymsp[1].minor.yy290 = 0;}
break;
case 138: /* selcollist ::= sclp expr as */
case 141: /* selcollist ::= sclp expr as */
{
yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224, yymsp[-1].minor.yy66, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290, yymsp[-1].minor.yy64, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
}
yymsp[-2].minor.yy224 = yylhsminor.yy224;
yymsp[-2].minor.yy290 = yylhsminor.yy290;
break;
case 139: /* selcollist ::= sclp STAR */
case 142: /* selcollist ::= sclp STAR */
{
tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL);
yylhsminor.yy224 = tSQLExprListAppend(yymsp[-1].minor.yy224, pNode, 0);
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-1].minor.yy290, pNode, 0);
}
yymsp[-1].minor.yy224 = yylhsminor.yy224;
yymsp[-1].minor.yy290 = yylhsminor.yy290;
break;
case 140: /* as ::= AS ids */
case 143: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
case 141: /* as ::= ids */
case 144: /* as ::= ids */
{ yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
case 142: /* as ::= */
case 145: /* as ::= */
{ yymsp[1].minor.yy0.n = 0; }
break;
case 143: /* from ::= FROM tablelist */
{yymsp[-1].minor.yy494 = yymsp[0].minor.yy494;}
case 146: /* from ::= FROM tablelist */
{yymsp[-1].minor.yy498 = yymsp[0].minor.yy498;}
break;
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;
case 147: /* tablelist ::= ids cpxName */
{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);}
yymsp[-1].minor.yy498 = yylhsminor.yy498;
break;
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;
case 148: /* tablelist ::= tablelist COMMA ids cpxName */
{ toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yylhsminor.yy498 = tVariantListAppendToken(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy0, -1); }
yymsp[-3].minor.yy498 = yylhsminor.yy498;
break;
case 146: /* tmvar ::= VARIABLE */
case 149: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
case 147: /* interval_opt ::= INTERVAL LP tmvar RP */
case 152: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==152);
case 150: /* interval_opt ::= INTERVAL LP tmvar RP */
case 155: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==155);
{yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break;
case 148: /* interval_opt ::= */
case 153: /* sliding_opt ::= */ yytestcase(yyruleno==153);
case 151: /* interval_opt ::= */
case 156: /* sliding_opt ::= */ yytestcase(yyruleno==156);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break;
case 149: /* fill_opt ::= */
{yymsp[1].minor.yy494 = 0; }
case 152: /* fill_opt ::= */
{yymsp[1].minor.yy498 = 0; }
break;
case 150: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
case 153: /* 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.yy494, &A, -1, 0);
yymsp[-5].minor.yy494 = yymsp[-1].minor.yy494;
tVariantListInsert(yymsp[-1].minor.yy498, &A, -1, 0);
yymsp[-5].minor.yy498 = yymsp[-1].minor.yy498;
}
break;
case 151: /* fill_opt ::= FILL LP ID RP */
case 154: /* fill_opt ::= FILL LP ID RP */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-3].minor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
yymsp[-3].minor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
}
break;
case 154: /* orderby_opt ::= */
case 162: /* groupby_opt ::= */ yytestcase(yyruleno==162);
{yymsp[1].minor.yy494 = 0;}
case 157: /* orderby_opt ::= */
case 165: /* groupby_opt ::= */ yytestcase(yyruleno==165);
{yymsp[1].minor.yy498 = 0;}
break;
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;}
case 158: /* orderby_opt ::= ORDER BY sortlist */
case 166: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==166);
{yymsp[-2].minor.yy498 = yymsp[0].minor.yy498;}
break;
case 156: /* sortlist ::= sortlist COMMA item sortorder */
case 159: /* sortlist ::= sortlist COMMA item sortorder */
{
yylhsminor.yy494 = tVariantListAppend(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82);
yylhsminor.yy498 = tVariantListAppend(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46);
}
yymsp[-3].minor.yy494 = yylhsminor.yy494;
yymsp[-3].minor.yy498 = yylhsminor.yy498;
break;
case 157: /* sortlist ::= item sortorder */
case 160: /* sortlist ::= item sortorder */
{
yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82);
yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46);
}
yymsp[-1].minor.yy494 = yylhsminor.yy494;
yymsp[-1].minor.yy498 = yylhsminor.yy498;
break;
case 158: /* item ::= ids cpxName */
case 161: /* item ::= ids cpxName */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0);
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0);
}
yymsp[-1].minor.yy312 = yylhsminor.yy312;
yymsp[-1].minor.yy134 = yylhsminor.yy134;
break;
case 159: /* sortorder ::= ASC */
{yymsp[0].minor.yy82 = TSDB_ORDER_ASC; }
case 162: /* sortorder ::= ASC */
{yymsp[0].minor.yy46 = TSDB_ORDER_ASC; }
break;
case 160: /* sortorder ::= DESC */
{yymsp[0].minor.yy82 = TSDB_ORDER_DESC;}
case 163: /* sortorder ::= DESC */
{yymsp[0].minor.yy46 = TSDB_ORDER_DESC;}
break;
case 161: /* sortorder ::= */
{yymsp[1].minor.yy82 = TSDB_ORDER_ASC;}
case 164: /* sortorder ::= */
{yymsp[1].minor.yy46 = TSDB_ORDER_ASC;}
break;
case 164: /* grouplist ::= grouplist COMMA item */
case 167: /* grouplist ::= grouplist COMMA item */
{
yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1);
yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1);
}
yymsp[-2].minor.yy494 = yylhsminor.yy494;
yymsp[-2].minor.yy498 = yylhsminor.yy498;
break;
case 165: /* grouplist ::= item */
case 168: /* grouplist ::= item */
{
yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1);
yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1);
}
yymsp[0].minor.yy494 = yylhsminor.yy494;
yymsp[0].minor.yy498 = yylhsminor.yy498;
break;
case 166: /* having_opt ::= */
case 176: /* where_opt ::= */ yytestcase(yyruleno==176);
case 212: /* expritem ::= */ yytestcase(yyruleno==212);
{yymsp[1].minor.yy66 = 0;}
case 169: /* having_opt ::= */
case 179: /* where_opt ::= */ yytestcase(yyruleno==179);
case 215: /* expritem ::= */ yytestcase(yyruleno==215);
{yymsp[1].minor.yy64 = 0;}
break;
case 167: /* having_opt ::= HAVING expr */
case 177: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==177);
{yymsp[-1].minor.yy66 = yymsp[0].minor.yy66;}
case 170: /* having_opt ::= HAVING expr */
case 180: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==180);
{yymsp[-1].minor.yy64 = yymsp[0].minor.yy64;}
break;
case 168: /* limit_opt ::= */
case 172: /* slimit_opt ::= */ yytestcase(yyruleno==172);
{yymsp[1].minor.yy188.limit = -1; yymsp[1].minor.yy188.offset = 0;}
case 171: /* limit_opt ::= */
case 175: /* slimit_opt ::= */ yytestcase(yyruleno==175);
{yymsp[1].minor.yy216.limit = -1; yymsp[1].minor.yy216.offset = 0;}
break;
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;}
case 172: /* limit_opt ::= LIMIT signed */
case 176: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==176);
{yymsp[-1].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-1].minor.yy216.offset = 0;}
break;
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;}
case 173: /* limit_opt ::= LIMIT signed OFFSET signed */
case 177: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==177);
{yymsp[-3].minor.yy216.limit = yymsp[-2].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[0].minor.yy207;}
break;
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;}
case 174: /* limit_opt ::= LIMIT signed COMMA signed */
case 178: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==178);
{yymsp[-3].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[-2].minor.yy207;}
break;
case 178: /* expr ::= LP expr RP */
{yymsp[-2].minor.yy66 = yymsp[-1].minor.yy66; }
case 181: /* expr ::= LP expr RP */
{yymsp[-2].minor.yy64 = yymsp[-1].minor.yy64; }
break;
case 179: /* expr ::= ID */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 182: /* expr ::= ID */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
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;
case 183: /* expr ::= ID DOT ID */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 184: /* expr ::= ID DOT STAR */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
case 182: /* expr ::= INTEGER */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 185: /* expr ::= INTEGER */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
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;
case 186: /* expr ::= MINUS INTEGER */
case 187: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==187);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy64 = yylhsminor.yy64;
break;
case 185: /* expr ::= FLOAT */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 188: /* expr ::= FLOAT */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
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;
case 189: /* expr ::= MINUS FLOAT */
case 190: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==190);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy64 = yylhsminor.yy64;
break;
case 188: /* expr ::= STRING */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 191: /* expr ::= STRING */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
case 189: /* expr ::= NOW */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 192: /* expr ::= NOW */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
case 190: /* expr ::= VARIABLE */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 193: /* expr ::= VARIABLE */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
case 191: /* expr ::= BOOL */
{yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 194: /* expr ::= BOOL */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
case 192: /* expr ::= ID LP exprlist RP */
case 195: /* expr ::= ID LP exprlist RP */
{
yylhsminor.yy66 = tSQLExprCreateFunction(yymsp[-1].minor.yy224, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
yylhsminor.yy64 = tSQLExprCreateFunction(yymsp[-1].minor.yy290, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
}
yymsp[-3].minor.yy66 = yylhsminor.yy66;
yymsp[-3].minor.yy64 = yylhsminor.yy64;
break;
case 193: /* expr ::= ID LP STAR RP */
case 196: /* expr ::= ID LP STAR RP */
{
yylhsminor.yy66 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
yylhsminor.yy64 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
}
yymsp[-3].minor.yy66 = yylhsminor.yy66;
yymsp[-3].minor.yy64 = yylhsminor.yy64;
break;
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;
case 197: /* expr ::= expr AND expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_AND);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 198: /* expr ::= expr OR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_OR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 199: /* expr ::= expr LT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 200: /* expr ::= expr GT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 201: /* expr ::= expr LE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 202: /* expr ::= expr GE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 203: /* expr ::= expr NE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_NE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 204: /* expr ::= expr EQ expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_EQ);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 205: /* expr ::= expr PLUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_PLUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 206: /* expr ::= expr MINUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_MINUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 207: /* expr ::= expr STAR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_STAR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 208: /* expr ::= expr SLASH expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_DIVIDE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 209: /* expr ::= expr REM expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_REM); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 210: /* expr ::= expr LIKE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LIKE); }
yymsp[-2].minor.yy64 = yylhsminor.yy64;
break;
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;
case 211: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-4].minor.yy64, (tSQLExpr*)yymsp[-1].minor.yy290, TK_IN); }
yymsp[-4].minor.yy64 = yylhsminor.yy64;
break;
case 209: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224,yymsp[0].minor.yy66,0);}
yymsp[-2].minor.yy224 = yylhsminor.yy224;
case 212: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290,yymsp[0].minor.yy64,0);}
yymsp[-2].minor.yy290 = yylhsminor.yy290;
break;
case 210: /* exprlist ::= expritem */
{yylhsminor.yy224 = tSQLExprListAppend(0,yymsp[0].minor.yy66,0);}
yymsp[0].minor.yy224 = yylhsminor.yy224;
case 213: /* exprlist ::= expritem */
{yylhsminor.yy290 = tSQLExprListAppend(0,yymsp[0].minor.yy64,0);}
yymsp[0].minor.yy290 = yylhsminor.yy290;
break;
case 211: /* expritem ::= expr */
{yylhsminor.yy66 = yymsp[0].minor.yy66;}
yymsp[0].minor.yy66 = yylhsminor.yy66;
case 214: /* expritem ::= expr */
{yylhsminor.yy64 = yymsp[0].minor.yy64;}
yymsp[0].minor.yy64 = yylhsminor.yy64;
break;
case 213: /* cmd ::= RESET QUERY CACHE */
case 216: /* cmd ::= RESET QUERY CACHE */
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break;
case 214: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
case 217: /* 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.yy449, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 215: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
case 218: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -2716,14 +2732,14 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 216: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
case 219: /* 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.yy449, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 217: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
case 220: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -2734,7 +2750,7 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 218: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
case 221: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
......@@ -2748,25 +2764,25 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 219: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
case 222: /* 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.yy312, -1);
A = tVariantListAppend(A, &yymsp[0].minor.yy134, -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 220: /* cmd ::= KILL CONNECTION INTEGER */
case 223: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break;
case 221: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
case 224: /* 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 222: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
case 225: /* 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:
......
......@@ -145,6 +145,8 @@ void *syncStart(const SSyncInfo *pInfo)
pNode->vgId = pInfo->vgId;
pNode->replica = pCfg->replica;
pNode->quorum = pCfg->quorum;
if (pNode->quorum > pNode->replica) pNode->quorum = pNode->replica;
for (int i = 0; i < pCfg->replica; ++i) {
const SNodeInfo *pNodeInfo = pCfg->nodeInfo + i;
pNode->peerInfo[i] = syncAddPeer(pNode, pNodeInfo);
......@@ -260,6 +262,7 @@ int32_t syncReconfig(void *param, const SSyncCfg *pNewCfg)
pNode->replica = pNewCfg->replica;
pNode->quorum = pNewCfg->quorum;
if (pNode->quorum > pNode->replica) pNode->quorum = pNode->replica;
memcpy(pNode->peerInfo, newPeers, sizeof(SSyncPeer *) * pNewCfg->replica);
for (i = pNewCfg->replica; i < TAOS_SYNC_MAX_REPLICA; ++i)
......
......@@ -42,6 +42,13 @@ import os
import io
import signal
import traceback
try:
import psutil
except:
print("Psutil module needed, please install: sudo pip3 install psutil")
sys.exit(-1)
# Require Python 3
if sys.version_info[0] < 3:
raise Exception("Must be using Python 3")
......@@ -52,13 +59,12 @@ if sys.version_info[0] < 3:
# Command-line/Environment Configurations, will set a bit later
# ConfigNameSpace = argparse.Namespace
gConfig = argparse.Namespace() # Dummy value, will be replaced later
gSvcMgr = None # TODO: refactor this hack, use dep injection
logger = None
def runThread(wt: WorkerThread):
wt.run()
class CrashGenError(Exception):
def __init__(self, msg=None, errno=None):
self.msg = msg
......@@ -69,8 +75,7 @@ class CrashGenError(Exception):
class WorkerThread:
def __init__(self, pool: ThreadPool, tid,
tc: ThreadCoordinator,
def __init__(self, pool: ThreadPool, tid, tc: ThreadCoordinator,
# te: TaskExecutor,
): # note: main thread context!
# self._curStep = -1
......@@ -131,18 +136,28 @@ class WorkerThread:
# clean up
if (gConfig.per_thread_db_connection): # type: ignore
self._dbConn.close()
if self._dbConn.isOpen: #sometimes it is not open
self._dbConn.close()
else:
logger.warning("Cleaning up worker thread, dbConn already closed")
def _doTaskLoop(self):
# while self._curStep < self._pool.maxSteps:
# tc = ThreadCoordinator(None)
while True:
tc = self._tc # Thread Coordinator, the overall master
tc.crossStepBarrier() # shared barrier first, INCLUDING the last one
try:
tc.crossStepBarrier() # shared barrier first, INCLUDING the last one
except threading.BrokenBarrierError as err: # main thread timed out
print("_bto", end="")
logger.debug("[TRD] Worker thread exiting due to main thread barrier time-out")
break
logger.debug("[TRD] Worker thread [{}] exited barrier...".format(self._tid))
self.crossStepGate() # then per-thread gate, after being tapped
logger.debug("[TRD] Worker thread [{}] exited step gate...".format(self._tid))
if not self._tc.isRunning():
print("_wts", end="")
logger.debug("[TRD] Thread Coordinator not running any more, worker thread now stopping...")
break
......@@ -159,6 +174,7 @@ class WorkerThread:
logger.debug("[TRD] Worker thread [{}] finished executing task".format(self._tid))
self._dbInUse = False # there may be changes between steps
# print("_wtd", end=None) # worker thread died
def verifyThreadSelf(self): # ensure we are called by this own thread
if (threading.get_ident() != self._thread.ident):
......@@ -187,30 +203,24 @@ class WorkerThread:
# self._curStep += 1 # off to a new step...
def tapStepGate(self): # give it a tap, release the thread waiting there
self.verifyThreadAlive()
# self.verifyThreadAlive()
self.verifyThreadMain() # only allowed for main thread
logger.debug("[TRD] Tapping worker thread {}".format(self._tid))
self._stepGate.set() # wake up!
time.sleep(0) # let the released thread run a bit
if self._thread.is_alive():
logger.debug("[TRD] Tapping worker thread {}".format(self._tid))
self._stepGate.set() # wake up!
time.sleep(0) # let the released thread run a bit
else:
print("_tad", end="") # Thread already dead
def execSql(self, sql): # TODO: expose DbConn directly
if (gConfig.per_thread_db_connection):
return self._dbConn.execute(sql)
else:
return self._tc.getDbManager().getDbConn().execute(sql)
return self.getDbConn().execute(sql)
def querySql(self, sql): # TODO: expose DbConn directly
if (gConfig.per_thread_db_connection):
return self._dbConn.query(sql)
else:
return self._tc.getDbManager().getDbConn().query(sql)
return self.getDbConn().query(sql)
def getQueryResult(self):
if (gConfig.per_thread_db_connection):
return self._dbConn.getQueryResult()
else:
return self._tc.getDbManager().getDbConn().getQueryResult()
return self.getDbConn().getQueryResult()
def getDbConn(self):
if (gConfig.per_thread_db_connection):
......@@ -228,6 +238,8 @@ class WorkerThread:
class ThreadCoordinator:
WORKER_THREAD_TIMEOUT = 30
def __init__(self, pool: ThreadPool, dbManager):
self._curStep = -1 # first step is 0
self._pool = pool
......@@ -248,14 +260,14 @@ class ThreadCoordinator:
def getDbManager(self) -> DbManager:
return self._dbManager
def crossStepBarrier(self):
self._stepBarrier.wait()
def crossStepBarrier(self, timeout=None):
self._stepBarrier.wait(timeout)
def requestToStop(self):
self._runStatus = MainExec.STATUS_STOPPING
self._execStats.registerFailure("User Interruption")
def _runShouldEnd(self, transitionFailed, hasAbortedTask):
def _runShouldEnd(self, transitionFailed, hasAbortedTask, workerTimeout):
maxSteps = gConfig.max_steps # type: ignore
if self._curStep >= (maxSteps - 1): # maxStep==10, last curStep should be 9
return True
......@@ -265,6 +277,8 @@ class ThreadCoordinator:
return True
if hasAbortedTask:
return True
if workerTimeout:
return True
return False
def _hasAbortedTask(self): # from execution of previous step
......@@ -296,7 +310,7 @@ class ThreadCoordinator:
# let other threads go past the pool barrier, but wait at the
# thread gate
logger.debug("[TRD] Main thread about to cross the barrier")
self.crossStepBarrier()
self.crossStepBarrier(timeout=self.WORKER_THREAD_TIMEOUT)
self._stepBarrier.reset() # Other worker threads should now be at the "gate"
logger.debug("[TRD] Main thread finished crossing the barrier")
......@@ -327,6 +341,7 @@ class ThreadCoordinator:
# end, and maybe signal them to stop
else:
raise
return transitionFailed
self.resetExecutedTasks() # clear the tasks after we are done
# Get ready for next step
......@@ -342,11 +357,21 @@ class ThreadCoordinator:
self._execStats.startExec() # start the stop watch
transitionFailed = False
hasAbortedTask = False
while not self._runShouldEnd(transitionFailed, hasAbortedTask):
workerTimeout = False
while not self._runShouldEnd(transitionFailed, hasAbortedTask, workerTimeout):
if not gConfig.debug: # print this only if we are not in debug mode
print(".", end="", flush=True)
self._syncAtBarrier() # For now just cross the barrier
try:
self._syncAtBarrier() # For now just cross the barrier
except threading.BrokenBarrierError as err:
logger.info("Main loop aborted, caused by worker thread time-out")
self._execStats.registerFailure("Aborted due to worker thread timeout")
print("\n\nWorker Thread time-out detected, important thread info:")
ts = ThreadStacks()
ts.print(filterInternal=True)
workerTimeout = True
break
# At this point, all threads should be pass the overall "barrier" and before the per-thread "gate"
# We use this period to do house keeping work, when all worker
......@@ -358,12 +383,20 @@ class ThreadCoordinator:
break # do transition only if tasks are error free
# Ending previous step
transitionFailed = self._doTransition() # To start, we end step -1 first
try:
transitionFailed = self._doTransition() # To start, we end step -1 first
except taos.error.ProgrammingError as err:
transitionFailed = True
errno2 = err.errno if (err.errno > 0) else 0x80000000 + err.errno # correct error scheme
logger.info("Transition failed: errno=0x{:X}, msg: {}".format(errno2, err))
# Then we move on to the next step
self._releaseAllWorkerThreads(transitionFailed)
if hasAbortedTask or transitionFailed : # abnormal ending, workers waiting at "gate"
logger.debug("Abnormal ending of main thraed")
elif workerTimeout:
logger.debug("Abnormal ending of main thread, due to worker timeout")
else: # regular ending, workers waiting at "barrier"
logger.debug("Regular ending, main thread waiting for all worker threads to stop...")
self._syncAtBarrier()
......@@ -561,6 +594,10 @@ class DbConn:
def __init__(self):
self.isOpen = False
self._type = self.TYPE_INVALID
self._lastSql = None
def getLastSql(self):
return self._lastSql
def open(self):
if (self.isOpen):
......@@ -569,9 +606,7 @@ class DbConn:
# below implemented by child classes
self.openByType()
logger.debug(
"[DB] data connection opened, type = {}".format(
self._type))
logger.debug("[DB] data connection opened, type = {}".format(self._type))
self.isOpen = True
def resetDb(self): # reset the whole database, etc.
......@@ -594,21 +629,29 @@ class DbConn:
def _queryAny(self, sql): # actual query result as an int
if (not self.isOpen):
raise RuntimeError(
"Cannot query database until connection is open")
raise RuntimeError("Cannot query database until connection is open")
nRows = self.query(sql)
if nRows != 1:
raise RuntimeError(
"Unexpected result for query: {}, rows = {}".format(
sql, nRows))
raise RuntimeError("Unexpected result for query: {}, rows = {}".format(sql, nRows))
if self.getResultRows() != 1 or self.getResultCols() != 1:
raise RuntimeError(
"Unexpected result set for query: {}".format(sql))
raise RuntimeError("Unexpected result set for query: {}".format(sql))
return self.getQueryResult()[0][0]
def use(self, dbName):
self.execute("use {}".format(dbName))
def hasDatabases(self):
return self.query("show databases") > 0
def hasTables(self):
return self.query("show tables") > 0
def execute(self, sql):
raise RuntimeError("Unexpected execution, should be overriden")
def query(self, sql) -> int: # return num rows returned
raise RuntimeError("Unexpected execution, should be overriden")
def openByType(self):
raise RuntimeError("Unexpected execution, should be overriden")
......@@ -643,10 +686,11 @@ class DbConnRest(DbConn):
self.isOpen = False
def _doSql(self, sql):
self._lastSql = sql # remember this, last SQL attempted
try:
r = requests.post(self._url,
data = sql,
auth = HTTPBasicAuth('root', 'taosdata'))
auth = HTTPBasicAuth('root', 'taosdata'))
except:
print("REST API Failure (TODO: more info here)")
raise
......@@ -742,11 +786,16 @@ class MyTDSql:
class DbConnNative(DbConn):
# Class variables
_lock = threading.Lock()
_connInfoDisplayed = False
def __init__(self):
super().__init__()
self._type = self.TYPE_NATIVE
self._conn = None
self._cursor = None
def getBuildPath(self):
selfPath = os.path.dirname(os.path.realpath(__file__))
......@@ -755,31 +804,32 @@ class DbConnNative(DbConn):
else:
projPath = selfPath[:selfPath.find("tests")]
buildPath = None
for root, dirs, files in os.walk(projPath):
if ("taosd" in files):
rootRealPath = os.path.dirname(os.path.realpath(root))
if ("packaging" not in rootRealPath):
buildPath = root[:len(root) - len("/build/bin")]
break
if buildPath == None:
raise RuntimeError("Failed to determine buildPath, selfPath={}".format(self_path))
return buildPath
connInfoDisplayed = False
def openByType(self): # Open connection
cfgPath = self.getBuildPath() + "/test/cfg"
hostAddr = "127.0.0.1"
if not self.connInfoDisplayed:
logger.info("Initiating TAOS native connection to {}, using config at {}".format(hostAddr, cfgPath))
self.connInfoDisplayed = True
self._conn = taos.connect(
host=hostAddr,
config=cfgPath) # TODO: make configurable
self._cursor = self._conn.cursor()
# Get the connection/cursor ready
with self._lock: # force single threading for opening DB connections
if not self._connInfoDisplayed:
self.__class__._connInfoDisplayed = True # updating CLASS variable
logger.info("Initiating TAOS native connection to {}, using config at {}".format(hostAddr, cfgPath))
self._conn = taos.connect(host=hostAddr, config=cfgPath) # TODO: make configurable
self._cursor = self._conn.cursor()
self._cursor.execute('reset query cache')
# self._cursor.execute('use db') # do this at the beginning of every
# step
# Open connection
self._tdSql = MyTDSql()
......@@ -984,29 +1034,11 @@ class StateDbOnly(AnyState):
if (not self.hasTask(tasks, TaskCreateDb)):
# only if we don't create any more
self.assertAtMostOneSuccess(tasks, TaskDropDb)
self.assertIfExistThenSuccess(tasks, TaskDropDb)
# self.assertAtMostOneSuccess(tasks, CreateFixedTableTask) # not true in massively parrallel cases
# Nothing to be said about adding data task
# if ( self.hasSuccess(tasks, DropDbTask) ): # dropped the DB
# self.assertHasTask(tasks, DropDbTask) # implied by hasSuccess
# self.assertAtMostOneSuccess(tasks, DropDbTask)
# self._state = self.STATE_EMPTY
# if ( self.hasSuccess(tasks, TaskCreateSuperTable) ): # did not drop db, create table success
# # self.assertHasTask(tasks, CreateFixedTableTask) # tried to create table
# if ( not self.hasTask(tasks, TaskDropSuperTable) ):
# self.assertAtMostOneSuccess(tasks, TaskCreateSuperTable) # at most 1 attempt is successful, if we don't drop anything
# self.assertNoTask(tasks, DropDbTask) # should have have tried
# if ( not self.hasSuccess(tasks, AddFixedDataTask) ): # just created table, no data yet
# # can't say there's add-data attempts, since they may all fail
# self._state = self.STATE_TABLE_ONLY
# else:
# self._state = self.STATE_HAS_DATA
# What about AddFixedData?
# elif ( self.hasSuccess(tasks, AddFixedDataTask) ):
# self._state = self.STATE_HAS_DATA
# else: # no success in dropping db tasks, no success in create fixed table? read data should also fail
# # raise RuntimeError("Unexpected no-success scenario") # We might just landed all failure tasks,
# self._state = self.STATE_DB_ONLY # no change
# TODO: restore the below, the problem exists, although unlikely in real-world
# if (gSvcMgr!=None) and gSvcMgr.isRestarting():
# if (gSvcMgr == None) or (not gSvcMgr.isRestarting()) :
# self.assertIfExistThenSuccess(tasks, TaskDropDb)
class StateSuperTableOnly(AnyState):
......@@ -1082,7 +1114,7 @@ class StateMechine:
self._curState = self._findCurrentState() # starting state
# transitition target probabilities, indexed with value of STATE_EMPTY,
# STATE_DB_ONLY, etc.
self._stateWeights = [1, 3, 5, 15]
self._stateWeights = [1, 2, 10, 40]
def getCurrentState(self):
return self._curState
......@@ -1128,33 +1160,22 @@ class StateMechine:
def _findCurrentState(self):
dbc = self._dbConn
ts = time.time() # we use this to debug how fast/slow it is to do the various queries to find the current DB state
if dbc.query("show databases") == 0: # no database?!
# logger.debug("Found EMPTY state")
logger.debug(
"[STT] empty database found, between {} and {}".format(
ts, time.time()))
if not dbc.hasDatabases(): # no database?!
logger.debug( "[STT] empty database found, between {} and {}".format(ts, time.time()))
return StateEmpty()
# did not do this when openning connection, and this is NOT the worker
# thread, which does this on their own
dbc.execute("use db")
if dbc.query("show tables") == 0: # no tables
# logger.debug("Found DB ONLY state")
logger.debug(
"[STT] DB_ONLY found, between {} and {}".format(
ts, time.time()))
dbc.use("db")
if not dbc.hasTables(): # no tables
logger.debug("[STT] DB_ONLY found, between {} and {}".format(ts, time.time()))
return StateDbOnly()
if dbc.query("SELECT * FROM db.{}".format(DbManager.getFixedSuperTableName())
) == 0: # no regular tables
# logger.debug("Found TABLE_ONLY state")
logger.debug(
"[STT] SUPER_TABLE_ONLY found, between {} and {}".format(
ts, time.time()))
sTable = DbManager.getFixedSuperTable()
if sTable.hasRegTables(dbc): # no regular tables
logger.debug("[STT] SUPER_TABLE_ONLY found, between {} and {}".format(ts, time.time()))
return StateSuperTableOnly()
else: # has actual tables
# logger.debug("Found HAS_DATA state")
logger.debug(
"[STT] HAS_DATA found, between {} and {}".format(
ts, time.time()))
logger.debug("[STT] HAS_DATA found, between {} and {}".format(ts, time.time()))
return StateHasData()
def transition(self, tasks):
......@@ -1172,7 +1193,8 @@ class StateMechine:
# case of multiple creation and drops
if self._curState.canDropDb():
self._curState.assertIfExistThenSuccess(tasks, TaskDropDb)
if gSvcMgr == None: # only if we are running as client-only
self._curState.assertIfExistThenSuccess(tasks, TaskDropDb)
# self.assertAtMostOneSuccess(tasks, DropDbTask) # not really in
# case of drop-create-drop
......@@ -1300,13 +1322,17 @@ class DbManager():
def getFixedSuperTableName(cls):
return "fs_table"
@classmethod
def getFixedSuperTable(cls):
return TdSuperTable(cls.getFixedSuperTableName())
def releaseTable(self, i): # return the table back, so others can use it
self.tableNumQueue.release(i)
def getNextTick(self):
with self._lock: # prevent duplicate tick
if Dice.throw(10) == 0: # 1 in 10 chance
return self._lastTick + datetime.timedelta(0, -100)
if Dice.throw(20) == 0: # 1 in 20 chance
return self._lastTick + datetime.timedelta(0, -100) # Go back in time 100 seconds
else: # regular
# add one second to it
self._lastTick += datetime.timedelta(0, 1)
......@@ -1322,7 +1348,9 @@ class DbManager():
self.getNextInt())
def getNextFloat(self):
return 0.9 + self.getNextInt()
ret = 0.9 + self.getNextInt()
# print("Float obtained: {}".format(ret))
return ret
def getTableNameToDelete(self):
tblNum = self.tableNumQueue.pop() # TODO: race condition!
......@@ -1340,33 +1368,35 @@ class TaskExecutor():
def __init__(self, size=10):
self._size = size
self._list = []
self._lock = threading.Lock()
def add(self, n: int):
if not self._list: # empty
self._list.append(n)
return
# now we should insert
nItems = len(self._list)
insPos = 0
for i in range(nItems):
insPos = i
if n <= self._list[i]: # smaller than this item, time to insert
break # found the insertion point
insPos += 1 # insert to the right
if insPos == 0: # except for the 1st item, # TODO: elimiate first item as gating item
return # do nothing
# print("Inserting at postion {}, value: {}".format(insPos, n))
self._list.insert(insPos, n) # insert
newLen = len(self._list)
if newLen <= self._size:
return # do nothing
elif newLen == (self._size + 1):
del self._list[0] # remove the first item
else:
raise RuntimeError("Corrupt Bounded List")
with self._lock:
if not self._list: # empty
self._list.append(n)
return
# now we should insert
nItems = len(self._list)
insPos = 0
for i in range(nItems):
insPos = i
if n <= self._list[i]: # smaller than this item, time to insert
break # found the insertion point
insPos += 1 # insert to the right
if insPos == 0: # except for the 1st item, # TODO: elimiate first item as gating item
return # do nothing
# print("Inserting at postion {}, value: {}".format(insPos, n))
self._list.insert(insPos, n) # insert
newLen = len(self._list)
if newLen <= self._size:
return # do nothing
elif newLen == (self._size + 1):
del self._list[0] # remove the first item
else:
raise RuntimeError("Corrupt Bounded List")
def __str__(self):
return repr(self._list)
......@@ -1419,7 +1449,6 @@ class Task():
# logger.debug("Creating new task {}...".format(self._taskNum))
self._execStats = execStats
self._lastSql = "" # last SQL executed/attempted
def isSuccess(self):
return self._err is None
......@@ -1446,6 +1475,39 @@ class Task():
"To be implemeted by child classes, class name: {}".format(
self.__class__.__name__))
def _isErrAcceptable(self, errno, msg):
if errno in [
0x05, # TSDB_CODE_RPC_NOT_READY
# 0x200, # invalid SQL, TODO: re-examine with TD-934
0x360, 0x362,
0x369, # tag already exists
0x36A, 0x36B, 0x36D,
0x381,
0x380, # "db not selected"
0x383,
0x386, # DB is being dropped?!
0x503,
0x510, # vnode not in ready state
0x600,
1000 # REST catch-all error
]:
return True # These are the ALWAYS-ACCEPTABLE ones
elif (errno in [ 0x0B ]) and gConfig.auto_start_service:
return True # We may get "network unavilable" when restarting service
elif errno == 0x200 : # invalid SQL, we need to div in a bit more
if msg.find("invalid column name") != -1:
return True
elif msg.find("tags number not matched") != -1: # mismatched tags after modification
return True
elif msg.find("duplicated column names") != -1: # also alter table tag issues
return True
elif (gSvcMgr!=None) and gSvcMgr.isRestarting():
logger.info("Ignoring error when service is restarting: errno = {}, msg = {}".format(errno, msg))
return True
return False # Not an acceptable error
def execute(self, wt: WorkerThread):
wt.verifyThreadSelf()
self._workerThread = wt # type: ignore
......@@ -1456,36 +1518,25 @@ class Task():
"[-] executing task {}...".format(self.__class__.__name__))
self._err = None
self._execStats.beginTaskType(
self.__class__.__name__) # mark beginning
self._execStats.beginTaskType(self.__class__.__name__) # mark beginning
errno2 = None
try:
self._executeInternal(te, wt) # TODO: no return value?
except taos.error.ProgrammingError as err:
errno2 = err.errno if (
err.errno > 0) else 0x80000000 + err.errno # correct error scheme
errno2 = err.errno if (err.errno > 0) else 0x80000000 + err.errno # correct error scheme
if (gConfig.continue_on_exception): # user choose to continue
self.logDebug(
"[=] Continue after TAOS exception: errno=0x{:X}, msg: {}, SQL: {}".format(
errno2, err, self._lastSql))
self.logDebug("[=] Continue after TAOS exception: errno=0x{:X}, msg: {}, SQL: {}".format(
errno2, err, wt.getDbConn().getLastSql()))
self._err = err
elif (errno2 in [
0x05, # TSDB_CODE_RPC_NOT_READY
0x200, 0x360, 0x362, 0x36A, 0x36B, 0x36D,
0x381, 0x380, 0x383,
0x386, # DB is being dropped?!
0x503,
0x510, # vnode not in ready state
0x600,
1000 # REST catch-all error
]): # allowed errors
self.logDebug(
"[=] Acceptable Taos library exception: errno=0x{:X}, msg: {}, SQL: {}".format(
errno2, err, self._lastSql))
elif self._isErrAcceptable(errno2, err.__str__()):
self.logDebug("[=] Acceptable Taos library exception: errno=0x{:X}, msg: {}, SQL: {}".format(
errno2, err, wt.getDbConn().getLastSql()))
print("_", end="", flush=True)
self._err = err
else:
errMsg = "[=] Unexpected Taos library exception: errno=0x{:X}, msg: {}, SQL: {}".format(
errno2, err, self._lastSql)
else: # not an acceptable error
errMsg = "[=] Unexpected Taos library exception ({}): errno=0x{:X}, msg: {}, SQL: {}".format(
self.__class__.__name__,
errno2, err, wt.getDbConn().getLastSql())
self.logDebug(errMsg)
if gConfig.debug:
# raise # so that we see full stack
......@@ -1509,25 +1560,22 @@ class Task():
except BaseException:
self.logDebug(
"[=] Unexpected exception, SQL: {}".format(
self._lastSql))
wt.getDbConn().getLastSql()))
raise
self._execStats.endTaskType(self.__class__.__name__, self.isSuccess())
self.logDebug("[X] task execution completed, {}, status: {}".format(
self.__class__.__name__, "Success" if self.isSuccess() else "Failure"))
# TODO: merge with above.
self._execStats.incExecCount(self.__class__.__name__, self.isSuccess())
self._execStats.incExecCount(self.__class__.__name__, self.isSuccess(), errno2)
def execSql(self, sql):
self._lastSql = sql
return self._dbManager.execute(sql)
def execWtSql(self, wt: WorkerThread, sql): # execute an SQL on the worker thread
self._lastSql = sql
return wt.execSql(sql)
def queryWtSql(self, wt: WorkerThread, sql): # execute an SQL on the worker thread
self._lastSql = sql
return wt.querySql(sql)
def getQueryResult(self, wt: WorkerThread): # execute an SQL on the worker thread
......@@ -1542,6 +1590,7 @@ class ExecutionStats:
self._lock = threading.Lock()
self._firstTaskStartTime = None
self._execStartTime = None
self._errors = {}
self._elapsedTime = 0.0 # total elapsed time
self._accRunTime = 0.0 # accumulated run time
......@@ -1561,13 +1610,18 @@ class ExecutionStats:
def endExec(self):
self._elapsedTime = time.time() - self._execStartTime
def incExecCount(self, klassName, isSuccess): # TODO: add a lock here
def incExecCount(self, klassName, isSuccess, eno=None): # TODO: add a lock here
if klassName not in self._execTimes:
self._execTimes[klassName] = [0, 0]
t = self._execTimes[klassName] # tuple for the data
t[0] += 1 # index 0 has the "total" execution times
if isSuccess:
t[1] += 1 # index 1 has the "success" execution times
if eno != None:
if klassName not in self._errors:
self._errors[klassName] = {}
errors = self._errors[klassName]
errors[eno] = errors[eno]+1 if eno in errors else 1
def beginTaskType(self, klassName):
with self._lock:
......@@ -1597,7 +1651,14 @@ class ExecutionStats:
execTimesAny = 0
for k, n in self._execTimes.items():
execTimesAny += n[0]
logger.info("| {0:<24}: {1}/{2}".format(k, n[1], n[0]))
errStr = None
if k in self._errors:
errors = self._errors[k]
# print("errors = {}".format(errors))
errStrs = ["0x{:X}:{}".format(eno, n) for (eno, n) in errors.items()]
# print("error strings = {}".format(errStrs))
errStr = ", ".join(errStrs)
logger.info("| {0:<24}: {1}/{2} (Errors: {3})".format(k, n[1], n[0], errStr))
logger.info(
"| Total Tasks Executed (success or not): {} ".format(execTimesAny))
......@@ -1649,7 +1710,7 @@ class StateTransitionTask(Task):
@classmethod
def getRegTableName(cls, i):
return "db.reg_table_{}".format(i)
return "reg_table_{}".format(i)
def execute(self, wt: WorkerThread):
super().execute(wt)
......@@ -1696,15 +1757,94 @@ class TaskCreateSuperTable(StateTransitionTask):
logger.debug("Skipping task, no DB yet")
return
tblName = self._dbManager.getFixedSuperTableName()
sTable = self._dbManager.getFixedSuperTable()
# wt.execSql("use db") # should always be in place
self.execWtSql(
wt,
"create table db.{} (ts timestamp, speed int) tags (b binary(200), f float) ".format(tblName))
sTable.create(wt.getDbConn(), {'ts':'timestamp', 'speed':'int'}, {'b':'binary(200)', 'f':'float'})
# self.execWtSql(wt,"create table db.{} (ts timestamp, speed int) tags (b binary(200), f float) ".format(tblName))
# No need to create the regular tables, INSERT will do that
# automatically
class TdSuperTable:
def __init__(self, stName):
self._stName = stName
def create(self, dbc, cols: dict, tags: dict):
sql = "CREATE TABLE db.{} ({}) TAGS ({})".format(
self._stName,
",".join(['%s %s'%(k,v) for (k,v) in cols.items()]),
",".join(['%s %s'%(k,v) for (k,v) in tags.items()])
)
dbc.execute(sql)
def getRegTables(self, dbc: DbConn):
try:
dbc.query("select TBNAME from db.{}".format(self._stName)) # TODO: analyze result set later
except taos.error.ProgrammingError as err:
errno2 = err.errno if (err.errno > 0) else 0x80000000 + err.errno
logger.debug("[=] Failed to get tables from super table: errno=0x{:X}, msg: {}".format(errno2, err))
raise
qr = dbc.getQueryResult()
return [v[0] for v in qr] # list transformation, ref: https://stackoverflow.com/questions/643823/python-list-transformation
def hasRegTables(self, dbc: DbConn):
return dbc.query("SELECT * FROM db.{}".format(self._stName)) > 0
def ensureTable(self, dbc: DbConn, regTableName: str):
sql = "select tbname from {} where tbname in ('{}')".format(self._stName, regTableName)
if dbc.query(sql) >= 1 : # reg table exists already
return
sql = "CREATE TABLE {} USING {} tags ({})".format(
regTableName, self._stName, self._getTagStrForSql(dbc)
)
dbc.execute(sql)
def _getTagStrForSql(self, dbc) :
tags = self._getTags(dbc)
tagStrs = []
for tagName in tags:
tagType = tags[tagName]
if tagType == 'BINARY':
tagStrs.append("'Beijing-Shanghai-LosAngeles'")
elif tagType == 'FLOAT':
tagStrs.append('9.9')
elif tagType == 'INT':
tagStrs.append('88')
else:
raise RuntimeError("Unexpected tag type: {}".format(tagType))
return ", ".join(tagStrs)
def _getTags(self, dbc) -> dict:
dbc.query("DESCRIBE {}".format(self._stName))
stCols = dbc.getQueryResult()
# print(stCols)
ret = {row[0]:row[1] for row in stCols if row[3]=='TAG'} # name:type
# print("Tags retrieved: {}".format(ret))
return ret
def addTag(self, dbc, tagName, tagType):
if tagName in self._getTags(dbc): # already
return
# sTable.addTag("extraTag", "int")
sql = "alter table db.{} add tag {} {}".format(self._stName, tagName, tagType)
dbc.execute(sql)
def dropTag(self, dbc, tagName):
if not tagName in self._getTags(dbc): # don't have this tag
return
sql = "alter table db.{} drop tag {}".format(self._stName, tagName)
dbc.execute(sql)
def changeTag(self, dbc, oldTag, newTag):
tags = self._getTags(dbc)
if not oldTag in tags: # don't have this tag
return
if newTag in tags: # already have this tag
return
sql = "alter table db.{} change tag {} {}".format(self._stName, oldTag, newTag)
dbc.execute(sql)
class TaskReadData(StateTransitionTask):
@classmethod
def getEndState(cls):
......@@ -1715,23 +1855,24 @@ class TaskReadData(StateTransitionTask):
return state.canReadData()
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
sTbName = self._dbManager.getFixedSuperTableName()
self.queryWtSql(wt, "select TBNAME from db.{}".format(
sTbName)) # TODO: analyze result set later
sTable = self._dbManager.getFixedSuperTable()
if random.randrange(
5) == 0: # 1 in 5 chance, simulate a broken connection. TODO: break connection in all situations
wt.getDbConn().close()
wt.getDbConn().open()
else:
# wt.getDbConn().getQueryResult()
rTables = self.getQueryResult(wt)
# print("rTables[0] = {}, type = {}".format(rTables[0], type(rTables[0])))
for rTbName in rTables: # regular tables
self.execWtSql(wt, "select * from db.{}".format(rTbName[0]))
# tdSql.query(" cars where tbname in ('carzero', 'carone')")
for rTbName in sTable.getRegTables(wt.getDbConn()): # regular tables
aggExpr = Dice.choice(['*', 'count(*)', 'avg(speed)',
# 'twa(speed)', # TODO: this one REQUIRES a where statement, not reasonable
'sum(speed)', 'stddev(speed)',
'min(speed)', 'max(speed)', 'first(speed)', 'last(speed)']) # TODO: add more from 'top'
try:
self.execWtSql(wt, "select {} from db.{}".format(aggExpr, rTbName))
except taos.error.ProgrammingError as err:
errno2 = err.errno if (err.errno > 0) else 0x80000000 + err.errno
logger.debug("[=] Read Failure: errno=0x{:X}, msg: {}, SQL: {}".format(errno2, err, wt.getDbConn().getLastSql()))
raise
class TaskDropSuperTable(StateTransitionTask):
@classmethod
......@@ -1789,20 +1930,55 @@ class TaskAlterTags(StateTransitionTask):
return state.canDropFixedSuperTable() # if we can drop it, we can alter tags
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
tblName = self._dbManager.getFixedSuperTableName()
# tblName = self._dbManager.getFixedSuperTableName()
dbc = wt.getDbConn()
sTable = self._dbManager.getFixedSuperTable()
dice = Dice.throw(4)
if dice == 0:
sql = "alter table db.{} add tag extraTag int".format(tblName)
sTable.addTag(dbc, "extraTag", "int")
# sql = "alter table db.{} add tag extraTag int".format(tblName)
elif dice == 1:
sql = "alter table db.{} drop tag extraTag".format(tblName)
sTable.dropTag(dbc, "extraTag")
# sql = "alter table db.{} drop tag extraTag".format(tblName)
elif dice == 2:
sql = "alter table db.{} drop tag newTag".format(tblName)
sTable.dropTag(dbc, "newTag")
# sql = "alter table db.{} drop tag newTag".format(tblName)
else: # dice == 3
sql = "alter table db.{} change tag extraTag newTag".format(
tblName)
sTable.changeTag(dbc, "extraTag", "newTag")
# sql = "alter table db.{} change tag extraTag newTag".format(tblName)
self.execWtSql(wt, sql)
class TaskRestartService(StateTransitionTask):
_isRunning = False
_classLock = threading.Lock()
@classmethod
def getEndState(cls):
return None # meaning doesn't affect state
@classmethod
def canBeginFrom(cls, state: AnyState):
if gConfig.auto_start_service:
return state.canDropFixedSuperTable() # Basicallly when we have the super table
return False # don't run this otherwise
CHANCE_TO_RESTART_SERVICE = 100
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
if not gConfig.auto_start_service: # only execute when we are in -a mode
print("_a", end="", flush=True)
return
with self._classLock:
if self._isRunning:
print("Skipping restart task, another running already")
return
self._isRunning = True
if Dice.throw(self.CHANCE_TO_RESTART_SERVICE) == 0: # 1 in N chance
dbc = wt.getDbConn()
dbc.execute("show databases") # simple delay, align timing with other workers
gSvcMgr.restart()
self._isRunning = False
class TaskAddData(StateTransitionTask):
# Track which table is being actively worked on
......@@ -1833,39 +2009,31 @@ class TaskAddData(StateTransitionTask):
return state.canAddData()
def _executeInternal(self, te: TaskExecutor, wt: WorkerThread):
ds = self._dbManager
# wt.execSql("use db") # TODO: seems to be an INSERT bug to require
# this
tblSeq = list(
range(
ds = self._dbManager # Quite DANGEROUS here, may result in multi-thread client access
tblSeq = list(range(
self.LARGE_NUMBER_OF_TABLES if gConfig.larger_data else self.SMALL_NUMBER_OF_TABLES))
random.shuffle(tblSeq)
for i in tblSeq:
if (i in self.activeTable): # wow already active
# logger.info("Concurrent data insertion into table: {}".format(i))
# print("ct({})".format(i), end="", flush=True) # Concurrent
# insertion into table
print("x", end="", flush=True)
print("x", end="", flush=True) # concurrent insertion
else:
self.activeTable.add(i) # marking it active
# No need to shuffle data sequence, unless later we decide to do
# non-increment insertion
regTableName = self.getRegTableName(
i) # "db.reg_table_{}".format(i)
for j in range(
self.LARGE_NUMBER_OF_RECORDS if gConfig.larger_data else self.SMALL_NUMBER_OF_RECORDS): # number of records per table
sTable = ds.getFixedSuperTable()
regTableName = self.getRegTableName(i) # "db.reg_table_{}".format(i)
sTable.ensureTable(wt.getDbConn(), regTableName) # Ensure the table exists
for j in range(self.LARGE_NUMBER_OF_RECORDS if gConfig.larger_data else self.SMALL_NUMBER_OF_RECORDS): # number of records per table
nextInt = ds.getNextInt()
if gConfig.record_ops:
self.prepToRecordOps()
self.fAddLogReady.write(
"Ready to write {} to {}\n".format(
nextInt, regTableName))
self.fAddLogReady.write("Ready to write {} to {}\n".format(nextInt, regTableName))
self.fAddLogReady.flush()
os.fsync(self.fAddLogReady)
sql = "insert into {} using {} tags ('{}', {}) values ('{}', {});".format(
sql = "insert into {} values ('{}', {});".format( # removed: tags ('{}', {})
regTableName,
ds.getFixedSuperTableName(),
ds.getNextBinary(), ds.getNextFloat(),
# ds.getFixedSuperTableName(),
# ds.getNextBinary(), ds.getNextFloat(),
ds.getNextTick(), nextInt)
self.execWtSql(wt, sql)
# Successfully wrote the data into the DB, let's record it
......@@ -1912,6 +2080,10 @@ class Dice():
raise RuntimeError("Cannot throw dice before seeding it")
return random.randrange(start, stop)
@classmethod
def choice(cls, cList):
return random.choice(cList)
class LoggingFilter(logging.Filter):
def filter(self, record: logging.LogRecord):
......@@ -1934,14 +2106,16 @@ class MyLoggingAdapter(logging.LoggerAdapter):
class SvcManager:
def __init__(self):
print("Starting TDengine Service Manager")
signal.signal(signal.SIGTERM, self.sigIntHandler)
signal.signal(signal.SIGINT, self.sigIntHandler)
signal.signal(signal.SIGUSR1, self.sigUsrHandler) # different handler!
# signal.signal(signal.SIGTERM, self.sigIntHandler) # Moved to MainExec
# signal.signal(signal.SIGINT, self.sigIntHandler)
# signal.signal(signal.SIGUSR1, self.sigUsrHandler) # different handler!
self.inSigHandler = False
# self._status = MainExec.STATUS_RUNNING # set inside
# _startTaosService()
self.svcMgrThread = None
self._lock = threading.Lock()
self._isRestarting = False
def _doMenu(self):
choice = ""
......@@ -1976,23 +2150,22 @@ class SvcManager:
self.sigHandlerResume()
elif choice == "2":
self.stopTaosService()
elif choice == "3":
self.stopTaosService()
self.startTaosService()
elif choice == "3": # Restart
self.restart()
else:
raise RuntimeError("Invalid menu choice: {}".format(choice))
self.inSigHandler = False
def sigIntHandler(self, signalNumber, frame):
print("Sig INT Handler starting...")
print("SvcManager: INT Signal Handler starting...")
if self.inSigHandler:
print("Ignoring repeated SIG_INT...")
return
self.inSigHandler = True
self.stopTaosService()
print("INT signal handler returning...")
print("SvcManager: INT Signal Handler returning...")
self.inSigHandler = False
def sigHandlerResume(self):
......@@ -2005,44 +2178,78 @@ class SvcManager:
self.svcMgrThread = None # no more
def _procIpcAll(self):
while self.svcMgrThread: # for as long as the svc mgr thread is still here
self.svcMgrThread.procIpcBatch() # regular processing,
while self.isRunning() or self.isRestarting() : # for as long as the svc mgr thread is still here
if self.isRunning():
self.svcMgrThread.procIpcBatch() # regular processing,
self._checkServiceManagerThread()
elif self.isRetarting():
print("Service restarting...")
time.sleep(0.5) # pause, before next round
self._checkServiceManagerThread()
print(
"Service Manager Thread (with subprocess) has ended, main thread now exiting...")
def startTaosService(self):
if self.svcMgrThread:
raise RuntimeError(
"Cannot start TAOS service when one may already be running")
self.svcMgrThread = ServiceManagerThread() # create the object
self.svcMgrThread.start()
print("TAOS service started, printing out output...")
self.svcMgrThread.procIpcBatch(
trimToTarget=10,
forceOutput=True) # for printing 10 lines
print("TAOS service started")
with self._lock:
if self.svcMgrThread:
raise RuntimeError("Cannot start TAOS service when one may already be running")
# Find if there's already a taosd service, and then kill it
for proc in psutil.process_iter():
if proc.name() == 'taosd':
print("Killing an existing TAOSD process in 2 seconds... press CTRL-C to interrupe")
time.sleep(2.0)
proc.kill()
# print("Process: {}".format(proc.name()))
self.svcMgrThread = ServiceManagerThread() # create the object
self.svcMgrThread.start()
print("Attempting to start TAOS service started, printing out output...")
self.svcMgrThread.procIpcBatch(
trimToTarget=10,
forceOutput=True) # for printing 10 lines
print("TAOS service started")
def stopTaosService(self, outputLines=20):
print("Terminating Service Manager Thread (SMT) execution...")
if not self.svcMgrThread:
raise RuntimeError("Unexpected empty svc mgr thread")
self.svcMgrThread.stop()
if self.svcMgrThread.isStopped():
self.svcMgrThread.procIpcBatch(outputLines) # one last time
self.svcMgrThread = None
print("----- End of TDengine Service Output -----\n")
print("SMT execution terminated")
else:
print("WARNING: SMT did not terminate as expected")
with self._lock:
if not self.isRunning():
logger.warning("Cannot stop TAOS service, not running")
return
print("Terminating Service Manager Thread (SMT) execution...")
self.svcMgrThread.stop()
if self.svcMgrThread.isStopped():
self.svcMgrThread.procIpcBatch(outputLines) # one last time
self.svcMgrThread = None
print("----- End of TDengine Service Output -----\n")
print("SMT execution terminated")
else:
print("WARNING: SMT did not terminate as expected")
def run(self):
self.startTaosService()
self._procIpcAll() # pump/process all the messages
if self.svcMgrThread: # if sig handler hasn't destroyed it by now
self._procIpcAll() # pump/process all the messages, may encounter SIG + restart
if self.isRunning(): # if sig handler hasn't destroyed it by now
self.stopTaosService() # should have started already
def restart(self):
if self._isRestarting:
logger.warning("Cannot restart service when it's already restarting")
return
self._isRestarting = True
if self.isRunning():
self.stopTaosService()
else:
logger.warning("Service not running when restart requested")
self.startTaosService()
self._isRestarting = False
def isRunning(self):
return self.svcMgrThread != None
def isRestarting(self):
return self._isRestarting
class ServiceManagerThread:
MAX_QUEUE_SIZE = 10000
......@@ -2094,6 +2301,7 @@ class ServiceManagerThread:
logger.info("[] TDengine service READY to process requests")
return # now we've started
# TODO: handle this better?
self.procIpcBatch(20, True) # display output before cronking out, trim to last 20 msgs, force output
raise RuntimeError("TDengine service did not start successfully")
def stop(self):
......@@ -2196,7 +2404,10 @@ class ServiceManagerThread:
if self._status == MainExec.STATUS_STARTING: # we are starting, let's see if we have started
if line.find(self.TD_READY_MSG) != -1: # found
self._status = MainExec.STATUS_RUNNING
logger.info("Waiting for the service to become FULLY READY")
time.sleep(1.0) # wait for the server to truly start. TODO: remove this
logger.info("Service is now FULLY READY")
self._status = MainExec.STATUS_RUNNING
# Trim the queue if necessary: TODO: try this 1 out of 10 times
self._trimQueue(self.MAX_QUEUE_SIZE * 9 // 10) # trim to 90% size
......@@ -2242,6 +2453,21 @@ class TdeSubProcess:
taosdPath = self.getBuildPath() + "/build/bin/taosd"
cfgPath = self.getBuildPath() + "/test/cfg"
# Delete the log files
logPath = self.getBuildPath() + "/test/log"
# ref: https://stackoverflow.com/questions/1995373/deleting-all-files-in-a-directory-with-python/1995397
# filelist = [ f for f in os.listdir(logPath) ] # if f.endswith(".bak") ]
# for f in filelist:
# filePath = os.path.join(logPath, f)
# print("Removing log file: {}".format(filePath))
# os.remove(filePath)
if os.path.exists(logPath):
logPathSaved = logPath + "_" + time.strftime('%Y-%m-%d-%H-%M-%S')
logger.info("Saving old log files to: {}".format(logPathSaved))
os.rename(logPath, logPathSaved)
# os.mkdir(logPath) # recreate, no need actually, TDengine will auto-create with proper perms
svcCmd = [taosdPath, '-c', cfgPath]
# svcCmd = ['vmstat', '1']
if self.subProcess: # already there
......@@ -2275,16 +2501,46 @@ class TdeSubProcess:
print("TDengine service process terminated successfully from SIG_INT")
self.subProcess = None
class ThreadStacks: # stack info for all threads
def __init__(self):
self._allStacks = {}
allFrames = sys._current_frames()
for th in threading.enumerate():
stack = traceback.extract_stack(allFrames[th.ident])
self._allStacks[th.native_id] = stack
def print(self, filteredEndName = None, filterInternal = False):
for thNid, stack in self._allStacks.items(): # for each thread
lastFrame = stack[-1]
if filteredEndName: # we need to filter out stacks that match this name
if lastFrame.name == filteredEndName : # end did not match
continue
if filterInternal:
if lastFrame.name in ['wait', 'invoke_excepthook',
'_wait', # The Barrier exception
'svcOutputReader', # the svcMgr thread
'__init__']: # the thread that extracted the stack
continue # ignore
# Now print
print("\n<----- Thread Info for ID: {}".format(thNid))
for frame in stack:
# print(frame)
print("File {filename}, line {lineno}, in {name}".format(
filename=frame.filename, lineno=frame.lineno, name=frame.name))
print(" {}".format(frame.line))
print("-----> End of Thread Info\n")
class ClientManager:
def __init__(self):
print("Starting service manager")
signal.signal(signal.SIGTERM, self.sigIntHandler)
signal.signal(signal.SIGINT, self.sigIntHandler)
# signal.signal(signal.SIGTERM, self.sigIntHandler)
# signal.signal(signal.SIGINT, self.sigIntHandler)
self._status = MainExec.STATUS_RUNNING
self.tc = None
self.inSigHandler = False
def sigIntHandler(self, signalNumber, frame):
if self._status != MainExec.STATUS_RUNNING:
print("Repeated SIGINT received, forced exit...")
......@@ -2292,9 +2548,50 @@ class ClientManager:
sys.exit(-1)
self._status = MainExec.STATUS_STOPPING # immediately set our status
print("Terminating program...")
print("ClientManager: Terminating program...")
self.tc.requestToStop()
def _doMenu(self):
choice = ""
while True:
print("\nInterrupting Client Program, Choose an Action: ")
print("1: Resume")
print("2: Terminate")
print("3: Show Threads")
# Remember to update the if range below
# print("Enter Choice: ", end="", flush=True)
while choice == "":
choice = input("Enter Choice: ")
if choice != "":
break # done with reading repeated input
if choice in ["1", "2", "3"]:
break # we are done with whole method
print("Invalid choice, please try again.")
choice = "" # reset
return choice
def sigUsrHandler(self, signalNumber, frame):
print("Interrupting main thread execution upon SIGUSR1")
if self.inSigHandler: # already
print("Ignoring repeated SIG_USR1...")
return # do nothing if it's already not running
self.inSigHandler = True
choice = self._doMenu()
if choice == "1":
print("Resuming execution...")
time.sleep(1.0)
elif choice == "2":
print("Not implemented yet")
time.sleep(1.0)
elif choice == "3":
ts = ThreadStacks()
ts.print()
else:
raise RuntimeError("Invalid menu choice: {}".format(choice))
self.inSigHandler = False
def _printLastNumbers(self): # to verify data durability
dbManager = DbManager(resetDb=False)
dbc = dbManager.getDbConn()
......@@ -2327,21 +2624,17 @@ class ClientManager:
def prepare(self):
self._printLastNumbers()
def run(self):
if gConfig.auto_start_service:
svcMgr = SvcManager()
svcMgr.startTaosService()
def run(self, svcMgr):
self._printLastNumbers()
dbManager = DbManager() # Regular function
thPool = ThreadPool(gConfig.num_threads, gConfig.max_steps)
self.tc = ThreadCoordinator(thPool, dbManager)
self.tc.run()
# print("exec stats: {}".format(self.tc.getExecStats()))
# print("TC failed = {}".format(self.tc.isFailed()))
if gConfig.auto_start_service:
if svcMgr: # gConfig.auto_start_service:
svcMgr.stopTaosService()
# Print exec status, etc., AFTER showing messages from the server
self.conclude()
......@@ -2353,25 +2646,58 @@ class ClientManager:
self.tc.printStats()
self.tc.getDbManager().cleanUp()
class MainExec:
STATUS_STARTING = 1
STATUS_RUNNING = 2
STATUS_STOPPING = 3
STATUS_STOPPED = 4
@classmethod
def runClient(cls):
clientManager = ClientManager()
return clientManager.run()
def __init__(self):
self._clientMgr = None
self._svcMgr = None
@classmethod
def runService(cls):
svcManager = SvcManager()
svcManager.run()
signal.signal(signal.SIGTERM, self.sigIntHandler)
signal.signal(signal.SIGINT, self.sigIntHandler)
signal.signal(signal.SIGUSR1, self.sigUsrHandler) # different handler!
@classmethod
def runTemp(cls): # for debugging purposes
def sigUsrHandler(self, signalNumber, frame):
if self._clientMgr:
self._clientMgr.sigUsrHandler(signalNumber, frame)
elif self._svcMgr: # Only if no client mgr, we are running alone
self._svcMgr.sigUsrHandler(signalNumber, frame)
def sigIntHandler(self, signalNumber, frame):
if self._svcMgr:
self._svcMgr.sigIntHandler(signalNumber, frame)
if self._clientMgr:
self._clientMgr.sigIntHandler(signalNumber, frame)
def runClient(self):
global gSvcMgr
if gConfig.auto_start_service:
self._svcMgr = SvcManager()
gSvcMgr = self._svcMgr # hack alert
self._svcMgr.startTaosService() # we start, don't run
self._clientMgr = ClientManager()
ret = None
try:
ret = self._clientMgr.run(self._svcMgr) # stop TAOS service inside
except requests.exceptions.ConnectionError as err:
logger.warning("Failed to open REST connection to DB")
# don't raise
return ret
def runService(self):
global gSvcMgr
self._svcMgr = SvcManager()
gSvcMgr = self._svcMgr # save it in a global variable TODO: hack alert
self._svcMgr.run() # run to some end state
self._svcMgr = None
gSvcMgr = None
def runTemp(self): # for debugging purposes
# # Hack to exercise reading from disk, imcreasing coverage. TODO: fix
# dbc = dbState.getDbConn()
# sTbName = dbState.getFixedSuperTableName()
......@@ -2527,10 +2853,11 @@ def main():
Dice.seed(0) # initial seeding of dice
# Run server or client
mExec = MainExec()
if gConfig.run_tdengine: # run server
MainExec.runService()
mExec.runService()
else:
return MainExec.runClient()
return mExec.runClient()
if __name__ == "__main__":
......
......@@ -24,16 +24,16 @@ endi
if $data04 != 1 then
return -1
endi
if $data05 != 10 then
if $data06 != 10 then
return -1
endi
if $data06 != 20,20,20 then
if $data07 != 20,20,20 then
return -1
endi
if $data07 != 2 then
if $data08 != 2 then
return -1
endi
if $data08 != 4 then
if $data09 != 4 then
return -1
endi
......
......@@ -32,10 +32,10 @@ endi
if $data04 != 1 then
return -1
endi
if $data05 != 20 then
if $data06 != 20 then
return -1
endi
if $data07 != 16 then
if $data08 != 16 then
return -1
endi
......@@ -72,7 +72,7 @@ endi
if $data04 != 1 then
return -1
endi
if $data05 != 15 then
if $data06 != 15 then
return -1
endi
......
......@@ -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","fsync","comp","precision","status"],"data":[],"rows":0}@ then
if $system_content != @{"status":"succ","head":["name","created_time","ntables","vgroups","replica","quorum","days","keep1,keep2,keep(D)","cache(MB)","blocks","minrows","maxrows","wallevel","fsync","comp","precision","status"],"data":[],"rows":0}@ then
return -1
endi
......
......@@ -122,18 +122,18 @@ endi
if $data04 != $replica then
return -1
endi
if $data05 != $days then
if $data06 != $days then
return -1
endi
if $data06 != 365,365,365 then
if $data07 != 365,365,365 then
return -1
endi
print data07 = $data07
if $data07 != $cache then
print expect $cache, actual:$data07
print data08 = $data07
if $data08 != $cache then
print expect $cache, actual:$data08
return -1
endi
if $data08 != 4 then
if $data09 != 4 then
return -1
endi
......
......@@ -9,8 +9,6 @@ $tsStart = 1325347200000 # 2012-01-01 00:00:00.000
$preBinary = ' . client-06-
$numPerUpdateTbl = 2000
###############################################################
$testCnt = 0
$totalRows = 0
$dropTblStart = $tblStart
$dropTblEnd = $dropTblStart
......@@ -23,7 +21,7 @@ sql create database if not exists $db replica 2
sql use $db
init_lable:
print ================ create table $tb [ from $tblStart to $tblEnd ] (ts timestamp, c1 int, c2 binary(16))
print ================ create table [ from $tblStart to $tblEnd ] (ts timestamp, c1 int, c2 binary(16))
$i = $tblStart
while $i < $tblEnd
......@@ -90,12 +88,8 @@ if $loopCnt > 2 then
$i = $i + 1
$totalRows = $totalRows - $rowsPerTbl
endw
sleep 20000
$testCnt = $testCnt + 1
sleep 10000
goto init_lable
endi
if $testCnt > 10 then
return 0
endi
goto loop_run
......@@ -7,6 +7,10 @@ $tblEnd = 10000
$tsStart = 1325347200000 # 2012-01-01 00:00:00.000
$preBinary = ' . client-07-
###############################################################
$alterCnt = 0
$columnA = c . $alterCnt
$columnB = d . $alterCnt
$totalRows = 0
......@@ -17,22 +21,23 @@ $db = db
sql create database if not exists $db replica 2
sql use $db
init_lable:
print ================ create table $tb (ts timestamp, c1 int, c2 binary(16))
$rowsPerTbl = 0
$ts = $tsStart
print ================ create table $tb (ts timestamp, $columnA int, $columnB binary(16))
$i = $tblStart
while $i < $tblEnd
$tb = tb . $i
# print create table if not exists $tb ( ts timestamp , c1 int , c2 binary(16) )
sql create table if not exists $tb ( ts timestamp , c1 int , c2 binary(16) )
sql create table if not exists $tb ( ts timestamp , $columnA int , $columnB binary(16) )
$i = $i + 1
endw
$rowsPerTbl = 0
$ts = $tsStart
$rowsPerLoop = 160
$loopCnt = 0
$alterStep = 0
loop_run:
print ================ client-07 start loop insert data ( loopCnt: $loopCnt )
......@@ -70,19 +75,27 @@ endi
$loopCnt = $loopCnt + 1
if $loopCnt > 100 then
if $alterStep > 2 then
$alterStep = 0
$alterCnt = $alterCnt + 1
$i = $tblStart
while $i < $tblEnd
$tb = tb . $i
sql alter table $tb add column c3 double
sql alter table $tb add column c4 binary( 16 )
sql alter table $tb drop column c1
sql alter table $tb drop column c2
$newColumnA = c . $alterCnt
$newcolumnB = d . $alterCnt
sql alter table $tb add column $newColumnA double
sql alter table $tb add column $newcolumnB binary( 16 )
sql alter table $tb drop column $columnA
sql alter table $tb drop column $columnB
$i = $i + 1
endw
sleep 20000
goto init_lable
endw
$columnA = $newColumnA
$columnB = $newcolumnB
sleep 10000
goto loop_run
endi
goto loop_run
......@@ -9,8 +9,9 @@ $tsStart = 1325347200000 # 2012-01-01 00:00:00.000
$preBinary = ' . client-08-
$numPerUpdateTbl = 2000
###############################################################
$totalRows = 0
$totalRows = 0
$dropTblStart = $tblStart
$dropTblEnd = $dropTblStart
sql connect
......@@ -20,7 +21,7 @@ sql create database if not exists $db replica 2
sql use $db
init_lable:
print ================ create table $tb (ts timestamp, c1 int, c2 binary(16))
print ================ create table [ from $tblStart to $tblEnd ] (ts timestamp, c1 int, c2 binary(16))
$i = $tblStart
while $i < $tblEnd
......@@ -30,8 +31,8 @@ while $i < $tblEnd
$i = $i + 1
endw
$dropTblStart = $tblStart
$dropTblEnd = $tblStart + $numPerUpdateTbl
$dropTblStart = $dropTblEnd
$dropTblEnd = $dropTblStart + $numPerUpdateTbl
$tblStart = $tblEnd
$tblEnd = $tblEnd + $numPerUpdateTbl
......@@ -43,9 +44,9 @@ $rowsPerLoop = 40
$loopCnt = 0
loop_run:
print ================ client-08 start loop insert data ( loopCnt: $loopCnt )
$i = $dropTblStart
while $i < $tblEnd
print ================ client-08 start loop insert data from $dropTblStart to $tblStart ( loopCnt: $loopCnt )
$i = $dropTblStart
while $i < $tblStart
$tb = tb . $i
$c2Binary = $preBinary . $i
......@@ -58,7 +59,7 @@ while $i < $tblEnd
$x = $x + 40
$ts = $ts + 40a
endw
if $i == $tblStart then
if $i == $dropTblStart then
$rowsPerTbl = $rowsPerTbl + $x
endi
......@@ -68,7 +69,7 @@ while $i < $tblEnd
endw
sql select count(*) from $tb
print data00 $data00 rowsPerTbl $rowsPerTbl
print data00 $data00 rowsPerTbl $rowsPerTbl tb: $tb
if $data00 != $rowsPerTbl then
print ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
print ************ client-08 insert data into $tb error ***** *****
......@@ -78,7 +79,8 @@ endi
$loopCnt = $loopCnt + 1
#if $loopCnt > 100 then
#if $loopCnt > 3 then
print ================ client-08 drop table from $dropTblStart to $dropTblEnd
$i = $dropTblStart
while $i < $dropTblEnd
$tb = tb . $i
......@@ -86,7 +88,7 @@ $loopCnt = $loopCnt + 1
$i = $i + 1
$totalRows = $totalRows - $rowsPerTbl
endw
sleep 20000
sleep 10000
goto init_lable
#endi
......
......@@ -94,11 +94,11 @@ print ============== step3: start back client-01.sim
#run_back unique/clusterSimCase/client-01.sim
#run_back unique/clusterSimCase/client-02.sim
#run_back unique/clusterSimCase/client-03.sim
run_back unique/clusterSimCase/client-04.sim
#run_back unique/clusterSimCase/client-04.sim
#run_back unique/clusterSimCase/client-05.sim
#run_back unique/clusterSimCase/client-06.sim
#run_back unique/clusterSimCase/client-07.sim
#run_back unique/clusterSimCase/client-08.sim
run_back unique/clusterSimCase/client-08.sim
#run_back unique/clusterSimCase/client-01.sim
#run_back unique/clusterSimCase/client-01.sim
sleep 20000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册