未验证 提交 e6058244 编写于 作者: S shenglian-zhou 提交者: GitHub

Merge pull request #10352 from taosdata/feature/TD-11220

 [TD-11220]<feature>(query): time related functions
...@@ -70,6 +70,10 @@ int tsParseTime(SStrToken *pToken, int64_t *time, char **next, char *error, int1 ...@@ -70,6 +70,10 @@ int tsParseTime(SStrToken *pToken, int64_t *time, char **next, char *error, int1
if (pToken->type == TK_NOW) { if (pToken->type == TK_NOW) {
useconds = taosGetTimestamp(timePrec); useconds = taosGetTimestamp(timePrec);
} else if (pToken->type == TK_TODAY) {
int64_t factor = (timePrec == TSDB_TIME_PRECISION_MILLI) ? 1000 :
(timePrec == TSDB_TIME_PRECISION_MICRO) ? 1000000 : 1000000000;
useconds = taosGetTimestampToday() * factor;
} else if (strncmp(pToken->z, "0", 1) == 0 && pToken->n == 1) { } else if (strncmp(pToken->z, "0", 1) == 0 && pToken->n == 1) {
// do nothing // do nothing
} else if (pToken->type == TK_INTEGER) { } else if (pToken->type == TK_INTEGER) {
...@@ -473,7 +477,7 @@ int tsParseOneRow(char **str, STableDataBlocks *pDataBlocks, int16_t timePrec, i ...@@ -473,7 +477,7 @@ int tsParseOneRow(char **str, STableDataBlocks *pDataBlocks, int16_t timePrec, i
} }
int16_t type = sToken.type; int16_t type = sToken.type;
if ((type != TK_NOW && type != TK_INTEGER && type != TK_STRING && type != TK_FLOAT && type != TK_BOOL && if ((type != TK_NOW && type != TK_TODAY && type != TK_INTEGER && type != TK_STRING && type != TK_FLOAT && type != TK_BOOL &&
type != TK_NULL && type != TK_HEX && type != TK_OCT && type != TK_BIN) || type != TK_NULL && type != TK_HEX && type != TK_OCT && type != TK_BIN) ||
(sToken.n == 0) || (type == TK_RP)) { (sToken.n == 0) || (type == TK_RP)) {
return tscSQLSyntaxErrMsg(pInsertParam->msg, "invalid data or symbol", sToken.z); return tscSQLSyntaxErrMsg(pInsertParam->msg, "invalid data or symbol", sToken.z);
......
...@@ -1861,7 +1861,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32 ...@@ -1861,7 +1861,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32
if (tscGetErrorMsgLength(pCmd) > 0) { if (tscGetErrorMsgLength(pCmd) > 0) {
return ret; return ret;
} }
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
} }
...@@ -1872,7 +1872,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32 ...@@ -1872,7 +1872,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32
if (TSDB_COL_IS_TAG(pIndex->flag)) { if (TSDB_COL_IS_TAG(pIndex->flag)) {
tExprTreeDestroy(pNode, NULL); tExprTreeDestroy(pNode, NULL);
taosArrayDestroy(&colList); taosArrayDestroy(&colList);
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
} }
} }
...@@ -1884,7 +1884,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32 ...@@ -1884,7 +1884,7 @@ static int32_t handleScalarTypeExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32
if (tscGetErrorMsgLength(pCmd) > 0) { if (tscGetErrorMsgLength(pCmd) > 0) {
return ret; return ret;
} }
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
} }
...@@ -5075,8 +5075,8 @@ static int32_t validateSQLExprItem(SSqlCmd* pCmd, tSqlExpr* pExpr, ...@@ -5075,8 +5075,8 @@ static int32_t validateSQLExprItem(SSqlCmd* pCmd, tSqlExpr* pExpr,
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
} }
//now allowing now +/- value in select expr //not allowing now/today keyword arithmetic operation in select expr
if (pExpr->tokenId == TK_TIMESTAMP) { if (pExpr->exprToken.type == TK_NOW || pExpr->exprToken.type == TK_TODAY) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
} }
...@@ -5455,6 +5455,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql ...@@ -5455,6 +5455,7 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
}else{ }else{
colName = &(pLeft->columnName); colName = &(pLeft->columnName);
} }
int32_t ret = TSDB_CODE_SUCCESS; int32_t ret = TSDB_CODE_SUCCESS;
SColumnIndex index = COLUMN_INDEX_INITIALIZER; SColumnIndex index = COLUMN_INDEX_INITIALIZER;
...@@ -5695,7 +5696,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr ...@@ -5695,7 +5696,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr
if (columnLeft && columnRight) { if (columnLeft && columnRight) {
setNormalExprToCond(&columnLeft, columnRight, (*pExpr)->tokenId); setNormalExprToCond(&columnLeft, columnRight, (*pExpr)->tokenId);
*columnExpr = columnLeft; *columnExpr = columnLeft;
} else { } else {
*columnExpr = columnLeft ? columnLeft : columnRight; *columnExpr = columnLeft ? columnLeft : columnRight;
...@@ -5703,7 +5704,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr ...@@ -5703,7 +5704,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr
if (tsLeft && tsRight) { if (tsLeft && tsRight) {
setNormalExprToCond(&tsLeft, tsRight, (*pExpr)->tokenId); setNormalExprToCond(&tsLeft, tsRight, (*pExpr)->tokenId);
*tsExpr = tsLeft; *tsExpr = tsLeft;
} else { } else {
*tsExpr = tsLeft ? tsLeft : tsRight; *tsExpr = tsLeft ? tsLeft : tsRight;
...@@ -5713,7 +5714,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr ...@@ -5713,7 +5714,7 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr
*type = leftType|rightType; *type = leftType|rightType;
} }
*tbIdx = (leftTbIdx == rightTbIdx) ? leftTbIdx : -1; *tbIdx = (leftTbIdx == rightTbIdx) ? leftTbIdx : -1;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
...@@ -5735,9 +5736,9 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr ...@@ -5735,9 +5736,9 @@ int32_t getQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExpr** pExpr
} }
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
err_ret: err_ret:
tSqlExprDestroy(columnLeft); tSqlExprDestroy(columnLeft);
tSqlExprDestroy(columnRight); tSqlExprDestroy(columnRight);
tSqlExprDestroy(tsLeft); tSqlExprDestroy(tsLeft);
...@@ -5750,7 +5751,7 @@ static void doExtractExprForSTable(SSqlCmd* pCmd, tSqlExpr** pExpr, SQueryInfo* ...@@ -5750,7 +5751,7 @@ static void doExtractExprForSTable(SSqlCmd* pCmd, tSqlExpr** pExpr, SQueryInfo*
*pOut = NULL; *pOut = NULL;
return; return;
} }
if (tSqlExprIsParentOfLeaf(*pExpr)) { if (tSqlExprIsParentOfLeaf(*pExpr)) {
tSqlExpr* pLeft = (*pExpr)->pLeft; tSqlExpr* pLeft = (*pExpr)->pLeft;
...@@ -10436,6 +10437,10 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS ...@@ -10436,6 +10437,10 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS
(*pExpr)->pVal = calloc(1, sizeof(tVariant)); (*pExpr)->pVal = calloc(1, sizeof(tVariant));
tVariantAssign((*pExpr)->pVal, &pSqlExpr->value); tVariantAssign((*pExpr)->pVal, &pSqlExpr->value);
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, pQueryInfo->curTableIdx);
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
(*pExpr)->precision = tinfo.precision;
STableMeta* pTableMeta = tscGetMetaInfo(pQueryInfo, pQueryInfo->curTableIdx)->pTableMeta; STableMeta* pTableMeta = tscGetMetaInfo(pQueryInfo, pQueryInfo->curTableIdx)->pTableMeta;
if (pCols != NULL) { if (pCols != NULL) {
size_t colSize = taosArrayGetSize(pCols); size_t colSize = taosArrayGetSize(pCols);
...@@ -10598,6 +10603,11 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS ...@@ -10598,6 +10603,11 @@ int32_t exprTreeFromSqlExpr(SSqlCmd* pCmd, tExprNode **pExpr, const tSqlExpr* pS
*pExpr = calloc(1, sizeof(tExprNode)); *pExpr = calloc(1, sizeof(tExprNode));
(*pExpr)->nodeType = TSQL_NODE_FUNC; (*pExpr)->nodeType = TSQL_NODE_FUNC;
(*pExpr)->_func.functionId = pSqlExpr->functionId; (*pExpr)->_func.functionId = pSqlExpr->functionId;
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, pQueryInfo->curTableIdx);
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
(*pExpr)->precision = tinfo.precision;
SArray* paramList = pSqlExpr->Expr.paramList; SArray* paramList = pSqlExpr->Expr.paramList;
size_t paramSize = paramList ? taosArrayGetSize(paramList) : 0; size_t paramSize = paramList ? taosArrayGetSize(paramList) : 0;
if (paramSize > 0) { if (paramSize > 0) {
......
...@@ -47,30 +47,38 @@ struct SSchema; ...@@ -47,30 +47,38 @@ struct SSchema;
/////////////////////////////////////////// ///////////////////////////////////////////
// SCALAR FUNCTIONS // SCALAR FUNCTIONS
#define TSDB_FUNC_SCALAR_POW (TSDB_FUNC_FLAG_SCALAR | 0x0000) #define TSDB_FUNC_SCALAR_POW (TSDB_FUNC_FLAG_SCALAR | 0x0000)
#define TSDB_FUNC_SCALAR_LOG (TSDB_FUNC_FLAG_SCALAR | 0x0001) #define TSDB_FUNC_SCALAR_LOG (TSDB_FUNC_FLAG_SCALAR | 0x0001)
#define TSDB_FUNC_SCALAR_ABS (TSDB_FUNC_FLAG_SCALAR | 0x0002) #define TSDB_FUNC_SCALAR_ABS (TSDB_FUNC_FLAG_SCALAR | 0x0002)
#define TSDB_FUNC_SCALAR_ACOS (TSDB_FUNC_FLAG_SCALAR | 0x0003) #define TSDB_FUNC_SCALAR_ACOS (TSDB_FUNC_FLAG_SCALAR | 0x0003)
#define TSDB_FUNC_SCALAR_ASIN (TSDB_FUNC_FLAG_SCALAR | 0x0004) #define TSDB_FUNC_SCALAR_ASIN (TSDB_FUNC_FLAG_SCALAR | 0x0004)
#define TSDB_FUNC_SCALAR_ATAN (TSDB_FUNC_FLAG_SCALAR | 0x0005) #define TSDB_FUNC_SCALAR_ATAN (TSDB_FUNC_FLAG_SCALAR | 0x0005)
#define TSDB_FUNC_SCALAR_COS (TSDB_FUNC_FLAG_SCALAR | 0x0006) #define TSDB_FUNC_SCALAR_COS (TSDB_FUNC_FLAG_SCALAR | 0x0006)
#define TSDB_FUNC_SCALAR_SIN (TSDB_FUNC_FLAG_SCALAR | 0x0007) #define TSDB_FUNC_SCALAR_SIN (TSDB_FUNC_FLAG_SCALAR | 0x0007)
#define TSDB_FUNC_SCALAR_TAN (TSDB_FUNC_FLAG_SCALAR | 0x0008) #define TSDB_FUNC_SCALAR_TAN (TSDB_FUNC_FLAG_SCALAR | 0x0008)
#define TSDB_FUNC_SCALAR_SQRT (TSDB_FUNC_FLAG_SCALAR | 0x0009) #define TSDB_FUNC_SCALAR_SQRT (TSDB_FUNC_FLAG_SCALAR | 0x0009)
#define TSDB_FUNC_SCALAR_CEIL (TSDB_FUNC_FLAG_SCALAR | 0x000A) #define TSDB_FUNC_SCALAR_CEIL (TSDB_FUNC_FLAG_SCALAR | 0x000A)
#define TSDB_FUNC_SCALAR_FLOOR (TSDB_FUNC_FLAG_SCALAR | 0x000B) #define TSDB_FUNC_SCALAR_FLOOR (TSDB_FUNC_FLAG_SCALAR | 0x000B)
#define TSDB_FUNC_SCALAR_ROUND (TSDB_FUNC_FLAG_SCALAR | 0x000C) #define TSDB_FUNC_SCALAR_ROUND (TSDB_FUNC_FLAG_SCALAR | 0x000C)
#define TSDB_FUNC_SCALAR_CONCAT (TSDB_FUNC_FLAG_SCALAR | 0x000D) #define TSDB_FUNC_SCALAR_CONCAT (TSDB_FUNC_FLAG_SCALAR | 0x000D)
#define TSDB_FUNC_SCALAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x000E) #define TSDB_FUNC_SCALAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x000E)
#define TSDB_FUNC_SCALAR_CONCAT_WS (TSDB_FUNC_FLAG_SCALAR | 0x000F) #define TSDB_FUNC_SCALAR_CONCAT_WS (TSDB_FUNC_FLAG_SCALAR | 0x000F)
#define TSDB_FUNC_SCALAR_CHAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x0010) #define TSDB_FUNC_SCALAR_CHAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x0010)
#define TSDB_FUNC_SCALAR_CAST (TSDB_FUNC_FLAG_SCALAR | 0x0011) #define TSDB_FUNC_SCALAR_CAST (TSDB_FUNC_FLAG_SCALAR | 0x0011)
#define TSDB_FUNC_SCALAR_LOWER (TSDB_FUNC_FLAG_SCALAR | 0x0012) #define TSDB_FUNC_SCALAR_LOWER (TSDB_FUNC_FLAG_SCALAR | 0x0012)
#define TSDB_FUNC_SCALAR_UPPER (TSDB_FUNC_FLAG_SCALAR | 0x0013) #define TSDB_FUNC_SCALAR_UPPER (TSDB_FUNC_FLAG_SCALAR | 0x0013)
#define TSDB_FUNC_SCALAR_LTRIM (TSDB_FUNC_FLAG_SCALAR | 0x0014) #define TSDB_FUNC_SCALAR_LTRIM (TSDB_FUNC_FLAG_SCALAR | 0x0014)
#define TSDB_FUNC_SCALAR_RTRIM (TSDB_FUNC_FLAG_SCALAR | 0x0015) #define TSDB_FUNC_SCALAR_RTRIM (TSDB_FUNC_FLAG_SCALAR | 0x0015)
#define TSDB_FUNC_SCALAR_SUBSTR (TSDB_FUNC_FLAG_SCALAR | 0x0016) #define TSDB_FUNC_SCALAR_SUBSTR (TSDB_FUNC_FLAG_SCALAR | 0x0016)
#define TSDB_FUNC_SCALAR_NUM_FUNCTIONS 23 #define TSDB_FUNC_SCALAR_NOW (TSDB_FUNC_FLAG_SCALAR | 0x0017)
#define TSDB_FUNC_SCALAR_TODAY (TSDB_FUNC_FLAG_SCALAR | 0x0018)
#define TSDB_FUNC_SCALAR_TIMEZONE (TSDB_FUNC_FLAG_SCALAR | 0x0019)
#define TSDB_FUNC_SCALAR_TO_ISO8601 (TSDB_FUNC_FLAG_SCALAR | 0x001A)
#define TSDB_FUNC_SCALAR_TO_UNIXTIMESTAMP (TSDB_FUNC_FLAG_SCALAR | 0x001B)
#define TSDB_FUNC_SCALAR_TIMETRUNCATE (TSDB_FUNC_FLAG_SCALAR | 0x001C)
#define TSDB_FUNC_SCALAR_TIMEDIFF (TSDB_FUNC_FLAG_SCALAR | 0x001D)
#define TSDB_FUNC_SCALAR_NUM_FUNCTIONS 30
#define TSDB_FUNC_SCALAR_NAME_MAX_LEN 16 #define TSDB_FUNC_SCALAR_NAME_MAX_LEN 16
...@@ -143,6 +151,7 @@ typedef struct tExprNode { ...@@ -143,6 +151,7 @@ typedef struct tExprNode {
}; };
int16_t resultType; int16_t resultType;
int16_t resultBytes; int16_t resultBytes;
int32_t precision;
} tExprNode; } tExprNode;
typedef struct SExprTraverseSupp { typedef struct SExprTraverseSupp {
......
...@@ -92,6 +92,9 @@ double getVectorDoubleValue_FLOAT(void *src, int32_t index) { ...@@ -92,6 +92,9 @@ double getVectorDoubleValue_FLOAT(void *src, int32_t index) {
double getVectorDoubleValue_DOUBLE(void *src, int32_t index) { double getVectorDoubleValue_DOUBLE(void *src, int32_t index) {
return (double)*((double *)src + index); return (double)*((double *)src + index);
} }
int64_t getVectorTimestampValue(void *src, int32_t index) {
return (int64_t)*((int64_t *)src + index);
}
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFn(int32_t srcType) { _arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFn(int32_t srcType) {
_arithmetic_getVectorDoubleValue_fn_t p = NULL; _arithmetic_getVectorDoubleValue_fn_t p = NULL;
if(srcType==TSDB_DATA_TYPE_TINYINT) { if(srcType==TSDB_DATA_TYPE_TINYINT) {
...@@ -176,6 +179,8 @@ _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFn(int32_t srcType) { ...@@ -176,6 +179,8 @@ _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFn(int32_t srcType) {
p = getVectorValueAddr_FLOAT; p = getVectorValueAddr_FLOAT;
}else if(srcType==TSDB_DATA_TYPE_DOUBLE) { }else if(srcType==TSDB_DATA_TYPE_DOUBLE) {
p = getVectorValueAddr_DOUBLE; p = getVectorValueAddr_DOUBLE;
}else if(srcType==TSDB_DATA_TYPE_TIMESTAMP) {
p = getVectorValueAddr_BIGINT;
}else { }else {
assert(0); assert(0);
} }
...@@ -185,35 +190,68 @@ _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFn(int32_t srcType) { ...@@ -185,35 +190,68 @@ _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFn(int32_t srcType) {
void vectorAdd(void *left, int32_t len1, int32_t _left_type, void *right, int32_t len2, int32_t _right_type, void *out, int32_t _ord) { void vectorAdd(void *left, int32_t len1, int32_t _left_type, void *right, int32_t len2, int32_t _right_type, void *out, int32_t _ord) {
int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1; int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1;
int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1;
double *output=(double*)out;
_arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
_arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(_left_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnRight = getVectorDoubleValueFn(_right_type);
if ((len1) == (len2)) { if (!IS_TIMESTAMP_TYPE(_left_type) && !IS_TIMESTAMP_TYPE(_right_type)) {
for (; i < (len2) && i >= 0; i += step, output += 1) { double *output = (double*)out;
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) { _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
SET_DOUBLE_NULL(output); _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
continue; _arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(_left_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnRight = getVectorDoubleValueFn(_right_type);
if ((len1) == (len2)) {
for (; i < (len2) && i >= 0; i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_DOUBLE_NULL(output);
continue;
}
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) + getVectorDoubleValueFnRight(right,i));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) + getVectorDoubleValueFnRight(right,i)); } else if ((len1) == 1) {
} for (; i >= 0 && i < (len2); i += step, output += 1) {
} else if ((len1) == 1) { if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
for (; i >= 0 && i < (len2); i += step, output += 1) { SET_DOUBLE_NULL(output);
if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) { continue;
SET_DOUBLE_NULL(output); }
continue; SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,0) + getVectorDoubleValueFnRight(right,i));
}
} else if ((len2) == 1) {
for (; i >= 0 && i < (len1); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) {
SET_DOUBLE_NULL(output);
continue;
}
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) + getVectorDoubleValueFnRight(right,0));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,0) + getVectorDoubleValueFnRight(right,i));
} }
} else if ((len2) == 1) { } else {
for (; i >= 0 && i < (len1); i += step, output += 1) { int64_t *output = (int64_t *)out;
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) { _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
SET_DOUBLE_NULL(output); _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
continue;
if ((len1) == (len2)) {
for (; i < (len2) && i >= 0; i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,i) + getVectorTimestampValue(right,i));
}
} else if ((len1) == 1) {
for (; i >= 0 && i < (len2); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,0) + getVectorTimestampValue(right,i));
}
} else if ((len2) == 1) {
for (; i >= 0 && i < (len1); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,i) + getVectorTimestampValue(right,0));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) + getVectorDoubleValueFnRight(right,0));
} }
} }
} }
...@@ -221,35 +259,68 @@ void vectorAdd(void *left, int32_t len1, int32_t _left_type, void *right, int32_ ...@@ -221,35 +259,68 @@ void vectorAdd(void *left, int32_t len1, int32_t _left_type, void *right, int32_
void vectorSub(void *left, int32_t len1, int32_t _left_type, void *right, int32_t len2, int32_t _right_type, void *out, int32_t _ord) { void vectorSub(void *left, int32_t len1, int32_t _left_type, void *right, int32_t len2, int32_t _right_type, void *out, int32_t _ord) {
int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1; int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1;
int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1;
double *output=(double*)out;
_arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
_arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(_left_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnRight = getVectorDoubleValueFn(_right_type);
if ((len1) == (len2)) { if (!IS_TIMESTAMP_TYPE(_left_type) && !IS_TIMESTAMP_TYPE(_right_type)) {
for (; i < (len2) && i >= 0; i += step, output += 1) { double *output=(double*)out;
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) { _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
SET_DOUBLE_NULL(output); _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
continue; _arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnLeft = getVectorDoubleValueFn(_left_type);
_arithmetic_getVectorDoubleValue_fn_t getVectorDoubleValueFnRight = getVectorDoubleValueFn(_right_type);
if ((len1) == (len2)) {
for (; i < (len2) && i >= 0; i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_DOUBLE_NULL(output);
continue;
}
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) - getVectorDoubleValueFnRight(right,i));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) - getVectorDoubleValueFnRight(right,i)); } else if ((len1) == 1) {
} for (; i >= 0 && i < (len2); i += step, output += 1) {
} else if ((len1) == 1) { if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
for (; i >= 0 && i < (len2); i += step, output += 1) { SET_DOUBLE_NULL(output);
if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) { continue;
SET_DOUBLE_NULL(output); }
continue; SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,0) - getVectorDoubleValueFnRight(right,i));
}
} else if ((len2) == 1) {
for (; i >= 0 && i < (len1); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) {
SET_DOUBLE_NULL(output);
continue;
}
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) - getVectorDoubleValueFnRight(right,0));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,0) - getVectorDoubleValueFnRight(right,i));
} }
} else if ((len2) == 1) { } else {
for (; i >= 0 && i < (len1); i += step, output += 1) { int64_t *output = (int64_t *)out;
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) { _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnLeft = getVectorValueAddrFn(_left_type);
SET_DOUBLE_NULL(output); _arithmetic_getVectorValueAddr_fn_t getVectorValueAddrFnRight = getVectorValueAddrFn(_right_type);
continue;
if ((len1) == (len2)) {
for (; i < (len2) && i >= 0; i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,i) - getVectorTimestampValue(right,i));
}
} else if ((len1) == 1) {
for (; i >= 0 && i < (len2); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,0), _left_type) || isNull(getVectorValueAddrFnRight(right,i), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,0) - getVectorTimestampValue(right,i));
}
} else if ((len2) == 1) {
for (; i >= 0 && i < (len1); i += step, output += 1) {
if (isNull(getVectorValueAddrFnLeft(left,i), _left_type) || isNull(getVectorValueAddrFnRight(right,0), _right_type)) {
SET_TIMESTAMP_NULL(output);
continue;
}
SET_TIMESTAMP_VAL(output, getVectorTimestampValue(left,i) - getVectorTimestampValue(right,0));
} }
SET_DOUBLE_VAL(output,getVectorDoubleValueFnLeft(left,i) - getVectorDoubleValueFnRight(right,0));
} }
} }
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "tarray.h" #include "tarray.h"
#include "tbuffer.h" #include "tbuffer.h"
#include "tcompare.h" #include "tcompare.h"
#include "tglobal.h"
#include "tsdb.h" #include "tsdb.h"
#include "tskiplist.h" #include "tskiplist.h"
#include "texpr.h" #include "texpr.h"
...@@ -36,6 +37,7 @@ static int32_t exprValidateStringLengthNode(tExprNode *pExpr); ...@@ -36,6 +37,7 @@ static int32_t exprValidateStringLengthNode(tExprNode *pExpr);
static int32_t exprValidateStringLowerUpperTrimNode(char* msgBuf, tExprNode *pExpr); static int32_t exprValidateStringLowerUpperTrimNode(char* msgBuf, tExprNode *pExpr);
static int32_t exprValidateStringSubstrNode(char* msgBuf, tExprNode *pExpr); static int32_t exprValidateStringSubstrNode(char* msgBuf, tExprNode *pExpr);
static int32_t exprValidateCastNode(char* msgbuf, tExprNode *pExpr); static int32_t exprValidateCastNode(char* msgbuf, tExprNode *pExpr);
static int32_t exprValidateTimeNode(char* msgbuf, tExprNode *pExpr);
static int32_t exprInvalidOperationMsg(char *msgbuf, const char *msg) { static int32_t exprInvalidOperationMsg(char *msgbuf, const char *msg) {
const char* msgFormat = "invalid operation: %s"; const char* msgFormat = "invalid operation: %s";
...@@ -49,7 +51,7 @@ static int32_t exprInvalidOperationMsg(char *msgbuf, const char *msg) { ...@@ -49,7 +51,7 @@ static int32_t exprInvalidOperationMsg(char *msgbuf, const char *msg) {
int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) { int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) {
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
//TODO: check childs for every function //TODO: check children for every function
switch (pExpr->_func.functionId) { switch (pExpr->_func.functionId) {
case TSDB_FUNC_SCALAR_POW: case TSDB_FUNC_SCALAR_POW:
case TSDB_FUNC_SCALAR_LOG: case TSDB_FUNC_SCALAR_LOG:
...@@ -88,6 +90,15 @@ int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) { ...@@ -88,6 +90,15 @@ int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) {
case TSDB_FUNC_SCALAR_SUBSTR: { case TSDB_FUNC_SCALAR_SUBSTR: {
return exprValidateStringSubstrNode(msgbuf, pExpr); return exprValidateStringSubstrNode(msgbuf, pExpr);
} }
case TSDB_FUNC_SCALAR_NOW:
case TSDB_FUNC_SCALAR_TODAY:
case TSDB_FUNC_SCALAR_TIMEZONE:
case TSDB_FUNC_SCALAR_TO_ISO8601:
case TSDB_FUNC_SCALAR_TO_UNIXTIMESTAMP:
case TSDB_FUNC_SCALAR_TIMETRUNCATE:
case TSDB_FUNC_SCALAR_TIMEDIFF: {
return exprValidateTimeNode(msgbuf, pExpr);
}
default: default:
break; break;
...@@ -101,11 +112,26 @@ int32_t exprTreeValidateExprNode(tExprNode *pExpr) { ...@@ -101,11 +112,26 @@ int32_t exprTreeValidateExprNode(tExprNode *pExpr) {
pExpr->_node.optr == TSDB_BINARY_OP_REMAINDER) { pExpr->_node.optr == TSDB_BINARY_OP_REMAINDER) {
int16_t leftType = pExpr->_node.pLeft->resultType; int16_t leftType = pExpr->_node.pLeft->resultType;
int16_t rightType = pExpr->_node.pRight->resultType; int16_t rightType = pExpr->_node.pRight->resultType;
if (!IS_NUMERIC_TYPE(leftType) || !IS_NUMERIC_TYPE(rightType)) { if ((!IS_NUMERIC_TYPE(leftType) && !IS_TIMESTAMP_TYPE(leftType)) ||
(!IS_NUMERIC_TYPE(rightType) && !IS_TIMESTAMP_TYPE(rightType))) {
return TSDB_CODE_TSC_INVALID_OPERATION; return TSDB_CODE_TSC_INVALID_OPERATION;
} }
pExpr->resultType = TSDB_DATA_TYPE_DOUBLE; if (IS_TIMESTAMP_TYPE(leftType) || IS_TIMESTAMP_TYPE(rightType)) {
pExpr->resultBytes = tDataTypes[TSDB_DATA_TYPE_DOUBLE].bytes; if (pExpr->_node.pLeft->nodeType == TSQL_NODE_COL && pExpr->_node.pRight->nodeType == TSQL_NODE_COL) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
//timestamp cannot be used in arithmetic
//operation with other data types
if (!IS_TIMESTAMP_TYPE(leftType) || !IS_TIMESTAMP_TYPE(rightType) ||
(pExpr->_node.optr != TSDB_BINARY_OP_ADD && pExpr->_node.optr != TSDB_BINARY_OP_SUBTRACT)) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
pExpr->resultType = TSDB_DATA_TYPE_TIMESTAMP;
pExpr->resultBytes = tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes;
} else {
pExpr->resultType = TSDB_DATA_TYPE_DOUBLE;
pExpr->resultBytes = tDataTypes[TSDB_DATA_TYPE_DOUBLE].bytes;
}
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} else { } else {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
...@@ -119,6 +145,11 @@ int32_t exprTreeValidateTree(char* msgbuf, tExprNode *pExpr) { ...@@ -119,6 +145,11 @@ int32_t exprTreeValidateTree(char* msgbuf, tExprNode *pExpr) {
} }
if (pExpr->nodeType == TSQL_NODE_VALUE) { if (pExpr->nodeType == TSQL_NODE_VALUE) {
pExpr->resultType = pExpr->pVal->nType; pExpr->resultType = pExpr->pVal->nType;
if (pExpr->pVal->nType == TSDB_DATA_TYPE_TIMESTAMP) {
//convert timestamp value according to db precision
pExpr->pVal->i64 = convertTimePrecision(pExpr->pVal->i64, TSDB_TIME_PRECISION_NANO,
pExpr->precision);
}
if (!IS_VAR_DATA_TYPE(pExpr->pVal->nType)) { if (!IS_VAR_DATA_TYPE(pExpr->pVal->nType)) {
pExpr->resultBytes = tDataTypes[pExpr->pVal->nType].bytes; pExpr->resultBytes = tDataTypes[pExpr->pVal->nType].bytes;
} else { } else {
...@@ -499,9 +530,13 @@ void exprTreeExprNodeTraverse(tExprNode *pExpr, int32_t numOfRows, tExprOperandI ...@@ -499,9 +530,13 @@ void exprTreeExprNodeTraverse(tExprNode *pExpr, int32_t numOfRows, tExprOperandI
_arithmetic_operator_fn_t OperatorFn = getArithmeticOperatorFn(pExpr->_node.optr); _arithmetic_operator_fn_t OperatorFn = getArithmeticOperatorFn(pExpr->_node.optr);
OperatorFn(leftIn, leftNum, leftType, rightIn, rightNum, rightType, output->data, fnOrder); OperatorFn(leftIn, leftNum, leftType, rightIn, rightNum, rightType, output->data, fnOrder);
output->numOfRows = MAX(leftNum, rightNum); output->numOfRows = MAX(leftNum, rightNum);
output->type = TSDB_DATA_TYPE_DOUBLE; if(leftType == TSDB_DATA_TYPE_TIMESTAMP || rightType == TSDB_DATA_TYPE_TIMESTAMP) {
output->type = TSDB_DATA_TYPE_BIGINT;
} else {
output->type = TSDB_DATA_TYPE_DOUBLE;
}
output->bytes = tDataTypes[output->type].bytes; output->bytes = tDataTypes[output->type].bytes;
tfree(ltmp); tfree(ltmp);
...@@ -1220,6 +1255,348 @@ int32_t exprValidateMathNode(tExprNode *pExpr) { ...@@ -1220,6 +1255,348 @@ int32_t exprValidateMathNode(tExprNode *pExpr) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
int32_t exprValidateTimeNode(char *msgbuf, tExprNode *pExpr) {
const char* msg1 = "invalid timestamp digits";
const char* msg2 = "param must be positive integer";
switch (pExpr->_func.functionId) {
case TSDB_FUNC_SCALAR_NOW:
case TSDB_FUNC_SCALAR_TODAY: {
if (pExpr->_func.numChildren != 0 || pExpr->_func.pChildren != NULL) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
pExpr->_func.numChildren = 1;
pExpr->_func.pChildren = (tExprNode**)tcalloc(1, sizeof(tExprNode*));
if (!pExpr->_func.pChildren) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
pExpr->_func.pChildren[0] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
tExprNode* child = pExpr->_func.pChildren[0];
if (!child) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child->nodeType = TSQL_NODE_VALUE;
child->resultType = TSDB_DATA_TYPE_TIMESTAMP;
child->resultBytes = (int16_t)tDataTypes[child->resultType].bytes;
child->pVal = (tVariant *)tcalloc(1, sizeof(tVariant));
if (!child->pVal) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child->pVal->nType = TSDB_DATA_TYPE_TIMESTAMP;
int64_t timeVal;
if (pExpr->_func.functionId == TSDB_FUNC_SCALAR_NOW) {
switch(pExpr->precision) {
case TSDB_TIME_PRECISION_MILLI: {
timeVal = taosGetTimestampMs();
break;
}
case TSDB_TIME_PRECISION_MICRO: {
timeVal = taosGetTimestampUs();
break;
}
case TSDB_TIME_PRECISION_NANO: {
timeVal = taosGetTimestampNs();
break;
}
default: {
assert(false);
break;
}
}
child->pVal->i64 = timeVal;
} else {
timeVal = taosGetTimestampToday() * 1000;
child->pVal->i64 = convertTimePrecision(timeVal, TSDB_TIME_PRECISION_MILLI, pExpr->precision);
}
pExpr->resultType = TSDB_DATA_TYPE_TIMESTAMP;
pExpr->resultBytes = (int16_t)tDataTypes[pExpr->resultType].bytes;
break;
}
case TSDB_FUNC_SCALAR_TIMEZONE: {
if (pExpr->_func.numChildren != 0 || pExpr->_func.pChildren != NULL) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
pExpr->_func.numChildren = 1;
pExpr->_func.pChildren = (tExprNode**)tcalloc(1, sizeof(tExprNode*));
if (!pExpr->_func.pChildren) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
pExpr->_func.pChildren[0] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
tExprNode* child = pExpr->_func.pChildren[0];
if (!child) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child->nodeType = TSQL_NODE_VALUE;
child->resultType = TSDB_DATA_TYPE_BINARY;
child->resultBytes = TSDB_TIMEZONE_LEN;
child->pVal = (tVariant *)tcalloc(1, sizeof(tVariant));
if (!child->pVal) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child->pVal->nType = TSDB_DATA_TYPE_BINARY;
child->pVal->nLen = TSDB_TIMEZONE_LEN;
child->pVal->pz = tcalloc(TSDB_TIMEZONE_LEN, sizeof(char));
if (!child->pVal->pz) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
memcpy(child->pVal->pz, tsTimezone, TSDB_TIMEZONE_LEN);
pExpr->resultType = TSDB_DATA_TYPE_BINARY;
pExpr->resultBytes = TSDB_TIMEZONE_LEN;
break;
}
case TSDB_FUNC_SCALAR_TO_ISO8601: {
if (pExpr->_func.numChildren != 1) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
tExprNode *child = pExpr->_func.pChildren[0];
if (child->resultType != TSDB_DATA_TYPE_BIGINT &&
child->resultType != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (child->nodeType == TSQL_NODE_VALUE) {
if (child->pVal->i64 < 0) {
return exprInvalidOperationMsg(msgbuf, msg2);
}
char fraction[32] = {0};
NUM_TO_STRING(child->resultType, &child->pVal->i64, sizeof(fraction), fraction);
int32_t tsDigits = strlen(fraction);
if (tsDigits > TSDB_TIME_PRECISION_SEC_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MILLI_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MICRO_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_NANO_DIGITS) {
return exprInvalidOperationMsg(msgbuf, msg1);
}
} else if (child->nodeType == TSQL_NODE_COL) {
if (child->pSchema->type != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
}
pExpr->resultType = TSDB_DATA_TYPE_BINARY;
pExpr->resultBytes = 64;//2013-04-12T15:52:01.123000000+0800
break;
}
case TSDB_FUNC_SCALAR_TO_UNIXTIMESTAMP: {
if (pExpr->_func.numChildren != 1) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
tExprNode *child0 = pExpr->_func.pChildren[0];
if (child0->resultType != TSDB_DATA_TYPE_BINARY &&
child0->resultType != TSDB_DATA_TYPE_NCHAR) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
pExpr->_func.numChildren = 2;
tExprNode **pChildren = (tExprNode**)trealloc(pExpr->_func.pChildren, pExpr->_func.numChildren * sizeof(tExprNode*));
if (!pChildren) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
pExpr->_func.pChildren = pChildren;
pExpr->_func.pChildren[0] = child0;
pExpr->_func.pChildren[1] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
tExprNode* child1 = pExpr->_func.pChildren[1];
if (!child1) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child1->nodeType = TSQL_NODE_VALUE;
child1->resultType = TSDB_DATA_TYPE_BIGINT;
child1->resultBytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
child1->pVal = (tVariant *)tcalloc(1, sizeof(tVariant));
if (!child1->pVal) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child1->pVal->nType = TSDB_DATA_TYPE_BIGINT;
child1->pVal->nLen = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
child1->pVal->i64 = (int64_t)pExpr->precision;
pExpr->resultType = TSDB_DATA_TYPE_BIGINT;
pExpr->resultBytes = (int16_t)tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
break;
}
case TSDB_FUNC_SCALAR_TIMETRUNCATE: {
if (pExpr->_func.numChildren != 2) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
tExprNode *child0 = pExpr->_func.pChildren[0];
tExprNode *child1 = pExpr->_func.pChildren[1];
if (child0->resultType != TSDB_DATA_TYPE_BIGINT &&
child0->resultType != TSDB_DATA_TYPE_TIMESTAMP &&
child0->resultType != TSDB_DATA_TYPE_BINARY &&
child0->resultType != TSDB_DATA_TYPE_NCHAR) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (child0->nodeType == TSQL_NODE_VALUE) { /* datetime format or epoch */
if (child0->pVal->nType != TSDB_DATA_TYPE_BIGINT &&
child0->pVal->nType != TSDB_DATA_TYPE_BINARY &&
child0->pVal->nType != TSDB_DATA_TYPE_NCHAR) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (child0->pVal->nType == TSDB_DATA_TYPE_BIGINT) {
char fraction[32] = {0};
NUM_TO_STRING(child0->resultType, &child0->pVal->i64, sizeof(fraction), fraction);
int32_t tsDigits = strlen(fraction);
if (tsDigits > TSDB_TIME_PRECISION_SEC_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MILLI_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MICRO_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_NANO_DIGITS) {
return exprInvalidOperationMsg(msgbuf, msg1);
}
}
} else if (child0->nodeType == TSQL_NODE_COL) { /* ts column */
if (child0->pSchema->type != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
} else {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
//time unit
if (child1->nodeType != TSQL_NODE_VALUE ||
child1->resultType != TSDB_DATA_TYPE_TIMESTAMP ||
child1->pVal->nType != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
//db precision
pExpr->_func.numChildren = 3;
tExprNode **pChildren = (tExprNode**)trealloc(pExpr->_func.pChildren, pExpr->_func.numChildren * sizeof(tExprNode*));
if (!pChildren) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
pExpr->_func.pChildren = pChildren;
pExpr->_func.pChildren[0] = child0;
pExpr->_func.pChildren[1] = child1;
pExpr->_func.pChildren[2] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
tExprNode* child2 = pExpr->_func.pChildren[2];
if (!child2) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child2->nodeType = TSQL_NODE_VALUE;
child2->resultType = TSDB_DATA_TYPE_BIGINT;
child2->resultBytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
child2->pVal = (tVariant *)tcalloc(1, sizeof(tVariant));
if (!child2->pVal) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
child2->pVal->nType = TSDB_DATA_TYPE_BIGINT;
child2->pVal->nLen = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
child2->pVal->i64 = (int64_t)pExpr->precision;
pExpr->resultType = TSDB_DATA_TYPE_TIMESTAMP;
pExpr->resultBytes = (int16_t)tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes;
break;
}
case TSDB_FUNC_SCALAR_TIMEDIFF: {
if (pExpr->_func.numChildren != 2 && pExpr->_func.numChildren != 3) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
tExprNode **child = (tExprNode **)tcalloc(pExpr->_func.numChildren, sizeof(tExprNode *));
for (int32_t i = 0; i < pExpr->_func.numChildren; ++i) {
child[i] = pExpr->_func.pChildren[i];
}
//operands
for (int32_t i = 0; i < 2; ++i) {
if (child[i]->resultType != TSDB_DATA_TYPE_BIGINT &&
child[i]->resultType != TSDB_DATA_TYPE_TIMESTAMP &&
child[i]->resultType != TSDB_DATA_TYPE_BINARY &&
child[i]->resultType != TSDB_DATA_TYPE_NCHAR) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (child[i]->nodeType == TSQL_NODE_VALUE) { /* datetime format or epoch */
if (child[i]->pVal->nType != TSDB_DATA_TYPE_BIGINT &&
child[i]->pVal->nType != TSDB_DATA_TYPE_BINARY &&
child[i]->pVal->nType != TSDB_DATA_TYPE_NCHAR) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (child[i]->pVal->nType == TSDB_DATA_TYPE_BIGINT) {
char fraction[32] = {0};
NUM_TO_STRING(child[i]->resultType, &child[i]->pVal->i64, sizeof(fraction), fraction);
int32_t tsDigits = strlen(fraction);
if (tsDigits > TSDB_TIME_PRECISION_SEC_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MILLI_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_MICRO_DIGITS &&
tsDigits != TSDB_TIME_PRECISION_NANO_DIGITS) {
return exprInvalidOperationMsg(msgbuf, msg1);
}
}
} else if (child[i]->nodeType == TSQL_NODE_COL) { /* ts column */
if (child[i]->pSchema->type != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
} else {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
}
//time unit
if (pExpr->_func.numChildren == 3) {
if (child[2]->nodeType != TSQL_NODE_VALUE ||
child[2]->pVal->nType != TSDB_DATA_TYPE_TIMESTAMP) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
}
//db precision
pExpr->_func.numChildren++;
tExprNode **pChildren = (tExprNode**)trealloc(pExpr->_func.pChildren, pExpr->_func.numChildren * sizeof(tExprNode*));
if (!pChildren) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
pExpr->_func.pChildren = pChildren;
for (int32_t i = 0; i < pExpr->_func.numChildren - 1; ++i) {
pExpr->_func.pChildren[i] = child[i];
}
tExprNode* childPrec;
if (pExpr->_func.numChildren == 3) {
pExpr->_func.pChildren[2] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
childPrec = pExpr->_func.pChildren[2];
} else {
pExpr->_func.pChildren[3] = (tExprNode*)tcalloc(1, sizeof(tExprNode));
childPrec = pExpr->_func.pChildren[3];
}
if (!childPrec) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
childPrec->nodeType = TSQL_NODE_VALUE;
childPrec->resultType = TSDB_DATA_TYPE_BIGINT;
childPrec->resultBytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
childPrec->pVal = (tVariant *)tcalloc(1, sizeof(tVariant));
if (!childPrec->pVal) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
childPrec->pVal->nType = TSDB_DATA_TYPE_BIGINT;
childPrec->pVal->nLen = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
childPrec->pVal->i64 = (int64_t)pExpr->precision;
free(child);
pExpr->resultType = TSDB_DATA_TYPE_BIGINT;
pExpr->resultBytes = (int16_t)tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
break;
}
default: {
assert(false);
break;
}
}
return TSDB_CODE_SUCCESS;
}
void vectorConcat(int16_t functionId, tExprOperandInfo* pInputs, int32_t numInputs, tExprOperandInfo* pOutput, int32_t order) { void vectorConcat(int16_t functionId, tExprOperandInfo* pInputs, int32_t numInputs, tExprOperandInfo* pOutput, int32_t order) {
assert(functionId == TSDB_FUNC_SCALAR_CONCAT && numInputs >=2 && order == TSDB_ORDER_ASC); assert(functionId == TSDB_FUNC_SCALAR_CONCAT && numInputs >=2 && order == TSDB_ORDER_ASC);
for (int i = 0; i < numInputs; ++i) { for (int i = 0; i < numInputs; ++i) {
...@@ -1851,6 +2228,421 @@ void vectorMathFunc(int16_t functionId, tExprOperandInfo *pInputs, int32_t numIn ...@@ -1851,6 +2228,421 @@ void vectorMathFunc(int16_t functionId, tExprOperandInfo *pInputs, int32_t numIn
free(inputData); free(inputData);
} }
void vectorTimeFunc(int16_t functionId, tExprOperandInfo *pInputs, int32_t numInputs, tExprOperandInfo* pOutput, int32_t order) {
for (int i = 0; i < numInputs; ++i) {
assert(pInputs[i].numOfRows == 1 || pInputs[i].numOfRows == pOutput->numOfRows);
}
char* outputData = NULL;
char** inputData = calloc(numInputs, sizeof(char*));
for (int i = 0; i < pOutput->numOfRows; ++i) {
for (int j = 0; j < numInputs; ++j) {
if (pInputs[j].numOfRows == 1) {
inputData[j] = pInputs[j].data;
} else {
inputData[j] = pInputs[j].data + i * pInputs[j].bytes;
}
}
outputData = pOutput->data + i * pOutput->bytes;
bool hasNullInputs = false;
for (int j = 0; j < numInputs; ++j) {
if (isNull(inputData[j], pInputs[j].type)) {
hasNullInputs = true;
setNull(outputData, pOutput->type, pOutput->bytes);
}
}
if (!hasNullInputs) {
switch (functionId) {
case TSDB_FUNC_SCALAR_NOW:
case TSDB_FUNC_SCALAR_TODAY: {
assert(numInputs == 1);
int64_t result;
GET_TYPED_DATA(result, int64_t, pInputs[0].type, inputData[0]);
SET_TYPED_DATA(outputData, pOutput->type, result);
break;
}
case TSDB_FUNC_SCALAR_TIMEZONE: {
assert(numInputs == 1);
memcpy(((char*)varDataVal(outputData)), varDataVal(inputData[0]), varDataLen(inputData[0]));
varDataSetLen(outputData, varDataLen(inputData[0]));
break;
}
case TSDB_FUNC_SCALAR_TO_ISO8601: {
assert(numInputs == 1);
assert(pInputs[0].type == TSDB_DATA_TYPE_BIGINT || pInputs[0].type == TSDB_DATA_TYPE_TIMESTAMP);
char fraction[20] = {0};
bool hasFraction = false;
NUM_TO_STRING(pInputs[0].type, inputData[0], sizeof(fraction), fraction);
int32_t tsDigits = strlen(fraction);
char buf[64] = {0};
int64_t timeVal;
GET_TYPED_DATA(timeVal, int64_t, pInputs[0].type, inputData[0]);
if (tsDigits > TSDB_TIME_PRECISION_SEC_DIGITS) {
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / (1000 * 1000);
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / (1000 * 1000 * 1000);
} else {
assert(0);
}
hasFraction = true;
memmove(fraction, fraction + TSDB_TIME_PRECISION_SEC_DIGITS, TSDB_TIME_PRECISION_SEC_DIGITS);
}
struct tm *tmInfo = localtime((const time_t *)&timeVal);
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", tmInfo);
int32_t len = (int32_t)strlen(buf);
if (hasFraction) {
int32_t fracLen = strlen(fraction) + 1;
char *tzInfo = strchr(buf, '+');
if (tzInfo) {
memmove(tzInfo + fracLen, tzInfo, strlen(tzInfo));
} else {
tzInfo = strchr(buf, '-');
memmove(tzInfo + fracLen, tzInfo, strlen(tzInfo));
}
char tmp[32];
sprintf(tmp, ".%s", fraction);
memcpy(tzInfo, tmp, fracLen);
len += fracLen;
}
memcpy(((char*)varDataVal(outputData)), buf, len);
varDataSetLen(outputData, len);
break;
}
case TSDB_FUNC_SCALAR_TO_UNIXTIMESTAMP: {
assert(numInputs == 2);
assert(pInputs[0].type == TSDB_DATA_TYPE_BINARY || pInputs[0].type == TSDB_DATA_TYPE_NCHAR);
assert(pInputs[1].type == TSDB_DATA_TYPE_BIGINT);
int64_t timeVal = 0;
int64_t timePrec;
GET_TYPED_DATA(timePrec, int64_t, pInputs[1].type, inputData[1]);
if (pInputs[0].type == TSDB_DATA_TYPE_BINARY) {
taosParseTime((char *)varDataVal(inputData[0]), &timeVal, pInputs[0].bytes, timePrec, 0);
} else {
int32_t charLen = varDataLen(inputData[0]);
char *newColData = calloc(1, charLen / TSDB_NCHAR_SIZE + 1);
int len = taosUcs4ToMbs(varDataVal(inputData[0]), charLen, newColData);
if (len < 0){
uError("vectorTimeFunc taosUcs4ToMbs error");
tfree(newColData);
return;
}
newColData[len] = 0;
taosParseTime(newColData, &timeVal, len + 1, timePrec, 0);
tfree(newColData);
}
SET_TYPED_DATA(outputData, pOutput->type, timeVal);
break;
}
case TSDB_FUNC_SCALAR_TIMETRUNCATE: {
assert(numInputs == 3);
assert(pInputs[0].type == TSDB_DATA_TYPE_BIGINT ||
pInputs[0].type == TSDB_DATA_TYPE_TIMESTAMP ||
pInputs[0].type == TSDB_DATA_TYPE_BINARY ||
pInputs[0].type == TSDB_DATA_TYPE_NCHAR);
assert(pInputs[1].type == TSDB_DATA_TYPE_TIMESTAMP);
assert(pInputs[2].type == TSDB_DATA_TYPE_BIGINT);
int64_t timeUnit, timePrec, timeVal = 0;
GET_TYPED_DATA(timeUnit, int64_t, pInputs[1].type, inputData[1]);
GET_TYPED_DATA(timePrec, int64_t, pInputs[2].type, inputData[2]);
int64_t factor = (timePrec == TSDB_TIME_PRECISION_MILLI) ? 1000 :
(timePrec == TSDB_TIME_PRECISION_MICRO ? 1000000 : 1000000000);
if (pInputs[0].type == TSDB_DATA_TYPE_BINARY ||
pInputs[0].type == TSDB_DATA_TYPE_NCHAR) { /* datetime format strings */
taosParseTime((char *)varDataVal(inputData[0]), &timeVal, pInputs[0].bytes, TSDB_TIME_PRECISION_NANO, 0);
//If converted value is less than 10digits in second, use value in second instead
int64_t timeValSec = timeVal / 1000000000;
if (timeValSec < 1000000000) {
timeVal = timeValSec;
}
} else if (pInputs[0].type == TSDB_DATA_TYPE_BIGINT) { /* unix timestamp */
GET_TYPED_DATA(timeVal, int64_t, pInputs[0].type, inputData[0]);
} else if (pInputs[0].type == TSDB_DATA_TYPE_TIMESTAMP) { /* timestamp column*/
GET_TYPED_DATA(timeVal, int64_t, pInputs[0].type, inputData[0]);
int64_t timeValSec = timeVal / factor;
if (timeValSec < 1000000000) {
timeVal = timeValSec;
}
} else {
assert(0);
}
char buf[20] = {0};
NUM_TO_STRING(TSDB_DATA_TYPE_BIGINT, &timeVal, sizeof(buf), buf);
int32_t tsDigits = strlen(buf);
timeUnit = timeUnit * 1000 / factor;
switch (timeUnit) {
case 0: { /* 1u */
if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000 * 1000;
//} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
// //timeVal = timeVal / 1000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor;
} else {
timeVal = timeVal * 1;
}
break;
}
case 1: { /* 1a */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal * 1;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000 * 1000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS){
timeVal = timeVal * factor;
} else {
assert(0);
}
break;
}
case 1000: { /* 1s */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000000 * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000000 * 1000000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor;
} else {
assert(0);
}
break;
}
case 60000: { /* 1m */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000 / 60 * 60 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000000 / 60 * 60 * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000000 / 60 * 60 * 1000000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor / factor / 60 * 60 * factor;
} else {
assert(0);
}
break;
}
case 3600000: { /* 1h */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000 / 3600 * 3600 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000000 / 3600 * 3600 * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000000 / 3600 * 3600 * 1000000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor / factor / 3600 * 3600 * factor;
} else {
assert(0);
}
break;
}
case 86400000: { /* 1d */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000 / 86400 * 86400 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000000 / 86400 * 86400 * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000000 / 86400 * 86400 * 1000000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor / factor / 86400* 86400 * factor;
} else {
assert(0);
}
break;
}
case 604800000: { /* 1w */
if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal / 1000 / 604800 * 604800 * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000000 / 604800 * 604800 * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000000 / 604800 * 604800 * 1000000000;
} else if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal = timeVal * factor / factor / 604800 * 604800* factor;
} else {
assert(0);
}
break;
}
default: {
timeVal = timeVal * 1;
break;
}
}
//truncate the timestamp to db precision
switch (timePrec) {
case TSDB_TIME_PRECISION_MILLI: {
if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal / 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000000;
}
break;
}
case TSDB_TIME_PRECISION_MICRO: {
if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal = timeVal / 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal * 1000;
}
break;
}
case TSDB_TIME_PRECISION_NANO: {
if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal = timeVal * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal = timeVal * 1000000;
}
break;
}
}
SET_TYPED_DATA(outputData, pOutput->type, timeVal);
break;
}
case TSDB_FUNC_SCALAR_TIMEDIFF: {
assert(numInputs == 3 || numInputs == 4);
int64_t timePrec, timeUnit = -1;
int64_t timeVal[2] = {0};
if (numInputs == 3) {
assert(pInputs[2].type == TSDB_DATA_TYPE_BIGINT);
GET_TYPED_DATA(timePrec, int64_t, pInputs[2].type, inputData[2]);
} else {
assert(pInputs[2].type == TSDB_DATA_TYPE_TIMESTAMP);
assert(pInputs[3].type == TSDB_DATA_TYPE_BIGINT);
GET_TYPED_DATA(timeUnit, int64_t, pInputs[2].type, inputData[2]);
GET_TYPED_DATA(timePrec, int64_t, pInputs[3].type, inputData[3]);
}
for (int32_t j = 0; j < 2; ++j) {
assert(pInputs[j].type == TSDB_DATA_TYPE_BIGINT ||
pInputs[j].type == TSDB_DATA_TYPE_TIMESTAMP ||
pInputs[j].type == TSDB_DATA_TYPE_BINARY ||
pInputs[j].type == TSDB_DATA_TYPE_NCHAR);
if (pInputs[j].type == TSDB_DATA_TYPE_BINARY || /* datetime format strings */
pInputs[j].type == TSDB_DATA_TYPE_NCHAR) {
taosParseTime((char *)varDataVal(inputData[j]), &timeVal[j], pInputs[j].bytes, TSDB_TIME_PRECISION_NANO, 0);
} else if (pInputs[j].type == TSDB_DATA_TYPE_BIGINT ||
pInputs[j].type == TSDB_DATA_TYPE_TIMESTAMP) { /* unix timestamp or ts column*/
GET_TYPED_DATA(timeVal[j], int64_t, pInputs[j].type, inputData[j]);
if (pInputs[j].type == TSDB_DATA_TYPE_TIMESTAMP) {
int64_t factor = (timePrec == TSDB_TIME_PRECISION_MILLI) ? 1000 :
(timePrec == TSDB_TIME_PRECISION_MICRO ? 1000000 : 1000000000);
int64_t timeValSec = timeVal[j] / factor;
if (timeValSec < 1000000000) {
timeVal[j] = timeValSec;
}
}
char buf[20] = {0};
NUM_TO_STRING(TSDB_DATA_TYPE_BIGINT, &timeVal[j], sizeof(buf), buf);
int32_t tsDigits = strlen(buf);
if (tsDigits <= TSDB_TIME_PRECISION_SEC_DIGITS) {
timeVal[j] = timeVal[j] * 1000000000;
} else if (tsDigits == TSDB_TIME_PRECISION_MILLI_DIGITS) {
timeVal[j] = timeVal[j] * 1000000;
} else if (tsDigits == TSDB_TIME_PRECISION_MICRO_DIGITS) {
timeVal[j] = timeVal[j] * 1000;
} else if (tsDigits == TSDB_TIME_PRECISION_NANO_DIGITS) {
timeVal[j] = timeVal[j];
}
}
}
int64_t result = (timeVal[0] >= timeVal[1]) ? (timeVal[0] - timeVal[1]) :
(timeVal[1] - timeVal[0]);
if (timeUnit < 0) { // if no time unit given use db precision
switch(timePrec) {
case TSDB_TIME_PRECISION_MILLI: {
result = result / 1000000;
break;
}
case TSDB_TIME_PRECISION_MICRO: {
result = result / 1000;
break;
}
case TSDB_TIME_PRECISION_NANO: {
result = result / 1;
break;
}
}
} else {
int64_t factor = (timePrec == TSDB_TIME_PRECISION_MILLI) ? 1000 :
(timePrec == TSDB_TIME_PRECISION_MICRO ? 1000000 : 1000000000);
timeUnit = timeUnit * 1000 / factor;
switch(timeUnit) {
case 0: { /* 1u */
result = result / 1000;
break;
}
case 1: { /* 1a */
result = result / 1000000;
break;
}
case 1000: { /* 1s */
result = result / 1000000000;
break;
}
case 60000: { /* 1m */
result = result / 1000000000 / 60;
break;
}
case 3600000: { /* 1h */
result = result / 1000000000 / 3600;
break;
}
case 86400000: { /* 1d */
result = result / 1000000000 / 86400;
break;
}
case 604800000: { /* 1w */
result = result / 1000000000 / 604800;
break;
}
default: {
break;
}
}
}
SET_TYPED_DATA(outputData, pOutput->type, result);
break;
}
default: {
assert(false);
break;
}
} // end switch function(id)
} // end can produce value, all child has value
} // end for each row
free(inputData);
}
_expr_scalar_function_t getExprScalarFunction(uint16_t funcId) { _expr_scalar_function_t getExprScalarFunction(uint16_t funcId) {
assert(TSDB_FUNC_IS_SCALAR(funcId)); assert(TSDB_FUNC_IS_SCALAR(funcId));
int16_t scalaIdx = TSDB_FUNC_SCALAR_INDEX(funcId); int16_t scalaIdx = TSDB_FUNC_SCALAR_INDEX(funcId);
...@@ -1974,5 +2766,40 @@ tScalarFunctionInfo aScalarFunctions[] = { ...@@ -1974,5 +2766,40 @@ tScalarFunctionInfo aScalarFunctions[] = {
"substr", "substr",
vectorSubstrFunc vectorSubstrFunc
}, },
{
TSDB_FUNC_SCALAR_NOW,
"now",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TODAY,
"today",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TIMEZONE,
"timezone",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TO_ISO8601,
"to_iso8601",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TO_UNIXTIMESTAMP,
"to_unixtimestamp",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TIMETRUNCATE,
"timetruncate",
vectorTimeFunc
},
{
TSDB_FUNC_SCALAR_TIMEDIFF,
"timediff",
vectorTimeFunc
},
}; };
...@@ -93,6 +93,8 @@ void tVariantCreateExt(tVariant *pVar, SStrToken *token, int32_t optrType, bool ...@@ -93,6 +93,8 @@ void tVariantCreateExt(tVariant *pVar, SStrToken *token, int32_t optrType, bool
case TSDB_DATA_TYPE_TIMESTAMP: { case TSDB_DATA_TYPE_TIMESTAMP: {
if (optrType == TK_NOW) { if (optrType == TK_NOW) {
pVar->i64 = taosGetTimestamp(TSDB_TIME_PRECISION_NANO); pVar->i64 = taosGetTimestamp(TSDB_TIME_PRECISION_NANO);
} else if (optrType == TK_TODAY) {
pVar->i64 = taosGetTimestampToday() * 1000000000;
} else if (optrType == TK_PLUS || optrType == TK_MINUS) { } else if (optrType == TK_PLUS || optrType == TK_MINUS) {
char unit = 0; char unit = 0;
ret = parseAbsoluteDuration(token->z, token->n, &pVar->i64, &unit, TSDB_TIME_PRECISION_NANO); ret = parseAbsoluteDuration(token->z, token->n, &pVar->i64, &unit, TSDB_TIME_PRECISION_NANO);
...@@ -282,7 +284,7 @@ void tVariantAssign(tVariant *pDst, const tVariant *pSrc) { ...@@ -282,7 +284,7 @@ void tVariantAssign(tVariant *pDst, const tVariant *pSrc) {
} }
if (IS_NUMERIC_TYPE(pSrc->nType) || (pSrc->nType == TSDB_DATA_TYPE_BOOL)) { if (IS_NUMERIC_TYPE(pSrc->nType) || IS_TIMESTAMP_TYPE(pSrc->nType) || (pSrc->nType == TSDB_DATA_TYPE_BOOL)) {
pDst->i64 = pSrc->i64; pDst->i64 = pSrc->i64;
} else if (pSrc->nType == TSDB_DATA_TYPE_POINTER_ARRAY) { // this is only for string array } else if (pSrc->nType == TSDB_DATA_TYPE_POINTER_ARRAY) { // this is only for string array
size_t num = taosArrayGetSize(pSrc->arr); size_t num = taosArrayGetSize(pSrc->arr);
...@@ -540,7 +542,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result ...@@ -540,7 +542,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
} }
errno = 0; errno = 0;
if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType) || (pVariant->nType == TSDB_DATA_TYPE_BOOL)) { if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType) || IS_TIMESTAMP_TYPE(pVariant->nType) || (pVariant->nType == TSDB_DATA_TYPE_BOOL)) {
*result = pVariant->i64; *result = pVariant->i64;
} else if (IS_UNSIGNED_NUMERIC_TYPE(pVariant->nType)) { } else if (IS_UNSIGNED_NUMERIC_TYPE(pVariant->nType)) {
*result = pVariant->u64; *result = pVariant->u64;
......
...@@ -106,6 +106,11 @@ extern const int32_t TYPE_BYTES[16]; ...@@ -106,6 +106,11 @@ extern const int32_t TYPE_BYTES[16];
#define TSDB_TIME_PRECISION_MICRO_STR "us" #define TSDB_TIME_PRECISION_MICRO_STR "us"
#define TSDB_TIME_PRECISION_NANO_STR "ns" #define TSDB_TIME_PRECISION_NANO_STR "ns"
#define TSDB_TIME_PRECISION_SEC_DIGITS 10
#define TSDB_TIME_PRECISION_MILLI_DIGITS 13
#define TSDB_TIME_PRECISION_MICRO_DIGITS 16
#define TSDB_TIME_PRECISION_NANO_DIGITS 19
#define TSDB_TICK_PER_SECOND(precision) ((int64_t)((precision)==TSDB_TIME_PRECISION_MILLI ? 1e3L : ((precision)==TSDB_TIME_PRECISION_MICRO ? 1e6L : 1e9L))) #define TSDB_TICK_PER_SECOND(precision) ((int64_t)((precision)==TSDB_TIME_PRECISION_MILLI ? 1e3L : ((precision)==TSDB_TIME_PRECISION_MICRO ? 1e6L : 1e9L)))
#define T_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) #define T_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
...@@ -133,19 +138,21 @@ do { \ ...@@ -133,19 +138,21 @@ do { \
float taos_align_get_float(const char* pBuf); float taos_align_get_float(const char* pBuf);
double taos_align_get_double(const char* pBuf); double taos_align_get_double(const char* pBuf);
#define GET_FLOAT_VAL(x) taos_align_get_float(x) #define GET_FLOAT_VAL(x) taos_align_get_float(x)
#define GET_DOUBLE_VAL(x) taos_align_get_double(x) #define GET_DOUBLE_VAL(x) taos_align_get_double(x)
#define SET_FLOAT_VAL(x, y) { float z = (float)(y); (*(int32_t*) x = *(int32_t*)(&z)); } #define SET_FLOAT_VAL(x, y) { float z = (float)(y); (*(int32_t*) x = *(int32_t*)(&z)); }
#define SET_DOUBLE_VAL(x, y) { double z = (double)(y); (*(int64_t*) x = *(int64_t*)(&z)); } #define SET_DOUBLE_VAL(x, y) { double z = (double)(y); (*(int64_t*) x = *(int64_t*)(&z)); }
#define SET_FLOAT_PTR(x, y) { (*(int32_t*) x = *(int32_t*)y); } #define SET_TIMESTAMP_VAL(x, y) { int64_t z = (int64_t)(y); (*(int64_t*) x = *(int64_t*)(&z)); }
#define SET_DOUBLE_PTR(x, y) { (*(int64_t*) x = *(int64_t*)y); } #define SET_FLOAT_PTR(x, y) { (*(int32_t*) x = *(int32_t*)y); }
#define SET_DOUBLE_PTR(x, y) { (*(int64_t*) x = *(int64_t*)y); }
#else #else
#define GET_FLOAT_VAL(x) (*(float *)(x)) #define GET_FLOAT_VAL(x) (*(float *)(x))
#define GET_DOUBLE_VAL(x) (*(double *)(x)) #define GET_DOUBLE_VAL(x) (*(double *)(x))
#define SET_FLOAT_VAL(x, y) { (*(float *)(x)) = (float)(y); } #define SET_FLOAT_VAL(x, y) { (*(float *)(x)) = (float)(y); }
#define SET_DOUBLE_VAL(x, y) { (*(double *)(x)) = (double)(y); } #define SET_DOUBLE_VAL(x, y) { (*(double *)(x)) = (double)(y); }
#define SET_FLOAT_PTR(x, y) { (*(float *)(x)) = (*(float *)(y)); } #define SET_TIMESTAMP_VAL(x, y) { (*(int64_t *)(x)) = (int64_t)(y); }
#define SET_DOUBLE_PTR(x, y) { (*(double *)(x)) = (*(double *)(y)); } #define SET_FLOAT_PTR(x, y) { (*(float *)(x)) = (*(float *)(y)); }
#define SET_DOUBLE_PTR(x, y) { (*(double *)(x)) = (*(double *)(y)); }
#endif #endif
// TODO: check if below is necessary // TODO: check if below is necessary
......
...@@ -163,61 +163,62 @@ ...@@ -163,61 +163,62 @@
#define TK_SLIMIT 145 #define TK_SLIMIT 145
#define TK_SOFFSET 146 #define TK_SOFFSET 146
#define TK_WHERE 147 #define TK_WHERE 147
#define TK_RESET 148 #define TK_TODAY 148
#define TK_QUERY 149 #define TK_RESET 149
#define TK_SYNCDB 150 #define TK_QUERY 150
#define TK_ADD 151 #define TK_SYNCDB 151
#define TK_COLUMN 152 #define TK_ADD 152
#define TK_MODIFY 153 #define TK_COLUMN 153
#define TK_TAG 154 #define TK_MODIFY 154
#define TK_CHANGE 155 #define TK_TAG 155
#define TK_SET 156 #define TK_CHANGE 156
#define TK_KILL 157 #define TK_SET 157
#define TK_CONNECTION 158 #define TK_KILL 158
#define TK_STREAM 159 #define TK_CONNECTION 159
#define TK_COLON 160 #define TK_STREAM 160
#define TK_ABORT 161 #define TK_COLON 161
#define TK_AFTER 162 #define TK_ABORT 162
#define TK_ATTACH 163 #define TK_AFTER 163
#define TK_BEFORE 164 #define TK_ATTACH 164
#define TK_BEGIN 165 #define TK_BEFORE 165
#define TK_CASCADE 166 #define TK_BEGIN 166
#define TK_CLUSTER 167 #define TK_CASCADE 167
#define TK_CONFLICT 168 #define TK_CLUSTER 168
#define TK_COPY 169 #define TK_CONFLICT 169
#define TK_DEFERRED 170 #define TK_COPY 170
#define TK_DELIMITERS 171 #define TK_DEFERRED 171
#define TK_DETACH 172 #define TK_DELIMITERS 172
#define TK_EACH 173 #define TK_DETACH 173
#define TK_END 174 #define TK_EACH 174
#define TK_EXPLAIN 175 #define TK_END 175
#define TK_FAIL 176 #define TK_EXPLAIN 176
#define TK_FOR 177 #define TK_FAIL 177
#define TK_IGNORE 178 #define TK_FOR 178
#define TK_IMMEDIATE 179 #define TK_IGNORE 179
#define TK_INITIALLY 180 #define TK_IMMEDIATE 180
#define TK_INSTEAD 181 #define TK_INITIALLY 181
#define TK_KEY 182 #define TK_INSTEAD 182
#define TK_OF 183 #define TK_KEY 183
#define TK_RAISE 184 #define TK_OF 184
#define TK_REPLACE 185 #define TK_RAISE 185
#define TK_RESTRICT 186 #define TK_REPLACE 186
#define TK_ROW 187 #define TK_RESTRICT 187
#define TK_STATEMENT 188 #define TK_ROW 188
#define TK_TRIGGER 189 #define TK_STATEMENT 189
#define TK_VIEW 190 #define TK_TRIGGER 190
#define TK_IPTOKEN 191 #define TK_VIEW 191
#define TK_SEMI 192 #define TK_IPTOKEN 192
#define TK_NONE 193 #define TK_SEMI 193
#define TK_PREV 194 #define TK_NONE 194
#define TK_LINEAR 195 #define TK_PREV 195
#define TK_IMPORT 196 #define TK_LINEAR 196
#define TK_TBNAME 197 #define TK_IMPORT 197
#define TK_JOIN 198 #define TK_TBNAME 198
#define TK_INSERT 199 #define TK_JOIN 199
#define TK_INTO 200 #define TK_INSERT 200
#define TK_VALUES 201 #define TK_INTO 201
#define TK_FILE 202 #define TK_VALUES 202
#define TK_FILE 203
#define TK_SPACE 300 #define TK_SPACE 300
......
...@@ -107,7 +107,7 @@ typedef struct { ...@@ -107,7 +107,7 @@ typedef struct {
case TSDB_DATA_TYPE_USMALLINT: \ case TSDB_DATA_TYPE_USMALLINT: \
(_v) = (_finalType)GET_UINT16_VAL(_data); \ (_v) = (_finalType)GET_UINT16_VAL(_data); \
break; \ break; \
case TSDB_DATA_TYPE_TIMESTAMP:\ case TSDB_DATA_TYPE_TIMESTAMP: \
case TSDB_DATA_TYPE_BIGINT: \ case TSDB_DATA_TYPE_BIGINT: \
(_v) = (_finalType)(GET_INT64_VAL(_data)); \ (_v) = (_finalType)(GET_INT64_VAL(_data)); \
break; \ break; \
...@@ -145,6 +145,7 @@ typedef struct { ...@@ -145,6 +145,7 @@ typedef struct {
case TSDB_DATA_TYPE_USMALLINT: \ case TSDB_DATA_TYPE_USMALLINT: \
*(uint16_t *)(_v) = (uint16_t)(_data); \ *(uint16_t *)(_v) = (uint16_t)(_data); \
break; \ break; \
case TSDB_DATA_TYPE_TIMESTAMP: \
case TSDB_DATA_TYPE_BIGINT: \ case TSDB_DATA_TYPE_BIGINT: \
*(int64_t *)(_v) = (int64_t)(_data); \ *(int64_t *)(_v) = (int64_t)(_data); \
break; \ break; \
...@@ -181,6 +182,7 @@ typedef struct { ...@@ -181,6 +182,7 @@ typedef struct {
case TSDB_DATA_TYPE_USMALLINT: \ case TSDB_DATA_TYPE_USMALLINT: \
snprintf(_output, (int32_t)(_outputBytes), "%d", *(uint16_t *)(_input)); \ snprintf(_output, (int32_t)(_outputBytes), "%d", *(uint16_t *)(_input)); \
break; \ break; \
case TSDB_DATA_TYPE_TIMESTAMP: \
case TSDB_DATA_TYPE_BIGINT: \ case TSDB_DATA_TYPE_BIGINT: \
snprintf(_output, (int32_t)(_outputBytes), "%" PRId64, *(int64_t *)(_input)); \ snprintf(_output, (int32_t)(_outputBytes), "%" PRId64, *(int64_t *)(_input)); \
break; \ break; \
...@@ -205,6 +207,7 @@ typedef struct { ...@@ -205,6 +207,7 @@ typedef struct {
#define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT) #define IS_SIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_TINYINT && (_t) <= TSDB_DATA_TYPE_BIGINT)
#define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT) #define IS_UNSIGNED_NUMERIC_TYPE(_t) ((_t) >= TSDB_DATA_TYPE_UTINYINT && (_t) <= TSDB_DATA_TYPE_UBIGINT)
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE) #define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
#define IS_TIMESTAMP_TYPE(_t) ((_t) == TSDB_DATA_TYPE_TIMESTAMP)
#define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t))) #define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t)))
...@@ -289,6 +292,7 @@ void* getDataMax(int32_t type); ...@@ -289,6 +292,7 @@ void* getDataMax(int32_t type);
int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bool issigned); int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bool issigned);
#define SET_DOUBLE_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_DOUBLE_NULL) #define SET_DOUBLE_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_DOUBLE_NULL)
#define SET_TIMESTAMP_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_TIMESTAMP_NULL)
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -77,6 +77,15 @@ static FORCE_INLINE int64_t taosGetTimestamp(int32_t precision) { ...@@ -77,6 +77,15 @@ static FORCE_INLINE int64_t taosGetTimestamp(int32_t precision) {
} }
} }
//@return timestamp of today at 00:00:00 in seconds
static FORCE_INLINE int64_t taosGetTimestampToday() {
time_t t = time(NULL);
struct tm * tm= localtime(&t);
tm->tm_hour = 0;
tm->tm_min = 0;
tm->tm_sec = 0;
return (int64_t)mktime(tm);
}
typedef struct SInterval { typedef struct SInterval {
int32_t tz; // query client timezone int32_t tz; // query client timezone
......
...@@ -83,12 +83,12 @@ void deltaToUtcInitOnce() { ...@@ -83,12 +83,12 @@ void deltaToUtcInitOnce() {
static int64_t parseFraction(char* str, char** end, int32_t timePrec); static int64_t parseFraction(char* str, char** end, int32_t timePrec);
static int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char delim); static int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char delim);
static int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec); static int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec, char delim);
static int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec); static int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec, char delim);
static char* forwardToTimeStringEnd(char* str); static char* forwardToTimeStringEnd(char* str);
static bool checkTzPresent(char *str, int32_t len); static bool checkTzPresent(char *str, int32_t len);
static int32_t (*parseLocaltimeFp[]) (char* timestr, int64_t* time, int32_t timePrec) = { static int32_t (*parseLocaltimeFp[]) (char* timestr, int64_t* time, int32_t timePrec, char delim) = {
parseLocaltime, parseLocaltime,
parseLocaltimeWithDst parseLocaltimeWithDst
}; };
...@@ -98,11 +98,17 @@ int32_t taosGetTimestampSec() { return (int32_t)time(NULL); } ...@@ -98,11 +98,17 @@ int32_t taosGetTimestampSec() { return (int32_t)time(NULL); }
int32_t taosParseTime(char* timestr, int64_t* time, int32_t len, int32_t timePrec, int8_t day_light) { int32_t taosParseTime(char* timestr, int64_t* time, int32_t len, int32_t timePrec, int8_t day_light) {
/* parse datatime string in with tz */ /* parse datatime string in with tz */
if (strnchr(timestr, 'T', len, false) != NULL) { if (strnchr(timestr, 'T', len, false) != NULL) {
return parseTimeWithTz(timestr, time, timePrec, 'T'); if (checkTzPresent(timestr, len)) {
} else if (checkTzPresent(timestr, len)) { return parseTimeWithTz(timestr, time, timePrec, 'T');
return parseTimeWithTz(timestr, time, timePrec, 0); } else {
return (*parseLocaltimeFp[day_light])(timestr, time, timePrec, 'T');
}
} else { } else {
return (*parseLocaltimeFp[day_light])(timestr, time, timePrec); if (checkTzPresent(timestr, len)) {
return parseTimeWithTz(timestr, time, timePrec, 0);
} else {
return (*parseLocaltimeFp[day_light])(timestr, time, timePrec, 0);
}
} }
} }
...@@ -316,11 +322,19 @@ int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char del ...@@ -316,11 +322,19 @@ int32_t parseTimeWithTz(char* timestr, int64_t* time, int32_t timePrec, char del
return 0; return 0;
} }
int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) { int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec, char delim) {
*time = 0; *time = 0;
struct tm tm = {0}; struct tm tm = {0};
char* str = strptime(timestr, "%Y-%m-%d %H:%M:%S", &tm); char* str;
if (delim == 'T') {
str = strptime(timestr, "%Y-%m-%dT%H:%M:%S", &tm);
} else if (delim == 0) {
str = strptime(timestr, "%Y-%m-%d %H:%M:%S", &tm);
} else {
str = NULL;
}
if (str == NULL) { if (str == NULL) {
return -1; return -1;
} }
...@@ -332,7 +346,7 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) { ...@@ -332,7 +346,7 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) {
#endif #endif
int64_t seconds = user_mktime64(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, timezone); int64_t seconds = user_mktime64(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, timezone);
int64_t fraction = 0; int64_t fraction = 0;
if (*str == '.') { if (*str == '.') {
...@@ -349,19 +363,27 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) { ...@@ -349,19 +363,27 @@ int32_t parseLocaltime(char* timestr, int64_t* time, int32_t timePrec) {
return 0; return 0;
} }
int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec) { int32_t parseLocaltimeWithDst(char* timestr, int64_t* time, int32_t timePrec, char delim) {
*time = 0; *time = 0;
struct tm tm = {0}; struct tm tm = {0};
tm.tm_isdst = -1; tm.tm_isdst = -1;
char* str = strptime(timestr, "%Y-%m-%d %H:%M:%S", &tm); char* str;
if (delim == 'T') {
str = strptime(timestr, "%Y-%m-%dT%H:%M:%S", &tm);
} else if (delim == 0) {
str = strptime(timestr, "%Y-%m-%d %H:%M:%S", &tm);
} else {
str = NULL;
}
if (str == NULL) { if (str == NULL) {
return -1; return -1;
} }
/* mktime will be affected by TZ, set by using taos_options */ /* mktime will be affected by TZ, set by using taos_options */
int64_t seconds = mktime(&tm); int64_t seconds = mktime(&tm);
int64_t fraction = 0; int64_t fraction = 0;
if (*str == '.') { if (*str == '.') {
......
...@@ -762,6 +762,7 @@ expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCr ...@@ -762,6 +762,7 @@ expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCr
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(pInfo, &X, TK_FLOAT);} expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(pInfo, &X, TK_FLOAT);}
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_STRING);} expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_STRING);}
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_NOW); } expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_NOW); }
expr(A) ::= TODAY(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_TODAY); }
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);} expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);} expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);} expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
...@@ -986,4 +987,4 @@ cmd ::= KILL QUERY INTEGER(X) COLON(Z) INTEGER(Y). {X.n += (Z.n + Y.n); s ...@@ -986,4 +987,4 @@ cmd ::= KILL QUERY INTEGER(X) COLON(Z) INTEGER(Y). {X.n += (Z.n + Y.n); s
%fallback ID ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT COPY DATABASE DEFERRED %fallback ID ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT COPY DATABASE DEFERRED
DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR GLOB IGNORE IMMEDIATE INITIALLY INSTEAD DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR GLOB IGNORE IMMEDIATE INITIALLY INSTEAD
LIKE MATCH NMATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL LIKE MATCH NMATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL
NOW IPTOKEN SEMI NONE PREV LINEAR IMPORT TBNAME JOIN STABLE NULL INSERT INTO VALUES FILE. NOW TODAY IPTOKEN SEMI NONE PREV LINEAR IMPORT TBNAME JOIN STABLE NULL INSERT INTO VALUES FILE.
...@@ -33,6 +33,7 @@ SSqlInfo qSqlParse(const char *pStr) { ...@@ -33,6 +33,7 @@ SSqlInfo qSqlParse(const char *pStr) {
sqlInfo.funcs = taosArrayInit(4, sizeof(SStrToken)); sqlInfo.funcs = taosArrayInit(4, sizeof(SStrToken));
int32_t i = 0; int32_t i = 0;
bool inWhere = false;
while (1) { while (1) {
SStrToken t0 = {0}; SStrToken t0 = {0};
...@@ -60,7 +61,7 @@ SSqlInfo qSqlParse(const char *pStr) { ...@@ -60,7 +61,7 @@ SSqlInfo qSqlParse(const char *pStr) {
sqlInfo.valid = false; sqlInfo.valid = false;
goto abort_parse; goto abort_parse;
} }
case TK_HEX: case TK_HEX:
case TK_OCT: case TK_OCT:
case TK_BIN:{ case TK_BIN:{
...@@ -68,6 +69,25 @@ SSqlInfo qSqlParse(const char *pStr) { ...@@ -68,6 +69,25 @@ SSqlInfo qSqlParse(const char *pStr) {
sqlInfo.valid = false; sqlInfo.valid = false;
goto abort_parse; goto abort_parse;
} }
case TK_WHERE:{
inWhere = true;
Parse(pParser, t0.type, t0, &sqlInfo);
if (sqlInfo.valid == false) {
goto abort_parse;
}
break;
}
case TK_NOW:
case TK_TODAY: {
//for now(),today() function used in select/where clause
if (pStr[i] == '(' && pStr[i + 1] == ')') {
if (!inWhere) {
t0.type = TK_ID;
} else {
i += 2;
}
}
}
default: default:
Parse(pParser, t0.type, t0, &sqlInfo); Parse(pParser, t0.type, t0, &sqlInfo);
if (sqlInfo.valid == false) { if (sqlInfo.valid == false) {
...@@ -155,9 +175,13 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr ...@@ -155,9 +175,13 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr
} }
pSqlExpr->tokenId = optrType; pSqlExpr->tokenId = optrType;
pSqlExpr->type = SQL_NODE_VALUE; pSqlExpr->type = SQL_NODE_VALUE;
} else if (optrType == TK_NOW) { } else if (optrType == TK_NOW || optrType == TK_TODAY) {
// use nanosecond by default TODO set value after getting database precision // use nanosecond by default TODO set value after getting database precision
pSqlExpr->value.i64 = taosGetTimestamp(TSDB_TIME_PRECISION_NANO); if (optrType == TK_NOW) {
pSqlExpr->value.i64 = taosGetTimestamp(TSDB_TIME_PRECISION_NANO);
} else {
pSqlExpr->value.i64 = taosGetTimestampToday() * 1000000000;
}
pSqlExpr->value.nType = TSDB_DATA_TYPE_BIGINT; pSqlExpr->value.nType = TSDB_DATA_TYPE_BIGINT;
pSqlExpr->tokenId = TK_TIMESTAMP; // TK_TIMESTAMP used to denote the time value is in microsecond pSqlExpr->tokenId = TK_TIMESTAMP; // TK_TIMESTAMP used to denote the time value is in microsecond
pSqlExpr->type = SQL_NODE_VALUE; pSqlExpr->type = SQL_NODE_VALUE;
...@@ -176,7 +200,7 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr ...@@ -176,7 +200,7 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr
pSqlExpr->flags |= 1 << EXPR_FLAG_NS_TIMESTAMP; pSqlExpr->flags |= 1 << EXPR_FLAG_NS_TIMESTAMP;
pSqlExpr->flags |= 1 << EXPR_FLAG_TIMESTAMP_VAR; pSqlExpr->flags |= 1 << EXPR_FLAG_TIMESTAMP_VAR;
pSqlExpr->value.nType = TSDB_DATA_TYPE_BIGINT; pSqlExpr->value.nType = TSDB_DATA_TYPE_TIMESTAMP;
pSqlExpr->tokenId = TK_TIMESTAMP; pSqlExpr->tokenId = TK_TIMESTAMP;
pSqlExpr->type = SQL_NODE_VALUE; pSqlExpr->type = SQL_NODE_VALUE;
} else if (optrType == TK_AS) { } else if (optrType == TK_AS) {
...@@ -184,7 +208,7 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr ...@@ -184,7 +208,7 @@ tSqlExpr *tSqlExprCreateIdValue(SSqlInfo* pInfo, SStrToken *pToken, int32_t optr
if (pToken != NULL) { if (pToken != NULL) {
pSqlExpr->dataType = *(TAOS_FIELD *)pToken; pSqlExpr->dataType = *(TAOS_FIELD *)pToken;
} }
pSqlExpr->tokenId = optrType; pSqlExpr->tokenId = optrType;
pSqlExpr->type = SQL_NODE_DATA_TYPE; pSqlExpr->type = SQL_NODE_DATA_TYPE;
} else { } else {
......
...@@ -100,30 +100,30 @@ ...@@ -100,30 +100,30 @@
#endif #endif
/************* Begin control #defines *****************************************/ /************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int #define YYCODETYPE unsigned short int
#define YYNOCODE 289 #define YYNOCODE 290
#define YYACTIONTYPE unsigned short int #define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken #define ParseTOKENTYPE SStrToken
typedef union { typedef union {
int yyinit; int yyinit;
ParseTOKENTYPE yy0; ParseTOKENTYPE yy0;
SRangeVal yy22; SRelationInfo* yy84;
SCreatedTableInfo yy34; SArray* yy161;
tVariant yy54; SSessionWindowVal yy219;
int64_t yy55; TAOS_FIELD yy223;
SIntervalVal yy102; SCreateAcctInfo yy231;
SSessionWindowVal yy115; SSqlNode* yy276;
SSqlNode* yy160; SIntervalVal yy300;
SCreateAcctInfo yy205; SCreateDbInfo yy302;
SArray* yy209; SCreatedTableInfo yy356;
SWindowStateVal yy290; int64_t yy369;
int yy332; SLimitVal yy394;
TAOS_FIELD yy369; SRangeVal yy420;
int32_t yy380; int yy452;
SCreateTableSql* yy404; SCreateTableSql* yy462;
SRelationInfo* yy530; int32_t yy520;
SLimitVal yy534; tVariant yy526;
SCreateDbInfo yy560; tSqlExpr* yy546;
tSqlExpr* yy574; SWindowStateVal yy548;
} YYMINORTYPE; } YYMINORTYPE;
#ifndef YYSTACKDEPTH #ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100 #define YYSTACKDEPTH 100
...@@ -140,16 +140,17 @@ typedef union { ...@@ -140,16 +140,17 @@ typedef union {
#define ParseCTX_STORE #define ParseCTX_STORE
#define YYFALLBACK 1 #define YYFALLBACK 1
#define YYNSTATE 398 #define YYNSTATE 398
#define YYNRULE 319 #define YYNRULE 320
#define YYNTOKEN 203 #define YYNRULE_WITH_ACTION 320
#define YYNTOKEN 204
#define YY_MAX_SHIFT 397 #define YY_MAX_SHIFT 397
#define YY_MIN_SHIFTREDUCE 624 #define YY_MIN_SHIFTREDUCE 625
#define YY_MAX_SHIFTREDUCE 942 #define YY_MAX_SHIFTREDUCE 944
#define YY_ERROR_ACTION 943 #define YY_ERROR_ACTION 945
#define YY_ACCEPT_ACTION 944 #define YY_ACCEPT_ACTION 946
#define YY_NO_ACTION 945 #define YY_NO_ACTION 947
#define YY_MIN_REDUCE 946 #define YY_MIN_REDUCE 948
#define YY_MAX_REDUCE 1264 #define YY_MAX_REDUCE 1267
/************* End control #defines *******************************************/ /************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
...@@ -216,318 +217,318 @@ typedef union { ...@@ -216,318 +217,318 @@ typedef union {
** yy_default[] Default action for each state. ** yy_default[] Default action for each state.
** **
*********** Begin parsing tables **********************************************/ *********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (864) #define YY_ACTTAB_COUNT (865)
static const YYACTIONTYPE yy_action[] = { static const YYACTIONTYPE yy_action[] = {
/* 0 */ 105, 675, 1095, 1129, 944, 397, 262, 759, 675, 676, /* 0 */ 105, 676, 1097, 1131, 946, 397, 262, 760, 676, 677,
/* 10 */ 1181, 711, 1182, 314, 37, 38, 676, 41, 42, 396, /* 10 */ 1183, 712, 1184, 314, 37, 38, 677, 41, 42, 396,
/* 20 */ 243, 265, 31, 30, 29, 1087, 163, 40, 347, 45, /* 20 */ 243, 265, 31, 30, 29, 1089, 163, 40, 347, 45,
/* 30 */ 43, 46, 44, 1084, 1085, 55, 1088, 36, 35, 372, /* 30 */ 43, 46, 44, 1086, 1087, 55, 1090, 36, 35, 372,
/* 40 */ 371, 34, 33, 32, 37, 38, 252, 41, 42, 258, /* 40 */ 371, 34, 33, 32, 37, 38, 252, 41, 42, 258,
/* 50 */ 85, 265, 31, 30, 29, 24, 1120, 40, 347, 45, /* 50 */ 85, 265, 31, 30, 29, 24, 1122, 40, 347, 45,
/* 60 */ 43, 46, 44, 318, 100, 1238, 99, 36, 35, 218, /* 60 */ 43, 46, 44, 318, 100, 1241, 99, 36, 35, 218,
/* 70 */ 214, 34, 33, 32, 288, 1126, 131, 125, 136, 1238, /* 70 */ 214, 34, 33, 32, 288, 1128, 131, 125, 136, 1241,
/* 80 */ 1238, 1240, 1241, 135, 1086, 141, 144, 134, 37, 38, /* 80 */ 1241, 1243, 1244, 135, 1088, 141, 144, 134, 37, 38,
/* 90 */ 88, 41, 42, 51, 138, 265, 31, 30, 29, 295, /* 90 */ 88, 41, 42, 51, 138, 265, 31, 30, 29, 295,
/* 100 */ 294, 40, 347, 45, 43, 46, 44, 343, 34, 33, /* 100 */ 294, 40, 347, 45, 43, 46, 44, 343, 34, 33,
/* 110 */ 32, 36, 35, 343, 216, 34, 33, 32, 37, 38, /* 110 */ 32, 36, 35, 343, 216, 34, 33, 32, 37, 38,
/* 120 */ 58, 41, 42, 59, 1238, 265, 31, 30, 29, 275, /* 120 */ 58, 41, 42, 59, 1241, 265, 31, 30, 29, 275,
/* 130 */ 675, 40, 347, 45, 43, 46, 44, 879, 676, 882, /* 130 */ 676, 40, 347, 45, 43, 46, 44, 880, 677, 883,
/* 140 */ 185, 36, 35, 675, 217, 34, 33, 32, 13, 37, /* 140 */ 185, 36, 35, 676, 217, 34, 33, 32, 13, 37,
/* 150 */ 39, 676, 41, 42, 1238, 382, 265, 31, 30, 29, /* 150 */ 39, 677, 41, 42, 1241, 382, 265, 31, 30, 29,
/* 160 */ 280, 873, 40, 347, 45, 43, 46, 44, 245, 284, /* 160 */ 1106, 874, 40, 347, 45, 43, 46, 44, 245, 395,
/* 170 */ 283, 1104, 36, 35, 59, 1102, 34, 33, 32, 209, /* 170 */ 393, 653, 36, 35, 59, 1104, 34, 33, 32, 209,
/* 180 */ 207, 205, 107, 86, 390, 1032, 204, 151, 150, 149, /* 180 */ 207, 205, 107, 86, 390, 1034, 204, 151, 150, 149,
/* 190 */ 148, 625, 626, 627, 628, 629, 630, 631, 632, 633, /* 190 */ 148, 626, 627, 628, 629, 630, 631, 632, 633, 634,
/* 200 */ 634, 635, 636, 637, 638, 160, 250, 244, 38, 1260, /* 200 */ 635, 636, 637, 638, 639, 160, 250, 244, 38, 1263,
/* 210 */ 41, 42, 1252, 1105, 265, 31, 30, 29, 289, 255, /* 210 */ 41, 42, 345, 1107, 265, 31, 30, 29, 280, 255,
/* 220 */ 40, 347, 45, 43, 46, 44, 1102, 395, 393, 652, /* 220 */ 40, 347, 45, 43, 46, 44, 1104, 284, 283, 317,
/* 230 */ 36, 35, 60, 257, 34, 33, 32, 223, 41, 42, /* 230 */ 36, 35, 1, 187, 34, 33, 32, 223, 41, 42,
/* 240 */ 1105, 178, 265, 31, 30, 29, 59, 1238, 40, 347, /* 240 */ 268, 178, 265, 31, 30, 29, 1255, 1241, 40, 347,
/* 250 */ 45, 43, 46, 44, 159, 157, 156, 886, 36, 35, /* 250 */ 45, 43, 46, 44, 879, 296, 882, 888, 36, 35,
/* 260 */ 304, 94, 34, 33, 32, 67, 341, 389, 388, 340, /* 260 */ 304, 94, 34, 33, 32, 67, 341, 389, 388, 340,
/* 270 */ 339, 338, 387, 337, 336, 335, 386, 334, 385, 384, /* 270 */ 339, 338, 387, 337, 336, 335, 386, 334, 385, 384,
/* 280 */ 25, 1063, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, /* 280 */ 25, 59, 1065, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
/* 290 */ 1059, 1060, 1061, 1062, 1064, 1065, 802, 222, 1101, 237, /* 290 */ 1060, 1061, 1062, 1063, 1064, 1066, 1067, 222, 224, 237,
/* 300 */ 888, 68, 296, 877, 230, 880, 878, 883, 881, 108, /* 300 */ 890, 68, 297, 878, 230, 881, 352, 884, 1241, 1122,
/* 310 */ 147, 146, 145, 229, 224, 237, 888, 355, 94, 877, /* 310 */ 147, 146, 145, 229, 181, 237, 890, 355, 94, 878,
/* 320 */ 259, 880, 275, 883, 1238, 10, 59, 1105, 261, 45, /* 320 */ 269, 881, 267, 884, 358, 357, 256, 246, 59, 45,
/* 330 */ 43, 46, 44, 186, 225, 241, 242, 36, 35, 349, /* 330 */ 43, 46, 44, 1104, 225, 241, 242, 36, 35, 349,
/* 340 */ 1230, 34, 33, 32, 1238, 1089, 5, 62, 189, 297, /* 340 */ 261, 34, 33, 32, 1241, 59, 5, 62, 189, 1194,
/* 350 */ 1238, 241, 242, 188, 114, 119, 110, 118, 68, 787, /* 350 */ 1122, 241, 242, 188, 114, 119, 110, 118, 68, 788,
/* 360 */ 1229, 268, 784, 1228, 785, 239, 786, 274, 1192, 240, /* 360 */ 274, 1233, 785, 257, 786, 108, 787, 266, 247, 1232,
/* 370 */ 1238, 256, 330, 1238, 67, 1238, 389, 388, 1102, 1238, /* 370 */ 1107, 1241, 330, 359, 889, 67, 1193, 389, 388, 1241,
/* 380 */ 287, 387, 84, 1120, 47, 386, 821, 385, 384, 238, /* 380 */ 1104, 287, 387, 84, 47, 285, 386, 822, 385, 384,
/* 390 */ 824, 266, 218, 346, 270, 271, 1071, 103, 1069, 1070, /* 390 */ 238, 825, 1231, 346, 270, 271, 1073, 1103, 1071, 1072,
/* 400 */ 47, 246, 1238, 1072, 1241, 833, 834, 1073, 59, 1074, /* 400 */ 47, 1091, 1241, 1074, 218, 59, 59, 1075, 59, 1076,
/* 410 */ 1075, 59, 89, 853, 59, 345, 59, 59, 300, 301, /* 410 */ 1077, 59, 161, 895, 1241, 345, 1244, 239, 79, 300,
/* 420 */ 805, 889, 884, 885, 36, 35, 887, 59, 34, 33, /* 420 */ 301, 891, 885, 887, 36, 35, 59, 1241, 34, 33,
/* 430 */ 32, 59, 264, 220, 1179, 830, 1180, 889, 884, 885, /* 430 */ 32, 218, 264, 159, 157, 156, 133, 891, 885, 887,
/* 440 */ 269, 59, 267, 1238, 358, 357, 276, 221, 273, 165, /* 440 */ 276, 1241, 273, 1244, 367, 366, 886, 59, 382, 59,
/* 450 */ 367, 366, 1120, 359, 6, 218, 360, 1238, 1191, 361, /* 450 */ 360, 361, 806, 362, 6, 240, 368, 1104, 1104, 220,
/* 460 */ 1102, 362, 368, 1102, 352, 1238, 1102, 1241, 1102, 1102, /* 460 */ 1104, 80, 886, 1104, 221, 1241, 226, 219, 275, 1241,
/* 470 */ 247, 275, 369, 852, 226, 219, 370, 227, 228, 1102, /* 470 */ 854, 369, 227, 228, 1241, 232, 1241, 1241, 1104, 186,
/* 480 */ 788, 272, 348, 1102, 1238, 1238, 374, 1238, 1238, 275, /* 480 */ 789, 272, 1241, 1241, 91, 1241, 233, 92, 234, 275,
/* 490 */ 994, 232, 233, 1102, 234, 91, 231, 199, 133, 215, /* 490 */ 259, 275, 370, 231, 374, 215, 1241, 1107, 1241, 1104,
/* 500 */ 1103, 1238, 1238, 76, 1238, 248, 1238, 1004, 809, 1238, /* 500 */ 348, 1104, 1105, 1241, 996, 1241, 248, 834, 835, 1006,
/* 510 */ 382, 102, 92, 101, 199, 995, 1, 187, 3, 200, /* 510 */ 1181, 199, 1182, 102, 997, 101, 199, 103, 3, 200,
/* 520 */ 299, 298, 199, 840, 841, 345, 769, 79, 263, 322, /* 520 */ 289, 199, 803, 831, 291, 299, 298, 291, 841, 842,
/* 530 */ 771, 324, 770, 54, 351, 291, 917, 71, 48, 890, /* 530 */ 853, 76, 89, 770, 60, 322, 772, 165, 324, 771,
/* 540 */ 60, 674, 317, 60, 71, 106, 71, 15, 77, 14, /* 540 */ 810, 54, 71, 48, 919, 892, 351, 60, 263, 60,
/* 550 */ 9, 83, 291, 9, 285, 9, 350, 124, 17, 123, /* 550 */ 71, 10, 106, 71, 15, 675, 14, 83, 9, 9,
/* 560 */ 16, 794, 792, 795, 793, 19, 325, 18, 876, 253, /* 560 */ 124, 17, 123, 16, 795, 793, 796, 794, 350, 9,
/* 570 */ 80, 893, 364, 363, 130, 21, 129, 20, 143, 142, /* 570 */ 364, 363, 253, 19, 325, 18, 77, 130, 21, 129,
/* 580 */ 1188, 1187, 254, 758, 181, 373, 26, 161, 162, 1100, /* 580 */ 20, 143, 142, 1190, 1189, 254, 373, 162, 877, 759,
/* 590 */ 1128, 1139, 1171, 1136, 1137, 1141, 1121, 292, 164, 169, /* 590 */ 1102, 1130, 26, 1173, 1141, 1138, 1172, 1139, 1123, 292,
/* 600 */ 1170, 310, 1169, 1168, 180, 1096, 182, 158, 1094, 183, /* 600 */ 1143, 164, 169, 1098, 310, 1171, 1170, 180, 182, 1096,
/* 610 */ 303, 820, 184, 171, 1009, 327, 328, 329, 249, 332, /* 610 */ 183, 184, 1011, 158, 821, 327, 328, 303, 329, 332,
/* 620 */ 333, 172, 69, 212, 65, 344, 1003, 305, 1118, 356, /* 620 */ 333, 69, 212, 65, 344, 1005, 249, 170, 356, 1262,
/* 630 */ 170, 307, 1259, 121, 1258, 1255, 190, 365, 1251, 127, /* 630 */ 305, 307, 121, 1261, 1258, 190, 81, 365, 1254, 1120,
/* 640 */ 1250, 81, 78, 1247, 319, 191, 1029, 28, 315, 313, /* 640 */ 127, 1253, 78, 1250, 191, 1031, 66, 319, 171, 61,
/* 650 */ 311, 66, 309, 306, 302, 61, 70, 176, 213, 173, /* 650 */ 70, 213, 28, 993, 315, 173, 137, 309, 313, 991,
/* 660 */ 991, 137, 989, 139, 140, 987, 986, 277, 202, 203, /* 660 */ 139, 311, 140, 172, 306, 989, 988, 277, 202, 203,
/* 670 */ 87, 983, 982, 981, 980, 979, 978, 977, 206, 208, /* 670 */ 985, 984, 983, 982, 302, 981, 980, 27, 979, 206,
/* 680 */ 969, 210, 966, 27, 211, 962, 331, 383, 290, 1098, /* 680 */ 208, 971, 210, 968, 211, 964, 87, 331, 290, 1100,
/* 690 */ 132, 90, 95, 375, 308, 376, 377, 378, 379, 380, /* 690 */ 90, 95, 308, 383, 376, 132, 375, 377, 378, 379,
/* 700 */ 381, 82, 260, 391, 942, 278, 326, 279, 941, 281, /* 700 */ 82, 380, 381, 260, 391, 944, 326, 279, 943, 282,
/* 710 */ 282, 235, 940, 923, 922, 286, 115, 1008, 1007, 236, /* 710 */ 942, 278, 235, 236, 281, 925, 924, 115, 1010, 1009,
/* 720 */ 321, 116, 291, 11, 93, 797, 293, 52, 96, 829, /* 720 */ 116, 286, 321, 291, 11, 293, 987, 93, 798, 52,
/* 730 */ 74, 985, 827, 984, 823, 193, 1030, 194, 152, 192, /* 730 */ 96, 830, 986, 193, 1032, 194, 195, 192, 196, 198,
/* 740 */ 153, 196, 195, 197, 198, 976, 1067, 320, 154, 975, /* 740 */ 197, 152, 828, 153, 978, 977, 320, 1069, 154, 1033,
/* 750 */ 4, 968, 179, 177, 53, 174, 175, 1031, 155, 967, /* 750 */ 155, 74, 176, 174, 175, 177, 970, 53, 179, 969,
/* 760 */ 2, 826, 822, 75, 168, 831, 1077, 166, 251, 842, /* 760 */ 1079, 2, 4, 824, 823, 75, 166, 827, 832, 843,
/* 770 */ 167, 63, 836, 97, 22, 838, 98, 312, 350, 316, /* 770 */ 167, 168, 837, 97, 251, 839, 98, 312, 63, 350,
/* 780 */ 64, 12, 23, 104, 49, 323, 50, 107, 109, 112, /* 780 */ 316, 12, 104, 49, 22, 23, 323, 64, 107, 109,
/* 790 */ 689, 724, 56, 722, 111, 721, 720, 718, 717, 57, /* 790 */ 56, 111, 50, 112, 690, 725, 723, 722, 721, 57,
/* 800 */ 113, 716, 713, 679, 117, 342, 7, 914, 912, 915, /* 800 */ 113, 719, 718, 717, 714, 680, 342, 117, 7, 916,
/* 810 */ 892, 891, 913, 8, 353, 894, 354, 60, 72, 120, /* 810 */ 914, 894, 917, 893, 915, 8, 896, 354, 120, 72,
/* 820 */ 761, 791, 122, 73, 760, 126, 128, 757, 705, 703, /* 820 */ 122, 60, 353, 792, 73, 762, 126, 128, 761, 758,
/* 830 */ 695, 701, 697, 699, 790, 693, 691, 727, 726, 725, /* 830 */ 706, 704, 696, 702, 791, 698, 700, 694, 692, 728,
/* 840 */ 723, 719, 715, 714, 201, 677, 946, 642, 651, 649, /* 840 */ 727, 726, 724, 720, 716, 715, 201, 643, 948, 678,
/* 850 */ 945, 392, 945, 945, 945, 945, 945, 945, 945, 945, /* 850 */ 652, 392, 650, 947, 947, 947, 947, 947, 947, 947,
/* 860 */ 945, 945, 945, 394, /* 860 */ 947, 947, 947, 947, 394,
}; };
static const YYCODETYPE yy_lookahead[] = { static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 213, 1, 205, 205, 203, 204, 212, 5, 1, 9, /* 0 */ 214, 1, 206, 206, 204, 205, 213, 5, 1, 9,
/* 10 */ 284, 5, 286, 287, 14, 15, 9, 17, 18, 205, /* 10 */ 285, 5, 287, 288, 14, 15, 9, 17, 18, 206,
/* 20 */ 206, 21, 22, 23, 24, 0, 205, 27, 28, 29, /* 20 */ 207, 21, 22, 23, 24, 0, 206, 27, 28, 29,
/* 30 */ 30, 31, 32, 246, 247, 248, 249, 37, 38, 37, /* 30 */ 30, 31, 32, 247, 248, 249, 250, 37, 38, 37,
/* 40 */ 38, 41, 42, 43, 14, 15, 1, 17, 18, 252, /* 40 */ 38, 41, 42, 43, 14, 15, 1, 17, 18, 253,
/* 50 */ 213, 21, 22, 23, 24, 276, 255, 27, 28, 29, /* 50 */ 214, 21, 22, 23, 24, 277, 256, 27, 28, 29,
/* 60 */ 30, 31, 32, 283, 284, 286, 286, 37, 38, 276, /* 60 */ 30, 31, 32, 284, 285, 287, 287, 37, 38, 277,
/* 70 */ 276, 41, 42, 43, 273, 277, 66, 67, 68, 286, /* 70 */ 277, 41, 42, 43, 274, 278, 66, 67, 68, 287,
/* 80 */ 286, 288, 288, 73, 247, 75, 76, 77, 14, 15, /* 80 */ 287, 289, 289, 73, 248, 75, 76, 77, 14, 15,
/* 90 */ 90, 17, 18, 86, 84, 21, 22, 23, 24, 278, /* 90 */ 90, 17, 18, 86, 84, 21, 22, 23, 24, 279,
/* 100 */ 279, 27, 28, 29, 30, 31, 32, 88, 41, 42, /* 100 */ 280, 27, 28, 29, 30, 31, 32, 88, 41, 42,
/* 110 */ 43, 37, 38, 88, 276, 41, 42, 43, 14, 15, /* 110 */ 43, 37, 38, 88, 277, 41, 42, 43, 14, 15,
/* 120 */ 90, 17, 18, 205, 286, 21, 22, 23, 24, 205, /* 120 */ 90, 17, 18, 206, 287, 21, 22, 23, 24, 206,
/* 130 */ 1, 27, 28, 29, 30, 31, 32, 5, 9, 7, /* 130 */ 1, 27, 28, 29, 30, 31, 32, 5, 9, 7,
/* 140 */ 216, 37, 38, 1, 276, 41, 42, 43, 86, 14, /* 140 */ 217, 37, 38, 1, 277, 41, 42, 43, 86, 14,
/* 150 */ 15, 9, 17, 18, 286, 94, 21, 22, 23, 24, /* 150 */ 15, 9, 17, 18, 287, 94, 21, 22, 23, 24,
/* 160 */ 149, 87, 27, 28, 29, 30, 31, 32, 250, 158, /* 160 */ 259, 87, 27, 28, 29, 30, 31, 32, 251, 69,
/* 170 */ 159, 258, 37, 38, 205, 257, 41, 42, 43, 66, /* 170 */ 70, 71, 37, 38, 206, 258, 41, 42, 43, 66,
/* 180 */ 67, 68, 120, 121, 227, 228, 73, 74, 75, 76, /* 180 */ 67, 68, 120, 121, 228, 229, 73, 74, 75, 76,
/* 190 */ 77, 49, 50, 51, 52, 53, 54, 55, 56, 57, /* 190 */ 77, 49, 50, 51, 52, 53, 54, 55, 56, 57,
/* 200 */ 58, 59, 60, 61, 62, 63, 251, 65, 15, 258, /* 200 */ 58, 59, 60, 61, 62, 63, 252, 65, 15, 259,
/* 210 */ 17, 18, 258, 258, 21, 22, 23, 24, 87, 250, /* 210 */ 17, 18, 47, 259, 21, 22, 23, 24, 150, 251,
/* 220 */ 27, 28, 29, 30, 31, 32, 257, 69, 70, 71, /* 220 */ 27, 28, 29, 30, 31, 32, 258, 159, 160, 64,
/* 230 */ 37, 38, 101, 251, 41, 42, 43, 276, 17, 18, /* 230 */ 37, 38, 215, 216, 41, 42, 43, 277, 17, 18,
/* 240 */ 258, 263, 21, 22, 23, 24, 205, 286, 27, 28, /* 240 */ 72, 264, 21, 22, 23, 24, 259, 287, 27, 28,
/* 250 */ 29, 30, 31, 32, 66, 67, 68, 125, 37, 38, /* 250 */ 29, 30, 31, 32, 5, 282, 7, 125, 37, 38,
/* 260 */ 282, 86, 41, 42, 43, 102, 103, 104, 105, 106, /* 260 */ 283, 86, 41, 42, 43, 102, 103, 104, 105, 106,
/* 270 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, /* 270 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
/* 280 */ 48, 229, 230, 231, 232, 233, 234, 235, 236, 237, /* 280 */ 48, 206, 230, 231, 232, 233, 234, 235, 236, 237,
/* 290 */ 238, 239, 240, 241, 242, 243, 101, 65, 257, 1, /* 290 */ 238, 239, 240, 241, 242, 243, 244, 65, 277, 1,
/* 300 */ 2, 126, 281, 5, 72, 7, 5, 9, 7, 213, /* 300 */ 2, 126, 282, 5, 72, 7, 16, 9, 287, 256,
/* 310 */ 78, 79, 80, 81, 276, 1, 2, 85, 86, 5, /* 310 */ 78, 79, 80, 81, 254, 1, 2, 85, 86, 5,
/* 320 */ 251, 7, 205, 9, 286, 130, 205, 258, 212, 29, /* 320 */ 152, 7, 154, 9, 156, 157, 251, 274, 206, 29,
/* 330 */ 30, 31, 32, 216, 276, 37, 38, 37, 38, 41, /* 330 */ 30, 31, 32, 258, 277, 37, 38, 37, 38, 41,
/* 340 */ 276, 41, 42, 43, 286, 249, 66, 67, 68, 281, /* 340 */ 213, 41, 42, 43, 287, 206, 66, 67, 68, 246,
/* 350 */ 286, 37, 38, 73, 74, 75, 76, 77, 126, 2, /* 350 */ 256, 37, 38, 73, 74, 75, 76, 77, 126, 2,
/* 360 */ 276, 72, 5, 276, 7, 276, 9, 72, 245, 276, /* 360 */ 72, 277, 5, 252, 7, 214, 9, 213, 274, 277,
/* 370 */ 286, 250, 92, 286, 102, 286, 104, 105, 257, 286, /* 370 */ 259, 287, 92, 251, 125, 102, 246, 104, 105, 287,
/* 380 */ 148, 109, 150, 255, 86, 113, 5, 115, 116, 157, /* 380 */ 258, 149, 109, 151, 86, 206, 113, 5, 115, 116,
/* 390 */ 9, 212, 276, 25, 37, 38, 229, 259, 231, 232, /* 390 */ 158, 9, 277, 25, 37, 38, 230, 258, 232, 233,
/* 400 */ 86, 273, 286, 236, 288, 132, 133, 240, 205, 242, /* 400 */ 86, 250, 287, 237, 277, 206, 206, 241, 206, 243,
/* 410 */ 243, 205, 274, 80, 205, 47, 205, 205, 37, 38, /* 410 */ 244, 206, 206, 123, 287, 47, 289, 277, 101, 37,
/* 420 */ 41, 123, 124, 125, 37, 38, 125, 205, 41, 42, /* 420 */ 38, 123, 124, 125, 37, 38, 206, 287, 41, 42,
/* 430 */ 43, 205, 64, 276, 284, 87, 286, 123, 124, 125, /* 430 */ 43, 277, 64, 66, 67, 68, 82, 123, 124, 125,
/* 440 */ 151, 205, 153, 286, 155, 156, 151, 276, 153, 101, /* 440 */ 152, 287, 154, 289, 156, 157, 148, 206, 94, 206,
/* 450 */ 155, 156, 255, 250, 86, 276, 250, 286, 245, 250, /* 450 */ 251, 251, 41, 251, 86, 277, 251, 258, 258, 277,
/* 460 */ 257, 250, 250, 257, 16, 286, 257, 288, 257, 257, /* 460 */ 258, 144, 148, 258, 277, 287, 277, 277, 206, 287,
/* 470 */ 273, 205, 250, 140, 276, 276, 250, 276, 276, 257, /* 470 */ 80, 251, 277, 277, 287, 277, 287, 287, 258, 217,
/* 480 */ 123, 124, 216, 257, 286, 286, 250, 286, 286, 205, /* 480 */ 123, 124, 287, 287, 87, 287, 277, 87, 277, 206,
/* 490 */ 211, 276, 276, 257, 276, 87, 276, 218, 82, 276, /* 490 */ 252, 206, 251, 277, 251, 277, 287, 259, 287, 258,
/* 500 */ 216, 286, 286, 101, 286, 124, 286, 211, 129, 286, /* 500 */ 217, 258, 217, 287, 212, 287, 124, 132, 133, 212,
/* 510 */ 94, 284, 87, 286, 218, 211, 214, 215, 209, 210, /* 510 */ 285, 219, 287, 285, 212, 287, 219, 260, 210, 211,
/* 520 */ 37, 38, 218, 87, 87, 47, 87, 101, 1, 87, /* 520 */ 87, 219, 101, 87, 127, 37, 38, 127, 87, 87,
/* 530 */ 87, 87, 87, 86, 25, 127, 87, 101, 101, 87, /* 530 */ 140, 101, 275, 87, 101, 87, 87, 101, 87, 87,
/* 540 */ 101, 87, 64, 101, 101, 101, 101, 152, 146, 154, /* 540 */ 129, 86, 101, 101, 87, 87, 25, 101, 1, 101,
/* 550 */ 101, 86, 127, 101, 205, 101, 47, 152, 152, 154, /* 550 */ 101, 130, 101, 101, 153, 87, 155, 86, 101, 101,
/* 560 */ 154, 5, 5, 7, 7, 152, 119, 154, 41, 245, /* 560 */ 153, 153, 155, 155, 5, 5, 7, 7, 47, 101,
/* 570 */ 144, 123, 37, 38, 152, 152, 154, 154, 82, 83, /* 570 */ 37, 38, 246, 153, 119, 155, 146, 153, 153, 155,
/* 580 */ 245, 245, 245, 118, 253, 245, 275, 205, 205, 205, /* 580 */ 155, 82, 83, 246, 246, 246, 246, 206, 41, 118,
/* 590 */ 205, 205, 285, 205, 205, 205, 255, 255, 205, 205, /* 590 */ 206, 206, 276, 286, 206, 206, 286, 206, 256, 256,
/* 600 */ 285, 205, 285, 285, 260, 255, 205, 64, 205, 205, /* 600 */ 206, 206, 206, 256, 206, 286, 286, 261, 206, 206,
/* 610 */ 280, 125, 205, 270, 205, 205, 205, 205, 280, 205, /* 610 */ 206, 206, 206, 64, 125, 206, 206, 281, 206, 206,
/* 620 */ 205, 269, 205, 205, 205, 205, 205, 280, 272, 205, /* 620 */ 206, 206, 206, 206, 206, 206, 281, 272, 206, 206,
/* 630 */ 271, 280, 205, 205, 205, 205, 205, 205, 205, 205, /* 630 */ 281, 281, 206, 206, 206, 206, 143, 206, 206, 273,
/* 640 */ 205, 143, 145, 205, 138, 205, 205, 142, 141, 136, /* 640 */ 206, 206, 145, 206, 206, 206, 206, 138, 271, 206,
/* 650 */ 135, 205, 134, 137, 131, 205, 205, 265, 205, 268, /* 650 */ 206, 206, 142, 206, 141, 269, 206, 134, 136, 206,
/* 660 */ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, /* 660 */ 206, 135, 206, 270, 137, 206, 206, 206, 206, 206,
/* 670 */ 122, 205, 205, 205, 205, 205, 205, 205, 205, 205, /* 670 */ 206, 206, 206, 206, 131, 206, 206, 147, 206, 206,
/* 680 */ 205, 205, 205, 147, 205, 205, 93, 117, 207, 207, /* 680 */ 206, 206, 206, 206, 206, 206, 122, 93, 208, 208,
/* 690 */ 100, 207, 207, 99, 207, 55, 96, 98, 59, 97, /* 690 */ 208, 208, 208, 117, 55, 100, 99, 96, 98, 59,
/* 700 */ 95, 207, 207, 88, 5, 160, 207, 5, 5, 160, /* 700 */ 208, 97, 95, 208, 88, 5, 208, 5, 5, 5,
/* 710 */ 5, 207, 5, 104, 103, 149, 213, 217, 217, 207, /* 710 */ 5, 161, 208, 208, 161, 104, 103, 214, 218, 218,
/* 720 */ 119, 213, 127, 86, 128, 87, 101, 86, 101, 87, /* 720 */ 214, 150, 119, 127, 86, 101, 208, 128, 87, 86,
/* 730 */ 101, 207, 125, 207, 5, 224, 226, 220, 208, 225, /* 730 */ 101, 87, 208, 225, 227, 221, 224, 226, 222, 220,
/* 740 */ 208, 221, 223, 222, 219, 207, 244, 254, 208, 207, /* 740 */ 223, 209, 125, 209, 208, 208, 255, 245, 209, 229,
/* 750 */ 209, 207, 261, 264, 262, 267, 266, 228, 208, 207, /* 750 */ 209, 101, 266, 268, 267, 265, 208, 263, 262, 208,
/* 760 */ 214, 125, 5, 86, 101, 87, 244, 86, 1, 87, /* 760 */ 245, 215, 210, 5, 5, 86, 86, 125, 87, 87,
/* 770 */ 86, 101, 87, 86, 139, 87, 86, 86, 47, 1, /* 770 */ 86, 101, 87, 86, 1, 87, 86, 86, 101, 47,
/* 780 */ 101, 86, 139, 90, 86, 119, 86, 120, 82, 74, /* 780 */ 1, 86, 90, 86, 139, 139, 119, 101, 120, 82,
/* 790 */ 5, 9, 91, 5, 90, 5, 5, 5, 5, 91, /* 790 */ 91, 90, 86, 74, 5, 9, 5, 5, 5, 91,
/* 800 */ 90, 5, 5, 89, 82, 16, 86, 9, 9, 9, /* 800 */ 90, 5, 5, 5, 5, 89, 16, 82, 86, 9,
/* 810 */ 87, 87, 9, 86, 28, 123, 63, 101, 17, 154, /* 810 */ 9, 87, 9, 87, 9, 86, 123, 63, 155, 17,
/* 820 */ 5, 125, 154, 17, 5, 154, 154, 87, 5, 5, /* 820 */ 155, 101, 28, 125, 17, 5, 155, 155, 5, 87,
/* 830 */ 5, 5, 5, 5, 125, 5, 5, 5, 5, 5, /* 830 */ 5, 5, 5, 5, 125, 5, 5, 5, 5, 5,
/* 840 */ 5, 5, 5, 5, 101, 89, 0, 64, 9, 9, /* 840 */ 5, 5, 5, 5, 5, 5, 101, 64, 0, 89,
/* 850 */ 289, 22, 289, 289, 289, 289, 289, 289, 289, 289, /* 850 */ 9, 22, 9, 290, 290, 290, 290, 290, 290, 290,
/* 860 */ 289, 289, 289, 22, 289, 289, 289, 289, 289, 289, /* 860 */ 290, 290, 290, 290, 22, 290, 290, 290, 290, 290,
/* 870 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 870 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 880 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 880 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 890 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 890 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 900 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 900 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 910 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 910 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 920 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 920 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 930 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 930 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 940 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 940 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 950 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 950 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 960 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 960 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 970 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 970 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 980 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 980 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 990 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 990 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1000 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1000 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1010 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1010 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1020 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1020 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1030 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1030 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1040 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1040 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1050 */ 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, /* 1050 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
/* 1060 */ 289, 289, 289, 289, 289, 289, 289, /* 1060 */ 290, 290, 290, 290, 290, 290, 290, 290, 290,
}; };
#define YY_SHIFT_COUNT (397) #define YY_SHIFT_COUNT (397)
#define YY_SHIFT_MIN (0) #define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (846) #define YY_SHIFT_MAX (848)
static const unsigned short int yy_shift_ofst[] = { static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 232, 163, 163, 272, 272, 19, 298, 314, 314, 314, /* 0 */ 232, 163, 163, 273, 273, 19, 298, 314, 314, 314,
/* 10 */ 7, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 10 */ 7, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 20 */ 129, 129, 45, 45, 0, 142, 314, 314, 314, 314, /* 20 */ 129, 129, 45, 45, 0, 142, 314, 314, 314, 314,
/* 30 */ 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, /* 30 */ 314, 314, 314, 314, 314, 314, 314, 314, 314, 314,
/* 40 */ 314, 314, 314, 314, 314, 314, 314, 314, 357, 357, /* 40 */ 314, 314, 314, 314, 314, 314, 314, 314, 357, 357,
/* 50 */ 357, 175, 175, 273, 129, 25, 129, 129, 129, 129, /* 50 */ 357, 175, 175, 375, 129, 25, 129, 129, 129, 129,
/* 60 */ 129, 416, 19, 45, 45, 61, 61, 6, 864, 864, /* 60 */ 129, 354, 19, 45, 45, 61, 61, 6, 865, 865,
/* 70 */ 864, 357, 357, 357, 381, 381, 2, 2, 2, 2, /* 70 */ 865, 357, 357, 357, 382, 382, 2, 2, 2, 2,
/* 80 */ 2, 2, 62, 2, 129, 129, 129, 129, 129, 379, /* 80 */ 2, 2, 62, 2, 129, 129, 129, 129, 129, 411,
/* 90 */ 129, 129, 129, 175, 175, 129, 129, 129, 129, 333, /* 90 */ 129, 129, 129, 175, 175, 129, 129, 129, 129, 390,
/* 100 */ 333, 333, 333, 195, 175, 129, 129, 129, 129, 129, /* 100 */ 390, 390, 390, 421, 175, 129, 129, 129, 129, 129,
/* 110 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 110 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 120 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 120 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 130 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 130 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 140 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 140 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 150 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, /* 150 */ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
/* 160 */ 129, 543, 543, 543, 543, 486, 486, 486, 486, 543, /* 160 */ 129, 549, 549, 549, 549, 489, 489, 489, 489, 549,
/* 170 */ 498, 497, 506, 505, 507, 513, 515, 518, 516, 523, /* 170 */ 493, 497, 509, 510, 513, 522, 526, 523, 527, 543,
/* 180 */ 536, 548, 543, 543, 543, 593, 593, 570, 19, 19, /* 180 */ 530, 564, 549, 549, 549, 594, 594, 576, 19, 19,
/* 190 */ 543, 543, 590, 594, 640, 600, 599, 639, 602, 605, /* 190 */ 549, 549, 595, 597, 639, 601, 600, 640, 604, 607,
/* 200 */ 570, 6, 543, 543, 615, 615, 543, 615, 543, 615, /* 200 */ 576, 6, 549, 549, 616, 616, 549, 616, 549, 616,
/* 210 */ 543, 543, 864, 864, 30, 74, 104, 104, 104, 135, /* 210 */ 549, 549, 865, 865, 30, 74, 104, 104, 104, 135,
/* 220 */ 193, 221, 280, 300, 300, 300, 300, 300, 300, 10, /* 220 */ 193, 221, 280, 300, 300, 300, 300, 300, 300, 10,
/* 230 */ 113, 387, 387, 387, 387, 289, 295, 368, 11, 67, /* 230 */ 113, 387, 387, 387, 387, 168, 288, 368, 68, 67,
/* 240 */ 67, 132, 301, 158, 188, 131, 408, 425, 483, 348, /* 240 */ 67, 132, 249, 100, 367, 433, 397, 400, 488, 436,
/* 250 */ 436, 437, 478, 402, 426, 439, 442, 443, 444, 445, /* 250 */ 441, 442, 165, 430, 317, 446, 448, 449, 451, 452,
/* 260 */ 447, 449, 452, 509, 527, 448, 454, 395, 405, 406, /* 260 */ 455, 457, 458, 521, 547, 290, 468, 401, 407, 408,
/* 270 */ 556, 557, 535, 413, 422, 465, 423, 496, 699, 545, /* 270 */ 559, 560, 533, 420, 424, 471, 425, 499, 700, 550,
/* 280 */ 702, 703, 549, 705, 707, 609, 611, 566, 595, 601, /* 280 */ 702, 703, 553, 704, 705, 611, 613, 571, 596, 603,
/* 290 */ 637, 596, 638, 641, 625, 627, 642, 629, 607, 636, /* 290 */ 638, 599, 641, 643, 624, 629, 644, 650, 617, 642,
/* 300 */ 729, 757, 677, 678, 681, 682, 684, 685, 663, 687, /* 300 */ 758, 759, 679, 681, 680, 682, 684, 685, 670, 687,
/* 310 */ 688, 690, 767, 691, 670, 635, 731, 778, 679, 643, /* 310 */ 688, 690, 773, 691, 677, 645, 732, 779, 686, 646,
/* 320 */ 693, 695, 601, 698, 666, 700, 667, 706, 701, 704, /* 320 */ 692, 695, 603, 697, 667, 706, 668, 707, 699, 701,
/* 330 */ 715, 785, 708, 710, 782, 788, 790, 791, 792, 793, /* 330 */ 719, 789, 708, 710, 786, 791, 792, 793, 796, 797,
/* 340 */ 796, 797, 714, 789, 722, 798, 799, 720, 723, 724, /* 340 */ 798, 799, 716, 790, 725, 800, 801, 722, 724, 726,
/* 350 */ 800, 803, 692, 727, 786, 753, 801, 665, 668, 716, /* 350 */ 803, 805, 693, 729, 794, 754, 802, 663, 665, 720,
/* 360 */ 716, 716, 716, 696, 709, 806, 671, 672, 716, 716, /* 360 */ 720, 720, 720, 698, 709, 807, 671, 672, 720, 720,
/* 370 */ 716, 815, 819, 740, 716, 823, 824, 825, 826, 827, /* 370 */ 720, 820, 823, 742, 720, 825, 826, 827, 828, 830,
/* 380 */ 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, /* 380 */ 831, 832, 833, 834, 835, 836, 837, 838, 839, 840,
/* 390 */ 743, 756, 839, 829, 840, 841, 783, 846, /* 390 */ 745, 760, 841, 829, 843, 842, 783, 848,
}; };
#define YY_REDUCE_COUNT (213) #define YY_REDUCE_COUNT (213)
#define YY_REDUCE_MIN (-274) #define YY_REDUCE_MIN (-275)
#define YY_REDUCE_MAX (552) #define YY_REDUCE_MAX (552)
static const short yy_reduce_ofst[] = { static const short yy_reduce_ofst[] = {
/* 0 */ -199, 52, 52, 167, 167, -213, -206, 116, 179, -207, /* 0 */ -200, 52, 52, 166, 166, -214, -207, 127, 154, -208,
/* 10 */ -179, -82, -31, 121, 203, 206, 209, 211, 212, 222, /* 10 */ -180, -83, -32, 75, 122, 199, 200, 202, 205, 220,
/* 20 */ 226, 236, -274, -220, -202, -186, -221, -162, -132, -39, /* 20 */ 241, 243, -275, -221, -203, -187, -222, -163, -133, -40,
/* 30 */ 38, 58, 64, 84, 87, 89, 93, 157, 171, 198, /* 30 */ 21, 57, 84, 92, 115, 140, 178, 182, 187, 189,
/* 40 */ 199, 201, 202, 215, 216, 218, 220, 223, -45, -18, /* 40 */ 190, 195, 196, 198, 209, 211, 216, 218, -46, 111,
/* 50 */ 69, 128, 197, -22, -203, 96, -76, 117, 266, 284, /* 50 */ 238, 53, 94, -23, -204, 151, -77, 262, 283, 285,
/* 60 */ 41, 279, -163, 150, 227, 296, 304, -43, 138, 302, /* 60 */ 139, 292, -164, 225, 228, 297, 302, -44, 257, 17,
/* 70 */ 309, -87, -49, -46, 21, 68, 123, 213, 324, 335, /* 70 */ 308, -99, -50, -13, -27, 20, 103, 130, 326, 337,
/* 80 */ 336, 337, 331, 340, 349, 382, 383, 384, 385, 311, /* 80 */ 338, 339, 60, 340, 179, 206, 381, 384, 385, 316,
/* 90 */ 386, 388, 389, 341, 342, 390, 393, 394, 396, 307, /* 90 */ 388, 389, 391, 342, 343, 394, 395, 396, 398, 307,
/* 100 */ 315, 317, 318, 344, 350, 401, 403, 404, 407, 409, /* 100 */ 310, 319, 320, 346, 347, 402, 403, 404, 405, 406,
/* 110 */ 410, 411, 412, 414, 415, 417, 418, 419, 420, 421, /* 110 */ 409, 410, 412, 413, 414, 415, 416, 417, 418, 419,
/* 120 */ 424, 427, 428, 429, 430, 431, 432, 433, 434, 435, /* 120 */ 422, 423, 426, 427, 428, 429, 431, 432, 434, 435,
/* 130 */ 438, 440, 441, 446, 450, 451, 453, 455, 456, 457, /* 130 */ 437, 438, 439, 440, 443, 444, 445, 447, 450, 453,
/* 140 */ 458, 459, 460, 461, 462, 463, 464, 466, 467, 468, /* 140 */ 454, 456, 459, 460, 461, 462, 463, 464, 465, 466,
/* 150 */ 469, 470, 471, 472, 473, 474, 475, 476, 477, 479, /* 150 */ 467, 469, 470, 472, 473, 474, 475, 476, 477, 478,
/* 160 */ 480, 481, 482, 484, 485, 330, 338, 347, 351, 487, /* 160 */ 479, 480, 481, 482, 483, 336, 345, 349, 350, 484,
/* 170 */ 356, 359, 343, 352, 391, 488, 490, 392, 489, 492, /* 170 */ 366, 355, 377, 393, 386, 485, 487, 486, 490, 494,
/* 180 */ 491, 493, 494, 495, 499, 500, 501, 502, 503, 508, /* 180 */ 496, 491, 492, 495, 498, 500, 501, 502, 503, 506,
/* 190 */ 504, 512, 510, 514, 511, 517, 519, 520, 521, 525, /* 190 */ 504, 505, 507, 511, 508, 514, 512, 516, 517, 519,
/* 200 */ 522, 529, 524, 526, 530, 532, 538, 540, 542, 550, /* 200 */ 515, 520, 518, 524, 532, 534, 536, 539, 537, 541,
/* 210 */ 544, 552, 546, 541, /* 210 */ 548, 551, 546, 552,
}; };
static const YYACTIONTYPE yy_default[] = { static const YYACTIONTYPE yy_default[] = {
/* 0 */ 943, 1066, 1005, 1076, 992, 1002, 1243, 1243, 1243, 1243, /* 0 */ 945, 1068, 1007, 1078, 994, 1004, 1246, 1246, 1246, 1246,
/* 10 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 10 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 20 */ 943, 943, 943, 943, 1130, 963, 943, 943, 943, 943, /* 20 */ 945, 945, 945, 945, 1132, 965, 945, 945, 945, 945,
/* 30 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 30 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 40 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 40 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 50 */ 943, 943, 943, 1154, 943, 1002, 943, 943, 943, 943, /* 50 */ 945, 945, 945, 1156, 945, 1004, 945, 945, 945, 945,
/* 60 */ 943, 1012, 1002, 943, 943, 1012, 1012, 943, 1125, 1050, /* 60 */ 945, 1014, 1004, 945, 945, 1014, 1014, 945, 1127, 1052,
/* 70 */ 1068, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 70 */ 1070, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 80 */ 943, 943, 1097, 943, 943, 943, 943, 943, 943, 1132, /* 80 */ 945, 945, 1099, 945, 945, 945, 945, 945, 945, 1134,
/* 90 */ 1138, 1135, 943, 943, 943, 1140, 943, 943, 943, 1176, /* 90 */ 1140, 1137, 945, 945, 945, 1142, 945, 945, 945, 1178,
/* 100 */ 1176, 1176, 1176, 1123, 943, 943, 943, 943, 943, 943, /* 100 */ 1178, 1178, 1178, 1125, 945, 945, 945, 945, 945, 945,
/* 110 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 110 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 120 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 120 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 130 */ 943, 943, 943, 943, 943, 943, 943, 990, 943, 988, /* 130 */ 945, 945, 945, 945, 945, 945, 945, 992, 945, 990,
/* 140 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 140 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 150 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 150 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 160 */ 961, 965, 965, 965, 965, 943, 943, 943, 943, 965, /* 160 */ 963, 967, 967, 967, 967, 945, 945, 945, 945, 967,
/* 170 */ 1185, 1189, 1166, 1183, 1177, 1161, 1159, 1157, 1165, 1150, /* 170 */ 1187, 1191, 1168, 1185, 1179, 1163, 1161, 1159, 1167, 1152,
/* 180 */ 1193, 1099, 965, 965, 965, 1010, 1010, 1006, 1002, 1002, /* 180 */ 1195, 1101, 967, 967, 967, 1012, 1012, 1008, 1004, 1004,
/* 190 */ 965, 965, 1028, 1026, 1024, 1016, 1022, 1018, 1020, 1014, /* 190 */ 967, 967, 1030, 1028, 1026, 1018, 1024, 1020, 1022, 1016,
/* 200 */ 993, 943, 965, 965, 1000, 1000, 965, 1000, 965, 1000, /* 200 */ 995, 945, 967, 967, 1002, 1002, 967, 1002, 967, 1002,
/* 210 */ 965, 965, 1050, 1068, 1242, 943, 1194, 1184, 1242, 943, /* 210 */ 967, 967, 1052, 1070, 1245, 945, 1196, 1186, 1245, 945,
/* 220 */ 1225, 1224, 943, 1233, 1232, 1231, 1223, 1222, 1221, 943, /* 220 */ 1228, 1227, 945, 1236, 1235, 1234, 1226, 1225, 1224, 945,
/* 230 */ 943, 1217, 1220, 1219, 1218, 943, 943, 1196, 943, 1227, /* 230 */ 945, 1220, 1223, 1222, 1221, 945, 945, 1198, 945, 1230,
/* 240 */ 1226, 943, 943, 943, 943, 943, 943, 943, 1147, 943, /* 240 */ 1229, 945, 945, 945, 945, 945, 945, 945, 1149, 945,
/* 250 */ 943, 943, 1172, 1190, 1186, 943, 943, 943, 943, 943, /* 250 */ 945, 945, 1174, 1192, 1188, 945, 945, 945, 945, 945,
/* 260 */ 943, 943, 943, 1197, 943, 943, 943, 943, 943, 943, /* 260 */ 945, 945, 945, 1199, 945, 945, 945, 945, 945, 945,
/* 270 */ 943, 943, 1111, 943, 943, 1078, 943, 943, 943, 943, /* 270 */ 945, 945, 1113, 945, 945, 1080, 945, 945, 945, 945,
/* 280 */ 943, 943, 943, 943, 943, 943, 943, 943, 1122, 943, /* 280 */ 945, 945, 945, 945, 945, 945, 945, 945, 1124, 945,
/* 290 */ 943, 943, 943, 943, 1134, 1133, 943, 943, 943, 943, /* 290 */ 945, 945, 945, 945, 1136, 1135, 945, 945, 945, 945,
/* 300 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 300 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 310 */ 943, 943, 943, 943, 1178, 943, 1173, 943, 1167, 943, /* 310 */ 945, 945, 945, 945, 1180, 945, 1175, 945, 1169, 945,
/* 320 */ 943, 943, 1090, 943, 943, 943, 943, 943, 943, 943, /* 320 */ 945, 945, 1092, 945, 945, 945, 945, 945, 945, 945,
/* 330 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 330 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 340 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 340 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 350 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 1261, /* 350 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 1264,
/* 360 */ 1256, 1257, 1254, 943, 943, 943, 943, 943, 1253, 1248, /* 360 */ 1259, 1260, 1257, 945, 945, 945, 945, 945, 1256, 1251,
/* 370 */ 1249, 943, 943, 943, 1246, 943, 943, 943, 943, 943, /* 370 */ 1252, 945, 945, 945, 1249, 945, 945, 945, 945, 945,
/* 380 */ 943, 943, 943, 943, 943, 943, 943, 943, 943, 943, /* 380 */ 945, 945, 945, 945, 945, 945, 945, 945, 945, 945,
/* 390 */ 1034, 943, 943, 972, 943, 970, 943, 943, /* 390 */ 1036, 945, 945, 974, 945, 972, 945, 945,
}; };
/********** End of lemon-generated parsing tables *****************************/ /********** End of lemon-generated parsing tables *****************************/
...@@ -695,6 +696,7 @@ static const YYCODETYPE yyFallback[] = { ...@@ -695,6 +696,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* SLIMIT => nothing */ 0, /* SLIMIT => nothing */
0, /* SOFFSET => nothing */ 0, /* SOFFSET => nothing */
0, /* WHERE => nothing */ 0, /* WHERE => nothing */
1, /* TODAY => ID */
0, /* RESET => nothing */ 0, /* RESET => nothing */
0, /* QUERY => nothing */ 0, /* QUERY => nothing */
0, /* SYNCDB => nothing */ 0, /* SYNCDB => nothing */
...@@ -985,147 +987,148 @@ static const char *const yyTokenName[] = { ...@@ -985,147 +987,148 @@ static const char *const yyTokenName[] = {
/* 145 */ "SLIMIT", /* 145 */ "SLIMIT",
/* 146 */ "SOFFSET", /* 146 */ "SOFFSET",
/* 147 */ "WHERE", /* 147 */ "WHERE",
/* 148 */ "RESET", /* 148 */ "TODAY",
/* 149 */ "QUERY", /* 149 */ "RESET",
/* 150 */ "SYNCDB", /* 150 */ "QUERY",
/* 151 */ "ADD", /* 151 */ "SYNCDB",
/* 152 */ "COLUMN", /* 152 */ "ADD",
/* 153 */ "MODIFY", /* 153 */ "COLUMN",
/* 154 */ "TAG", /* 154 */ "MODIFY",
/* 155 */ "CHANGE", /* 155 */ "TAG",
/* 156 */ "SET", /* 156 */ "CHANGE",
/* 157 */ "KILL", /* 157 */ "SET",
/* 158 */ "CONNECTION", /* 158 */ "KILL",
/* 159 */ "STREAM", /* 159 */ "CONNECTION",
/* 160 */ "COLON", /* 160 */ "STREAM",
/* 161 */ "ABORT", /* 161 */ "COLON",
/* 162 */ "AFTER", /* 162 */ "ABORT",
/* 163 */ "ATTACH", /* 163 */ "AFTER",
/* 164 */ "BEFORE", /* 164 */ "ATTACH",
/* 165 */ "BEGIN", /* 165 */ "BEFORE",
/* 166 */ "CASCADE", /* 166 */ "BEGIN",
/* 167 */ "CLUSTER", /* 167 */ "CASCADE",
/* 168 */ "CONFLICT", /* 168 */ "CLUSTER",
/* 169 */ "COPY", /* 169 */ "CONFLICT",
/* 170 */ "DEFERRED", /* 170 */ "COPY",
/* 171 */ "DELIMITERS", /* 171 */ "DEFERRED",
/* 172 */ "DETACH", /* 172 */ "DELIMITERS",
/* 173 */ "EACH", /* 173 */ "DETACH",
/* 174 */ "END", /* 174 */ "EACH",
/* 175 */ "EXPLAIN", /* 175 */ "END",
/* 176 */ "FAIL", /* 176 */ "EXPLAIN",
/* 177 */ "FOR", /* 177 */ "FAIL",
/* 178 */ "IGNORE", /* 178 */ "FOR",
/* 179 */ "IMMEDIATE", /* 179 */ "IGNORE",
/* 180 */ "INITIALLY", /* 180 */ "IMMEDIATE",
/* 181 */ "INSTEAD", /* 181 */ "INITIALLY",
/* 182 */ "KEY", /* 182 */ "INSTEAD",
/* 183 */ "OF", /* 183 */ "KEY",
/* 184 */ "RAISE", /* 184 */ "OF",
/* 185 */ "REPLACE", /* 185 */ "RAISE",
/* 186 */ "RESTRICT", /* 186 */ "REPLACE",
/* 187 */ "ROW", /* 187 */ "RESTRICT",
/* 188 */ "STATEMENT", /* 188 */ "ROW",
/* 189 */ "TRIGGER", /* 189 */ "STATEMENT",
/* 190 */ "VIEW", /* 190 */ "TRIGGER",
/* 191 */ "IPTOKEN", /* 191 */ "VIEW",
/* 192 */ "SEMI", /* 192 */ "IPTOKEN",
/* 193 */ "NONE", /* 193 */ "SEMI",
/* 194 */ "PREV", /* 194 */ "NONE",
/* 195 */ "LINEAR", /* 195 */ "PREV",
/* 196 */ "IMPORT", /* 196 */ "LINEAR",
/* 197 */ "TBNAME", /* 197 */ "IMPORT",
/* 198 */ "JOIN", /* 198 */ "TBNAME",
/* 199 */ "INSERT", /* 199 */ "JOIN",
/* 200 */ "INTO", /* 200 */ "INSERT",
/* 201 */ "VALUES", /* 201 */ "INTO",
/* 202 */ "FILE", /* 202 */ "VALUES",
/* 203 */ "program", /* 203 */ "FILE",
/* 204 */ "cmd", /* 204 */ "program",
/* 205 */ "ids", /* 205 */ "cmd",
/* 206 */ "dbPrefix", /* 206 */ "ids",
/* 207 */ "cpxName", /* 207 */ "dbPrefix",
/* 208 */ "ifexists", /* 208 */ "cpxName",
/* 209 */ "alter_db_optr", /* 209 */ "ifexists",
/* 210 */ "alter_topic_optr", /* 210 */ "alter_db_optr",
/* 211 */ "acct_optr", /* 211 */ "alter_topic_optr",
/* 212 */ "exprlist", /* 212 */ "acct_optr",
/* 213 */ "ifnotexists", /* 213 */ "exprlist",
/* 214 */ "db_optr", /* 214 */ "ifnotexists",
/* 215 */ "topic_optr", /* 215 */ "db_optr",
/* 216 */ "typename", /* 216 */ "topic_optr",
/* 217 */ "bufsize", /* 217 */ "typename",
/* 218 */ "pps", /* 218 */ "bufsize",
/* 219 */ "tseries", /* 219 */ "pps",
/* 220 */ "dbs", /* 220 */ "tseries",
/* 221 */ "streams", /* 221 */ "dbs",
/* 222 */ "storage", /* 222 */ "streams",
/* 223 */ "qtime", /* 223 */ "storage",
/* 224 */ "users", /* 224 */ "qtime",
/* 225 */ "conns", /* 225 */ "users",
/* 226 */ "state", /* 226 */ "conns",
/* 227 */ "intitemlist", /* 227 */ "state",
/* 228 */ "intitem", /* 228 */ "intitemlist",
/* 229 */ "keep", /* 229 */ "intitem",
/* 230 */ "cache", /* 230 */ "keep",
/* 231 */ "replica", /* 231 */ "cache",
/* 232 */ "quorum", /* 232 */ "replica",
/* 233 */ "days", /* 233 */ "quorum",
/* 234 */ "minrows", /* 234 */ "days",
/* 235 */ "maxrows", /* 235 */ "minrows",
/* 236 */ "blocks", /* 236 */ "maxrows",
/* 237 */ "ctime", /* 237 */ "blocks",
/* 238 */ "wal", /* 238 */ "ctime",
/* 239 */ "fsync", /* 239 */ "wal",
/* 240 */ "comp", /* 240 */ "fsync",
/* 241 */ "prec", /* 241 */ "comp",
/* 242 */ "update", /* 242 */ "prec",
/* 243 */ "cachelast", /* 243 */ "update",
/* 244 */ "partitions", /* 244 */ "cachelast",
/* 245 */ "signed", /* 245 */ "partitions",
/* 246 */ "create_table_args", /* 246 */ "signed",
/* 247 */ "create_stable_args", /* 247 */ "create_table_args",
/* 248 */ "create_table_list", /* 248 */ "create_stable_args",
/* 249 */ "create_from_stable", /* 249 */ "create_table_list",
/* 250 */ "columnlist", /* 250 */ "create_from_stable",
/* 251 */ "tagitemlist", /* 251 */ "columnlist",
/* 252 */ "tagNamelist", /* 252 */ "tagitemlist",
/* 253 */ "to_opt", /* 253 */ "tagNamelist",
/* 254 */ "split_opt", /* 254 */ "to_opt",
/* 255 */ "select", /* 255 */ "split_opt",
/* 256 */ "to_split", /* 256 */ "select",
/* 257 */ "column", /* 257 */ "to_split",
/* 258 */ "tagitem", /* 258 */ "column",
/* 259 */ "selcollist", /* 259 */ "tagitem",
/* 260 */ "from", /* 260 */ "selcollist",
/* 261 */ "where_opt", /* 261 */ "from",
/* 262 */ "range_option", /* 262 */ "where_opt",
/* 263 */ "interval_option", /* 263 */ "range_option",
/* 264 */ "sliding_opt", /* 264 */ "interval_option",
/* 265 */ "session_option", /* 265 */ "sliding_opt",
/* 266 */ "windowstate_option", /* 266 */ "session_option",
/* 267 */ "fill_opt", /* 267 */ "windowstate_option",
/* 268 */ "groupby_opt", /* 268 */ "fill_opt",
/* 269 */ "having_opt", /* 269 */ "groupby_opt",
/* 270 */ "orderby_opt", /* 270 */ "having_opt",
/* 271 */ "slimit_opt", /* 271 */ "orderby_opt",
/* 272 */ "limit_opt", /* 272 */ "slimit_opt",
/* 273 */ "union", /* 273 */ "limit_opt",
/* 274 */ "sclp", /* 274 */ "union",
/* 275 */ "distinct", /* 275 */ "sclp",
/* 276 */ "expr", /* 276 */ "distinct",
/* 277 */ "as", /* 277 */ "expr",
/* 278 */ "tablelist", /* 278 */ "as",
/* 279 */ "sub", /* 279 */ "tablelist",
/* 280 */ "tmvar", /* 280 */ "sub",
/* 281 */ "timestamp", /* 281 */ "tmvar",
/* 282 */ "intervalKey", /* 282 */ "timestamp",
/* 283 */ "sortlist", /* 283 */ "intervalKey",
/* 284 */ "item", /* 284 */ "sortlist",
/* 285 */ "sortorder", /* 285 */ "item",
/* 286 */ "arrow", /* 286 */ "sortorder",
/* 287 */ "grouplist", /* 287 */ "arrow",
/* 288 */ "expritem", /* 288 */ "grouplist",
/* 289 */ "expritem",
}; };
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
...@@ -1394,64 +1397,65 @@ static const char *const yyRuleName[] = { ...@@ -1394,64 +1397,65 @@ static const char *const yyRuleName[] = {
/* 258 */ "expr ::= PLUS FLOAT", /* 258 */ "expr ::= PLUS FLOAT",
/* 259 */ "expr ::= STRING", /* 259 */ "expr ::= STRING",
/* 260 */ "expr ::= NOW", /* 260 */ "expr ::= NOW",
/* 261 */ "expr ::= VARIABLE", /* 261 */ "expr ::= TODAY",
/* 262 */ "expr ::= PLUS VARIABLE", /* 262 */ "expr ::= VARIABLE",
/* 263 */ "expr ::= MINUS VARIABLE", /* 263 */ "expr ::= PLUS VARIABLE",
/* 264 */ "expr ::= BOOL", /* 264 */ "expr ::= MINUS VARIABLE",
/* 265 */ "expr ::= NULL", /* 265 */ "expr ::= BOOL",
/* 266 */ "expr ::= ID LP exprlist RP", /* 266 */ "expr ::= NULL",
/* 267 */ "expr ::= ID LP STAR RP", /* 267 */ "expr ::= ID LP exprlist RP",
/* 268 */ "expr ::= ID LP expr AS typename RP", /* 268 */ "expr ::= ID LP STAR RP",
/* 269 */ "expr ::= expr IS NULL", /* 269 */ "expr ::= ID LP expr AS typename RP",
/* 270 */ "expr ::= expr IS NOT NULL", /* 270 */ "expr ::= expr IS NULL",
/* 271 */ "expr ::= expr LT expr", /* 271 */ "expr ::= expr IS NOT NULL",
/* 272 */ "expr ::= expr GT expr", /* 272 */ "expr ::= expr LT expr",
/* 273 */ "expr ::= expr LE expr", /* 273 */ "expr ::= expr GT expr",
/* 274 */ "expr ::= expr GE expr", /* 274 */ "expr ::= expr LE expr",
/* 275 */ "expr ::= expr NE expr", /* 275 */ "expr ::= expr GE expr",
/* 276 */ "expr ::= expr EQ expr", /* 276 */ "expr ::= expr NE expr",
/* 277 */ "expr ::= expr BETWEEN expr AND expr", /* 277 */ "expr ::= expr EQ expr",
/* 278 */ "expr ::= expr AND expr", /* 278 */ "expr ::= expr BETWEEN expr AND expr",
/* 279 */ "expr ::= expr OR expr", /* 279 */ "expr ::= expr AND expr",
/* 280 */ "expr ::= expr PLUS expr", /* 280 */ "expr ::= expr OR expr",
/* 281 */ "expr ::= expr MINUS expr", /* 281 */ "expr ::= expr PLUS expr",
/* 282 */ "expr ::= expr STAR expr", /* 282 */ "expr ::= expr MINUS expr",
/* 283 */ "expr ::= expr SLASH expr", /* 283 */ "expr ::= expr STAR expr",
/* 284 */ "expr ::= expr REM expr", /* 284 */ "expr ::= expr SLASH expr",
/* 285 */ "expr ::= expr LIKE expr", /* 285 */ "expr ::= expr REM expr",
/* 286 */ "expr ::= expr MATCH expr", /* 286 */ "expr ::= expr LIKE expr",
/* 287 */ "expr ::= expr NMATCH expr", /* 287 */ "expr ::= expr MATCH expr",
/* 288 */ "expr ::= ID CONTAINS STRING", /* 288 */ "expr ::= expr NMATCH expr",
/* 289 */ "expr ::= ID DOT ID CONTAINS STRING", /* 289 */ "expr ::= ID CONTAINS STRING",
/* 290 */ "arrow ::= ID ARROW STRING", /* 290 */ "expr ::= ID DOT ID CONTAINS STRING",
/* 291 */ "arrow ::= ID DOT ID ARROW STRING", /* 291 */ "arrow ::= ID ARROW STRING",
/* 292 */ "expr ::= arrow", /* 292 */ "arrow ::= ID DOT ID ARROW STRING",
/* 293 */ "expr ::= expr IN LP exprlist RP", /* 293 */ "expr ::= arrow",
/* 294 */ "exprlist ::= exprlist COMMA expritem", /* 294 */ "expr ::= expr IN LP exprlist RP",
/* 295 */ "exprlist ::= expritem", /* 295 */ "exprlist ::= exprlist COMMA expritem",
/* 296 */ "expritem ::= expr", /* 296 */ "exprlist ::= expritem",
/* 297 */ "expritem ::=", /* 297 */ "expritem ::= expr",
/* 298 */ "cmd ::= RESET QUERY CACHE", /* 298 */ "expritem ::=",
/* 299 */ "cmd ::= SYNCDB ids REPLICA", /* 299 */ "cmd ::= RESET QUERY CACHE",
/* 300 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", /* 300 */ "cmd ::= SYNCDB ids REPLICA",
/* 301 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", /* 301 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 302 */ "cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist", /* 302 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 303 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", /* 303 */ "cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist",
/* 304 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", /* 304 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 305 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", /* 305 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 306 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", /* 306 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 307 */ "cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist", /* 307 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 308 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist", /* 308 */ "cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist",
/* 309 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids", /* 309 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist",
/* 310 */ "cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist", /* 310 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids",
/* 311 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist", /* 311 */ "cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist",
/* 312 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids", /* 312 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist",
/* 313 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids", /* 313 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids",
/* 314 */ "cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem", /* 314 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids",
/* 315 */ "cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist", /* 315 */ "cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem",
/* 316 */ "cmd ::= KILL CONNECTION INTEGER", /* 316 */ "cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist",
/* 317 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", /* 317 */ "cmd ::= KILL CONNECTION INTEGER",
/* 318 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", /* 318 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 319 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
}; };
#endif /* NDEBUG */ #endif /* NDEBUG */
...@@ -1577,57 +1581,57 @@ static void yy_destructor( ...@@ -1577,57 +1581,57 @@ static void yy_destructor(
** inside the C code. ** inside the C code.
*/ */
/********* Begin destructor definitions ***************************************/ /********* Begin destructor definitions ***************************************/
case 212: /* exprlist */ case 213: /* exprlist */
case 259: /* selcollist */ case 260: /* selcollist */
case 274: /* sclp */ case 275: /* sclp */
{ {
tSqlExprListDestroy((yypminor->yy209)); tSqlExprListDestroy((yypminor->yy161));
} }
break; break;
case 227: /* intitemlist */ case 228: /* intitemlist */
case 229: /* keep */ case 230: /* keep */
case 250: /* columnlist */ case 251: /* columnlist */
case 251: /* tagitemlist */ case 252: /* tagitemlist */
case 252: /* tagNamelist */ case 253: /* tagNamelist */
case 267: /* fill_opt */ case 268: /* fill_opt */
case 268: /* groupby_opt */ case 269: /* groupby_opt */
case 270: /* orderby_opt */ case 271: /* orderby_opt */
case 283: /* sortlist */ case 284: /* sortlist */
case 287: /* grouplist */ case 288: /* grouplist */
{ {
taosArrayDestroy(&(yypminor->yy209)); taosArrayDestroy(&(yypminor->yy161));
} }
break; break;
case 248: /* create_table_list */ case 249: /* create_table_list */
{ {
destroyCreateTableSql((yypminor->yy404)); destroyCreateTableSql((yypminor->yy462));
} }
break; break;
case 255: /* select */ case 256: /* select */
{ {
destroySqlNode((yypminor->yy160)); destroySqlNode((yypminor->yy276));
} }
break; break;
case 260: /* from */ case 261: /* from */
case 278: /* tablelist */ case 279: /* tablelist */
case 279: /* sub */ case 280: /* sub */
{ {
destroyRelationInfo((yypminor->yy530)); destroyRelationInfo((yypminor->yy84));
} }
break; break;
case 261: /* where_opt */ case 262: /* where_opt */
case 269: /* having_opt */ case 270: /* having_opt */
case 276: /* expr */ case 277: /* expr */
case 281: /* timestamp */ case 282: /* timestamp */
case 286: /* arrow */ case 287: /* arrow */
case 288: /* expritem */ case 289: /* expritem */
{ {
tSqlExprDestroy((yypminor->yy574)); tSqlExprDestroy((yypminor->yy546));
} }
break; break;
case 273: /* union */ case 274: /* union */
{ {
destroyAllSqlNode((yypminor->yy209)); destroyAllSqlNode((yypminor->yy161));
} }
break; break;
/********* End destructor definitions *****************************************/ /********* End destructor definitions *****************************************/
...@@ -1753,15 +1757,18 @@ static YYACTIONTYPE yy_find_shift_action( ...@@ -1753,15 +1757,18 @@ static YYACTIONTYPE yy_find_shift_action(
do{ do{
i = yy_shift_ofst[stateno]; i = yy_shift_ofst[stateno];
assert( i>=0 ); assert( i>=0 );
/* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */ assert( i<=YY_ACTTAB_COUNT );
assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD );
assert( iLookAhead!=YYNOCODE ); assert( iLookAhead!=YYNOCODE );
assert( iLookAhead < YYNTOKEN ); assert( iLookAhead < YYNTOKEN );
i += iLookAhead; i += iLookAhead;
if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){ assert( i<(int)YY_NLOOKAHEAD );
if( yy_lookahead[i]!=iLookAhead ){
#ifdef YYFALLBACK #ifdef YYFALLBACK
YYCODETYPE iFallback; /* Fallback token */ YYCODETYPE iFallback; /* Fallback token */
if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) assert( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) );
&& (iFallback = yyFallback[iLookAhead])!=0 ){ iFallback = yyFallback[iLookAhead];
if( iFallback!=0 ){
#ifndef NDEBUG #ifndef NDEBUG
if( yyTraceFILE ){ if( yyTraceFILE ){
fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n", fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
...@@ -1776,16 +1783,8 @@ static YYACTIONTYPE yy_find_shift_action( ...@@ -1776,16 +1783,8 @@ static YYACTIONTYPE yy_find_shift_action(
#ifdef YYWILDCARD #ifdef YYWILDCARD
{ {
int j = i - iLookAhead + YYWILDCARD; int j = i - iLookAhead + YYWILDCARD;
if( assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) );
#if YY_SHIFT_MIN+YYWILDCARD<0 if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){
j>=0 &&
#endif
#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
j<YY_ACTTAB_COUNT &&
#endif
j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) &&
yy_lookahead[j]==YYWILDCARD && iLookAhead>0
){
#ifndef NDEBUG #ifndef NDEBUG
if( yyTraceFILE ){ if( yyTraceFILE ){
fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
...@@ -1799,6 +1798,7 @@ static YYACTIONTYPE yy_find_shift_action( ...@@ -1799,6 +1798,7 @@ static YYACTIONTYPE yy_find_shift_action(
#endif /* YYWILDCARD */ #endif /* YYWILDCARD */
return yy_default[stateno]; return yy_default[stateno];
}else{ }else{
assert( i>=0 && i<sizeof(yy_action)/sizeof(yy_action[0]) );
return yy_action[i]; return yy_action[i];
} }
}while(1); }while(1);
...@@ -1917,332 +1917,654 @@ static void yy_shift( ...@@ -1917,332 +1917,654 @@ static void yy_shift(
yyTraceShift(yypParser, yyNewState, "Shift"); yyTraceShift(yypParser, yyNewState, "Shift");
} }
/* The following table contains information about every rule that /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** is used during the reduce. ** of that rule */
*/ static const YYCODETYPE yyRuleInfoLhs[] = {
static const struct { 204, /* (0) program ::= cmd */
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ 205, /* (1) cmd ::= SHOW DATABASES */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */ 205, /* (2) cmd ::= SHOW TOPICS */
} yyRuleInfo[] = { 205, /* (3) cmd ::= SHOW FUNCTIONS */
{ 203, -1 }, /* (0) program ::= cmd */ 205, /* (4) cmd ::= SHOW MNODES */
{ 204, -2 }, /* (1) cmd ::= SHOW DATABASES */ 205, /* (5) cmd ::= SHOW DNODES */
{ 204, -2 }, /* (2) cmd ::= SHOW TOPICS */ 205, /* (6) cmd ::= SHOW ACCOUNTS */
{ 204, -2 }, /* (3) cmd ::= SHOW FUNCTIONS */ 205, /* (7) cmd ::= SHOW USERS */
{ 204, -2 }, /* (4) cmd ::= SHOW MNODES */ 205, /* (8) cmd ::= SHOW MODULES */
{ 204, -2 }, /* (5) cmd ::= SHOW DNODES */ 205, /* (9) cmd ::= SHOW QUERIES */
{ 204, -2 }, /* (6) cmd ::= SHOW ACCOUNTS */ 205, /* (10) cmd ::= SHOW CONNECTIONS */
{ 204, -2 }, /* (7) cmd ::= SHOW USERS */ 205, /* (11) cmd ::= SHOW STREAMS */
{ 204, -2 }, /* (8) cmd ::= SHOW MODULES */ 205, /* (12) cmd ::= SHOW VARIABLES */
{ 204, -2 }, /* (9) cmd ::= SHOW QUERIES */ 205, /* (13) cmd ::= SHOW SCORES */
{ 204, -2 }, /* (10) cmd ::= SHOW CONNECTIONS */ 205, /* (14) cmd ::= SHOW GRANTS */
{ 204, -2 }, /* (11) cmd ::= SHOW STREAMS */ 205, /* (15) cmd ::= SHOW VNODES */
{ 204, -2 }, /* (12) cmd ::= SHOW VARIABLES */ 205, /* (16) cmd ::= SHOW VNODES ids */
{ 204, -2 }, /* (13) cmd ::= SHOW SCORES */ 207, /* (17) dbPrefix ::= */
{ 204, -2 }, /* (14) cmd ::= SHOW GRANTS */ 207, /* (18) dbPrefix ::= ids DOT */
{ 204, -2 }, /* (15) cmd ::= SHOW VNODES */ 208, /* (19) cpxName ::= */
{ 204, -3 }, /* (16) cmd ::= SHOW VNODES ids */ 208, /* (20) cpxName ::= DOT ids */
{ 206, 0 }, /* (17) dbPrefix ::= */ 205, /* (21) cmd ::= SHOW CREATE TABLE ids cpxName */
{ 206, -2 }, /* (18) dbPrefix ::= ids DOT */ 205, /* (22) cmd ::= SHOW CREATE STABLE ids cpxName */
{ 207, 0 }, /* (19) cpxName ::= */ 205, /* (23) cmd ::= SHOW CREATE DATABASE ids */
{ 207, -2 }, /* (20) cpxName ::= DOT ids */ 205, /* (24) cmd ::= SHOW dbPrefix TABLES */
{ 204, -5 }, /* (21) cmd ::= SHOW CREATE TABLE ids cpxName */ 205, /* (25) cmd ::= SHOW dbPrefix TABLES LIKE STRING */
{ 204, -5 }, /* (22) cmd ::= SHOW CREATE STABLE ids cpxName */ 205, /* (26) cmd ::= SHOW dbPrefix STABLES */
{ 204, -4 }, /* (23) cmd ::= SHOW CREATE DATABASE ids */ 205, /* (27) cmd ::= SHOW dbPrefix STABLES LIKE STRING */
{ 204, -3 }, /* (24) cmd ::= SHOW dbPrefix TABLES */ 205, /* (28) cmd ::= SHOW dbPrefix VGROUPS */
{ 204, -5 }, /* (25) cmd ::= SHOW dbPrefix TABLES LIKE STRING */ 205, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */
{ 204, -3 }, /* (26) cmd ::= SHOW dbPrefix STABLES */ 205, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */
{ 204, -5 }, /* (27) cmd ::= SHOW dbPrefix STABLES LIKE STRING */ 205, /* (31) cmd ::= DROP DATABASE ifexists ids */
{ 204, -3 }, /* (28) cmd ::= SHOW dbPrefix VGROUPS */ 205, /* (32) cmd ::= DROP TOPIC ifexists ids */
{ 204, -5 }, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */ 205, /* (33) cmd ::= DROP FUNCTION ids */
{ 204, -5 }, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */ 205, /* (34) cmd ::= DROP DNODE ids */
{ 204, -4 }, /* (31) cmd ::= DROP DATABASE ifexists ids */ 205, /* (35) cmd ::= DROP USER ids */
{ 204, -4 }, /* (32) cmd ::= DROP TOPIC ifexists ids */ 205, /* (36) cmd ::= DROP ACCOUNT ids */
{ 204, -3 }, /* (33) cmd ::= DROP FUNCTION ids */ 205, /* (37) cmd ::= USE ids */
{ 204, -3 }, /* (34) cmd ::= DROP DNODE ids */ 205, /* (38) cmd ::= DESCRIBE ids cpxName */
{ 204, -3 }, /* (35) cmd ::= DROP USER ids */ 205, /* (39) cmd ::= DESC ids cpxName */
{ 204, -3 }, /* (36) cmd ::= DROP ACCOUNT ids */ 205, /* (40) cmd ::= ALTER USER ids PASS ids */
{ 204, -2 }, /* (37) cmd ::= USE ids */ 205, /* (41) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 204, -3 }, /* (38) cmd ::= DESCRIBE ids cpxName */ 205, /* (42) cmd ::= ALTER DNODE ids ids */
{ 204, -3 }, /* (39) cmd ::= DESC ids cpxName */ 205, /* (43) cmd ::= ALTER DNODE ids ids ids */
{ 204, -5 }, /* (40) cmd ::= ALTER USER ids PASS ids */ 205, /* (44) cmd ::= ALTER LOCAL ids */
{ 204, -5 }, /* (41) cmd ::= ALTER USER ids PRIVILEGE ids */ 205, /* (45) cmd ::= ALTER LOCAL ids ids */
{ 204, -4 }, /* (42) cmd ::= ALTER DNODE ids ids */ 205, /* (46) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 204, -5 }, /* (43) cmd ::= ALTER DNODE ids ids ids */ 205, /* (47) cmd ::= ALTER TOPIC ids alter_topic_optr */
{ 204, -3 }, /* (44) cmd ::= ALTER LOCAL ids */ 205, /* (48) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 204, -4 }, /* (45) cmd ::= ALTER LOCAL ids ids */ 205, /* (49) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 204, -4 }, /* (46) cmd ::= ALTER DATABASE ids alter_db_optr */ 205, /* (50) cmd ::= COMPACT VNODES IN LP exprlist RP */
{ 204, -4 }, /* (47) cmd ::= ALTER TOPIC ids alter_topic_optr */ 206, /* (51) ids ::= ID */
{ 204, -4 }, /* (48) cmd ::= ALTER ACCOUNT ids acct_optr */ 206, /* (52) ids ::= STRING */
{ 204, -6 }, /* (49) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ 209, /* (53) ifexists ::= IF EXISTS */
{ 204, -6 }, /* (50) cmd ::= COMPACT VNODES IN LP exprlist RP */ 209, /* (54) ifexists ::= */
{ 205, -1 }, /* (51) ids ::= ID */ 214, /* (55) ifnotexists ::= IF NOT EXISTS */
{ 205, -1 }, /* (52) ids ::= STRING */ 214, /* (56) ifnotexists ::= */
{ 208, -2 }, /* (53) ifexists ::= IF EXISTS */ 205, /* (57) cmd ::= CREATE DNODE ids */
{ 208, 0 }, /* (54) ifexists ::= */ 205, /* (58) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 213, -3 }, /* (55) ifnotexists ::= IF NOT EXISTS */ 205, /* (59) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 213, 0 }, /* (56) ifnotexists ::= */ 205, /* (60) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
{ 204, -3 }, /* (57) cmd ::= CREATE DNODE ids */ 205, /* (61) cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{ 204, -6 }, /* (58) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ 205, /* (62) cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{ 204, -5 }, /* (59) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ 205, /* (63) cmd ::= CREATE USER ids PASS ids */
{ 204, -5 }, /* (60) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ 218, /* (64) bufsize ::= */
{ 204, -8 }, /* (61) cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */ 218, /* (65) bufsize ::= BUFSIZE INTEGER */
{ 204, -9 }, /* (62) cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */ 219, /* (66) pps ::= */
{ 204, -5 }, /* (63) cmd ::= CREATE USER ids PASS ids */ 219, /* (67) pps ::= PPS INTEGER */
{ 217, 0 }, /* (64) bufsize ::= */ 220, /* (68) tseries ::= */
{ 217, -2 }, /* (65) bufsize ::= BUFSIZE INTEGER */ 220, /* (69) tseries ::= TSERIES INTEGER */
{ 218, 0 }, /* (66) pps ::= */ 221, /* (70) dbs ::= */
{ 218, -2 }, /* (67) pps ::= PPS INTEGER */ 221, /* (71) dbs ::= DBS INTEGER */
{ 219, 0 }, /* (68) tseries ::= */ 222, /* (72) streams ::= */
{ 219, -2 }, /* (69) tseries ::= TSERIES INTEGER */ 222, /* (73) streams ::= STREAMS INTEGER */
{ 220, 0 }, /* (70) dbs ::= */ 223, /* (74) storage ::= */
{ 220, -2 }, /* (71) dbs ::= DBS INTEGER */ 223, /* (75) storage ::= STORAGE INTEGER */
{ 221, 0 }, /* (72) streams ::= */ 224, /* (76) qtime ::= */
{ 221, -2 }, /* (73) streams ::= STREAMS INTEGER */ 224, /* (77) qtime ::= QTIME INTEGER */
{ 222, 0 }, /* (74) storage ::= */ 225, /* (78) users ::= */
{ 222, -2 }, /* (75) storage ::= STORAGE INTEGER */ 225, /* (79) users ::= USERS INTEGER */
{ 223, 0 }, /* (76) qtime ::= */ 226, /* (80) conns ::= */
{ 223, -2 }, /* (77) qtime ::= QTIME INTEGER */ 226, /* (81) conns ::= CONNS INTEGER */
{ 224, 0 }, /* (78) users ::= */ 227, /* (82) state ::= */
{ 224, -2 }, /* (79) users ::= USERS INTEGER */ 227, /* (83) state ::= STATE ids */
{ 225, 0 }, /* (80) conns ::= */ 212, /* (84) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 225, -2 }, /* (81) conns ::= CONNS INTEGER */ 228, /* (85) intitemlist ::= intitemlist COMMA intitem */
{ 226, 0 }, /* (82) state ::= */ 228, /* (86) intitemlist ::= intitem */
{ 226, -2 }, /* (83) state ::= STATE ids */ 229, /* (87) intitem ::= INTEGER */
{ 211, -9 }, /* (84) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ 230, /* (88) keep ::= KEEP intitemlist */
{ 227, -3 }, /* (85) intitemlist ::= intitemlist COMMA intitem */ 231, /* (89) cache ::= CACHE INTEGER */
{ 227, -1 }, /* (86) intitemlist ::= intitem */ 232, /* (90) replica ::= REPLICA INTEGER */
{ 228, -1 }, /* (87) intitem ::= INTEGER */ 233, /* (91) quorum ::= QUORUM INTEGER */
{ 229, -2 }, /* (88) keep ::= KEEP intitemlist */ 234, /* (92) days ::= DAYS INTEGER */
{ 230, -2 }, /* (89) cache ::= CACHE INTEGER */ 235, /* (93) minrows ::= MINROWS INTEGER */
{ 231, -2 }, /* (90) replica ::= REPLICA INTEGER */ 236, /* (94) maxrows ::= MAXROWS INTEGER */
{ 232, -2 }, /* (91) quorum ::= QUORUM INTEGER */ 237, /* (95) blocks ::= BLOCKS INTEGER */
{ 233, -2 }, /* (92) days ::= DAYS INTEGER */ 238, /* (96) ctime ::= CTIME INTEGER */
{ 234, -2 }, /* (93) minrows ::= MINROWS INTEGER */ 239, /* (97) wal ::= WAL INTEGER */
{ 235, -2 }, /* (94) maxrows ::= MAXROWS INTEGER */ 240, /* (98) fsync ::= FSYNC INTEGER */
{ 236, -2 }, /* (95) blocks ::= BLOCKS INTEGER */ 241, /* (99) comp ::= COMP INTEGER */
{ 237, -2 }, /* (96) ctime ::= CTIME INTEGER */ 242, /* (100) prec ::= PRECISION STRING */
{ 238, -2 }, /* (97) wal ::= WAL INTEGER */ 243, /* (101) update ::= UPDATE INTEGER */
{ 239, -2 }, /* (98) fsync ::= FSYNC INTEGER */ 244, /* (102) cachelast ::= CACHELAST INTEGER */
{ 240, -2 }, /* (99) comp ::= COMP INTEGER */ 245, /* (103) partitions ::= PARTITIONS INTEGER */
{ 241, -2 }, /* (100) prec ::= PRECISION STRING */ 215, /* (104) db_optr ::= */
{ 242, -2 }, /* (101) update ::= UPDATE INTEGER */ 215, /* (105) db_optr ::= db_optr cache */
{ 243, -2 }, /* (102) cachelast ::= CACHELAST INTEGER */ 215, /* (106) db_optr ::= db_optr replica */
{ 244, -2 }, /* (103) partitions ::= PARTITIONS INTEGER */ 215, /* (107) db_optr ::= db_optr quorum */
{ 214, 0 }, /* (104) db_optr ::= */ 215, /* (108) db_optr ::= db_optr days */
{ 214, -2 }, /* (105) db_optr ::= db_optr cache */ 215, /* (109) db_optr ::= db_optr minrows */
{ 214, -2 }, /* (106) db_optr ::= db_optr replica */ 215, /* (110) db_optr ::= db_optr maxrows */
{ 214, -2 }, /* (107) db_optr ::= db_optr quorum */ 215, /* (111) db_optr ::= db_optr blocks */
{ 214, -2 }, /* (108) db_optr ::= db_optr days */ 215, /* (112) db_optr ::= db_optr ctime */
{ 214, -2 }, /* (109) db_optr ::= db_optr minrows */ 215, /* (113) db_optr ::= db_optr wal */
{ 214, -2 }, /* (110) db_optr ::= db_optr maxrows */ 215, /* (114) db_optr ::= db_optr fsync */
{ 214, -2 }, /* (111) db_optr ::= db_optr blocks */ 215, /* (115) db_optr ::= db_optr comp */
{ 214, -2 }, /* (112) db_optr ::= db_optr ctime */ 215, /* (116) db_optr ::= db_optr prec */
{ 214, -2 }, /* (113) db_optr ::= db_optr wal */ 215, /* (117) db_optr ::= db_optr keep */
{ 214, -2 }, /* (114) db_optr ::= db_optr fsync */ 215, /* (118) db_optr ::= db_optr update */
{ 214, -2 }, /* (115) db_optr ::= db_optr comp */ 215, /* (119) db_optr ::= db_optr cachelast */
{ 214, -2 }, /* (116) db_optr ::= db_optr prec */ 216, /* (120) topic_optr ::= db_optr */
{ 214, -2 }, /* (117) db_optr ::= db_optr keep */ 216, /* (121) topic_optr ::= topic_optr partitions */
{ 214, -2 }, /* (118) db_optr ::= db_optr update */ 210, /* (122) alter_db_optr ::= */
{ 214, -2 }, /* (119) db_optr ::= db_optr cachelast */ 210, /* (123) alter_db_optr ::= alter_db_optr replica */
{ 215, -1 }, /* (120) topic_optr ::= db_optr */ 210, /* (124) alter_db_optr ::= alter_db_optr quorum */
{ 215, -2 }, /* (121) topic_optr ::= topic_optr partitions */ 210, /* (125) alter_db_optr ::= alter_db_optr keep */
{ 209, 0 }, /* (122) alter_db_optr ::= */ 210, /* (126) alter_db_optr ::= alter_db_optr blocks */
{ 209, -2 }, /* (123) alter_db_optr ::= alter_db_optr replica */ 210, /* (127) alter_db_optr ::= alter_db_optr comp */
{ 209, -2 }, /* (124) alter_db_optr ::= alter_db_optr quorum */ 210, /* (128) alter_db_optr ::= alter_db_optr update */
{ 209, -2 }, /* (125) alter_db_optr ::= alter_db_optr keep */ 210, /* (129) alter_db_optr ::= alter_db_optr cachelast */
{ 209, -2 }, /* (126) alter_db_optr ::= alter_db_optr blocks */ 211, /* (130) alter_topic_optr ::= alter_db_optr */
{ 209, -2 }, /* (127) alter_db_optr ::= alter_db_optr comp */ 211, /* (131) alter_topic_optr ::= alter_topic_optr partitions */
{ 209, -2 }, /* (128) alter_db_optr ::= alter_db_optr update */ 217, /* (132) typename ::= ids */
{ 209, -2 }, /* (129) alter_db_optr ::= alter_db_optr cachelast */ 217, /* (133) typename ::= ids LP signed RP */
{ 210, -1 }, /* (130) alter_topic_optr ::= alter_db_optr */ 217, /* (134) typename ::= ids UNSIGNED */
{ 210, -2 }, /* (131) alter_topic_optr ::= alter_topic_optr partitions */ 246, /* (135) signed ::= INTEGER */
{ 216, -1 }, /* (132) typename ::= ids */ 246, /* (136) signed ::= PLUS INTEGER */
{ 216, -4 }, /* (133) typename ::= ids LP signed RP */ 246, /* (137) signed ::= MINUS INTEGER */
{ 216, -2 }, /* (134) typename ::= ids UNSIGNED */ 205, /* (138) cmd ::= CREATE TABLE create_table_args */
{ 245, -1 }, /* (135) signed ::= INTEGER */ 205, /* (139) cmd ::= CREATE TABLE create_stable_args */
{ 245, -2 }, /* (136) signed ::= PLUS INTEGER */ 205, /* (140) cmd ::= CREATE STABLE create_stable_args */
{ 245, -2 }, /* (137) signed ::= MINUS INTEGER */ 205, /* (141) cmd ::= CREATE TABLE create_table_list */
{ 204, -3 }, /* (138) cmd ::= CREATE TABLE create_table_args */ 249, /* (142) create_table_list ::= create_from_stable */
{ 204, -3 }, /* (139) cmd ::= CREATE TABLE create_stable_args */ 249, /* (143) create_table_list ::= create_table_list create_from_stable */
{ 204, -3 }, /* (140) cmd ::= CREATE STABLE create_stable_args */ 247, /* (144) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ 204, -3 }, /* (141) cmd ::= CREATE TABLE create_table_list */ 248, /* (145) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{ 248, -1 }, /* (142) create_table_list ::= create_from_stable */ 250, /* (146) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ 248, -2 }, /* (143) create_table_list ::= create_table_list create_from_stable */ 250, /* (147) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{ 246, -6 }, /* (144) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ 253, /* (148) tagNamelist ::= tagNamelist COMMA ids */
{ 247, -10 }, /* (145) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ 253, /* (149) tagNamelist ::= ids */
{ 249, -10 }, /* (146) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ 247, /* (150) create_table_args ::= ifnotexists ids cpxName to_opt split_opt AS select */
{ 249, -13 }, /* (147) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ 254, /* (151) to_opt ::= */
{ 252, -3 }, /* (148) tagNamelist ::= tagNamelist COMMA ids */ 254, /* (152) to_opt ::= TO ids cpxName */
{ 252, -1 }, /* (149) tagNamelist ::= ids */ 255, /* (153) split_opt ::= */
{ 246, -7 }, /* (150) create_table_args ::= ifnotexists ids cpxName to_opt split_opt AS select */ 255, /* (154) split_opt ::= SPLIT ids */
{ 253, 0 }, /* (151) to_opt ::= */ 251, /* (155) columnlist ::= columnlist COMMA column */
{ 253, -3 }, /* (152) to_opt ::= TO ids cpxName */ 251, /* (156) columnlist ::= column */
{ 254, 0 }, /* (153) split_opt ::= */ 258, /* (157) column ::= ids typename */
{ 254, -2 }, /* (154) split_opt ::= SPLIT ids */ 252, /* (158) tagitemlist ::= tagitemlist COMMA tagitem */
{ 250, -3 }, /* (155) columnlist ::= columnlist COMMA column */ 252, /* (159) tagitemlist ::= tagitem */
{ 250, -1 }, /* (156) columnlist ::= column */ 259, /* (160) tagitem ::= INTEGER */
{ 257, -2 }, /* (157) column ::= ids typename */ 259, /* (161) tagitem ::= FLOAT */
{ 251, -3 }, /* (158) tagitemlist ::= tagitemlist COMMA tagitem */ 259, /* (162) tagitem ::= STRING */
{ 251, -1 }, /* (159) tagitemlist ::= tagitem */ 259, /* (163) tagitem ::= BOOL */
{ 258, -1 }, /* (160) tagitem ::= INTEGER */ 259, /* (164) tagitem ::= NULL */
{ 258, -1 }, /* (161) tagitem ::= FLOAT */ 259, /* (165) tagitem ::= NOW */
{ 258, -1 }, /* (162) tagitem ::= STRING */ 259, /* (166) tagitem ::= NOW PLUS VARIABLE */
{ 258, -1 }, /* (163) tagitem ::= BOOL */ 259, /* (167) tagitem ::= NOW MINUS VARIABLE */
{ 258, -1 }, /* (164) tagitem ::= NULL */ 259, /* (168) tagitem ::= MINUS INTEGER */
{ 258, -1 }, /* (165) tagitem ::= NOW */ 259, /* (169) tagitem ::= MINUS FLOAT */
{ 258, -3 }, /* (166) tagitem ::= NOW PLUS VARIABLE */ 259, /* (170) tagitem ::= PLUS INTEGER */
{ 258, -3 }, /* (167) tagitem ::= NOW MINUS VARIABLE */ 259, /* (171) tagitem ::= PLUS FLOAT */
{ 258, -2 }, /* (168) tagitem ::= MINUS INTEGER */ 256, /* (172) select ::= SELECT selcollist from where_opt range_option interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
{ 258, -2 }, /* (169) tagitem ::= MINUS FLOAT */ 256, /* (173) select ::= LP select RP */
{ 258, -2 }, /* (170) tagitem ::= PLUS INTEGER */ 274, /* (174) union ::= select */
{ 258, -2 }, /* (171) tagitem ::= PLUS FLOAT */ 274, /* (175) union ::= union UNION ALL select */
{ 255, -15 }, /* (172) select ::= SELECT selcollist from where_opt range_option interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */ 205, /* (176) cmd ::= union */
{ 255, -3 }, /* (173) select ::= LP select RP */ 256, /* (177) select ::= SELECT selcollist */
{ 273, -1 }, /* (174) union ::= select */ 275, /* (178) sclp ::= selcollist COMMA */
{ 273, -4 }, /* (175) union ::= union UNION ALL select */ 275, /* (179) sclp ::= */
{ 204, -1 }, /* (176) cmd ::= union */ 260, /* (180) selcollist ::= sclp distinct expr as */
{ 255, -2 }, /* (177) select ::= SELECT selcollist */ 260, /* (181) selcollist ::= sclp STAR */
{ 274, -2 }, /* (178) sclp ::= selcollist COMMA */ 278, /* (182) as ::= AS ids */
{ 274, 0 }, /* (179) sclp ::= */ 278, /* (183) as ::= ids */
{ 259, -4 }, /* (180) selcollist ::= sclp distinct expr as */ 278, /* (184) as ::= */
{ 259, -2 }, /* (181) selcollist ::= sclp STAR */ 276, /* (185) distinct ::= DISTINCT */
{ 277, -2 }, /* (182) as ::= AS ids */ 276, /* (186) distinct ::= */
{ 277, -1 }, /* (183) as ::= ids */ 261, /* (187) from ::= FROM tablelist */
{ 277, 0 }, /* (184) as ::= */ 261, /* (188) from ::= FROM sub */
{ 275, -1 }, /* (185) distinct ::= DISTINCT */ 280, /* (189) sub ::= LP union RP */
{ 275, 0 }, /* (186) distinct ::= */ 280, /* (190) sub ::= LP union RP ids */
{ 260, -2 }, /* (187) from ::= FROM tablelist */ 280, /* (191) sub ::= sub COMMA LP union RP ids */
{ 260, -2 }, /* (188) from ::= FROM sub */ 279, /* (192) tablelist ::= ids cpxName */
{ 279, -3 }, /* (189) sub ::= LP union RP */ 279, /* (193) tablelist ::= ids cpxName ids */
{ 279, -4 }, /* (190) sub ::= LP union RP ids */ 279, /* (194) tablelist ::= tablelist COMMA ids cpxName */
{ 279, -6 }, /* (191) sub ::= sub COMMA LP union RP ids */ 279, /* (195) tablelist ::= tablelist COMMA ids cpxName ids */
{ 278, -2 }, /* (192) tablelist ::= ids cpxName */ 281, /* (196) tmvar ::= VARIABLE */
{ 278, -3 }, /* (193) tablelist ::= ids cpxName ids */ 282, /* (197) timestamp ::= INTEGER */
{ 278, -4 }, /* (194) tablelist ::= tablelist COMMA ids cpxName */ 282, /* (198) timestamp ::= MINUS INTEGER */
{ 278, -5 }, /* (195) tablelist ::= tablelist COMMA ids cpxName ids */ 282, /* (199) timestamp ::= PLUS INTEGER */
{ 280, -1 }, /* (196) tmvar ::= VARIABLE */ 282, /* (200) timestamp ::= STRING */
{ 281, -1 }, /* (197) timestamp ::= INTEGER */ 282, /* (201) timestamp ::= NOW */
{ 281, -2 }, /* (198) timestamp ::= MINUS INTEGER */ 282, /* (202) timestamp ::= NOW PLUS VARIABLE */
{ 281, -2 }, /* (199) timestamp ::= PLUS INTEGER */ 282, /* (203) timestamp ::= NOW MINUS VARIABLE */
{ 281, -1 }, /* (200) timestamp ::= STRING */ 263, /* (204) range_option ::= */
{ 281, -1 }, /* (201) timestamp ::= NOW */ 263, /* (205) range_option ::= RANGE LP timestamp COMMA timestamp RP */
{ 281, -3 }, /* (202) timestamp ::= NOW PLUS VARIABLE */ 264, /* (206) interval_option ::= intervalKey LP tmvar RP */
{ 281, -3 }, /* (203) timestamp ::= NOW MINUS VARIABLE */ 264, /* (207) interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
{ 262, 0 }, /* (204) range_option ::= */ 264, /* (208) interval_option ::= */
{ 262, -6 }, /* (205) range_option ::= RANGE LP timestamp COMMA timestamp RP */ 283, /* (209) intervalKey ::= INTERVAL */
{ 263, -4 }, /* (206) interval_option ::= intervalKey LP tmvar RP */ 283, /* (210) intervalKey ::= EVERY */
{ 263, -6 }, /* (207) interval_option ::= intervalKey LP tmvar COMMA tmvar RP */ 266, /* (211) session_option ::= */
{ 263, 0 }, /* (208) interval_option ::= */ 266, /* (212) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ 282, -1 }, /* (209) intervalKey ::= INTERVAL */ 267, /* (213) windowstate_option ::= */
{ 282, -1 }, /* (210) intervalKey ::= EVERY */ 267, /* (214) windowstate_option ::= STATE_WINDOW LP ids RP */
{ 265, 0 }, /* (211) session_option ::= */ 268, /* (215) fill_opt ::= */
{ 265, -7 }, /* (212) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ 268, /* (216) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 266, 0 }, /* (213) windowstate_option ::= */ 268, /* (217) fill_opt ::= FILL LP ID RP */
{ 266, -4 }, /* (214) windowstate_option ::= STATE_WINDOW LP ids RP */ 265, /* (218) sliding_opt ::= SLIDING LP tmvar RP */
{ 267, 0 }, /* (215) fill_opt ::= */ 265, /* (219) sliding_opt ::= */
{ 267, -6 }, /* (216) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ 271, /* (220) orderby_opt ::= */
{ 267, -4 }, /* (217) fill_opt ::= FILL LP ID RP */ 271, /* (221) orderby_opt ::= ORDER BY sortlist */
{ 264, -4 }, /* (218) sliding_opt ::= SLIDING LP tmvar RP */ 284, /* (222) sortlist ::= sortlist COMMA item sortorder */
{ 264, 0 }, /* (219) sliding_opt ::= */ 284, /* (223) sortlist ::= sortlist COMMA arrow sortorder */
{ 270, 0 }, /* (220) orderby_opt ::= */ 284, /* (224) sortlist ::= item sortorder */
{ 270, -3 }, /* (221) orderby_opt ::= ORDER BY sortlist */ 284, /* (225) sortlist ::= arrow sortorder */
{ 283, -4 }, /* (222) sortlist ::= sortlist COMMA item sortorder */ 285, /* (226) item ::= ID */
{ 283, -4 }, /* (223) sortlist ::= sortlist COMMA arrow sortorder */ 285, /* (227) item ::= ID DOT ID */
{ 283, -2 }, /* (224) sortlist ::= item sortorder */ 286, /* (228) sortorder ::= ASC */
{ 283, -2 }, /* (225) sortlist ::= arrow sortorder */ 286, /* (229) sortorder ::= DESC */
{ 284, -1 }, /* (226) item ::= ID */ 286, /* (230) sortorder ::= */
{ 284, -3 }, /* (227) item ::= ID DOT ID */ 269, /* (231) groupby_opt ::= */
{ 285, -1 }, /* (228) sortorder ::= ASC */ 269, /* (232) groupby_opt ::= GROUP BY grouplist */
{ 285, -1 }, /* (229) sortorder ::= DESC */ 288, /* (233) grouplist ::= grouplist COMMA item */
{ 285, 0 }, /* (230) sortorder ::= */ 288, /* (234) grouplist ::= grouplist COMMA arrow */
{ 268, 0 }, /* (231) groupby_opt ::= */ 288, /* (235) grouplist ::= item */
{ 268, -3 }, /* (232) groupby_opt ::= GROUP BY grouplist */ 288, /* (236) grouplist ::= arrow */
{ 287, -3 }, /* (233) grouplist ::= grouplist COMMA item */ 270, /* (237) having_opt ::= */
{ 287, -3 }, /* (234) grouplist ::= grouplist COMMA arrow */ 270, /* (238) having_opt ::= HAVING expr */
{ 287, -1 }, /* (235) grouplist ::= item */ 273, /* (239) limit_opt ::= */
{ 287, -1 }, /* (236) grouplist ::= arrow */ 273, /* (240) limit_opt ::= LIMIT signed */
{ 269, 0 }, /* (237) having_opt ::= */ 273, /* (241) limit_opt ::= LIMIT signed OFFSET signed */
{ 269, -2 }, /* (238) having_opt ::= HAVING expr */ 273, /* (242) limit_opt ::= LIMIT signed COMMA signed */
{ 272, 0 }, /* (239) limit_opt ::= */ 272, /* (243) slimit_opt ::= */
{ 272, -2 }, /* (240) limit_opt ::= LIMIT signed */ 272, /* (244) slimit_opt ::= SLIMIT signed */
{ 272, -4 }, /* (241) limit_opt ::= LIMIT signed OFFSET signed */ 272, /* (245) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 272, -4 }, /* (242) limit_opt ::= LIMIT signed COMMA signed */ 272, /* (246) slimit_opt ::= SLIMIT signed COMMA signed */
{ 271, 0 }, /* (243) slimit_opt ::= */ 262, /* (247) where_opt ::= */
{ 271, -2 }, /* (244) slimit_opt ::= SLIMIT signed */ 262, /* (248) where_opt ::= WHERE expr */
{ 271, -4 }, /* (245) slimit_opt ::= SLIMIT signed SOFFSET signed */ 277, /* (249) expr ::= LP expr RP */
{ 271, -4 }, /* (246) slimit_opt ::= SLIMIT signed COMMA signed */ 277, /* (250) expr ::= ID */
{ 261, 0 }, /* (247) where_opt ::= */ 277, /* (251) expr ::= ID DOT ID */
{ 261, -2 }, /* (248) where_opt ::= WHERE expr */ 277, /* (252) expr ::= ID DOT STAR */
{ 276, -3 }, /* (249) expr ::= LP expr RP */ 277, /* (253) expr ::= INTEGER */
{ 276, -1 }, /* (250) expr ::= ID */ 277, /* (254) expr ::= MINUS INTEGER */
{ 276, -3 }, /* (251) expr ::= ID DOT ID */ 277, /* (255) expr ::= PLUS INTEGER */
{ 276, -3 }, /* (252) expr ::= ID DOT STAR */ 277, /* (256) expr ::= FLOAT */
{ 276, -1 }, /* (253) expr ::= INTEGER */ 277, /* (257) expr ::= MINUS FLOAT */
{ 276, -2 }, /* (254) expr ::= MINUS INTEGER */ 277, /* (258) expr ::= PLUS FLOAT */
{ 276, -2 }, /* (255) expr ::= PLUS INTEGER */ 277, /* (259) expr ::= STRING */
{ 276, -1 }, /* (256) expr ::= FLOAT */ 277, /* (260) expr ::= NOW */
{ 276, -2 }, /* (257) expr ::= MINUS FLOAT */ 277, /* (261) expr ::= TODAY */
{ 276, -2 }, /* (258) expr ::= PLUS FLOAT */ 277, /* (262) expr ::= VARIABLE */
{ 276, -1 }, /* (259) expr ::= STRING */ 277, /* (263) expr ::= PLUS VARIABLE */
{ 276, -1 }, /* (260) expr ::= NOW */ 277, /* (264) expr ::= MINUS VARIABLE */
{ 276, -1 }, /* (261) expr ::= VARIABLE */ 277, /* (265) expr ::= BOOL */
{ 276, -2 }, /* (262) expr ::= PLUS VARIABLE */ 277, /* (266) expr ::= NULL */
{ 276, -2 }, /* (263) expr ::= MINUS VARIABLE */ 277, /* (267) expr ::= ID LP exprlist RP */
{ 276, -1 }, /* (264) expr ::= BOOL */ 277, /* (268) expr ::= ID LP STAR RP */
{ 276, -1 }, /* (265) expr ::= NULL */ 277, /* (269) expr ::= ID LP expr AS typename RP */
{ 276, -4 }, /* (266) expr ::= ID LP exprlist RP */ 277, /* (270) expr ::= expr IS NULL */
{ 276, -4 }, /* (267) expr ::= ID LP STAR RP */ 277, /* (271) expr ::= expr IS NOT NULL */
{ 276, -6 }, /* (268) expr ::= ID LP expr AS typename RP */ 277, /* (272) expr ::= expr LT expr */
{ 276, -3 }, /* (269) expr ::= expr IS NULL */ 277, /* (273) expr ::= expr GT expr */
{ 276, -4 }, /* (270) expr ::= expr IS NOT NULL */ 277, /* (274) expr ::= expr LE expr */
{ 276, -3 }, /* (271) expr ::= expr LT expr */ 277, /* (275) expr ::= expr GE expr */
{ 276, -3 }, /* (272) expr ::= expr GT expr */ 277, /* (276) expr ::= expr NE expr */
{ 276, -3 }, /* (273) expr ::= expr LE expr */ 277, /* (277) expr ::= expr EQ expr */
{ 276, -3 }, /* (274) expr ::= expr GE expr */ 277, /* (278) expr ::= expr BETWEEN expr AND expr */
{ 276, -3 }, /* (275) expr ::= expr NE expr */ 277, /* (279) expr ::= expr AND expr */
{ 276, -3 }, /* (276) expr ::= expr EQ expr */ 277, /* (280) expr ::= expr OR expr */
{ 276, -5 }, /* (277) expr ::= expr BETWEEN expr AND expr */ 277, /* (281) expr ::= expr PLUS expr */
{ 276, -3 }, /* (278) expr ::= expr AND expr */ 277, /* (282) expr ::= expr MINUS expr */
{ 276, -3 }, /* (279) expr ::= expr OR expr */ 277, /* (283) expr ::= expr STAR expr */
{ 276, -3 }, /* (280) expr ::= expr PLUS expr */ 277, /* (284) expr ::= expr SLASH expr */
{ 276, -3 }, /* (281) expr ::= expr MINUS expr */ 277, /* (285) expr ::= expr REM expr */
{ 276, -3 }, /* (282) expr ::= expr STAR expr */ 277, /* (286) expr ::= expr LIKE expr */
{ 276, -3 }, /* (283) expr ::= expr SLASH expr */ 277, /* (287) expr ::= expr MATCH expr */
{ 276, -3 }, /* (284) expr ::= expr REM expr */ 277, /* (288) expr ::= expr NMATCH expr */
{ 276, -3 }, /* (285) expr ::= expr LIKE expr */ 277, /* (289) expr ::= ID CONTAINS STRING */
{ 276, -3 }, /* (286) expr ::= expr MATCH expr */ 277, /* (290) expr ::= ID DOT ID CONTAINS STRING */
{ 276, -3 }, /* (287) expr ::= expr NMATCH expr */ 287, /* (291) arrow ::= ID ARROW STRING */
{ 276, -3 }, /* (288) expr ::= ID CONTAINS STRING */ 287, /* (292) arrow ::= ID DOT ID ARROW STRING */
{ 276, -5 }, /* (289) expr ::= ID DOT ID CONTAINS STRING */ 277, /* (293) expr ::= arrow */
{ 286, -3 }, /* (290) arrow ::= ID ARROW STRING */ 277, /* (294) expr ::= expr IN LP exprlist RP */
{ 286, -5 }, /* (291) arrow ::= ID DOT ID ARROW STRING */ 213, /* (295) exprlist ::= exprlist COMMA expritem */
{ 276, -1 }, /* (292) expr ::= arrow */ 213, /* (296) exprlist ::= expritem */
{ 276, -5 }, /* (293) expr ::= expr IN LP exprlist RP */ 289, /* (297) expritem ::= expr */
{ 212, -3 }, /* (294) exprlist ::= exprlist COMMA expritem */ 289, /* (298) expritem ::= */
{ 212, -1 }, /* (295) exprlist ::= expritem */ 205, /* (299) cmd ::= RESET QUERY CACHE */
{ 288, -1 }, /* (296) expritem ::= expr */ 205, /* (300) cmd ::= SYNCDB ids REPLICA */
{ 288, 0 }, /* (297) expritem ::= */ 205, /* (301) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 204, -3 }, /* (298) cmd ::= RESET QUERY CACHE */ 205, /* (302) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 204, -3 }, /* (299) cmd ::= SYNCDB ids REPLICA */ 205, /* (303) cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
{ 204, -7 }, /* (300) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ 205, /* (304) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 204, -7 }, /* (301) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ 205, /* (305) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 204, -7 }, /* (302) cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */ 205, /* (306) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 204, -7 }, /* (303) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ 205, /* (307) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 204, -7 }, /* (304) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ 205, /* (308) cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
{ 204, -8 }, /* (305) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ 205, /* (309) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{ 204, -9 }, /* (306) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ 205, /* (310) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{ 204, -7 }, /* (307) cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */ 205, /* (311) cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
{ 204, -7 }, /* (308) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ 205, /* (312) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{ 204, -7 }, /* (309) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ 205, /* (313) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{ 204, -7 }, /* (310) cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */ 205, /* (314) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{ 204, -7 }, /* (311) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ 205, /* (315) cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
{ 204, -7 }, /* (312) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ 205, /* (316) cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
{ 204, -8 }, /* (313) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ 205, /* (317) cmd ::= KILL CONNECTION INTEGER */
{ 204, -9 }, /* (314) cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */ 205, /* (318) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 204, -7 }, /* (315) cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */ 205, /* (319) cmd ::= KILL QUERY INTEGER COLON INTEGER */
{ 204, -3 }, /* (316) cmd ::= KILL CONNECTION INTEGER */ };
{ 204, -5 }, /* (317) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 204, -5 }, /* (318) cmd ::= KILL QUERY INTEGER COLON INTEGER */ /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
** of symbols on the right-hand side of that rule. */
static const signed char yyRuleInfoNRhs[] = {
-1, /* (0) program ::= cmd */
-2, /* (1) cmd ::= SHOW DATABASES */
-2, /* (2) cmd ::= SHOW TOPICS */
-2, /* (3) cmd ::= SHOW FUNCTIONS */
-2, /* (4) cmd ::= SHOW MNODES */
-2, /* (5) cmd ::= SHOW DNODES */
-2, /* (6) cmd ::= SHOW ACCOUNTS */
-2, /* (7) cmd ::= SHOW USERS */
-2, /* (8) cmd ::= SHOW MODULES */
-2, /* (9) cmd ::= SHOW QUERIES */
-2, /* (10) cmd ::= SHOW CONNECTIONS */
-2, /* (11) cmd ::= SHOW STREAMS */
-2, /* (12) cmd ::= SHOW VARIABLES */
-2, /* (13) cmd ::= SHOW SCORES */
-2, /* (14) cmd ::= SHOW GRANTS */
-2, /* (15) cmd ::= SHOW VNODES */
-3, /* (16) cmd ::= SHOW VNODES ids */
0, /* (17) dbPrefix ::= */
-2, /* (18) dbPrefix ::= ids DOT */
0, /* (19) cpxName ::= */
-2, /* (20) cpxName ::= DOT ids */
-5, /* (21) cmd ::= SHOW CREATE TABLE ids cpxName */
-5, /* (22) cmd ::= SHOW CREATE STABLE ids cpxName */
-4, /* (23) cmd ::= SHOW CREATE DATABASE ids */
-3, /* (24) cmd ::= SHOW dbPrefix TABLES */
-5, /* (25) cmd ::= SHOW dbPrefix TABLES LIKE STRING */
-3, /* (26) cmd ::= SHOW dbPrefix STABLES */
-5, /* (27) cmd ::= SHOW dbPrefix STABLES LIKE STRING */
-3, /* (28) cmd ::= SHOW dbPrefix VGROUPS */
-5, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */
-5, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */
-4, /* (31) cmd ::= DROP DATABASE ifexists ids */
-4, /* (32) cmd ::= DROP TOPIC ifexists ids */
-3, /* (33) cmd ::= DROP FUNCTION ids */
-3, /* (34) cmd ::= DROP DNODE ids */
-3, /* (35) cmd ::= DROP USER ids */
-3, /* (36) cmd ::= DROP ACCOUNT ids */
-2, /* (37) cmd ::= USE ids */
-3, /* (38) cmd ::= DESCRIBE ids cpxName */
-3, /* (39) cmd ::= DESC ids cpxName */
-5, /* (40) cmd ::= ALTER USER ids PASS ids */
-5, /* (41) cmd ::= ALTER USER ids PRIVILEGE ids */
-4, /* (42) cmd ::= ALTER DNODE ids ids */
-5, /* (43) cmd ::= ALTER DNODE ids ids ids */
-3, /* (44) cmd ::= ALTER LOCAL ids */
-4, /* (45) cmd ::= ALTER LOCAL ids ids */
-4, /* (46) cmd ::= ALTER DATABASE ids alter_db_optr */
-4, /* (47) cmd ::= ALTER TOPIC ids alter_topic_optr */
-4, /* (48) cmd ::= ALTER ACCOUNT ids acct_optr */
-6, /* (49) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
-6, /* (50) cmd ::= COMPACT VNODES IN LP exprlist RP */
-1, /* (51) ids ::= ID */
-1, /* (52) ids ::= STRING */
-2, /* (53) ifexists ::= IF EXISTS */
0, /* (54) ifexists ::= */
-3, /* (55) ifnotexists ::= IF NOT EXISTS */
0, /* (56) ifnotexists ::= */
-3, /* (57) cmd ::= CREATE DNODE ids */
-6, /* (58) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
-5, /* (59) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
-5, /* (60) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
-8, /* (61) cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
-9, /* (62) cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
-5, /* (63) cmd ::= CREATE USER ids PASS ids */
0, /* (64) bufsize ::= */
-2, /* (65) bufsize ::= BUFSIZE INTEGER */
0, /* (66) pps ::= */
-2, /* (67) pps ::= PPS INTEGER */
0, /* (68) tseries ::= */
-2, /* (69) tseries ::= TSERIES INTEGER */
0, /* (70) dbs ::= */
-2, /* (71) dbs ::= DBS INTEGER */
0, /* (72) streams ::= */
-2, /* (73) streams ::= STREAMS INTEGER */
0, /* (74) storage ::= */
-2, /* (75) storage ::= STORAGE INTEGER */
0, /* (76) qtime ::= */
-2, /* (77) qtime ::= QTIME INTEGER */
0, /* (78) users ::= */
-2, /* (79) users ::= USERS INTEGER */
0, /* (80) conns ::= */
-2, /* (81) conns ::= CONNS INTEGER */
0, /* (82) state ::= */
-2, /* (83) state ::= STATE ids */
-9, /* (84) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
-3, /* (85) intitemlist ::= intitemlist COMMA intitem */
-1, /* (86) intitemlist ::= intitem */
-1, /* (87) intitem ::= INTEGER */
-2, /* (88) keep ::= KEEP intitemlist */
-2, /* (89) cache ::= CACHE INTEGER */
-2, /* (90) replica ::= REPLICA INTEGER */
-2, /* (91) quorum ::= QUORUM INTEGER */
-2, /* (92) days ::= DAYS INTEGER */
-2, /* (93) minrows ::= MINROWS INTEGER */
-2, /* (94) maxrows ::= MAXROWS INTEGER */
-2, /* (95) blocks ::= BLOCKS INTEGER */
-2, /* (96) ctime ::= CTIME INTEGER */
-2, /* (97) wal ::= WAL INTEGER */
-2, /* (98) fsync ::= FSYNC INTEGER */
-2, /* (99) comp ::= COMP INTEGER */
-2, /* (100) prec ::= PRECISION STRING */
-2, /* (101) update ::= UPDATE INTEGER */
-2, /* (102) cachelast ::= CACHELAST INTEGER */
-2, /* (103) partitions ::= PARTITIONS INTEGER */
0, /* (104) db_optr ::= */
-2, /* (105) db_optr ::= db_optr cache */
-2, /* (106) db_optr ::= db_optr replica */
-2, /* (107) db_optr ::= db_optr quorum */
-2, /* (108) db_optr ::= db_optr days */
-2, /* (109) db_optr ::= db_optr minrows */
-2, /* (110) db_optr ::= db_optr maxrows */
-2, /* (111) db_optr ::= db_optr blocks */
-2, /* (112) db_optr ::= db_optr ctime */
-2, /* (113) db_optr ::= db_optr wal */
-2, /* (114) db_optr ::= db_optr fsync */
-2, /* (115) db_optr ::= db_optr comp */
-2, /* (116) db_optr ::= db_optr prec */
-2, /* (117) db_optr ::= db_optr keep */
-2, /* (118) db_optr ::= db_optr update */
-2, /* (119) db_optr ::= db_optr cachelast */
-1, /* (120) topic_optr ::= db_optr */
-2, /* (121) topic_optr ::= topic_optr partitions */
0, /* (122) alter_db_optr ::= */
-2, /* (123) alter_db_optr ::= alter_db_optr replica */
-2, /* (124) alter_db_optr ::= alter_db_optr quorum */
-2, /* (125) alter_db_optr ::= alter_db_optr keep */
-2, /* (126) alter_db_optr ::= alter_db_optr blocks */
-2, /* (127) alter_db_optr ::= alter_db_optr comp */
-2, /* (128) alter_db_optr ::= alter_db_optr update */
-2, /* (129) alter_db_optr ::= alter_db_optr cachelast */
-1, /* (130) alter_topic_optr ::= alter_db_optr */
-2, /* (131) alter_topic_optr ::= alter_topic_optr partitions */
-1, /* (132) typename ::= ids */
-4, /* (133) typename ::= ids LP signed RP */
-2, /* (134) typename ::= ids UNSIGNED */
-1, /* (135) signed ::= INTEGER */
-2, /* (136) signed ::= PLUS INTEGER */
-2, /* (137) signed ::= MINUS INTEGER */
-3, /* (138) cmd ::= CREATE TABLE create_table_args */
-3, /* (139) cmd ::= CREATE TABLE create_stable_args */
-3, /* (140) cmd ::= CREATE STABLE create_stable_args */
-3, /* (141) cmd ::= CREATE TABLE create_table_list */
-1, /* (142) create_table_list ::= create_from_stable */
-2, /* (143) create_table_list ::= create_table_list create_from_stable */
-6, /* (144) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
-10, /* (145) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
-10, /* (146) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
-13, /* (147) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
-3, /* (148) tagNamelist ::= tagNamelist COMMA ids */
-1, /* (149) tagNamelist ::= ids */
-7, /* (150) create_table_args ::= ifnotexists ids cpxName to_opt split_opt AS select */
0, /* (151) to_opt ::= */
-3, /* (152) to_opt ::= TO ids cpxName */
0, /* (153) split_opt ::= */
-2, /* (154) split_opt ::= SPLIT ids */
-3, /* (155) columnlist ::= columnlist COMMA column */
-1, /* (156) columnlist ::= column */
-2, /* (157) column ::= ids typename */
-3, /* (158) tagitemlist ::= tagitemlist COMMA tagitem */
-1, /* (159) tagitemlist ::= tagitem */
-1, /* (160) tagitem ::= INTEGER */
-1, /* (161) tagitem ::= FLOAT */
-1, /* (162) tagitem ::= STRING */
-1, /* (163) tagitem ::= BOOL */
-1, /* (164) tagitem ::= NULL */
-1, /* (165) tagitem ::= NOW */
-3, /* (166) tagitem ::= NOW PLUS VARIABLE */
-3, /* (167) tagitem ::= NOW MINUS VARIABLE */
-2, /* (168) tagitem ::= MINUS INTEGER */
-2, /* (169) tagitem ::= MINUS FLOAT */
-2, /* (170) tagitem ::= PLUS INTEGER */
-2, /* (171) tagitem ::= PLUS FLOAT */
-15, /* (172) select ::= SELECT selcollist from where_opt range_option interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
-3, /* (173) select ::= LP select RP */
-1, /* (174) union ::= select */
-4, /* (175) union ::= union UNION ALL select */
-1, /* (176) cmd ::= union */
-2, /* (177) select ::= SELECT selcollist */
-2, /* (178) sclp ::= selcollist COMMA */
0, /* (179) sclp ::= */
-4, /* (180) selcollist ::= sclp distinct expr as */
-2, /* (181) selcollist ::= sclp STAR */
-2, /* (182) as ::= AS ids */
-1, /* (183) as ::= ids */
0, /* (184) as ::= */
-1, /* (185) distinct ::= DISTINCT */
0, /* (186) distinct ::= */
-2, /* (187) from ::= FROM tablelist */
-2, /* (188) from ::= FROM sub */
-3, /* (189) sub ::= LP union RP */
-4, /* (190) sub ::= LP union RP ids */
-6, /* (191) sub ::= sub COMMA LP union RP ids */
-2, /* (192) tablelist ::= ids cpxName */
-3, /* (193) tablelist ::= ids cpxName ids */
-4, /* (194) tablelist ::= tablelist COMMA ids cpxName */
-5, /* (195) tablelist ::= tablelist COMMA ids cpxName ids */
-1, /* (196) tmvar ::= VARIABLE */
-1, /* (197) timestamp ::= INTEGER */
-2, /* (198) timestamp ::= MINUS INTEGER */
-2, /* (199) timestamp ::= PLUS INTEGER */
-1, /* (200) timestamp ::= STRING */
-1, /* (201) timestamp ::= NOW */
-3, /* (202) timestamp ::= NOW PLUS VARIABLE */
-3, /* (203) timestamp ::= NOW MINUS VARIABLE */
0, /* (204) range_option ::= */
-6, /* (205) range_option ::= RANGE LP timestamp COMMA timestamp RP */
-4, /* (206) interval_option ::= intervalKey LP tmvar RP */
-6, /* (207) interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
0, /* (208) interval_option ::= */
-1, /* (209) intervalKey ::= INTERVAL */
-1, /* (210) intervalKey ::= EVERY */
0, /* (211) session_option ::= */
-7, /* (212) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
0, /* (213) windowstate_option ::= */
-4, /* (214) windowstate_option ::= STATE_WINDOW LP ids RP */
0, /* (215) fill_opt ::= */
-6, /* (216) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
-4, /* (217) fill_opt ::= FILL LP ID RP */
-4, /* (218) sliding_opt ::= SLIDING LP tmvar RP */
0, /* (219) sliding_opt ::= */
0, /* (220) orderby_opt ::= */
-3, /* (221) orderby_opt ::= ORDER BY sortlist */
-4, /* (222) sortlist ::= sortlist COMMA item sortorder */
-4, /* (223) sortlist ::= sortlist COMMA arrow sortorder */
-2, /* (224) sortlist ::= item sortorder */
-2, /* (225) sortlist ::= arrow sortorder */
-1, /* (226) item ::= ID */
-3, /* (227) item ::= ID DOT ID */
-1, /* (228) sortorder ::= ASC */
-1, /* (229) sortorder ::= DESC */
0, /* (230) sortorder ::= */
0, /* (231) groupby_opt ::= */
-3, /* (232) groupby_opt ::= GROUP BY grouplist */
-3, /* (233) grouplist ::= grouplist COMMA item */
-3, /* (234) grouplist ::= grouplist COMMA arrow */
-1, /* (235) grouplist ::= item */
-1, /* (236) grouplist ::= arrow */
0, /* (237) having_opt ::= */
-2, /* (238) having_opt ::= HAVING expr */
0, /* (239) limit_opt ::= */
-2, /* (240) limit_opt ::= LIMIT signed */
-4, /* (241) limit_opt ::= LIMIT signed OFFSET signed */
-4, /* (242) limit_opt ::= LIMIT signed COMMA signed */
0, /* (243) slimit_opt ::= */
-2, /* (244) slimit_opt ::= SLIMIT signed */
-4, /* (245) slimit_opt ::= SLIMIT signed SOFFSET signed */
-4, /* (246) slimit_opt ::= SLIMIT signed COMMA signed */
0, /* (247) where_opt ::= */
-2, /* (248) where_opt ::= WHERE expr */
-3, /* (249) expr ::= LP expr RP */
-1, /* (250) expr ::= ID */
-3, /* (251) expr ::= ID DOT ID */
-3, /* (252) expr ::= ID DOT STAR */
-1, /* (253) expr ::= INTEGER */
-2, /* (254) expr ::= MINUS INTEGER */
-2, /* (255) expr ::= PLUS INTEGER */
-1, /* (256) expr ::= FLOAT */
-2, /* (257) expr ::= MINUS FLOAT */
-2, /* (258) expr ::= PLUS FLOAT */
-1, /* (259) expr ::= STRING */
-1, /* (260) expr ::= NOW */
-1, /* (261) expr ::= TODAY */
-1, /* (262) expr ::= VARIABLE */
-2, /* (263) expr ::= PLUS VARIABLE */
-2, /* (264) expr ::= MINUS VARIABLE */
-1, /* (265) expr ::= BOOL */
-1, /* (266) expr ::= NULL */
-4, /* (267) expr ::= ID LP exprlist RP */
-4, /* (268) expr ::= ID LP STAR RP */
-6, /* (269) expr ::= ID LP expr AS typename RP */
-3, /* (270) expr ::= expr IS NULL */
-4, /* (271) expr ::= expr IS NOT NULL */
-3, /* (272) expr ::= expr LT expr */
-3, /* (273) expr ::= expr GT expr */
-3, /* (274) expr ::= expr LE expr */
-3, /* (275) expr ::= expr GE expr */
-3, /* (276) expr ::= expr NE expr */
-3, /* (277) expr ::= expr EQ expr */
-5, /* (278) expr ::= expr BETWEEN expr AND expr */
-3, /* (279) expr ::= expr AND expr */
-3, /* (280) expr ::= expr OR expr */
-3, /* (281) expr ::= expr PLUS expr */
-3, /* (282) expr ::= expr MINUS expr */
-3, /* (283) expr ::= expr STAR expr */
-3, /* (284) expr ::= expr SLASH expr */
-3, /* (285) expr ::= expr REM expr */
-3, /* (286) expr ::= expr LIKE expr */
-3, /* (287) expr ::= expr MATCH expr */
-3, /* (288) expr ::= expr NMATCH expr */
-3, /* (289) expr ::= ID CONTAINS STRING */
-5, /* (290) expr ::= ID DOT ID CONTAINS STRING */
-3, /* (291) arrow ::= ID ARROW STRING */
-5, /* (292) arrow ::= ID DOT ID ARROW STRING */
-1, /* (293) expr ::= arrow */
-5, /* (294) expr ::= expr IN LP exprlist RP */
-3, /* (295) exprlist ::= exprlist COMMA expritem */
-1, /* (296) exprlist ::= expritem */
-1, /* (297) expritem ::= expr */
0, /* (298) expritem ::= */
-3, /* (299) cmd ::= RESET QUERY CACHE */
-3, /* (300) cmd ::= SYNCDB ids REPLICA */
-7, /* (301) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
-7, /* (302) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
-7, /* (303) cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
-7, /* (304) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
-7, /* (305) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
-8, /* (306) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
-9, /* (307) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
-7, /* (308) cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
-7, /* (309) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
-7, /* (310) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
-7, /* (311) cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
-7, /* (312) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
-7, /* (313) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
-8, /* (314) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
-9, /* (315) cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
-7, /* (316) cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
-3, /* (317) cmd ::= KILL CONNECTION INTEGER */
-5, /* (318) cmd ::= KILL STREAM INTEGER COLON INTEGER */
-5, /* (319) cmd ::= KILL QUERY INTEGER COLON INTEGER */
}; };
static void yy_accept(yyParser*); /* Forward Declaration */ static void yy_accept(yyParser*); /* Forward Declaration */
...@@ -2274,14 +2596,17 @@ static YYACTIONTYPE yy_reduce( ...@@ -2274,14 +2596,17 @@ static YYACTIONTYPE yy_reduce(
yymsp = yypParser->yytos; yymsp = yypParser->yytos;
#ifndef NDEBUG #ifndef NDEBUG
if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
yysize = yyRuleInfo[yyruleno].nrhs; yysize = yyRuleInfoNRhs[yyruleno];
if( yysize ){ if( yysize ){
fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
yyTracePrompt, yyTracePrompt,
yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); yyruleno, yyRuleName[yyruleno],
yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action",
yymsp[yysize].stateno);
}else{ }else{
fprintf(yyTraceFILE, "%sReduce %d [%s].\n", fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n",
yyTracePrompt, yyruleno, yyRuleName[yyruleno]); yyTracePrompt, yyruleno, yyRuleName[yyruleno],
yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action");
} }
} }
#endif /* NDEBUG */ #endif /* NDEBUG */
...@@ -2289,7 +2614,7 @@ static YYACTIONTYPE yy_reduce( ...@@ -2289,7 +2614,7 @@ static YYACTIONTYPE yy_reduce(
/* Check that the stack is large enough to grow by a single entry /* Check that the stack is large enough to grow by a single entry
** if the RHS of the rule is empty. This ensures that there is room ** if the RHS of the rule is empty. This ensures that there is room
** enough on the stack to push the LHS value */ ** enough on the stack to push the LHS value */
if( yyRuleInfo[yyruleno].nrhs==0 ){ if( yyRuleInfoNRhs[yyruleno]==0 ){
#ifdef YYTRACKMAXSTACKDEPTH #ifdef YYTRACKMAXSTACKDEPTH
if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
yypParser->yyhwm++; yypParser->yyhwm++;
...@@ -2502,16 +2827,16 @@ static YYACTIONTYPE yy_reduce( ...@@ -2502,16 +2827,16 @@ static YYACTIONTYPE yy_reduce(
break; break;
case 46: /* cmd ::= ALTER DATABASE ids alter_db_optr */ case 46: /* cmd ::= ALTER DATABASE ids alter_db_optr */
case 47: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==47); case 47: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==47);
{ SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy560, &t);} { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy302, &t);}
break; break;
case 48: /* cmd ::= ALTER ACCOUNT ids acct_optr */ case 48: /* cmd ::= ALTER ACCOUNT ids acct_optr */
{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy205);} { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy231);}
break; break;
case 49: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ case 49: /* 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.yy205);} { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy231);}
break; break;
case 50: /* cmd ::= COMPACT VNODES IN LP exprlist RP */ case 50: /* cmd ::= COMPACT VNODES IN LP exprlist RP */
{ setCompactVnodeSql(pInfo, TSDB_SQL_COMPACT_VNODE, yymsp[-1].minor.yy209);} { setCompactVnodeSql(pInfo, TSDB_SQL_COMPACT_VNODE, yymsp[-1].minor.yy161);}
break; break;
case 51: /* ids ::= ID */ case 51: /* ids ::= ID */
case 52: /* ids ::= STRING */ yytestcase(yyruleno==52); case 52: /* ids ::= STRING */ yytestcase(yyruleno==52);
...@@ -2533,17 +2858,17 @@ static YYACTIONTYPE yy_reduce( ...@@ -2533,17 +2858,17 @@ static YYACTIONTYPE yy_reduce(
{ setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} { setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);}
break; break;
case 58: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ case 58: /* 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.yy205);} { setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy231);}
break; break;
case 59: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ case 59: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case 60: /* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ yytestcase(yyruleno==60); case 60: /* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ yytestcase(yyruleno==60);
{ setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy560, &yymsp[-2].minor.yy0);} { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy302, &yymsp[-2].minor.yy0);}
break; break;
case 61: /* cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */ case 61: /* cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{ setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &yymsp[-5].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy369, &yymsp[0].minor.yy0, 1);} { setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &yymsp[-5].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy223, &yymsp[0].minor.yy0, 1);}
break; break;
case 62: /* cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */ case 62: /* cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
{ setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &yymsp[-5].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy369, &yymsp[0].minor.yy0, 2);} { setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &yymsp[-5].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy223, &yymsp[0].minor.yy0, 2);}
break; break;
case 63: /* cmd ::= CREATE USER ids PASS ids */ case 63: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} { setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
...@@ -2574,38 +2899,38 @@ static YYACTIONTYPE yy_reduce( ...@@ -2574,38 +2899,38 @@ static YYACTIONTYPE yy_reduce(
break; break;
case 84: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ case 84: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ {
yylhsminor.yy205.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; yylhsminor.yy231.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy205.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; yylhsminor.yy231.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy205.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; yylhsminor.yy231.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy205.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; yylhsminor.yy231.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy205.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; yylhsminor.yy231.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy205.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; yylhsminor.yy231.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy205.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; yylhsminor.yy231.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy205.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; yylhsminor.yy231.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy205.stat = yymsp[0].minor.yy0; yylhsminor.yy231.stat = yymsp[0].minor.yy0;
} }
yymsp[-8].minor.yy205 = yylhsminor.yy205; yymsp[-8].minor.yy231 = yylhsminor.yy231;
break; break;
case 85: /* intitemlist ::= intitemlist COMMA intitem */ case 85: /* intitemlist ::= intitemlist COMMA intitem */
case 158: /* tagitemlist ::= tagitemlist COMMA tagitem */ yytestcase(yyruleno==158); case 158: /* tagitemlist ::= tagitemlist COMMA tagitem */ yytestcase(yyruleno==158);
{ yylhsminor.yy209 = tVariantListAppend(yymsp[-2].minor.yy209, &yymsp[0].minor.yy54, -1); } { yylhsminor.yy161 = tVariantListAppend(yymsp[-2].minor.yy161, &yymsp[0].minor.yy526, -1); }
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 86: /* intitemlist ::= intitem */ case 86: /* intitemlist ::= intitem */
case 159: /* tagitemlist ::= tagitem */ yytestcase(yyruleno==159); case 159: /* tagitemlist ::= tagitem */ yytestcase(yyruleno==159);
{ yylhsminor.yy209 = tVariantListAppend(NULL, &yymsp[0].minor.yy54, -1); } { yylhsminor.yy161 = tVariantListAppend(NULL, &yymsp[0].minor.yy526, -1); }
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 87: /* intitem ::= INTEGER */ case 87: /* intitem ::= INTEGER */
case 160: /* tagitem ::= INTEGER */ yytestcase(yyruleno==160); case 160: /* tagitem ::= INTEGER */ yytestcase(yyruleno==160);
case 161: /* tagitem ::= FLOAT */ yytestcase(yyruleno==161); case 161: /* tagitem ::= FLOAT */ yytestcase(yyruleno==161);
case 162: /* tagitem ::= STRING */ yytestcase(yyruleno==162); case 162: /* tagitem ::= STRING */ yytestcase(yyruleno==162);
case 163: /* tagitem ::= BOOL */ yytestcase(yyruleno==163); case 163: /* tagitem ::= BOOL */ yytestcase(yyruleno==163);
{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy54, &yymsp[0].minor.yy0); } { toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy526, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy54 = yylhsminor.yy54; yymsp[0].minor.yy526 = yylhsminor.yy526;
break; break;
case 88: /* keep ::= KEEP intitemlist */ case 88: /* keep ::= KEEP intitemlist */
{ yymsp[-1].minor.yy209 = yymsp[0].minor.yy209; } { yymsp[-1].minor.yy161 = yymsp[0].minor.yy161; }
break; break;
case 89: /* cache ::= CACHE INTEGER */ case 89: /* cache ::= CACHE INTEGER */
case 90: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==90); case 90: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==90);
...@@ -2625,200 +2950,200 @@ static YYACTIONTYPE yy_reduce( ...@@ -2625,200 +2950,200 @@ static YYACTIONTYPE yy_reduce(
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 104: /* db_optr ::= */ case 104: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy560); yymsp[1].minor.yy560.dbType = TSDB_DB_TYPE_DEFAULT;} {setDefaultCreateDbOption(&yymsp[1].minor.yy302); yymsp[1].minor.yy302.dbType = TSDB_DB_TYPE_DEFAULT;}
break; break;
case 105: /* db_optr ::= db_optr cache */ case 105: /* db_optr ::= db_optr cache */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 106: /* db_optr ::= db_optr replica */ case 106: /* db_optr ::= db_optr replica */
case 123: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==123); case 123: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==123);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 107: /* db_optr ::= db_optr quorum */ case 107: /* db_optr ::= db_optr quorum */
case 124: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==124); case 124: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==124);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 108: /* db_optr ::= db_optr days */ case 108: /* db_optr ::= db_optr days */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 109: /* db_optr ::= db_optr minrows */ case 109: /* db_optr ::= db_optr minrows */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 110: /* db_optr ::= db_optr maxrows */ case 110: /* db_optr ::= db_optr maxrows */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 111: /* db_optr ::= db_optr blocks */ case 111: /* db_optr ::= db_optr blocks */
case 126: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==126); case 126: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==126);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 112: /* db_optr ::= db_optr ctime */ case 112: /* db_optr ::= db_optr ctime */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 113: /* db_optr ::= db_optr wal */ case 113: /* db_optr ::= db_optr wal */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 114: /* db_optr ::= db_optr fsync */ case 114: /* db_optr ::= db_optr fsync */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 115: /* db_optr ::= db_optr comp */ case 115: /* db_optr ::= db_optr comp */
case 127: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==127); case 127: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==127);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 116: /* db_optr ::= db_optr prec */ case 116: /* db_optr ::= db_optr prec */
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.precision = yymsp[0].minor.yy0; } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 117: /* db_optr ::= db_optr keep */ case 117: /* db_optr ::= db_optr keep */
case 125: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==125); case 125: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==125);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.keep = yymsp[0].minor.yy209; } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.keep = yymsp[0].minor.yy161; }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 118: /* db_optr ::= db_optr update */ case 118: /* db_optr ::= db_optr update */
case 128: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==128); case 128: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==128);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 119: /* db_optr ::= db_optr cachelast */ case 119: /* db_optr ::= db_optr cachelast */
case 129: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==129); case 129: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==129);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 120: /* topic_optr ::= db_optr */ case 120: /* topic_optr ::= db_optr */
case 130: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==130); case 130: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==130);
{ yylhsminor.yy560 = yymsp[0].minor.yy560; yylhsminor.yy560.dbType = TSDB_DB_TYPE_TOPIC; } { yylhsminor.yy302 = yymsp[0].minor.yy302; yylhsminor.yy302.dbType = TSDB_DB_TYPE_TOPIC; }
yymsp[0].minor.yy560 = yylhsminor.yy560; yymsp[0].minor.yy302 = yylhsminor.yy302;
break; break;
case 121: /* topic_optr ::= topic_optr partitions */ case 121: /* topic_optr ::= topic_optr partitions */
case 131: /* alter_topic_optr ::= alter_topic_optr partitions */ yytestcase(yyruleno==131); case 131: /* alter_topic_optr ::= alter_topic_optr partitions */ yytestcase(yyruleno==131);
{ yylhsminor.yy560 = yymsp[-1].minor.yy560; yylhsminor.yy560.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy302 = yymsp[-1].minor.yy302; yylhsminor.yy302.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy560 = yylhsminor.yy560; yymsp[-1].minor.yy302 = yylhsminor.yy302;
break; break;
case 122: /* alter_db_optr ::= */ case 122: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy560); yymsp[1].minor.yy560.dbType = TSDB_DB_TYPE_DEFAULT;} { setDefaultCreateDbOption(&yymsp[1].minor.yy302); yymsp[1].minor.yy302.dbType = TSDB_DB_TYPE_DEFAULT;}
break; break;
case 132: /* typename ::= ids */ case 132: /* typename ::= ids */
{ {
yymsp[0].minor.yy0.type = 0; yymsp[0].minor.yy0.type = 0;
tSetColumnType (&yylhsminor.yy369, &yymsp[0].minor.yy0); tSetColumnType (&yylhsminor.yy223, &yymsp[0].minor.yy0);
} }
yymsp[0].minor.yy369 = yylhsminor.yy369; yymsp[0].minor.yy223 = yylhsminor.yy223;
break; break;
case 133: /* typename ::= ids LP signed RP */ case 133: /* typename ::= ids LP signed RP */
{ {
if (yymsp[-1].minor.yy55 <= 0) { if (yymsp[-1].minor.yy369 <= 0) {
yymsp[-3].minor.yy0.type = 0; yymsp[-3].minor.yy0.type = 0;
tSetColumnType(&yylhsminor.yy369, &yymsp[-3].minor.yy0); tSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0);
} else { } else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy55; // negative value of name length yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy369; // negative value of name length
tSetColumnType(&yylhsminor.yy369, &yymsp[-3].minor.yy0); tSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0);
} }
} }
yymsp[-3].minor.yy369 = yylhsminor.yy369; yymsp[-3].minor.yy223 = yylhsminor.yy223;
break; break;
case 134: /* typename ::= ids UNSIGNED */ case 134: /* typename ::= ids UNSIGNED */
{ {
yymsp[-1].minor.yy0.type = 0; yymsp[-1].minor.yy0.type = 0;
yymsp[-1].minor.yy0.n = ((yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z); yymsp[-1].minor.yy0.n = ((yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z);
tSetColumnType (&yylhsminor.yy369, &yymsp[-1].minor.yy0); tSetColumnType (&yylhsminor.yy223, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy369 = yylhsminor.yy369; yymsp[-1].minor.yy223 = yylhsminor.yy223;
break; break;
case 135: /* signed ::= INTEGER */ case 135: /* signed ::= INTEGER */
{ yylhsminor.yy55 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy369 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy55 = yylhsminor.yy55; yymsp[0].minor.yy369 = yylhsminor.yy369;
break; break;
case 136: /* signed ::= PLUS INTEGER */ case 136: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy55 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yymsp[-1].minor.yy369 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break; break;
case 137: /* signed ::= MINUS INTEGER */ case 137: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy55 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} { yymsp[-1].minor.yy369 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break; break;
case 141: /* cmd ::= CREATE TABLE create_table_list */ case 141: /* cmd ::= CREATE TABLE create_table_list */
{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy404;} { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy462;}
break; break;
case 142: /* create_table_list ::= create_from_stable */ case 142: /* create_table_list ::= create_from_stable */
{ {
SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql)); SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql));
pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo)); pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy34); taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy356);
pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE; pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
yylhsminor.yy404 = pCreateTable; yylhsminor.yy462 = pCreateTable;
} }
yymsp[0].minor.yy404 = yylhsminor.yy404; yymsp[0].minor.yy462 = yylhsminor.yy462;
break; break;
case 143: /* create_table_list ::= create_table_list create_from_stable */ case 143: /* create_table_list ::= create_table_list create_from_stable */
{ {
taosArrayPush(yymsp[-1].minor.yy404->childTableInfo, &yymsp[0].minor.yy34); taosArrayPush(yymsp[-1].minor.yy462->childTableInfo, &yymsp[0].minor.yy356);
yylhsminor.yy404 = yymsp[-1].minor.yy404; yylhsminor.yy462 = yymsp[-1].minor.yy462;
} }
yymsp[-1].minor.yy404 = yylhsminor.yy404; yymsp[-1].minor.yy462 = yylhsminor.yy462;
break; break;
case 144: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ case 144: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ {
yylhsminor.yy404 = tSetCreateTableInfo(yymsp[-1].minor.yy209, NULL, NULL, TSQL_CREATE_TABLE); yylhsminor.yy462 = tSetCreateTableInfo(yymsp[-1].minor.yy161, NULL, NULL, TSQL_CREATE_TABLE);
setSqlInfo(pInfo, yylhsminor.yy404, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy462, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0); setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0);
} }
yymsp[-5].minor.yy404 = yylhsminor.yy404; yymsp[-5].minor.yy462 = yylhsminor.yy462;
break; break;
case 145: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ case 145: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{ {
yylhsminor.yy404 = tSetCreateTableInfo(yymsp[-5].minor.yy209, yymsp[-1].minor.yy209, NULL, TSQL_CREATE_STABLE); yylhsminor.yy462 = tSetCreateTableInfo(yymsp[-5].minor.yy161, yymsp[-1].minor.yy161, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, yylhsminor.yy404, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy462, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
} }
yymsp[-9].minor.yy404 = yylhsminor.yy404; yymsp[-9].minor.yy462 = yylhsminor.yy462;
break; break;
case 146: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ case 146: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
yylhsminor.yy34 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy209, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); yylhsminor.yy356 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy161, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
} }
yymsp[-9].minor.yy34 = yylhsminor.yy34; yymsp[-9].minor.yy356 = yylhsminor.yy356;
break; break;
case 147: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ case 147: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{ {
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
yymsp[-11].minor.yy0.n += yymsp[-10].minor.yy0.n; yymsp[-11].minor.yy0.n += yymsp[-10].minor.yy0.n;
yylhsminor.yy34 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy209, yymsp[-1].minor.yy209, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0); yylhsminor.yy356 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy161, yymsp[-1].minor.yy161, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0);
} }
yymsp[-12].minor.yy34 = yylhsminor.yy34; yymsp[-12].minor.yy356 = yylhsminor.yy356;
break; break;
case 148: /* tagNamelist ::= tagNamelist COMMA ids */ case 148: /* tagNamelist ::= tagNamelist COMMA ids */
{taosArrayPush(yymsp[-2].minor.yy209, &yymsp[0].minor.yy0); yylhsminor.yy209 = yymsp[-2].minor.yy209; } {taosArrayPush(yymsp[-2].minor.yy161, &yymsp[0].minor.yy0); yylhsminor.yy161 = yymsp[-2].minor.yy161; }
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 149: /* tagNamelist ::= ids */ case 149: /* tagNamelist ::= ids */
{yylhsminor.yy209 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy209, &yymsp[0].minor.yy0);} {yylhsminor.yy161 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy161, &yymsp[0].minor.yy0);}
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 150: /* create_table_args ::= ifnotexists ids cpxName to_opt split_opt AS select */ case 150: /* create_table_args ::= ifnotexists ids cpxName to_opt split_opt AS select */
{ {
yylhsminor.yy404 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy160, TSQL_CREATE_STREAM); yylhsminor.yy462 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy276, TSQL_CREATE_STREAM);
setSqlInfo(pInfo, yylhsminor.yy404, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy462, NULL, TSDB_SQL_CREATE_TABLE);
setCreatedStreamOpt(pInfo, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0); setCreatedStreamOpt(pInfo, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0);
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-5].minor.yy0, &yymsp[-6].minor.yy0); setCreatedTableName(pInfo, &yymsp[-5].minor.yy0, &yymsp[-6].minor.yy0);
} }
yymsp[-6].minor.yy404 = yylhsminor.yy404; yymsp[-6].minor.yy462 = yylhsminor.yy462;
break; break;
case 151: /* to_opt ::= */ case 151: /* to_opt ::= */
case 153: /* split_opt ::= */ yytestcase(yyruleno==153); case 153: /* split_opt ::= */ yytestcase(yyruleno==153);
...@@ -2834,37 +3159,37 @@ static YYACTIONTYPE yy_reduce( ...@@ -2834,37 +3159,37 @@ static YYACTIONTYPE yy_reduce(
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break; break;
case 155: /* columnlist ::= columnlist COMMA column */ case 155: /* columnlist ::= columnlist COMMA column */
{taosArrayPush(yymsp[-2].minor.yy209, &yymsp[0].minor.yy369); yylhsminor.yy209 = yymsp[-2].minor.yy209; } {taosArrayPush(yymsp[-2].minor.yy161, &yymsp[0].minor.yy223); yylhsminor.yy161 = yymsp[-2].minor.yy161; }
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 156: /* columnlist ::= column */ case 156: /* columnlist ::= column */
{yylhsminor.yy209 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy209, &yymsp[0].minor.yy369);} {yylhsminor.yy161 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy161, &yymsp[0].minor.yy223);}
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 157: /* column ::= ids typename */ case 157: /* column ::= ids typename */
{ {
tSetColumnInfo(&yylhsminor.yy369, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy369); tSetColumnInfo(&yylhsminor.yy223, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy223);
} }
yymsp[-1].minor.yy369 = yylhsminor.yy369; yymsp[-1].minor.yy223 = yylhsminor.yy223;
break; break;
case 164: /* tagitem ::= NULL */ case 164: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy54, &yymsp[0].minor.yy0); } { yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy526, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy54 = yylhsminor.yy54; yymsp[0].minor.yy526 = yylhsminor.yy526;
break; break;
case 165: /* tagitem ::= NOW */ case 165: /* tagitem ::= NOW */
{ yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP; tVariantCreateExt(&yylhsminor.yy54, &yymsp[0].minor.yy0, TK_NOW, true);} { yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP; tVariantCreateExt(&yylhsminor.yy526, &yymsp[0].minor.yy0, TK_NOW, true);}
yymsp[0].minor.yy54 = yylhsminor.yy54; yymsp[0].minor.yy526 = yylhsminor.yy526;
break; break;
case 166: /* tagitem ::= NOW PLUS VARIABLE */ case 166: /* tagitem ::= NOW PLUS VARIABLE */
{ {
yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP; yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP;
tVariantCreateExt(&yymsp[-2].minor.yy54, &yymsp[0].minor.yy0, TK_PLUS, true); tVariantCreateExt(&yymsp[-2].minor.yy526, &yymsp[0].minor.yy0, TK_PLUS, true);
} }
break; break;
case 167: /* tagitem ::= NOW MINUS VARIABLE */ case 167: /* tagitem ::= NOW MINUS VARIABLE */
{ {
yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP; yymsp[0].minor.yy0.type = TSDB_DATA_TYPE_TIMESTAMP;
tVariantCreateExt(&yymsp[-2].minor.yy54, &yymsp[0].minor.yy0, TK_MINUS, true); tVariantCreateExt(&yymsp[-2].minor.yy526, &yymsp[0].minor.yy0, TK_MINUS, true);
} }
break; break;
case 168: /* tagitem ::= MINUS INTEGER */ case 168: /* tagitem ::= MINUS INTEGER */
...@@ -2875,56 +3200,56 @@ static YYACTIONTYPE yy_reduce( ...@@ -2875,56 +3200,56 @@ static YYACTIONTYPE yy_reduce(
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type;
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
tVariantCreate(&yylhsminor.yy54, &yymsp[-1].minor.yy0); tVariantCreate(&yylhsminor.yy526, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy54 = yylhsminor.yy54; yymsp[-1].minor.yy526 = yylhsminor.yy526;
break; break;
case 172: /* select ::= SELECT selcollist from where_opt range_option interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */ case 172: /* select ::= SELECT selcollist from where_opt range_option interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
{ {
yylhsminor.yy160 = tSetQuerySqlNode(&yymsp[-14].minor.yy0, yymsp[-13].minor.yy209, yymsp[-12].minor.yy530, yymsp[-11].minor.yy574, yymsp[-4].minor.yy209, yymsp[-2].minor.yy209, &yymsp[-9].minor.yy102, &yymsp[-7].minor.yy115, &yymsp[-6].minor.yy290, &yymsp[-8].minor.yy0, yymsp[-5].minor.yy209, &yymsp[0].minor.yy534, &yymsp[-1].minor.yy534, yymsp[-3].minor.yy574, &yymsp[-10].minor.yy22); yylhsminor.yy276 = tSetQuerySqlNode(&yymsp[-14].minor.yy0, yymsp[-13].minor.yy161, yymsp[-12].minor.yy84, yymsp[-11].minor.yy546, yymsp[-4].minor.yy161, yymsp[-2].minor.yy161, &yymsp[-9].minor.yy300, &yymsp[-7].minor.yy219, &yymsp[-6].minor.yy548, &yymsp[-8].minor.yy0, yymsp[-5].minor.yy161, &yymsp[0].minor.yy394, &yymsp[-1].minor.yy394, yymsp[-3].minor.yy546, &yymsp[-10].minor.yy420);
} }
yymsp[-14].minor.yy160 = yylhsminor.yy160; yymsp[-14].minor.yy276 = yylhsminor.yy276;
break; break;
case 173: /* select ::= LP select RP */ case 173: /* select ::= LP select RP */
{yymsp[-2].minor.yy160 = yymsp[-1].minor.yy160;} {yymsp[-2].minor.yy276 = yymsp[-1].minor.yy276;}
break; break;
case 174: /* union ::= select */ case 174: /* union ::= select */
{ yylhsminor.yy209 = setSubclause(NULL, yymsp[0].minor.yy160); } { yylhsminor.yy161 = setSubclause(NULL, yymsp[0].minor.yy276); }
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 175: /* union ::= union UNION ALL select */ case 175: /* union ::= union UNION ALL select */
{ yylhsminor.yy209 = appendSelectClause(yymsp[-3].minor.yy209, yymsp[0].minor.yy160); } { yylhsminor.yy161 = appendSelectClause(yymsp[-3].minor.yy161, yymsp[0].minor.yy276); }
yymsp[-3].minor.yy209 = yylhsminor.yy209; yymsp[-3].minor.yy161 = yylhsminor.yy161;
break; break;
case 176: /* cmd ::= union */ case 176: /* cmd ::= union */
{ setSqlInfo(pInfo, yymsp[0].minor.yy209, NULL, TSDB_SQL_SELECT); } { setSqlInfo(pInfo, yymsp[0].minor.yy161, NULL, TSDB_SQL_SELECT); }
break; break;
case 177: /* select ::= SELECT selcollist */ case 177: /* select ::= SELECT selcollist */
{ {
yylhsminor.yy160 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy209, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); yylhsminor.yy276 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy161, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
} }
yymsp[-1].minor.yy160 = yylhsminor.yy160; yymsp[-1].minor.yy276 = yylhsminor.yy276;
break; break;
case 178: /* sclp ::= selcollist COMMA */ case 178: /* sclp ::= selcollist COMMA */
{yylhsminor.yy209 = yymsp[-1].minor.yy209;} {yylhsminor.yy161 = yymsp[-1].minor.yy161;}
yymsp[-1].minor.yy209 = yylhsminor.yy209; yymsp[-1].minor.yy161 = yylhsminor.yy161;
break; break;
case 179: /* sclp ::= */ case 179: /* sclp ::= */
case 220: /* orderby_opt ::= */ yytestcase(yyruleno==220); case 220: /* orderby_opt ::= */ yytestcase(yyruleno==220);
{yymsp[1].minor.yy209 = 0;} {yymsp[1].minor.yy161 = 0;}
break; break;
case 180: /* selcollist ::= sclp distinct expr as */ case 180: /* selcollist ::= sclp distinct expr as */
{ {
yylhsminor.yy209 = tSqlExprListAppend(yymsp[-3].minor.yy209, yymsp[-1].minor.yy574, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); yylhsminor.yy161 = tSqlExprListAppend(yymsp[-3].minor.yy161, yymsp[-1].minor.yy546, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
} }
yymsp[-3].minor.yy209 = yylhsminor.yy209; yymsp[-3].minor.yy161 = yylhsminor.yy161;
break; break;
case 181: /* selcollist ::= sclp STAR */ case 181: /* selcollist ::= sclp STAR */
{ {
tSqlExpr *pNode = tSqlExprCreateIdValue(pInfo, NULL, TK_ALL); tSqlExpr *pNode = tSqlExprCreateIdValue(pInfo, NULL, TK_ALL);
yylhsminor.yy209 = tSqlExprListAppend(yymsp[-1].minor.yy209, pNode, 0, 0); yylhsminor.yy161 = tSqlExprListAppend(yymsp[-1].minor.yy161, pNode, 0, 0);
} }
yymsp[-1].minor.yy209 = yylhsminor.yy209; yymsp[-1].minor.yy161 = yylhsminor.yy161;
break; break;
case 182: /* as ::= AS ids */ case 182: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
...@@ -2942,114 +3267,114 @@ static YYACTIONTYPE yy_reduce( ...@@ -2942,114 +3267,114 @@ static YYACTIONTYPE yy_reduce(
break; break;
case 187: /* from ::= FROM tablelist */ case 187: /* from ::= FROM tablelist */
case 188: /* from ::= FROM sub */ yytestcase(yyruleno==188); case 188: /* from ::= FROM sub */ yytestcase(yyruleno==188);
{yymsp[-1].minor.yy530 = yymsp[0].minor.yy530;} {yymsp[-1].minor.yy84 = yymsp[0].minor.yy84;}
break; break;
case 189: /* sub ::= LP union RP */ case 189: /* sub ::= LP union RP */
{yymsp[-2].minor.yy530 = addSubqueryElem(NULL, yymsp[-1].minor.yy209, NULL);} {yymsp[-2].minor.yy84 = addSubqueryElem(NULL, yymsp[-1].minor.yy161, NULL);}
break; break;
case 190: /* sub ::= LP union RP ids */ case 190: /* sub ::= LP union RP ids */
{yymsp[-3].minor.yy530 = addSubqueryElem(NULL, yymsp[-2].minor.yy209, &yymsp[0].minor.yy0);} {yymsp[-3].minor.yy84 = addSubqueryElem(NULL, yymsp[-2].minor.yy161, &yymsp[0].minor.yy0);}
break; break;
case 191: /* sub ::= sub COMMA LP union RP ids */ case 191: /* sub ::= sub COMMA LP union RP ids */
{yylhsminor.yy530 = addSubqueryElem(yymsp[-5].minor.yy530, yymsp[-2].minor.yy209, &yymsp[0].minor.yy0);} {yylhsminor.yy84 = addSubqueryElem(yymsp[-5].minor.yy84, yymsp[-2].minor.yy161, &yymsp[0].minor.yy0);}
yymsp[-5].minor.yy530 = yylhsminor.yy530; yymsp[-5].minor.yy84 = yylhsminor.yy84;
break; break;
case 192: /* tablelist ::= ids cpxName */ case 192: /* tablelist ::= ids cpxName */
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy530 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL); yylhsminor.yy84 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL);
} }
yymsp[-1].minor.yy530 = yylhsminor.yy530; yymsp[-1].minor.yy84 = yylhsminor.yy84;
break; break;
case 193: /* tablelist ::= ids cpxName ids */ case 193: /* tablelist ::= ids cpxName ids */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy530 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); yylhsminor.yy84 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
} }
yymsp[-2].minor.yy530 = yylhsminor.yy530; yymsp[-2].minor.yy84 = yylhsminor.yy84;
break; break;
case 194: /* tablelist ::= tablelist COMMA ids cpxName */ case 194: /* tablelist ::= tablelist COMMA ids cpxName */
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy530 = setTableNameList(yymsp[-3].minor.yy530, &yymsp[-1].minor.yy0, NULL); yylhsminor.yy84 = setTableNameList(yymsp[-3].minor.yy84, &yymsp[-1].minor.yy0, NULL);
} }
yymsp[-3].minor.yy530 = yylhsminor.yy530; yymsp[-3].minor.yy84 = yylhsminor.yy84;
break; break;
case 195: /* tablelist ::= tablelist COMMA ids cpxName ids */ case 195: /* tablelist ::= tablelist COMMA ids cpxName ids */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy530 = setTableNameList(yymsp[-4].minor.yy530, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); yylhsminor.yy84 = setTableNameList(yymsp[-4].minor.yy84, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
} }
yymsp[-4].minor.yy530 = yylhsminor.yy530; yymsp[-4].minor.yy84 = yylhsminor.yy84;
break; break;
case 196: /* tmvar ::= VARIABLE */ case 196: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;} {yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 197: /* timestamp ::= INTEGER */ case 197: /* timestamp ::= INTEGER */
{ yylhsminor.yy574 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_INTEGER);} { yylhsminor.yy546 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 198: /* timestamp ::= MINUS INTEGER */ case 198: /* timestamp ::= MINUS INTEGER */
case 199: /* timestamp ::= PLUS INTEGER */ yytestcase(yyruleno==199); case 199: /* timestamp ::= PLUS INTEGER */ yytestcase(yyruleno==199);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy574 = tSqlExprCreateTimestamp(&yymsp[-1].minor.yy0, TK_INTEGER);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy546 = tSqlExprCreateTimestamp(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy574 = yylhsminor.yy574; yymsp[-1].minor.yy546 = yylhsminor.yy546;
break; break;
case 200: /* timestamp ::= STRING */ case 200: /* timestamp ::= STRING */
{ yylhsminor.yy574 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_STRING);} { yylhsminor.yy546 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 201: /* timestamp ::= NOW */ case 201: /* timestamp ::= NOW */
{ yylhsminor.yy574 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_NOW); } { yylhsminor.yy546 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 202: /* timestamp ::= NOW PLUS VARIABLE */ case 202: /* timestamp ::= NOW PLUS VARIABLE */
{yymsp[-2].minor.yy574 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_PLUS); } {yymsp[-2].minor.yy546 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_PLUS); }
break; break;
case 203: /* timestamp ::= NOW MINUS VARIABLE */ case 203: /* timestamp ::= NOW MINUS VARIABLE */
{yymsp[-2].minor.yy574 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_MINUS); } {yymsp[-2].minor.yy546 = tSqlExprCreateTimestamp(&yymsp[0].minor.yy0, TK_MINUS); }
break; break;
case 204: /* range_option ::= */ case 204: /* range_option ::= */
{yymsp[1].minor.yy22.start = 0; yymsp[1].minor.yy22.end = 0;} {yymsp[1].minor.yy420.start = 0; yymsp[1].minor.yy420.end = 0;}
break; break;
case 205: /* range_option ::= RANGE LP timestamp COMMA timestamp RP */ case 205: /* range_option ::= RANGE LP timestamp COMMA timestamp RP */
{yymsp[-5].minor.yy22.start = yymsp[-3].minor.yy574; yymsp[-5].minor.yy22.end = yymsp[-1].minor.yy574;} {yymsp[-5].minor.yy420.start = yymsp[-3].minor.yy546; yymsp[-5].minor.yy420.end = yymsp[-1].minor.yy546;}
break; break;
case 206: /* interval_option ::= intervalKey LP tmvar RP */ case 206: /* interval_option ::= intervalKey LP tmvar RP */
{yylhsminor.yy102.interval = yymsp[-1].minor.yy0; yylhsminor.yy102.offset.n = 0; yylhsminor.yy102.token = yymsp[-3].minor.yy380;} {yylhsminor.yy300.interval = yymsp[-1].minor.yy0; yylhsminor.yy300.offset.n = 0; yylhsminor.yy300.token = yymsp[-3].minor.yy520;}
yymsp[-3].minor.yy102 = yylhsminor.yy102; yymsp[-3].minor.yy300 = yylhsminor.yy300;
break; break;
case 207: /* interval_option ::= intervalKey LP tmvar COMMA tmvar RP */ case 207: /* interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
{yylhsminor.yy102.interval = yymsp[-3].minor.yy0; yylhsminor.yy102.offset = yymsp[-1].minor.yy0; yylhsminor.yy102.token = yymsp[-5].minor.yy380;} {yylhsminor.yy300.interval = yymsp[-3].minor.yy0; yylhsminor.yy300.offset = yymsp[-1].minor.yy0; yylhsminor.yy300.token = yymsp[-5].minor.yy520;}
yymsp[-5].minor.yy102 = yylhsminor.yy102; yymsp[-5].minor.yy300 = yylhsminor.yy300;
break; break;
case 208: /* interval_option ::= */ case 208: /* interval_option ::= */
{memset(&yymsp[1].minor.yy102, 0, sizeof(yymsp[1].minor.yy102));} {memset(&yymsp[1].minor.yy300, 0, sizeof(yymsp[1].minor.yy300));}
break; break;
case 209: /* intervalKey ::= INTERVAL */ case 209: /* intervalKey ::= INTERVAL */
{yymsp[0].minor.yy380 = TK_INTERVAL;} {yymsp[0].minor.yy520 = TK_INTERVAL;}
break; break;
case 210: /* intervalKey ::= EVERY */ case 210: /* intervalKey ::= EVERY */
{yymsp[0].minor.yy380 = TK_EVERY; } {yymsp[0].minor.yy520 = TK_EVERY; }
break; break;
case 211: /* session_option ::= */ case 211: /* session_option ::= */
{yymsp[1].minor.yy115.col.n = 0; yymsp[1].minor.yy115.gap.n = 0;} {yymsp[1].minor.yy219.col.n = 0; yymsp[1].minor.yy219.gap.n = 0;}
break; break;
case 212: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ case 212: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
yymsp[-6].minor.yy115.col = yymsp[-4].minor.yy0; yymsp[-6].minor.yy219.col = yymsp[-4].minor.yy0;
yymsp[-6].minor.yy115.gap = yymsp[-1].minor.yy0; yymsp[-6].minor.yy219.gap = yymsp[-1].minor.yy0;
} }
break; break;
case 213: /* windowstate_option ::= */ case 213: /* windowstate_option ::= */
{ yymsp[1].minor.yy290.col.n = 0; yymsp[1].minor.yy290.col.z = NULL;} { yymsp[1].minor.yy548.col.n = 0; yymsp[1].minor.yy548.col.z = NULL;}
break; break;
case 214: /* windowstate_option ::= STATE_WINDOW LP ids RP */ case 214: /* windowstate_option ::= STATE_WINDOW LP ids RP */
{ yymsp[-3].minor.yy290.col = yymsp[-1].minor.yy0; } { yymsp[-3].minor.yy548.col = yymsp[-1].minor.yy0; }
break; break;
case 215: /* fill_opt ::= */ case 215: /* fill_opt ::= */
{ yymsp[1].minor.yy209 = 0; } { yymsp[1].minor.yy161 = 0; }
break; break;
case 216: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ case 216: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ {
...@@ -3057,14 +3382,14 @@ static YYACTIONTYPE yy_reduce( ...@@ -3057,14 +3382,14 @@ static YYACTIONTYPE yy_reduce(
toTSDBType(yymsp[-3].minor.yy0.type); toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0); tVariantCreate(&A, &yymsp[-3].minor.yy0);
tVariantListInsert(yymsp[-1].minor.yy209, &A, -1, 0); tVariantListInsert(yymsp[-1].minor.yy161, &A, -1, 0);
yymsp[-5].minor.yy209 = yymsp[-1].minor.yy209; yymsp[-5].minor.yy161 = yymsp[-1].minor.yy161;
} }
break; break;
case 217: /* fill_opt ::= FILL LP ID RP */ case 217: /* fill_opt ::= FILL LP ID RP */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-3].minor.yy209 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1, true); yymsp[-3].minor.yy161 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1, true);
} }
break; break;
case 218: /* sliding_opt ::= SLIDING LP tmvar RP */ case 218: /* sliding_opt ::= SLIDING LP tmvar RP */
...@@ -3074,309 +3399,313 @@ static YYACTIONTYPE yy_reduce( ...@@ -3074,309 +3399,313 @@ static YYACTIONTYPE yy_reduce(
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; } {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break; break;
case 221: /* orderby_opt ::= ORDER BY sortlist */ case 221: /* orderby_opt ::= ORDER BY sortlist */
{yymsp[-2].minor.yy209 = yymsp[0].minor.yy209;} {yymsp[-2].minor.yy161 = yymsp[0].minor.yy161;}
break; break;
case 222: /* sortlist ::= sortlist COMMA item sortorder */ case 222: /* sortlist ::= sortlist COMMA item sortorder */
{ {
yylhsminor.yy209 = commonItemAppend(yymsp[-3].minor.yy209, &yymsp[-1].minor.yy54, NULL, false, yymsp[0].minor.yy332); yylhsminor.yy161 = commonItemAppend(yymsp[-3].minor.yy161, &yymsp[-1].minor.yy526, NULL, false, yymsp[0].minor.yy452);
} }
yymsp[-3].minor.yy209 = yylhsminor.yy209; yymsp[-3].minor.yy161 = yylhsminor.yy161;
break; break;
case 223: /* sortlist ::= sortlist COMMA arrow sortorder */ case 223: /* sortlist ::= sortlist COMMA arrow sortorder */
{ {
yylhsminor.yy209 = commonItemAppend(yymsp[-3].minor.yy209, NULL, yymsp[-1].minor.yy574, true, yymsp[0].minor.yy332); yylhsminor.yy161 = commonItemAppend(yymsp[-3].minor.yy161, NULL, yymsp[-1].minor.yy546, true, yymsp[0].minor.yy452);
} }
yymsp[-3].minor.yy209 = yylhsminor.yy209; yymsp[-3].minor.yy161 = yylhsminor.yy161;
break; break;
case 224: /* sortlist ::= item sortorder */ case 224: /* sortlist ::= item sortorder */
{ {
yylhsminor.yy209 = commonItemAppend(NULL, &yymsp[-1].minor.yy54, NULL, false, yymsp[0].minor.yy332); yylhsminor.yy161 = commonItemAppend(NULL, &yymsp[-1].minor.yy526, NULL, false, yymsp[0].minor.yy452);
} }
yymsp[-1].minor.yy209 = yylhsminor.yy209; yymsp[-1].minor.yy161 = yylhsminor.yy161;
break; break;
case 225: /* sortlist ::= arrow sortorder */ case 225: /* sortlist ::= arrow sortorder */
{ {
yylhsminor.yy209 = commonItemAppend(NULL, NULL, yymsp[-1].minor.yy574, true, yymsp[0].minor.yy332); yylhsminor.yy161 = commonItemAppend(NULL, NULL, yymsp[-1].minor.yy546, true, yymsp[0].minor.yy452);
} }
yymsp[-1].minor.yy209 = yylhsminor.yy209; yymsp[-1].minor.yy161 = yylhsminor.yy161;
break; break;
case 226: /* item ::= ID */ case 226: /* item ::= ID */
{ {
toTSDBType(yymsp[0].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type);
tVariantCreate(&yylhsminor.yy54, &yymsp[0].minor.yy0); tVariantCreate(&yylhsminor.yy526, &yymsp[0].minor.yy0);
} }
yymsp[0].minor.yy54 = yylhsminor.yy54; yymsp[0].minor.yy526 = yylhsminor.yy526;
break; break;
case 227: /* item ::= ID DOT ID */ case 227: /* item ::= ID DOT ID */
{ {
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n);
tVariantCreate(&yylhsminor.yy54, &yymsp[-2].minor.yy0); tVariantCreate(&yylhsminor.yy526, &yymsp[-2].minor.yy0);
} }
yymsp[-2].minor.yy54 = yylhsminor.yy54; yymsp[-2].minor.yy526 = yylhsminor.yy526;
break; break;
case 228: /* sortorder ::= ASC */ case 228: /* sortorder ::= ASC */
{ yymsp[0].minor.yy332 = TSDB_ORDER_ASC; } { yymsp[0].minor.yy452 = TSDB_ORDER_ASC; }
break; break;
case 229: /* sortorder ::= DESC */ case 229: /* sortorder ::= DESC */
{ yymsp[0].minor.yy332 = TSDB_ORDER_DESC;} { yymsp[0].minor.yy452 = TSDB_ORDER_DESC;}
break; break;
case 230: /* sortorder ::= */ case 230: /* sortorder ::= */
{ yymsp[1].minor.yy332 = TSDB_ORDER_ASC; } { yymsp[1].minor.yy452 = TSDB_ORDER_ASC; }
break; break;
case 231: /* groupby_opt ::= */ case 231: /* groupby_opt ::= */
{ yymsp[1].minor.yy209 = 0;} { yymsp[1].minor.yy161 = 0;}
break; break;
case 232: /* groupby_opt ::= GROUP BY grouplist */ case 232: /* groupby_opt ::= GROUP BY grouplist */
{ yymsp[-2].minor.yy209 = yymsp[0].minor.yy209;} { yymsp[-2].minor.yy161 = yymsp[0].minor.yy161;}
break; break;
case 233: /* grouplist ::= grouplist COMMA item */ case 233: /* grouplist ::= grouplist COMMA item */
{ {
yylhsminor.yy209 = commonItemAppend(yymsp[-2].minor.yy209, &yymsp[0].minor.yy54, NULL, false, -1); yylhsminor.yy161 = commonItemAppend(yymsp[-2].minor.yy161, &yymsp[0].minor.yy526, NULL, false, -1);
} }
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 234: /* grouplist ::= grouplist COMMA arrow */ case 234: /* grouplist ::= grouplist COMMA arrow */
{ {
yylhsminor.yy209 = commonItemAppend(yymsp[-2].minor.yy209, NULL, yymsp[0].minor.yy574, true, -1); yylhsminor.yy161 = commonItemAppend(yymsp[-2].minor.yy161, NULL, yymsp[0].minor.yy546, true, -1);
} }
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 235: /* grouplist ::= item */ case 235: /* grouplist ::= item */
{ {
yylhsminor.yy209 = commonItemAppend(NULL, &yymsp[0].minor.yy54, NULL, false, -1); yylhsminor.yy161 = commonItemAppend(NULL, &yymsp[0].minor.yy526, NULL, false, -1);
} }
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 236: /* grouplist ::= arrow */ case 236: /* grouplist ::= arrow */
{ {
yylhsminor.yy209 = commonItemAppend(NULL, NULL, yymsp[0].minor.yy574, true, -1); yylhsminor.yy161 = commonItemAppend(NULL, NULL, yymsp[0].minor.yy546, true, -1);
} }
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 237: /* having_opt ::= */ case 237: /* having_opt ::= */
case 247: /* where_opt ::= */ yytestcase(yyruleno==247); case 247: /* where_opt ::= */ yytestcase(yyruleno==247);
case 297: /* expritem ::= */ yytestcase(yyruleno==297); case 298: /* expritem ::= */ yytestcase(yyruleno==298);
{yymsp[1].minor.yy574 = 0;} {yymsp[1].minor.yy546 = 0;}
break; break;
case 238: /* having_opt ::= HAVING expr */ case 238: /* having_opt ::= HAVING expr */
case 248: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==248); case 248: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==248);
{yymsp[-1].minor.yy574 = yymsp[0].minor.yy574;} {yymsp[-1].minor.yy546 = yymsp[0].minor.yy546;}
break; break;
case 239: /* limit_opt ::= */ case 239: /* limit_opt ::= */
case 243: /* slimit_opt ::= */ yytestcase(yyruleno==243); case 243: /* slimit_opt ::= */ yytestcase(yyruleno==243);
{yymsp[1].minor.yy534.limit = -1; yymsp[1].minor.yy534.offset = 0;} {yymsp[1].minor.yy394.limit = -1; yymsp[1].minor.yy394.offset = 0;}
break; break;
case 240: /* limit_opt ::= LIMIT signed */ case 240: /* limit_opt ::= LIMIT signed */
case 244: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==244); case 244: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==244);
{yymsp[-1].minor.yy534.limit = yymsp[0].minor.yy55; yymsp[-1].minor.yy534.offset = 0;} {yymsp[-1].minor.yy394.limit = yymsp[0].minor.yy369; yymsp[-1].minor.yy394.offset = 0;}
break; break;
case 241: /* limit_opt ::= LIMIT signed OFFSET signed */ case 241: /* limit_opt ::= LIMIT signed OFFSET signed */
{ yymsp[-3].minor.yy534.limit = yymsp[-2].minor.yy55; yymsp[-3].minor.yy534.offset = yymsp[0].minor.yy55;} { yymsp[-3].minor.yy394.limit = yymsp[-2].minor.yy369; yymsp[-3].minor.yy394.offset = yymsp[0].minor.yy369;}
break; break;
case 242: /* limit_opt ::= LIMIT signed COMMA signed */ case 242: /* limit_opt ::= LIMIT signed COMMA signed */
{ yymsp[-3].minor.yy534.limit = yymsp[0].minor.yy55; yymsp[-3].minor.yy534.offset = yymsp[-2].minor.yy55;} { yymsp[-3].minor.yy394.limit = yymsp[0].minor.yy369; yymsp[-3].minor.yy394.offset = yymsp[-2].minor.yy369;}
break; break;
case 245: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ case 245: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
{yymsp[-3].minor.yy534.limit = yymsp[-2].minor.yy55; yymsp[-3].minor.yy534.offset = yymsp[0].minor.yy55;} {yymsp[-3].minor.yy394.limit = yymsp[-2].minor.yy369; yymsp[-3].minor.yy394.offset = yymsp[0].minor.yy369;}
break; break;
case 246: /* slimit_opt ::= SLIMIT signed COMMA signed */ case 246: /* slimit_opt ::= SLIMIT signed COMMA signed */
{yymsp[-3].minor.yy534.limit = yymsp[0].minor.yy55; yymsp[-3].minor.yy534.offset = yymsp[-2].minor.yy55;} {yymsp[-3].minor.yy394.limit = yymsp[0].minor.yy369; yymsp[-3].minor.yy394.offset = yymsp[-2].minor.yy369;}
break; break;
case 249: /* expr ::= LP expr RP */ case 249: /* expr ::= LP expr RP */
{yylhsminor.yy574 = yymsp[-1].minor.yy574; yylhsminor.yy574->exprToken.z = yymsp[-2].minor.yy0.z; yylhsminor.yy574->exprToken.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);} {yylhsminor.yy546 = yymsp[-1].minor.yy546; yylhsminor.yy546->exprToken.z = yymsp[-2].minor.yy0.z; yylhsminor.yy546->exprToken.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 250: /* expr ::= ID */ case 250: /* expr ::= ID */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_ID);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 251: /* expr ::= ID DOT ID */ case 251: /* expr ::= ID DOT ID */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID);} { yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 252: /* expr ::= ID DOT STAR */ case 252: /* expr ::= ID DOT STAR */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ALL);} { yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 253: /* expr ::= INTEGER */ case 253: /* expr ::= INTEGER */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_INTEGER);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 254: /* expr ::= MINUS INTEGER */ case 254: /* expr ::= MINUS INTEGER */
case 255: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==255); case 255: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==255);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_INTEGER);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy574 = yylhsminor.yy574; yymsp[-1].minor.yy546 = yylhsminor.yy546;
break; break;
case 256: /* expr ::= FLOAT */ case 256: /* expr ::= FLOAT */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_FLOAT);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 257: /* expr ::= MINUS FLOAT */ case 257: /* expr ::= MINUS FLOAT */
case 258: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==258); case 258: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==258);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_FLOAT);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy574 = yylhsminor.yy574; yymsp[-1].minor.yy546 = yylhsminor.yy546;
break; break;
case 259: /* expr ::= STRING */ case 259: /* expr ::= STRING */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 260: /* expr ::= NOW */ case 260: /* expr ::= NOW */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_NOW); } { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break;
case 261: /* expr ::= TODAY */
{ yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_TODAY); }
yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 261: /* expr ::= VARIABLE */ case 262: /* expr ::= VARIABLE */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_VARIABLE);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 262: /* expr ::= PLUS VARIABLE */ case 263: /* expr ::= PLUS VARIABLE */
case 263: /* expr ::= MINUS VARIABLE */ yytestcase(yyruleno==263); case 264: /* expr ::= MINUS VARIABLE */ yytestcase(yyruleno==264);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_VARIABLE; yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_VARIABLE);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_VARIABLE; yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[-1].minor.yy0, TK_VARIABLE);}
yymsp[-1].minor.yy574 = yylhsminor.yy574; yymsp[-1].minor.yy546 = yylhsminor.yy546;
break; break;
case 264: /* expr ::= BOOL */ case 265: /* expr ::= BOOL */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_BOOL);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 265: /* expr ::= NULL */ case 266: /* expr ::= NULL */
{ yylhsminor.yy574 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_NULL);} { yylhsminor.yy546 = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_NULL);}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 266: /* expr ::= ID LP exprlist RP */ case 267: /* expr ::= ID LP exprlist RP */
{ tStrTokenAppend(pInfo->funcs, &yymsp[-3].minor.yy0); yylhsminor.yy574 = tSqlExprCreateFunction(yymsp[-1].minor.yy209, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } { tStrTokenAppend(pInfo->funcs, &yymsp[-3].minor.yy0); yylhsminor.yy546 = tSqlExprCreateFunction(yymsp[-1].minor.yy161, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy574 = yylhsminor.yy574; yymsp[-3].minor.yy546 = yylhsminor.yy546;
break; break;
case 267: /* expr ::= ID LP STAR RP */ case 268: /* expr ::= ID LP STAR RP */
{ tStrTokenAppend(pInfo->funcs, &yymsp[-3].minor.yy0); yylhsminor.yy574 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } { tStrTokenAppend(pInfo->funcs, &yymsp[-3].minor.yy0); yylhsminor.yy546 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy574 = yylhsminor.yy574; yymsp[-3].minor.yy546 = yylhsminor.yy546;
break; break;
case 268: /* expr ::= ID LP expr AS typename RP */ case 269: /* expr ::= ID LP expr AS typename RP */
{ tStrTokenAppend(pInfo->funcs, &yymsp[-5].minor.yy0); yylhsminor.yy574 = tSqlExprCreateFuncWithParams(pInfo, yymsp[-3].minor.yy574, &yymsp[-1].minor.yy369, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, yymsp[-5].minor.yy0.type); } { tStrTokenAppend(pInfo->funcs, &yymsp[-5].minor.yy0); yylhsminor.yy546 = tSqlExprCreateFuncWithParams(pInfo, yymsp[-3].minor.yy546, &yymsp[-1].minor.yy223, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, yymsp[-5].minor.yy0.type); }
yymsp[-5].minor.yy574 = yylhsminor.yy574; yymsp[-5].minor.yy546 = yylhsminor.yy546;
break; break;
case 269: /* expr ::= expr IS NULL */ case 270: /* expr ::= expr IS NULL */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, NULL, TK_ISNULL);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, NULL, TK_ISNULL);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 270: /* expr ::= expr IS NOT NULL */ case 271: /* expr ::= expr IS NOT NULL */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-3].minor.yy574, NULL, TK_NOTNULL);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-3].minor.yy546, NULL, TK_NOTNULL);}
yymsp[-3].minor.yy574 = yylhsminor.yy574; yymsp[-3].minor.yy546 = yylhsminor.yy546;
break; break;
case 271: /* expr ::= expr LT expr */ case 272: /* expr ::= expr LT expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_LT);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_LT);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 272: /* expr ::= expr GT expr */ case 273: /* expr ::= expr GT expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_GT);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_GT);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 273: /* expr ::= expr LE expr */ case 274: /* expr ::= expr LE expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_LE);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_LE);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 274: /* expr ::= expr GE expr */ case 275: /* expr ::= expr GE expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_GE);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_GE);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 275: /* expr ::= expr NE expr */ case 276: /* expr ::= expr NE expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_NE);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_NE);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 276: /* expr ::= expr EQ expr */ case 277: /* expr ::= expr EQ expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_EQ);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_EQ);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 277: /* expr ::= expr BETWEEN expr AND expr */ case 278: /* expr ::= expr BETWEEN expr AND expr */
{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy574); yylhsminor.yy574 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy574, yymsp[-2].minor.yy574, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy574, TK_LE), TK_AND);} { tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy546); yylhsminor.yy546 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy546, yymsp[-2].minor.yy546, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy546, TK_LE), TK_AND);}
yymsp[-4].minor.yy574 = yylhsminor.yy574; yymsp[-4].minor.yy546 = yylhsminor.yy546;
break; break;
case 278: /* expr ::= expr AND expr */ case 279: /* expr ::= expr AND expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_AND);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_AND);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 279: /* expr ::= expr OR expr */ case 280: /* expr ::= expr OR expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_OR); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_OR); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 280: /* expr ::= expr PLUS expr */ case 281: /* expr ::= expr PLUS expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_PLUS); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_PLUS); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 281: /* expr ::= expr MINUS expr */ case 282: /* expr ::= expr MINUS expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_MINUS); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_MINUS); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 282: /* expr ::= expr STAR expr */ case 283: /* expr ::= expr STAR expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_STAR); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_STAR); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 283: /* expr ::= expr SLASH expr */ case 284: /* expr ::= expr SLASH expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_DIVIDE);} {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_DIVIDE);}
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 284: /* expr ::= expr REM expr */ case 285: /* expr ::= expr REM expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_REM); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_REM); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 285: /* expr ::= expr LIKE expr */ case 286: /* expr ::= expr LIKE expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_LIKE); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_LIKE); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 286: /* expr ::= expr MATCH expr */ case 287: /* expr ::= expr MATCH expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_MATCH); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_MATCH); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 287: /* expr ::= expr NMATCH expr */ case 288: /* expr ::= expr NMATCH expr */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-2].minor.yy574, yymsp[0].minor.yy574, TK_NMATCH); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-2].minor.yy546, yymsp[0].minor.yy546, TK_NMATCH); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 288: /* expr ::= ID CONTAINS STRING */ case 289: /* expr ::= ID CONTAINS STRING */
{ tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy574 = tSqlExprCreate(S, M, TK_CONTAINS); } { tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy546 = tSqlExprCreate(S, M, TK_CONTAINS); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 289: /* expr ::= ID DOT ID CONTAINS STRING */ case 290: /* expr ::= ID DOT ID CONTAINS STRING */
{ yymsp[-4].minor.yy0.n += (1+yymsp[-2].minor.yy0.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-4].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy574 = tSqlExprCreate(S, M, TK_CONTAINS); } { yymsp[-4].minor.yy0.n += (1+yymsp[-2].minor.yy0.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-4].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy546 = tSqlExprCreate(S, M, TK_CONTAINS); }
yymsp[-4].minor.yy574 = yylhsminor.yy574; yymsp[-4].minor.yy546 = yylhsminor.yy546;
break; break;
case 290: /* arrow ::= ID ARROW STRING */ case 291: /* arrow ::= ID ARROW STRING */
{tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy574 = tSqlExprCreate(S, M, TK_ARROW); } {tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-2].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy546 = tSqlExprCreate(S, M, TK_ARROW); }
yymsp[-2].minor.yy574 = yylhsminor.yy574; yymsp[-2].minor.yy546 = yylhsminor.yy546;
break; break;
case 291: /* arrow ::= ID DOT ID ARROW STRING */ case 292: /* arrow ::= ID DOT ID ARROW STRING */
{yymsp[-4].minor.yy0.n += (1+yymsp[-2].minor.yy0.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-4].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy574 = tSqlExprCreate(S, M, TK_ARROW); } {yymsp[-4].minor.yy0.n += (1+yymsp[-2].minor.yy0.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &yymsp[-4].minor.yy0, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &yymsp[0].minor.yy0, TK_STRING); yylhsminor.yy546 = tSqlExprCreate(S, M, TK_ARROW); }
yymsp[-4].minor.yy574 = yylhsminor.yy574; yymsp[-4].minor.yy546 = yylhsminor.yy546;
break; break;
case 292: /* expr ::= arrow */ case 293: /* expr ::= arrow */
case 296: /* expritem ::= expr */ yytestcase(yyruleno==296); case 297: /* expritem ::= expr */ yytestcase(yyruleno==297);
{yylhsminor.yy574 = yymsp[0].minor.yy574;} {yylhsminor.yy546 = yymsp[0].minor.yy546;}
yymsp[0].minor.yy574 = yylhsminor.yy574; yymsp[0].minor.yy546 = yylhsminor.yy546;
break; break;
case 293: /* expr ::= expr IN LP exprlist RP */ case 294: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy574 = tSqlExprCreate(yymsp[-4].minor.yy574, (tSqlExpr*)yymsp[-1].minor.yy209, TK_IN); } {yylhsminor.yy546 = tSqlExprCreate(yymsp[-4].minor.yy546, (tSqlExpr*)yymsp[-1].minor.yy161, TK_IN); }
yymsp[-4].minor.yy574 = yylhsminor.yy574; yymsp[-4].minor.yy546 = yylhsminor.yy546;
break; break;
case 294: /* exprlist ::= exprlist COMMA expritem */ case 295: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy209 = tSqlExprListAppend(yymsp[-2].minor.yy209,yymsp[0].minor.yy574,0, 0);} {yylhsminor.yy161 = tSqlExprListAppend(yymsp[-2].minor.yy161,yymsp[0].minor.yy546,0, 0);}
yymsp[-2].minor.yy209 = yylhsminor.yy209; yymsp[-2].minor.yy161 = yylhsminor.yy161;
break; break;
case 295: /* exprlist ::= expritem */ case 296: /* exprlist ::= expritem */
{yylhsminor.yy209 = tSqlExprListAppend(0,yymsp[0].minor.yy574,0, 0);} {yylhsminor.yy161 = tSqlExprListAppend(0,yymsp[0].minor.yy546,0, 0);}
yymsp[0].minor.yy209 = yylhsminor.yy209; yymsp[0].minor.yy161 = yylhsminor.yy161;
break; break;
case 298: /* cmd ::= RESET QUERY CACHE */ case 299: /* cmd ::= RESET QUERY CACHE */
{ setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break; break;
case 299: /* cmd ::= SYNCDB ids REPLICA */ case 300: /* cmd ::= SYNCDB ids REPLICA */
{ setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &yymsp[-1].minor.yy0);} { setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &yymsp[-1].minor.yy0);}
break; break;
case 300: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ case 301: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 301: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ case 302: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3387,21 +3716,21 @@ static YYACTIONTYPE yy_reduce( ...@@ -3387,21 +3716,21 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 302: /* cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */ case 303: /* cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 303: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ case 304: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 304: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ case 305: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3412,7 +3741,7 @@ static YYACTIONTYPE yy_reduce( ...@@ -3412,7 +3741,7 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 305: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ case 306: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -3426,33 +3755,33 @@ static YYACTIONTYPE yy_reduce( ...@@ -3426,33 +3755,33 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 306: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ case 307: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ {
yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1, false); SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1, false);
A = tVariantListAppend(A, &yymsp[0].minor.yy54, -1); A = tVariantListAppend(A, &yymsp[0].minor.yy526, -1);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 307: /* cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */ case 308: /* cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 308: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ case 309: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 309: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ case 310: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3463,21 +3792,21 @@ static YYACTIONTYPE yy_reduce( ...@@ -3463,21 +3792,21 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 310: /* cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */ case 311: /* cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, TSDB_SUPER_TABLE); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 311: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ case 312: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 312: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ case 313: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3488,7 +3817,7 @@ static YYACTIONTYPE yy_reduce( ...@@ -3488,7 +3817,7 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 313: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ case 314: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -3502,41 +3831,41 @@ static YYACTIONTYPE yy_reduce( ...@@ -3502,41 +3831,41 @@ static YYACTIONTYPE yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 314: /* cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */ case 315: /* cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
{ {
yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1, false); SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1, false);
A = tVariantListAppend(A, &yymsp[0].minor.yy54, -1); A = tVariantListAppend(A, &yymsp[0].minor.yy526, -1);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, TSDB_SUPER_TABLE); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 315: /* cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */ case 316: /* cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy209, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, TSDB_SUPER_TABLE); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy161, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 316: /* cmd ::= KILL CONNECTION INTEGER */ case 317: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} {setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break; break;
case 317: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ case 318: /* 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);} {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; break;
case 318: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ case 319: /* 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);} {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; break;
default: default:
break; break;
/********** End reduce actions ************************************************/ /********** End reduce actions ************************************************/
}; };
assert( yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) ); assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
yygoto = yyRuleInfo[yyruleno].lhs; yygoto = yyRuleInfoLhs[yyruleno];
yysize = yyRuleInfo[yyruleno].nrhs; yysize = yyRuleInfoNRhs[yyruleno];
yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto); yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto);
/* There are no SHIFTREDUCE actions on nonterminals because the table /* There are no SHIFTREDUCE actions on nonterminals because the table
...@@ -3838,11 +4167,10 @@ void Parse( ...@@ -3838,11 +4167,10 @@ void Parse(
*/ */
int ParseFallback(int iToken){ int ParseFallback(int iToken){
#ifdef YYFALLBACK #ifdef YYFALLBACK
if( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) ){ assert( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) );
return yyFallback[iToken]; return yyFallback[iToken];
}
#else #else
(void)iToken; (void)iToken;
#endif
return 0; return 0;
#endif
} }
...@@ -159,6 +159,7 @@ static SKeyword keywordTable[] = { ...@@ -159,6 +159,7 @@ static SKeyword keywordTable[] = {
{"SOFFSET", TK_SOFFSET}, {"SOFFSET", TK_SOFFSET},
{"WHERE", TK_WHERE}, {"WHERE", TK_WHERE},
{"NOW", TK_NOW}, {"NOW", TK_NOW},
{"TODAY", TK_TODAY},
{"INSERT", TK_INSERT}, {"INSERT", TK_INSERT},
{"INTO", TK_INTO}, {"INTO", TK_INTO},
{"VALUES", TK_VALUES}, {"VALUES", TK_VALUES},
...@@ -591,6 +592,7 @@ uint32_t tGetToken(char* z, uint32_t* tokenId) { ...@@ -591,6 +592,7 @@ uint32_t tGetToken(char* z, uint32_t* tokenId) {
for (i = 1; ((z[i] & 0x80) == 0) && isIdChar[(uint8_t) z[i]]; i++) { for (i = 1; ((z[i] & 0x80) == 0) && isIdChar[(uint8_t) z[i]]; i++) {
} }
*tokenId = tKeywordCode(z, i); *tokenId = tKeywordCode(z, i);
return i; return i;
} }
} }
...@@ -667,6 +669,12 @@ SStrToken tStrGetToken(char* str, int32_t* i, bool isPrevOptr) { ...@@ -667,6 +669,12 @@ SStrToken tStrGetToken(char* str, int32_t* i, bool isPrevOptr) {
#endif #endif
} }
//for now(),today() function used in insert clause
if ((t0.type == TK_NOW || t0.type == TK_TODAY) &&
str[*i + t0.n] == '(' && str[*i + t0.n + 1] == ')') {
t0.n += 2;
}
if (t0.type == TK_SEMI) { if (t0.type == TK_SEMI) {
t0.n = 0; t0.n = 0;
return t0; return t0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册