Merge pull request #5440 from taosdata/feature/qrefactor
[td-3294]fix bug found by regression test.
This commit is contained in:
commit
a838ce83e8
|
@ -1360,7 +1360,7 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SSqlInfo SQLInfo = qSQLParse(pSql->sqlstr);
|
SSqlInfo SQLInfo = qSqlParse(pSql->sqlstr);
|
||||||
ret = tscToSQLCmd(pSql, &SQLInfo);
|
ret = tscToSQLCmd(pSql, &SQLInfo);
|
||||||
if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->parseRetry == 0 && SQLInfo.type == TSDB_SQL_NULL) {
|
if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->parseRetry == 0 && SQLInfo.type == TSDB_SQL_NULL) {
|
||||||
tscResetSqlCmd(pCmd, true);
|
tscResetSqlCmd(pCmd, true);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1350,7 +1350,7 @@ int tscEstimateCreateTableMsgLength(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
SSqlCmd *pCmd = &(pSql->cmd);
|
SSqlCmd *pCmd = &(pSql->cmd);
|
||||||
int32_t size = minMsgSize() + sizeof(SCMCreateTableMsg) + sizeof(SCreateTableMsg);
|
int32_t size = minMsgSize() + sizeof(SCMCreateTableMsg) + sizeof(SCreateTableMsg);
|
||||||
|
|
||||||
SCreateTableSQL *pCreateTableInfo = pInfo->pCreateTableInfo;
|
SCreateTableSql *pCreateTableInfo = pInfo->pCreateTableInfo;
|
||||||
if (pCreateTableInfo->type == TSQL_CREATE_TABLE_FROM_STABLE) {
|
if (pCreateTableInfo->type == TSQL_CREATE_TABLE_FROM_STABLE) {
|
||||||
int32_t numOfTables = (int32_t)taosArrayGetSize(pInfo->pCreateTableInfo->childTableInfo);
|
int32_t numOfTables = (int32_t)taosArrayGetSize(pInfo->pCreateTableInfo->childTableInfo);
|
||||||
size += numOfTables * (sizeof(SCreateTableMsg) + TSDB_MAX_TAGS_LEN);
|
size += numOfTables * (sizeof(SCreateTableMsg) + TSDB_MAX_TAGS_LEN);
|
||||||
|
@ -1359,7 +1359,7 @@ int tscEstimateCreateTableMsgLength(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCreateTableInfo->pSelect != NULL) {
|
if (pCreateTableInfo->pSelect != NULL) {
|
||||||
size += (pCreateTableInfo->pSelect->selectToken.n + 1);
|
size += (pCreateTableInfo->pSelect->sqlstr.n + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return size + TSDB_EXTRA_PAYLOAD_SIZE;
|
return size + TSDB_EXTRA_PAYLOAD_SIZE;
|
||||||
|
@ -1417,7 +1417,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
int32_t code = tNameExtractFullName(&pTableMetaInfo->name, pCreateMsg->tableName);
|
int32_t code = tNameExtractFullName(&pTableMetaInfo->name, pCreateMsg->tableName);
|
||||||
assert(code == 0);
|
assert(code == 0);
|
||||||
|
|
||||||
SCreateTableSQL *pCreateTable = pInfo->pCreateTableInfo;
|
SCreateTableSql *pCreateTable = pInfo->pCreateTableInfo;
|
||||||
|
|
||||||
pCreateMsg->igExists = pCreateTable->existCheck ? 1 : 0;
|
pCreateMsg->igExists = pCreateTable->existCheck ? 1 : 0;
|
||||||
pCreateMsg->numOfColumns = htons(pCmd->numOfCols);
|
pCreateMsg->numOfColumns = htons(pCmd->numOfCols);
|
||||||
|
@ -1440,11 +1440,11 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
|
|
||||||
pMsg = (char *)pSchema;
|
pMsg = (char *)pSchema;
|
||||||
if (type == TSQL_CREATE_STREAM) { // check if it is a stream sql
|
if (type == TSQL_CREATE_STREAM) { // check if it is a stream sql
|
||||||
SQuerySQL *pQuerySql = pInfo->pCreateTableInfo->pSelect;
|
SQuerySqlNode *pQuerySql = pInfo->pCreateTableInfo->pSelect;
|
||||||
|
|
||||||
strncpy(pMsg, pQuerySql->selectToken.z, pQuerySql->selectToken.n + 1);
|
strncpy(pMsg, pQuerySql->sqlstr.z, pQuerySql->sqlstr.n + 1);
|
||||||
pCreateMsg->sqlLen = htons(pQuerySql->selectToken.n + 1);
|
pCreateMsg->sqlLen = htons(pQuerySql->sqlstr.n + 1);
|
||||||
pMsg += pQuerySql->selectToken.n + 1;
|
pMsg += pQuerySql->sqlstr.n + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,18 @@ extern "C" {
|
||||||
#include "tvariant.h"
|
#include "tvariant.h"
|
||||||
|
|
||||||
#define ParseTOKENTYPE SStrToken
|
#define ParseTOKENTYPE SStrToken
|
||||||
|
|
||||||
|
#define NON_ARITHMEIC_EXPR 0
|
||||||
|
#define NORMAL_ARITHMETIC 1
|
||||||
|
#define AGG_ARIGHTMEIC 2
|
||||||
|
|
||||||
|
enum SQL_NODE_TYPE {
|
||||||
|
SQL_NODE_TABLE_COLUMN= 1,
|
||||||
|
SQL_NODE_SQLFUNCTION = 2,
|
||||||
|
SQL_NODE_VALUE = 3,
|
||||||
|
SQL_NODE_EXPR = 4,
|
||||||
|
};
|
||||||
|
|
||||||
extern char tTokenTypeSwitcher[13];
|
extern char tTokenTypeSwitcher[13];
|
||||||
|
|
||||||
#define toTSDBType(x) \
|
#define toTSDBType(x) \
|
||||||
|
@ -38,6 +50,9 @@ extern char tTokenTypeSwitcher[13];
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define TPARSER_HAS_TOKEN(_t) ((_t).n > 0)
|
||||||
|
#define TPARSER_SET_NONE_TOKEN(_t) ((_t).n = 0)
|
||||||
|
|
||||||
typedef struct SLimitVal {
|
typedef struct SLimitVal {
|
||||||
int64_t limit;
|
int64_t limit;
|
||||||
int64_t offset;
|
int64_t offset;
|
||||||
|
@ -63,20 +78,20 @@ typedef struct SSessionWindowVal {
|
||||||
SStrToken gap;
|
SStrToken gap;
|
||||||
} SSessionWindowVal;
|
} SSessionWindowVal;
|
||||||
|
|
||||||
typedef struct SQuerySQL {
|
typedef struct SQuerySqlNode {
|
||||||
struct tSQLExprList *pSelection; // select clause
|
struct SArray *pSelectList; // select clause
|
||||||
SArray * from; // from clause SArray<tVariantListItem>
|
SArray *from; // from clause SArray<SQuerySqlNode>
|
||||||
struct tSQLExpr * pWhere; // where clause [optional]
|
struct tSqlExpr *pWhere; // where clause [optional]
|
||||||
SArray * pGroupby; // groupby clause, only for tags[optional], SArray<tVariantListItem>
|
SArray *pGroupby; // groupby clause, only for tags[optional], SArray<tVariantListItem>
|
||||||
SArray * pSortOrder; // orderby [optional], SArray<tVariantListItem>
|
SArray *pSortOrder; // orderby [optional], SArray<tVariantListItem>
|
||||||
|
SArray *fillType; // fill type[optional], SArray<tVariantListItem>
|
||||||
SIntervalVal interval; // (interval, interval_offset) [optional]
|
SIntervalVal interval; // (interval, interval_offset) [optional]
|
||||||
SSessionWindowVal sessionVal; // session window [optional]
|
SSessionWindowVal sessionVal; // session window [optional]
|
||||||
SStrToken sliding; // sliding window [optional]
|
SStrToken sliding; // sliding window [optional]
|
||||||
SLimitVal limit; // limit offset [optional]
|
SLimitVal limit; // limit offset [optional]
|
||||||
SLimitVal slimit; // group limit offset [optional]
|
SLimitVal slimit; // group limit offset [optional]
|
||||||
SArray * fillType; // fill type[optional], SArray<tVariantListItem>
|
SStrToken sqlstr; // sql string in select clause
|
||||||
SStrToken selectToken; // sql string
|
} SQuerySqlNode;
|
||||||
} SQuerySQL;
|
|
||||||
|
|
||||||
typedef struct SCreatedTableInfo {
|
typedef struct SCreatedTableInfo {
|
||||||
SStrToken name; // table name token
|
SStrToken name; // table name token
|
||||||
|
@ -88,7 +103,7 @@ typedef struct SCreatedTableInfo {
|
||||||
int8_t igExist; // ignore if exists
|
int8_t igExist; // ignore if exists
|
||||||
} SCreatedTableInfo;
|
} SCreatedTableInfo;
|
||||||
|
|
||||||
typedef struct SCreateTableSQL {
|
typedef struct SCreateTableSql {
|
||||||
SStrToken name; // table name, create table [name] xxx
|
SStrToken name; // table name, create table [name] xxx
|
||||||
int8_t type; // create normal table/from super table/ stream
|
int8_t type; // create normal table/from super table/ stream
|
||||||
bool existCheck;
|
bool existCheck;
|
||||||
|
@ -99,8 +114,8 @@ typedef struct SCreateTableSQL {
|
||||||
} colInfo;
|
} colInfo;
|
||||||
|
|
||||||
SArray *childTableInfo; // SArray<SCreatedTableInfo>
|
SArray *childTableInfo; // SArray<SCreatedTableInfo>
|
||||||
SQuerySQL *pSelect;
|
SQuerySqlNode *pSelect;
|
||||||
} SCreateTableSQL;
|
} SCreateTableSql;
|
||||||
|
|
||||||
typedef struct SAlterTableInfo {
|
typedef struct SAlterTableInfo {
|
||||||
SStrToken name;
|
SStrToken name;
|
||||||
|
@ -174,7 +189,7 @@ typedef struct SMiscInfo {
|
||||||
} SMiscInfo;
|
} SMiscInfo;
|
||||||
|
|
||||||
typedef struct SSubclauseInfo { // "UNION" multiple select sub-clause
|
typedef struct SSubclauseInfo { // "UNION" multiple select sub-clause
|
||||||
SQuerySQL **pClause;
|
SQuerySqlNode **pClause;
|
||||||
int32_t numOfClause;
|
int32_t numOfClause;
|
||||||
} SSubclauseInfo;
|
} SSubclauseInfo;
|
||||||
|
|
||||||
|
@ -184,26 +199,15 @@ typedef struct SSqlInfo {
|
||||||
SSubclauseInfo subclauseInfo;
|
SSubclauseInfo subclauseInfo;
|
||||||
char msg[256];
|
char msg[256];
|
||||||
union {
|
union {
|
||||||
SCreateTableSQL *pCreateTableInfo;
|
SCreateTableSql *pCreateTableInfo;
|
||||||
SAlterTableInfo *pAlterInfo;
|
SAlterTableInfo *pAlterInfo;
|
||||||
SMiscInfo *pMiscInfo;
|
SMiscInfo *pMiscInfo;
|
||||||
};
|
};
|
||||||
} SSqlInfo;
|
} SSqlInfo;
|
||||||
|
|
||||||
#define NON_ARITHMEIC_EXPR 0
|
typedef struct tSqlExpr {
|
||||||
#define NORMAL_ARITHMETIC 1
|
|
||||||
#define AGG_ARIGHTMEIC 2
|
|
||||||
|
|
||||||
enum SQL_NODE_TYPE {
|
|
||||||
SQL_NODE_TABLE_COLUMN= 1,
|
|
||||||
SQL_NODE_SQLFUNCTION = 2,
|
|
||||||
SQL_NODE_VALUE = 3,
|
|
||||||
SQL_NODE_EXPR = 4,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct tSQLExpr {
|
|
||||||
uint16_t type; // sql node type
|
uint16_t type; // sql node type
|
||||||
uint32_t tokenId; // TK_FUNCTION: sql function, TK_LE: less than(binary expr)
|
uint32_t tokenId; // TK_LE: less than(binary expr)
|
||||||
|
|
||||||
// the whole string of the function(col, param), while the function name is kept in token
|
// the whole string of the function(col, param), while the function name is kept in token
|
||||||
SStrToken operand;
|
SStrToken operand;
|
||||||
|
@ -213,24 +217,76 @@ typedef struct tSQLExpr {
|
||||||
tVariant value; // the use input value
|
tVariant value; // the use input value
|
||||||
SStrToken token; // original sql expr string
|
SStrToken token; // original sql expr string
|
||||||
|
|
||||||
struct tSQLExpr *pLeft; // left child
|
struct tSqlExpr *pLeft; // left child
|
||||||
struct tSQLExpr *pRight; // right child
|
struct tSqlExpr *pRight; // right child
|
||||||
struct tSQLExprList *pParam; // function parameters list
|
struct SArray *pParam; // function parameters list
|
||||||
} tSQLExpr;
|
} tSqlExpr;
|
||||||
|
|
||||||
// used in select clause. select <tSQLExprList> from xxx
|
// used in select clause. select <SArray> from xxx
|
||||||
typedef struct tSqlExprItem {
|
typedef struct tSqlExprItem {
|
||||||
tSQLExpr *pNode; // The list of expressions
|
tSqlExpr *pNode; // The list of expressions
|
||||||
char * aliasName; // alias name, null-terminated string
|
char *aliasName; // alias name, null-terminated string
|
||||||
bool distinct;
|
bool distinct;
|
||||||
} tSqlExprItem;
|
} tSqlExprItem;
|
||||||
|
|
||||||
// todo refactor by using SArray
|
SArray *tVariantListAppend(SArray *pList, tVariant *pVar, uint8_t sortOrder);
|
||||||
typedef struct tSQLExprList {
|
SArray *tVariantListInsert(SArray *pList, tVariant *pVar, uint8_t sortOrder, int32_t index);
|
||||||
int32_t nExpr; /* Number of expressions on the list */
|
SArray *tVariantListAppendToken(SArray *pList, SStrToken *pAliasToken, uint8_t sortOrder);
|
||||||
int32_t nAlloc; /* Number of entries allocated below */
|
|
||||||
tSqlExprItem *a; /* One entry for each expression */
|
// sql expr leaf node
|
||||||
} tSQLExprList;
|
tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType);
|
||||||
|
tSqlExpr *tSqlExprCreateFunction(SArray *pParam, SStrToken *pFuncToken, SStrToken *endToken, int32_t optType);
|
||||||
|
|
||||||
|
tSqlExpr *tSqlExprCreate(tSqlExpr *pLeft, tSqlExpr *pRight, int32_t optrType);
|
||||||
|
tSqlExpr *tSqlExprClone(tSqlExpr *pSrc);
|
||||||
|
void tSqlExprCompact(tSqlExpr** pExpr);
|
||||||
|
bool tSqlExprIsLeaf(tSqlExpr* pExpr);
|
||||||
|
bool tSqlExprIsParentOfLeaf(tSqlExpr* pExpr);
|
||||||
|
void tSqlExprDestroy(tSqlExpr *pExpr);
|
||||||
|
SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinct, SStrToken *pToken);
|
||||||
|
void tSqlExprListDestroy(SArray *pList);
|
||||||
|
|
||||||
|
SQuerySqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelectList, SArray *pFrom, tSqlExpr *pWhere,
|
||||||
|
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *ps,
|
||||||
|
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pgLimit);
|
||||||
|
|
||||||
|
SCreateTableSql *tSetCreateTableInfo(SArray *pCols, SArray *pTags, SQuerySqlNode *pSelect, int32_t type);
|
||||||
|
|
||||||
|
SAlterTableInfo *tSetAlterTableInfo(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableTable);
|
||||||
|
SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagNames, SArray *pTagVals, SStrToken *pToken, SStrToken* igExists);
|
||||||
|
|
||||||
|
void destroyAllSelectClause(SSubclauseInfo *pSql);
|
||||||
|
void destroyQuerySqlNode(SQuerySqlNode *pSql);
|
||||||
|
void freeCreateTableInfo(void* p);
|
||||||
|
|
||||||
|
SSqlInfo *setSqlInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pTableName, int32_t type);
|
||||||
|
SSubclauseInfo *setSubclause(SSubclauseInfo *pClause, void *pSqlExprInfo);
|
||||||
|
|
||||||
|
SSubclauseInfo *appendSelectClause(SSubclauseInfo *pInfo, void *pSubclause);
|
||||||
|
|
||||||
|
void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken *pIfNotExists);
|
||||||
|
|
||||||
|
void SqlInfoDestroy(SSqlInfo *pInfo);
|
||||||
|
|
||||||
|
void setDCLSqlElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
|
||||||
|
void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck,int16_t dbType,int16_t tableType);
|
||||||
|
void setShowOptions(SSqlInfo *pInfo, int32_t type, SStrToken* prefix, SStrToken* pPatterns);
|
||||||
|
|
||||||
|
void setCreateDbInfo(SSqlInfo *pInfo, int32_t type, SStrToken *pToken, SCreateDbInfo *pDB, SStrToken *pIgExists);
|
||||||
|
|
||||||
|
void setCreateAcctSql(SSqlInfo *pInfo, int32_t type, SStrToken *pName, SStrToken *pPwd, SCreateAcctInfo *pAcctInfo);
|
||||||
|
void setCreateUserSql(SSqlInfo *pInfo, SStrToken *pName, SStrToken *pPasswd);
|
||||||
|
void setKillSql(SSqlInfo *pInfo, int32_t type, SStrToken *ip);
|
||||||
|
void setAlterUserSql(SSqlInfo *pInfo, int16_t type, SStrToken *pName, SStrToken* pPwd, SStrToken *pPrivilege);
|
||||||
|
|
||||||
|
void setDefaultCreateDbOption(SCreateDbInfo *pDBInfo);
|
||||||
|
void setDefaultCreateTopicOption(SCreateDbInfo *pDBInfo);
|
||||||
|
|
||||||
|
// prefix show db.tables;
|
||||||
|
void tSetDbName(SStrToken *pCpxName, SStrToken *pDb);
|
||||||
|
|
||||||
|
void tSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType);
|
||||||
|
void tSetColumnType(TAOS_FIELD *pField, SStrToken *type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -247,72 +303,19 @@ void Parse(void *yyp, int yymajor, ParseTOKENTYPE yyminor, SSqlInfo *);
|
||||||
*/
|
*/
|
||||||
void ParseFree(void *p, void (*freeProc)(void *));
|
void ParseFree(void *p, void (*freeProc)(void *));
|
||||||
|
|
||||||
SArray *tVariantListAppend(SArray *pList, tVariant *pVar, uint8_t sortOrder);
|
/**
|
||||||
SArray *tVariantListInsert(SArray *pList, tVariant *pVar, uint8_t sortOrder, int32_t index);
|
*
|
||||||
SArray *tVariantListAppendToken(SArray *pList, SStrToken *pAliasToken, uint8_t sortOrder);
|
* @param mallocProc The parser allocator
|
||||||
|
* @return
|
||||||
tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType);
|
*/
|
||||||
|
|
||||||
tSQLExpr *tSqlExprClone(tSQLExpr *pSrc);
|
|
||||||
|
|
||||||
void tSqlExprDestroy(tSQLExpr *pExpr);
|
|
||||||
|
|
||||||
tSQLExprList *tSqlExprListAppend(tSQLExprList *pList, tSQLExpr *pNode, SStrToken *pDistinct, SStrToken *pToken);
|
|
||||||
|
|
||||||
void tSqlExprListDestroy(tSQLExprList *pList);
|
|
||||||
|
|
||||||
SQuerySQL *tSetQuerySqlNode(SStrToken *pSelectToken, tSQLExprList *pSelection, SArray *pFrom, tSQLExpr *pWhere,
|
|
||||||
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *pSession,
|
|
||||||
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pGLimit);
|
|
||||||
|
|
||||||
SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSelect, int32_t type);
|
|
||||||
|
|
||||||
void tSqlExprNodeDestroy(tSQLExpr *pExpr);
|
|
||||||
|
|
||||||
SAlterTableInfo * tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableTable);
|
|
||||||
SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagNames, SArray *pTagVals, SStrToken *pToken, SStrToken* igExists);
|
|
||||||
|
|
||||||
void destroyAllSelectClause(SSubclauseInfo *pSql);
|
|
||||||
void doDestroyQuerySql(SQuerySQL *pSql);
|
|
||||||
void freeCreateTableInfo(void* p);
|
|
||||||
|
|
||||||
SSqlInfo * setSqlInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pTableName, int32_t type);
|
|
||||||
SSubclauseInfo *setSubclause(SSubclauseInfo *pClause, void *pSqlExprInfo);
|
|
||||||
|
|
||||||
SSubclauseInfo *appendSelectClause(SSubclauseInfo *pInfo, void *pSubclause);
|
|
||||||
|
|
||||||
void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken *pIfNotExists);
|
|
||||||
|
|
||||||
void SqlInfoDestroy(SSqlInfo *pInfo);
|
|
||||||
|
|
||||||
void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
|
|
||||||
void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck,int16_t dbType,int16_t tableType);
|
|
||||||
void setShowOptions(SSqlInfo *pInfo, int32_t type, SStrToken* prefix, SStrToken* pPatterns);
|
|
||||||
|
|
||||||
void setCreateDbInfo(SSqlInfo *pInfo, int32_t type, SStrToken *pToken, SCreateDbInfo *pDB, SStrToken *pIgExists);
|
|
||||||
|
|
||||||
void setCreateAcctSql(SSqlInfo *pInfo, int32_t type, SStrToken *pName, SStrToken *pPwd, SCreateAcctInfo *pAcctInfo);
|
|
||||||
void setCreateUserSql(SSqlInfo *pInfo, SStrToken *pName, SStrToken *pPasswd);
|
|
||||||
void setKillSql(SSqlInfo *pInfo, int32_t type, SStrToken *ip);
|
|
||||||
void setAlterUserSql(SSqlInfo *pInfo, int16_t type, SStrToken *pName, SStrToken* pPwd, SStrToken *pPrivilege);
|
|
||||||
|
|
||||||
void setDefaultCreateDbOption(SCreateDbInfo *pDBInfo);
|
|
||||||
void setDefaultCreateTopicOption(SCreateDbInfo *pDBInfo);
|
|
||||||
|
|
||||||
// prefix show db.tables;
|
|
||||||
void setDbName(SStrToken *pCpxName, SStrToken *pDb);
|
|
||||||
|
|
||||||
tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType);
|
|
||||||
|
|
||||||
tSQLExpr *tSqlExprCreateFunction(tSQLExprList *pList, SStrToken *pFuncToken, SStrToken *endToken, int32_t optType);
|
|
||||||
|
|
||||||
void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType);
|
|
||||||
|
|
||||||
void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type);
|
|
||||||
|
|
||||||
void *ParseAlloc(void *(*mallocProc)(size_t));
|
void *ParseAlloc(void *(*mallocProc)(size_t));
|
||||||
|
|
||||||
SSqlInfo qSQLParse(const char *str);
|
/**
|
||||||
|
*
|
||||||
|
* @param str sql string
|
||||||
|
* @return sql ast
|
||||||
|
*/
|
||||||
|
SSqlInfo qSqlParse(const char *str);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,11 +92,11 @@ cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
|
||||||
|
|
||||||
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
|
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
|
||||||
X.n += Y.n;
|
X.n += Y.n;
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
|
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd ::= SHOW CREATE DATABASE ids(X). {
|
cmd ::= SHOW CREATE DATABASE ids(X). {
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
|
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd ::= SHOW dbPrefix(X) TABLES. {
|
cmd ::= SHOW dbPrefix(X) TABLES. {
|
||||||
|
@ -113,19 +113,19 @@ cmd ::= SHOW dbPrefix(X) STABLES. {
|
||||||
|
|
||||||
cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). {
|
cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). {
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &X);
|
tSetDbName(&token, &X);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &Y);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd ::= SHOW dbPrefix(X) VGROUPS. {
|
cmd ::= SHOW dbPrefix(X) VGROUPS. {
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &X);
|
tSetDbName(&token, &X);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd ::= SHOW dbPrefix(X) VGROUPS ids(Y). {
|
cmd ::= SHOW dbPrefix(X) VGROUPS ids(Y). {
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &X);
|
tSetDbName(&token, &X);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, &Y);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, &Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,26 +144,26 @@ cmd ::= DROP STABLE ifexists(Y) ids(X) cpxName(Z). {
|
||||||
cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_DEFAULT, -1); }
|
cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_DEFAULT, -1); }
|
||||||
cmd ::= DROP TOPIC ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_TOPIC, -1); }
|
cmd ::= DROP TOPIC ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_TOPIC, -1); }
|
||||||
|
|
||||||
cmd ::= DROP DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
cmd ::= DROP DNODE ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
||||||
cmd ::= DROP USER ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
|
cmd ::= DROP USER ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
|
||||||
cmd ::= DROP ACCOUNT ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
cmd ::= DROP ACCOUNT ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
||||||
|
|
||||||
/////////////////////////////////THE USE STATEMENT//////////////////////////////////////////
|
/////////////////////////////////THE USE STATEMENT//////////////////////////////////////////
|
||||||
cmd ::= USE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_USE_DB, 1, &X);}
|
cmd ::= USE ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_USE_DB, 1, &X);}
|
||||||
|
|
||||||
/////////////////////////////////THE DESCRIBE STATEMENT/////////////////////////////////////
|
/////////////////////////////////THE DESCRIBE STATEMENT/////////////////////////////////////
|
||||||
cmd ::= DESCRIBE ids(X) cpxName(Y). {
|
cmd ::= DESCRIBE ids(X) cpxName(Y). {
|
||||||
X.n += Y.n;
|
X.n += Y.n;
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
|
setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////THE ALTER STATEMENT////////////////////////////////////////
|
/////////////////////////////////THE ALTER STATEMENT////////////////////////////////////////
|
||||||
cmd ::= ALTER USER ids(X) PASS ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD, &X, &Y, NULL); }
|
cmd ::= ALTER USER ids(X) PASS ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD, &X, &Y, NULL); }
|
||||||
cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y);}
|
cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y);}
|
||||||
cmd ::= ALTER DNODE ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &X, &Y); }
|
cmd ::= ALTER DNODE ids(X) ids(Y). { setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &X, &Y); }
|
||||||
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
|
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z); }
|
||||||
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
|
cmd ::= ALTER LOCAL ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
|
||||||
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
|
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
|
||||||
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
||||||
cmd ::= ALTER TOPIC ids(X) alter_topic_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
cmd ::= ALTER TOPIC ids(X) alter_topic_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ ifnotexists(X) ::= . { X.n = 0;}
|
||||||
|
|
||||||
/////////////////////////////////THE CREATE STATEMENT///////////////////////////////////////
|
/////////////////////////////////THE CREATE STATEMENT///////////////////////////////////////
|
||||||
//create option for dnode/db/user/account
|
//create option for dnode/db/user/account
|
||||||
cmd ::= CREATE DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
|
cmd ::= CREATE DNODE ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
|
||||||
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
|
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
|
||||||
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
|
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
|
||||||
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
||||||
|
@ -299,17 +299,17 @@ alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X). { Y = Z; Y.parti
|
||||||
%type typename {TAOS_FIELD}
|
%type typename {TAOS_FIELD}
|
||||||
typename(A) ::= ids(X). {
|
typename(A) ::= ids(X). {
|
||||||
X.type = 0;
|
X.type = 0;
|
||||||
tSqlSetColumnType (&A, &X);
|
tSetColumnType (&A, &X);
|
||||||
}
|
}
|
||||||
|
|
||||||
//define binary type, e.g., binary(10), nchar(10)
|
//define binary type, e.g., binary(10), nchar(10)
|
||||||
typename(A) ::= ids(X) LP signed(Y) RP. {
|
typename(A) ::= ids(X) LP signed(Y) RP. {
|
||||||
if (Y <= 0) {
|
if (Y <= 0) {
|
||||||
X.type = 0;
|
X.type = 0;
|
||||||
tSqlSetColumnType(&A, &X);
|
tSetColumnType(&A, &X);
|
||||||
} else {
|
} else {
|
||||||
X.type = -Y; // negative value of name length
|
X.type = -Y; // negative value of name length
|
||||||
tSqlSetColumnType(&A, &X);
|
tSetColumnType(&A, &X);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +317,7 @@ typename(A) ::= ids(X) LP signed(Y) RP. {
|
||||||
typename(A) ::= ids(X) UNSIGNED(Z). {
|
typename(A) ::= ids(X) UNSIGNED(Z). {
|
||||||
X.type = 0;
|
X.type = 0;
|
||||||
X.n = ((Z.z + Z.n) - X.z);
|
X.n = ((Z.z + Z.n) - X.z);
|
||||||
tSqlSetColumnType (&A, &X);
|
tSetColumnType (&A, &X);
|
||||||
}
|
}
|
||||||
|
|
||||||
%type signed {int64_t}
|
%type signed {int64_t}
|
||||||
|
@ -331,10 +331,10 @@ cmd ::= CREATE TABLE create_stable_args. {}
|
||||||
cmd ::= CREATE STABLE create_stable_args. {}
|
cmd ::= CREATE STABLE create_stable_args. {}
|
||||||
cmd ::= CREATE TABLE create_table_list(Z). { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = Z;}
|
cmd ::= CREATE TABLE create_table_list(Z). { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = Z;}
|
||||||
|
|
||||||
%type create_table_list{SCreateTableSQL*}
|
%type create_table_list{SCreateTableSql*}
|
||||||
%destructor create_table_list{destroyCreateTableSql($$);}
|
%destructor create_table_list{destroyCreateTableSql($$);}
|
||||||
create_table_list(A) ::= create_from_stable(Z). {
|
create_table_list(A) ::= create_from_stable(Z). {
|
||||||
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, &Z);
|
taosArrayPush(pCreateTable->childTableInfo, &Z);
|
||||||
|
@ -347,9 +347,9 @@ create_table_list(A) ::= create_table_list(X) create_from_stable(Z). {
|
||||||
A = X;
|
A = X;
|
||||||
}
|
}
|
||||||
|
|
||||||
%type create_table_args{SCreateTableSQL*}
|
%type create_table_args{SCreateTableSql*}
|
||||||
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
|
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
|
||||||
A = tSetCreateSqlElems(X, NULL, NULL, TSQL_CREATE_TABLE);
|
A = tSetCreateTableInfo(X, NULL, NULL, TSQL_CREATE_TABLE);
|
||||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||||
|
|
||||||
V.n += Z.n;
|
V.n += Z.n;
|
||||||
|
@ -357,9 +357,9 @@ create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create super table
|
// create super table
|
||||||
%type create_stable_args{SCreateTableSQL*}
|
%type create_stable_args{SCreateTableSql*}
|
||||||
create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
|
create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
|
||||||
A = tSetCreateSqlElems(X, Y, NULL, TSQL_CREATE_STABLE);
|
A = tSetCreateTableInfo(X, Y, NULL, TSQL_CREATE_STABLE);
|
||||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||||
|
|
||||||
V.n += Z.n;
|
V.n += Z.n;
|
||||||
|
@ -389,7 +389,7 @@ tagNamelist(A) ::= ids(X). {A = taosArrayInit(4, sizeof(SSt
|
||||||
// create stream
|
// create stream
|
||||||
// create table table_name as select count(*) from super_table_name interval(time)
|
// create table table_name as select count(*) from super_table_name interval(time)
|
||||||
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) AS select(S). {
|
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) AS select(S). {
|
||||||
A = tSetCreateSqlElems(NULL, NULL, S, TSQL_CREATE_STREAM);
|
A = tSetCreateTableInfo(NULL, NULL, S, TSQL_CREATE_STREAM);
|
||||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||||
|
|
||||||
V.n += Z.n;
|
V.n += Z.n;
|
||||||
|
@ -405,7 +405,7 @@ columnlist(A) ::= column(X). {A = taosArrayInit(4, sizeof(T
|
||||||
// The information used for a column is the name and type of column:
|
// The information used for a column is the name and type of column:
|
||||||
// tinyint smallint int bigint float double bool timestamp binary(x) nchar(x)
|
// tinyint smallint int bigint float double bool timestamp binary(x) nchar(x)
|
||||||
column(A) ::= ids(X) typename(Y). {
|
column(A) ::= ids(X) typename(Y). {
|
||||||
tSqlSetColumnInfo(&A, &X, &Y);
|
tSetColumnInfo(&A, &X, &Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
%type tagitemlist {SArray*}
|
%type tagitemlist {SArray*}
|
||||||
|
@ -450,8 +450,8 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). {
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////// The SELECT statement /////////////////////////////////
|
//////////////////////// The SELECT statement /////////////////////////////////
|
||||||
%type select {SQuerySQL*}
|
%type select {SQuerySqlNode*}
|
||||||
%destructor select {doDestroyQuerySql($$);}
|
%destructor select {destroyQuerySqlNode($$);}
|
||||||
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_opt(K) session_option(H) fill_opt(F) sliding_opt(S) groupby_opt(P) orderby_opt(Z) having_opt(N) slimit_opt(G) limit_opt(L). {
|
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_opt(K) session_option(H) fill_opt(F) sliding_opt(S) groupby_opt(P) orderby_opt(Z) having_opt(N) slimit_opt(G) limit_opt(L). {
|
||||||
A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &S, F, &L, &G);
|
A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &S, F, &L, &G);
|
||||||
}
|
}
|
||||||
|
@ -477,10 +477,10 @@ select(A) ::= SELECT(T) selcollist(W). {
|
||||||
// selcollist is a list of expressions that are to become the return
|
// selcollist is a list of expressions that are to become the return
|
||||||
// values of the SELECT statement. The "*" in statements like
|
// values of the SELECT statement. The "*" in statements like
|
||||||
// "SELECT * FROM ..." is encoded as a special expression with an opcode of TK_ALL.
|
// "SELECT * FROM ..." is encoded as a special expression with an opcode of TK_ALL.
|
||||||
%type selcollist {tSQLExprList*}
|
%type selcollist {SArray*}
|
||||||
%destructor selcollist {tSqlExprListDestroy($$);}
|
%destructor selcollist {tSqlExprListDestroy($$);}
|
||||||
|
|
||||||
%type sclp {tSQLExprList*}
|
%type sclp {SArray*}
|
||||||
%destructor sclp {tSqlExprListDestroy($$);}
|
%destructor sclp {tSqlExprListDestroy($$);}
|
||||||
sclp(A) ::= selcollist(X) COMMA. {A = X;}
|
sclp(A) ::= selcollist(X) COMMA. {A = X;}
|
||||||
sclp(A) ::= . {A = 0;}
|
sclp(A) ::= . {A = 0;}
|
||||||
|
@ -489,7 +489,7 @@ selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y). {
|
||||||
}
|
}
|
||||||
|
|
||||||
selcollist(A) ::= sclp(P) STAR. {
|
selcollist(A) ::= sclp(P) STAR. {
|
||||||
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
|
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
|
||||||
A = tSqlExprListAppend(P, pNode, 0, 0);
|
A = tSqlExprListAppend(P, pNode, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +630,7 @@ grouplist(A) ::= item(X). {
|
||||||
}
|
}
|
||||||
|
|
||||||
//having clause, ignore the input condition in having
|
//having clause, ignore the input condition in having
|
||||||
%type having_opt {tSQLExpr*}
|
%type having_opt {tSqlExpr*}
|
||||||
%destructor having_opt {tSqlExprDestroy($$);}
|
%destructor having_opt {tSqlExprDestroy($$);}
|
||||||
having_opt(A) ::=. {A = 0;}
|
having_opt(A) ::=. {A = 0;}
|
||||||
having_opt(A) ::= HAVING expr(X). {A = X;}
|
having_opt(A) ::= HAVING expr(X). {A = X;}
|
||||||
|
@ -652,7 +652,7 @@ slimit_opt(A) ::= SLIMIT signed(X) SOFFSET signed(Y).
|
||||||
slimit_opt(A) ::= SLIMIT signed(X) COMMA signed(Y).
|
slimit_opt(A) ::= SLIMIT signed(X) COMMA signed(Y).
|
||||||
{A.limit = Y; A.offset = X;}
|
{A.limit = Y; A.offset = X;}
|
||||||
|
|
||||||
%type where_opt {tSQLExpr*}
|
%type where_opt {tSqlExpr*}
|
||||||
%destructor where_opt {tSqlExprDestroy($$);}
|
%destructor where_opt {tSqlExprDestroy($$);}
|
||||||
|
|
||||||
where_opt(A) ::= . {A = 0;}
|
where_opt(A) ::= . {A = 0;}
|
||||||
|
@ -660,25 +660,25 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
|
||||||
|
|
||||||
/////////////////////////// Expression Processing /////////////////////////////
|
/////////////////////////// Expression Processing /////////////////////////////
|
||||||
//
|
//
|
||||||
%type expr {tSQLExpr*}
|
%type expr {tSqlExpr*}
|
||||||
%destructor expr {tSqlExprDestroy($$);}
|
%destructor expr {tSqlExprDestroy($$);}
|
||||||
|
|
||||||
expr(A) ::= LP(X) expr(Y) RP(Z). {A = Y; A->token.z = X.z; A->token.n = (Z.z - X.z + 1);}
|
expr(A) ::= LP(X) expr(Y) RP(Z). {A = Y; A->token.z = X.z; A->token.n = (Z.z - X.z + 1);}
|
||||||
|
|
||||||
expr(A) ::= ID(X). { A = tSqlExprIdValueCreate(&X, TK_ID);}
|
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(&X, TK_ID);}
|
||||||
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprIdValueCreate(&X, TK_ID);}
|
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ID);}
|
||||||
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprIdValueCreate(&X, TK_ALL);}
|
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ALL);}
|
||||||
|
|
||||||
expr(A) ::= INTEGER(X). { A = tSqlExprIdValueCreate(&X, TK_INTEGER);}
|
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
|
||||||
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprIdValueCreate(&X, TK_INTEGER);}
|
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
|
||||||
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprIdValueCreate(&X, TK_INTEGER);}
|
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
|
||||||
expr(A) ::= FLOAT(X). { A = tSqlExprIdValueCreate(&X, TK_FLOAT);}
|
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
|
||||||
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprIdValueCreate(&X, TK_FLOAT);}
|
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
|
||||||
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprIdValueCreate(&X, TK_FLOAT);}
|
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
|
||||||
expr(A) ::= STRING(X). { A = tSqlExprIdValueCreate(&X, TK_STRING);}
|
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(&X, TK_STRING);}
|
||||||
expr(A) ::= NOW(X). { A = tSqlExprIdValueCreate(&X, TK_NOW); }
|
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(&X, TK_NOW); }
|
||||||
expr(A) ::= VARIABLE(X). { A = tSqlExprIdValueCreate(&X, TK_VARIABLE);}
|
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
|
||||||
expr(A) ::= BOOL(X). { A = tSqlExprIdValueCreate(&X, TK_BOOL);}
|
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(&X, TK_BOOL);}
|
||||||
|
|
||||||
// ordinary functions: min(x), max(x), top(k, 20)
|
// ordinary functions: min(x), max(x), top(k, 20)
|
||||||
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
|
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
|
||||||
|
@ -698,7 +698,7 @@ expr(A) ::= expr(X) GE expr(Y). {A = tSqlExprCreate(X, Y, TK_GE);}
|
||||||
expr(A) ::= expr(X) NE expr(Y). {A = tSqlExprCreate(X, Y, TK_NE);}
|
expr(A) ::= expr(X) NE expr(Y). {A = tSqlExprCreate(X, Y, TK_NE);}
|
||||||
expr(A) ::= expr(X) EQ expr(Y). {A = tSqlExprCreate(X, Y, TK_EQ);}
|
expr(A) ::= expr(X) EQ expr(Y). {A = tSqlExprCreate(X, Y, TK_EQ);}
|
||||||
|
|
||||||
expr(A) ::= expr(X) BETWEEN expr(Y) AND expr(Z). { tSQLExpr* X2 = tSqlExprClone(X); A = tSqlExprCreate(tSqlExprCreate(X, Y, TK_GE), tSqlExprCreate(X2, Z, TK_LE), TK_AND);}
|
expr(A) ::= expr(X) BETWEEN expr(Y) AND expr(Z). { tSqlExpr* X2 = tSqlExprClone(X); A = tSqlExprCreate(tSqlExprCreate(X, Y, TK_GE), tSqlExprCreate(X2, Z, TK_LE), TK_AND);}
|
||||||
|
|
||||||
expr(A) ::= expr(X) AND expr(Y). {A = tSqlExprCreate(X, Y, TK_AND);}
|
expr(A) ::= expr(X) AND expr(Y). {A = tSqlExprCreate(X, Y, TK_AND);}
|
||||||
expr(A) ::= expr(X) OR expr(Y). {A = tSqlExprCreate(X, Y, TK_OR); }
|
expr(A) ::= expr(X) OR expr(Y). {A = tSqlExprCreate(X, Y, TK_OR); }
|
||||||
|
@ -714,12 +714,12 @@ expr(A) ::= expr(X) REM expr(Y). {A = tSqlExprCreate(X, Y, TK_REM); }
|
||||||
expr(A) ::= expr(X) LIKE expr(Y). {A = tSqlExprCreate(X, Y, TK_LIKE); }
|
expr(A) ::= expr(X) LIKE expr(Y). {A = tSqlExprCreate(X, Y, TK_LIKE); }
|
||||||
|
|
||||||
//in expression
|
//in expression
|
||||||
expr(A) ::= expr(X) IN LP exprlist(Y) RP. {A = tSqlExprCreate(X, (tSQLExpr*)Y, TK_IN); }
|
expr(A) ::= expr(X) IN LP exprlist(Y) RP. {A = tSqlExprCreate(X, (tSqlExpr*)Y, TK_IN); }
|
||||||
|
|
||||||
%type exprlist {tSQLExprList*}
|
%type exprlist {SArray*}
|
||||||
%destructor exprlist {tSqlExprListDestroy($$);}
|
%destructor exprlist {tSqlExprListDestroy($$);}
|
||||||
|
|
||||||
%type expritem {tSQLExpr*}
|
%type expritem {tSqlExpr*}
|
||||||
%destructor expritem {tSqlExprDestroy($$);}
|
%destructor expritem {tSqlExprDestroy($$);}
|
||||||
|
|
||||||
exprlist(A) ::= exprlist(X) COMMA expritem(Y). {A = tSqlExprListAppend(X,Y,0, 0);}
|
exprlist(A) ::= exprlist(X) COMMA expritem(Y). {A = tSqlExprListAppend(X,Y,0, 0);}
|
||||||
|
@ -728,12 +728,12 @@ expritem(A) ::= expr(X). {A = X;}
|
||||||
expritem(A) ::= . {A = 0;}
|
expritem(A) ::= . {A = 0;}
|
||||||
|
|
||||||
///////////////////////////////////reset query cache//////////////////////////////////////
|
///////////////////////////////////reset query cache//////////////////////////////////////
|
||||||
cmd ::= RESET QUERY CACHE. { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
cmd ::= RESET QUERY CACHE. { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
||||||
|
|
||||||
///////////////////////////////////ALTER TABLE statement//////////////////////////////////
|
///////////////////////////////////ALTER TABLE statement//////////////////////////////////
|
||||||
cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
||||||
X.n += F.n;
|
X.n += F.n;
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -743,14 +743,14 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
||||||
toTSDBType(A.type);
|
toTSDBType(A.type);
|
||||||
SArray* K = tVariantListAppendToken(NULL, &A, -1);
|
SArray* K = tVariantListAppendToken(NULL, &A, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
||||||
cmd ::= ALTER TABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
cmd ::= ALTER TABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
||||||
X.n += Y.n;
|
X.n += Y.n;
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
||||||
|
@ -759,7 +759,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
||||||
toTSDBType(Y.type);
|
toTSDBType(Y.type);
|
||||||
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -772,7 +772,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
|
||||||
toTSDBType(Z.type);
|
toTSDBType(Z.type);
|
||||||
A = tVariantListAppendToken(A, &Z, -1);
|
A = tVariantListAppendToken(A, &Z, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -783,7 +783,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z). {
|
||||||
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
||||||
A = tVariantListAppend(A, &Z, -1);
|
A = tVariantListAppend(A, &Z, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -791,7 +791,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z). {
|
||||||
///////////////////////////////////ALTER STABLE statement//////////////////////////////////
|
///////////////////////////////////ALTER STABLE statement//////////////////////////////////
|
||||||
cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
||||||
X.n += F.n;
|
X.n += F.n;
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -801,14 +801,14 @@ cmd ::= ALTER STABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
||||||
toTSDBType(A.type);
|
toTSDBType(A.type);
|
||||||
SArray* K = tVariantListAppendToken(NULL, &A, -1);
|
SArray* K = tVariantListAppendToken(NULL, &A, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
||||||
cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
||||||
X.n += Y.n;
|
X.n += Y.n;
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, 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);
|
||||||
}
|
}
|
||||||
cmd ::= ALTER STABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
cmd ::= ALTER STABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
||||||
|
@ -817,7 +817,7 @@ cmd ::= ALTER STABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
|
||||||
toTSDBType(Y.type);
|
toTSDBType(Y.type);
|
||||||
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -830,7 +830,7 @@ cmd ::= ALTER STABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
|
||||||
toTSDBType(Z.type);
|
toTSDBType(Z.type);
|
||||||
A = tVariantListAppendToken(A, &Z, -1);
|
A = tVariantListAppendToken(A, &Z, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -476,18 +476,37 @@ static SResultRow *doPrepareResultRowFromKey(SQueryRuntimeEnv *pRuntimeEnv, SRes
|
||||||
return getResultRow(pResultRowInfo, pResultRowInfo->curIndex);
|
return getResultRow(pResultRowInfo, pResultRowInfo->curIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void getInitialStartTimeWindow(SQuery* pQuery, TSKEY ts, STimeWindow* w) {
|
||||||
|
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
||||||
|
getAlignQueryTimeWindow(pQuery, ts, ts, pQuery->window.ekey, w);
|
||||||
|
} else {
|
||||||
|
// the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
||||||
|
getAlignQueryTimeWindow(pQuery, ts, pQuery->window.ekey, ts, w);
|
||||||
|
|
||||||
|
int64_t key = w->skey;
|
||||||
|
while(key < ts) { // moving towards end
|
||||||
|
if (pQuery->interval.intervalUnit == 'n' || pQuery->interval.intervalUnit == 'y') {
|
||||||
|
key = taosTimeAdd(key, pQuery->interval.sliding, pQuery->interval.slidingUnit, pQuery->precision);
|
||||||
|
} else {
|
||||||
|
key += pQuery->interval.sliding;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key >= ts) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
w->skey = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// get the correct time window according to the handled timestamp
|
// get the correct time window according to the handled timestamp
|
||||||
static STimeWindow getActiveTimeWindow(SResultRowInfo * pResultRowInfo, int64_t ts, SQuery *pQuery) {
|
static STimeWindow getActiveTimeWindow(SResultRowInfo * pResultRowInfo, int64_t ts, SQuery *pQuery) {
|
||||||
STimeWindow w = {0};
|
STimeWindow w = {0};
|
||||||
|
|
||||||
if (pResultRowInfo->curIndex == -1) { // the first window, from the previous stored value
|
if (pResultRowInfo->curIndex == -1) { // the first window, from the previous stored value
|
||||||
if (pResultRowInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
if (pResultRowInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
||||||
if (QUERY_IS_ASC_QUERY(pQuery)) {
|
getInitialStartTimeWindow(pQuery, ts, &w);
|
||||||
getAlignQueryTimeWindow(pQuery, ts, ts, pQuery->window.ekey, &w);
|
|
||||||
} else { // the start position of the first time window in the endpoint that spreads beyond the queried last timestamp
|
|
||||||
getAlignQueryTimeWindow(pQuery, ts, pQuery->window.ekey, ts, &w);
|
|
||||||
}
|
|
||||||
|
|
||||||
pResultRowInfo->prevSKey = w.skey;
|
pResultRowInfo->prevSKey = w.skey;
|
||||||
} else {
|
} else {
|
||||||
w.skey = pResultRowInfo->prevSKey;
|
w.skey = pResultRowInfo->prevSKey;
|
||||||
|
@ -4564,7 +4583,7 @@ static SSDataBlock* doOffset(void* param) {
|
||||||
|
|
||||||
if (pRuntimeEnv->currentOffset == 0) {
|
if (pRuntimeEnv->currentOffset == 0) {
|
||||||
return pBlock;
|
return pBlock;
|
||||||
} else if (pRuntimeEnv->currentOffset > pBlock->info.rows) {
|
} else if (pRuntimeEnv->currentOffset >= pBlock->info.rows) {
|
||||||
pRuntimeEnv->currentOffset -= pBlock->info.rows;
|
pRuntimeEnv->currentOffset -= pBlock->info.rows;
|
||||||
} else {
|
} else {
|
||||||
int32_t remain = (int32_t)(pBlock->info.rows - pRuntimeEnv->currentOffset);
|
int32_t remain = (int32_t)(pBlock->info.rows - pRuntimeEnv->currentOffset);
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "ttokendef.h"
|
#include "ttokendef.h"
|
||||||
#include "tutil.h"
|
#include "tutil.h"
|
||||||
|
|
||||||
SSqlInfo qSQLParse(const char *pStr) {
|
SSqlInfo qSqlParse(const char *pStr) {
|
||||||
void *pParser = ParseAlloc(malloc);
|
void *pParser = ParseAlloc(malloc);
|
||||||
|
|
||||||
SSqlInfo sqlInfo = {0};
|
SSqlInfo sqlInfo = {0};
|
||||||
|
@ -80,53 +80,48 @@ abort_parse:
|
||||||
return sqlInfo;
|
return sqlInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
tSQLExprList *tSqlExprListAppend(tSQLExprList *pList, tSQLExpr *pNode, SStrToken *pDistinct, SStrToken *pToken) {
|
SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinct, SStrToken *pToken) {
|
||||||
if (pList == NULL) {
|
if (pList == NULL) {
|
||||||
pList = calloc(1, sizeof(tSQLExprList));
|
pList = taosArrayInit(4, sizeof(tSqlExprItem));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pList->nAlloc <= pList->nExpr) {
|
|
||||||
pList->nAlloc = (pList->nAlloc << 1u) + 4;
|
|
||||||
pList->a = realloc(pList->a, pList->nAlloc * sizeof(pList->a[0]));
|
|
||||||
if (pList->a == 0) {
|
|
||||||
pList->nExpr = pList->nAlloc = 0;
|
|
||||||
return pList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(pList->a != 0);
|
|
||||||
|
|
||||||
if (pNode || pToken) {
|
if (pNode || pToken) {
|
||||||
struct tSqlExprItem *pItem = &pList->a[pList->nExpr++];
|
struct tSqlExprItem item = {0};
|
||||||
memset(pItem, 0, sizeof(*pItem));
|
|
||||||
pItem->pNode = pNode;
|
|
||||||
if (pToken) { // set the as clause
|
|
||||||
pItem->aliasName = malloc(pToken->n + 1);
|
|
||||||
strncpy(pItem->aliasName, pToken->z, pToken->n);
|
|
||||||
pItem->aliasName[pToken->n] = 0;
|
|
||||||
|
|
||||||
strdequote(pItem->aliasName);
|
item.pNode = pNode;
|
||||||
|
item.distinct = (pDistinct != NULL);
|
||||||
|
|
||||||
|
if (pToken) { // set the as clause
|
||||||
|
item.aliasName = malloc(pToken->n + 1);
|
||||||
|
strncpy(item.aliasName, pToken->z, pToken->n);
|
||||||
|
item.aliasName[pToken->n] = 0;
|
||||||
|
|
||||||
|
strdequote(item.aliasName);
|
||||||
}
|
}
|
||||||
pItem->distinct = (pDistinct != NULL);
|
|
||||||
|
taosArrayPush(pList, &item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return pList;
|
return pList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tSqlExprListDestroy(tSQLExprList *pList) {
|
static void freeExprElem(void* item) {
|
||||||
if (pList == NULL) return;
|
tSqlExprItem* exprItem = item;
|
||||||
|
|
||||||
for (int32_t i = 0; i < pList->nExpr; ++i) {
|
tfree(exprItem->aliasName);
|
||||||
if (pList->a[i].aliasName != NULL) {
|
tSqlExprDestroy(exprItem->pNode);
|
||||||
free(pList->a[i].aliasName);
|
|
||||||
}
|
|
||||||
tSqlExprDestroy(pList->a[i].pNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(pList->a);
|
|
||||||
free(pList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
|
void tSqlExprListDestroy(SArray *pList) {
|
||||||
tSQLExpr *pSqlExpr = calloc(1, sizeof(tSQLExpr));
|
if (pList == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
taosArrayDestroyEx(pList, freeExprElem);
|
||||||
|
}
|
||||||
|
|
||||||
|
tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType) {
|
||||||
|
tSqlExpr *pSqlExpr = calloc(1, sizeof(tSqlExpr));
|
||||||
|
|
||||||
if (pToken != NULL) {
|
if (pToken != NULL) {
|
||||||
pSqlExpr->token = *pToken;
|
pSqlExpr->token = *pToken;
|
||||||
|
@ -171,15 +166,15 @@ tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
|
||||||
* pList is the parameters for function with id(optType)
|
* pList is the parameters for function with id(optType)
|
||||||
* function name is denoted by pFunctionToken
|
* function name is denoted by pFunctionToken
|
||||||
*/
|
*/
|
||||||
tSQLExpr *tSqlExprCreateFunction(tSQLExprList *pList, SStrToken *pFuncToken, SStrToken *endToken, int32_t optType) {
|
tSqlExpr *tSqlExprCreateFunction(SArray *pParam, SStrToken *pFuncToken, SStrToken *endToken, int32_t optType) {
|
||||||
if (pFuncToken == NULL) {
|
if (pFuncToken == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
tSQLExpr *pExpr = calloc(1, sizeof(tSQLExpr));
|
tSqlExpr *pExpr = calloc(1, sizeof(tSqlExpr));
|
||||||
pExpr->tokenId = optType;
|
pExpr->tokenId = optType;
|
||||||
pExpr->type = SQL_NODE_SQLFUNCTION;
|
pExpr->type = SQL_NODE_SQLFUNCTION;
|
||||||
pExpr->pParam = pList;
|
pExpr->pParam = pParam;
|
||||||
|
|
||||||
int32_t len = (int32_t)((endToken->z + endToken->n) - pFuncToken->z);
|
int32_t len = (int32_t)((endToken->z + endToken->n) - pFuncToken->z);
|
||||||
pExpr->operand = (*pFuncToken);
|
pExpr->operand = (*pFuncToken);
|
||||||
|
@ -193,10 +188,10 @@ tSQLExpr *tSqlExprCreateFunction(tSQLExprList *pList, SStrToken *pFuncToken, SSt
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* create binary expression in this procedure
|
* create binary expression in this procedure
|
||||||
* if the expr is arithmetic, calculate the result and set it to tSQLExpr Object
|
* if the expr is arithmetic, calculate the result and set it to tSqlExpr Object
|
||||||
*/
|
*/
|
||||||
tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
tSqlExpr *tSqlExprCreate(tSqlExpr *pLeft, tSqlExpr *pRight, int32_t optrType) {
|
||||||
tSQLExpr *pExpr = calloc(1, sizeof(tSQLExpr));
|
tSqlExpr *pExpr = calloc(1, sizeof(tSqlExpr));
|
||||||
|
|
||||||
pExpr->type = SQL_NODE_EXPR;
|
pExpr->type = SQL_NODE_EXPR;
|
||||||
if (pLeft != NULL && pRight != NULL && (optrType != TK_IN)) {
|
if (pLeft != NULL && pRight != NULL && (optrType != TK_IN)) {
|
||||||
|
@ -291,9 +286,9 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
||||||
pExpr->tokenId = optrType;
|
pExpr->tokenId = optrType;
|
||||||
pExpr->pLeft = pLeft;
|
pExpr->pLeft = pLeft;
|
||||||
|
|
||||||
tSQLExpr *pRSub = calloc(1, sizeof(tSQLExpr));
|
tSqlExpr *pRSub = calloc(1, sizeof(tSqlExpr));
|
||||||
pRSub->tokenId = TK_SET; // TODO refactor .....
|
pRSub->tokenId = TK_SET; // TODO refactor .....
|
||||||
pRSub->pParam = (tSQLExprList *)pRight;
|
pRSub->pParam = (SArray *)pRight;
|
||||||
|
|
||||||
pExpr->pRight = pRSub;
|
pExpr->pRight = pRSub;
|
||||||
} else {
|
} else {
|
||||||
|
@ -301,7 +296,7 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
||||||
pExpr->pLeft = pLeft;
|
pExpr->pLeft = pLeft;
|
||||||
|
|
||||||
if (pLeft != NULL && pRight == NULL) {
|
if (pLeft != NULL && pRight == NULL) {
|
||||||
pRight = calloc(1, sizeof(tSQLExpr));
|
pRight = calloc(1, sizeof(tSqlExpr));
|
||||||
}
|
}
|
||||||
|
|
||||||
pExpr->pRight = pRight;
|
pExpr->pRight = pRight;
|
||||||
|
@ -310,10 +305,8 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
||||||
return pExpr;
|
return pExpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tSqlExpr *tSqlExprClone(tSqlExpr *pSrc) {
|
||||||
|
tSqlExpr *pExpr = calloc(1, sizeof(tSqlExpr));
|
||||||
tSQLExpr *tSqlExprClone(tSQLExpr *pSrc) {
|
|
||||||
tSQLExpr *pExpr = calloc(1, sizeof(tSQLExpr));
|
|
||||||
|
|
||||||
memcpy(pExpr, pSrc, sizeof(*pSrc));
|
memcpy(pExpr, pSrc, sizeof(*pSrc));
|
||||||
|
|
||||||
|
@ -327,12 +320,51 @@ tSQLExpr *tSqlExprClone(tSQLExpr *pSrc) {
|
||||||
|
|
||||||
//we don't clone pParam now because clone is only used for between/and
|
//we don't clone pParam now because clone is only used for between/and
|
||||||
assert(pSrc->pParam == NULL);
|
assert(pSrc->pParam == NULL);
|
||||||
|
|
||||||
return pExpr;
|
return pExpr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tSqlExprCompact(tSqlExpr** pExpr) {
|
||||||
|
if (*pExpr == NULL || tSqlExprIsParentOfLeaf(*pExpr)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void tSqlExprNodeDestroy(tSQLExpr *pExpr) {
|
if ((*pExpr)->pLeft) {
|
||||||
|
tSqlExprCompact(&(*pExpr)->pLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*pExpr)->pRight) {
|
||||||
|
tSqlExprCompact(&(*pExpr)->pRight);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*pExpr)->pLeft == NULL && (*pExpr)->pRight == NULL && ((*pExpr)->tokenId == TK_OR || (*pExpr)->tokenId == TK_AND)) {
|
||||||
|
tSqlExprDestroy(*pExpr);
|
||||||
|
*pExpr = NULL;
|
||||||
|
} else if ((*pExpr)->pLeft == NULL && (*pExpr)->pRight != NULL) {
|
||||||
|
tSqlExpr* tmpPtr = (*pExpr)->pRight;
|
||||||
|
(*pExpr)->pRight = NULL;
|
||||||
|
|
||||||
|
tSqlExprDestroy(*pExpr);
|
||||||
|
(*pExpr) = tmpPtr;
|
||||||
|
} else if ((*pExpr)->pRight == NULL && (*pExpr)->pLeft != NULL) {
|
||||||
|
tSqlExpr* tmpPtr = (*pExpr)->pLeft;
|
||||||
|
(*pExpr)->pLeft = NULL;
|
||||||
|
|
||||||
|
tSqlExprDestroy(*pExpr);
|
||||||
|
(*pExpr) = tmpPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tSqlExprIsLeaf(tSqlExpr* pExpr) {
|
||||||
|
return (pExpr->pRight == NULL && pExpr->pLeft == NULL) &&
|
||||||
|
(pExpr->tokenId == 0 || pExpr->tokenId == TK_ID || (pExpr->tokenId >= TK_BOOL && pExpr->tokenId <= TK_NCHAR) || pExpr->tokenId == TK_SET);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool tSqlExprIsParentOfLeaf(tSqlExpr* pExpr) {
|
||||||
|
return (pExpr->pLeft != NULL && pExpr->pRight != NULL) &&
|
||||||
|
(tSqlExprIsLeaf(pExpr->pLeft) && tSqlExprIsLeaf(pExpr->pRight));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void doDestroySqlExprNode(tSqlExpr *pExpr) {
|
||||||
if (pExpr == NULL) {
|
if (pExpr == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -342,11 +374,10 @@ void tSqlExprNodeDestroy(tSQLExpr *pExpr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tSqlExprListDestroy(pExpr->pParam);
|
tSqlExprListDestroy(pExpr->pParam);
|
||||||
|
|
||||||
free(pExpr);
|
free(pExpr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tSqlExprDestroy(tSQLExpr *pExpr) {
|
void tSqlExprDestroy(tSqlExpr *pExpr) {
|
||||||
if (pExpr == NULL) {
|
if (pExpr == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -355,7 +386,8 @@ void tSqlExprDestroy(tSQLExpr *pExpr) {
|
||||||
pExpr->pLeft = NULL;
|
pExpr->pLeft = NULL;
|
||||||
tSqlExprDestroy(pExpr->pRight);
|
tSqlExprDestroy(pExpr->pRight);
|
||||||
pExpr->pRight = NULL;
|
pExpr->pRight = NULL;
|
||||||
tSqlExprNodeDestroy(pExpr);
|
|
||||||
|
doDestroySqlExprNode(pExpr);
|
||||||
}
|
}
|
||||||
|
|
||||||
SArray *tVariantListAppendToken(SArray *pList, SStrToken *pToken, uint8_t order) {
|
SArray *tVariantListAppendToken(SArray *pList, SStrToken *pToken, uint8_t order) {
|
||||||
|
@ -411,13 +443,13 @@ SArray *tVariantListInsert(SArray *pList, tVariant *pVar, uint8_t sortOrder, int
|
||||||
return pList;
|
return pList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDbName(SStrToken *pCpxName, SStrToken *pDb) {
|
void tSetDbName(SStrToken *pCpxName, SStrToken *pDb) {
|
||||||
pCpxName->type = pDb->type;
|
pCpxName->type = pDb->type;
|
||||||
pCpxName->z = pDb->z;
|
pCpxName->z = pDb->z;
|
||||||
pCpxName->n = pDb->n;
|
pCpxName->n = pDb->n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tSqlSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType) {
|
void tSetColumnInfo(TAOS_FIELD *pField, SStrToken *pName, TAOS_FIELD *pType) {
|
||||||
int32_t maxLen = sizeof(pField->name) / sizeof(pField->name[0]);
|
int32_t maxLen = sizeof(pField->name) / sizeof(pField->name[0]);
|
||||||
|
|
||||||
// truncate the column name
|
// truncate the column name
|
||||||
|
@ -485,7 +517,7 @@ static int32_t tryParseNameTwoParts(SStrToken *type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
|
void tSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
|
||||||
// set the field type invalid
|
// set the field type invalid
|
||||||
pField->type = -1;
|
pField->type = -1;
|
||||||
pField->name[0] = 0;
|
pField->name[0] = 0;
|
||||||
|
@ -550,43 +582,59 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
|
||||||
/*
|
/*
|
||||||
* extract the select info out of sql string
|
* extract the select info out of sql string
|
||||||
*/
|
*/
|
||||||
SQuerySQL *tSetQuerySqlNode(SStrToken *pSelectToken, tSQLExprList *pSelection, SArray *pFrom, tSQLExpr *pWhere,
|
SQuerySqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelectList, SArray *pFrom, tSqlExpr *pWhere,
|
||||||
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *pSession,
|
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *pSession,
|
||||||
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pGLimit) {
|
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *psLimit) {
|
||||||
assert(pSelection != NULL);
|
assert(pSelectList != NULL);
|
||||||
|
|
||||||
SQuerySQL *pQuery = calloc(1, sizeof(SQuerySQL));
|
SQuerySqlNode *pSqlNode = calloc(1, sizeof(SQuerySqlNode));
|
||||||
pQuery->selectToken = *pSelectToken;
|
|
||||||
pQuery->selectToken.n = (uint32_t)strlen(pQuery->selectToken.z); // all later sql string are belonged to the stream sql
|
|
||||||
|
|
||||||
pQuery->pSelection = pSelection;
|
// all later sql string are belonged to the stream sql
|
||||||
pQuery->from = pFrom;
|
pSqlNode->sqlstr = *pSelectToken;
|
||||||
pQuery->pGroupby = pGroupby;
|
pSqlNode->sqlstr.n = (uint32_t)strlen(pSqlNode->sqlstr.z);
|
||||||
pQuery->pSortOrder = pSortOrder;
|
|
||||||
pQuery->pWhere = pWhere;
|
pSqlNode->pSelectList = pSelectList;
|
||||||
|
pSqlNode->from = pFrom;
|
||||||
|
pSqlNode->pGroupby = pGroupby;
|
||||||
|
pSqlNode->pSortOrder = pSortOrder;
|
||||||
|
pSqlNode->pWhere = pWhere;
|
||||||
|
pSqlNode->fillType = pFill;
|
||||||
|
|
||||||
if (pLimit != NULL) {
|
if (pLimit != NULL) {
|
||||||
pQuery->limit = *pLimit;
|
pSqlNode->limit = *pLimit;
|
||||||
|
} else {
|
||||||
|
pSqlNode->limit.limit = -1;
|
||||||
|
pSqlNode->limit.offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pGLimit != NULL) {
|
if (psLimit != NULL) {
|
||||||
pQuery->slimit = *pGLimit;
|
pSqlNode->slimit = *psLimit;
|
||||||
|
} else {
|
||||||
|
pSqlNode->slimit.limit = -1;
|
||||||
|
pSqlNode->slimit.offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pInterval != NULL) {
|
if (pInterval != NULL) {
|
||||||
pQuery->interval = *pInterval;
|
pSqlNode->interval = *pInterval;
|
||||||
|
} else {
|
||||||
|
TPARSER_SET_NONE_TOKEN(pSqlNode->interval.interval);
|
||||||
|
TPARSER_SET_NONE_TOKEN(pSqlNode->interval.offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSliding != NULL) {
|
if (pSliding != NULL) {
|
||||||
pQuery->sliding = *pSliding;
|
pSqlNode->sliding = *pSliding;
|
||||||
|
} else {
|
||||||
|
TPARSER_SET_NONE_TOKEN(pSqlNode->sliding);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSession != NULL) {
|
if (pSession != NULL) {
|
||||||
pQuery->sessionVal = *pSession;
|
pSqlNode->sessionVal = *pSession;
|
||||||
|
} else {
|
||||||
|
TPARSER_SET_NONE_TOKEN(pSqlNode->sessionVal.gap);
|
||||||
|
TPARSER_SET_NONE_TOKEN(pSqlNode->sessionVal.col);
|
||||||
}
|
}
|
||||||
|
|
||||||
pQuery->fillType = pFill;
|
return pSqlNode;
|
||||||
return pQuery;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void freeVariant(void *pItem) {
|
static void freeVariant(void *pItem) {
|
||||||
|
@ -602,14 +650,14 @@ void freeCreateTableInfo(void* p) {
|
||||||
tfree(pInfo->tagdata.data);
|
tfree(pInfo->tagdata.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doDestroyQuerySql(SQuerySQL *pQuerySql) {
|
void destroyQuerySqlNode(SQuerySqlNode *pQuerySql) {
|
||||||
if (pQuerySql == NULL) {
|
if (pQuerySql == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tSqlExprListDestroy(pQuerySql->pSelection);
|
tSqlExprListDestroy(pQuerySql->pSelectList);
|
||||||
|
|
||||||
pQuerySql->pSelection = NULL;
|
pQuerySql->pSelectList = NULL;
|
||||||
|
|
||||||
tSqlExprDestroy(pQuerySql->pWhere);
|
tSqlExprDestroy(pQuerySql->pWhere);
|
||||||
pQuerySql->pWhere = NULL;
|
pQuerySql->pWhere = NULL;
|
||||||
|
@ -635,15 +683,15 @@ void destroyAllSelectClause(SSubclauseInfo *pClause) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int32_t i = 0; i < pClause->numOfClause; ++i) {
|
for(int32_t i = 0; i < pClause->numOfClause; ++i) {
|
||||||
SQuerySQL *pQuerySql = pClause->pClause[i];
|
SQuerySqlNode *pQuerySql = pClause->pClause[i];
|
||||||
doDestroyQuerySql(pQuerySql);
|
destroyQuerySqlNode(pQuerySql);
|
||||||
}
|
}
|
||||||
|
|
||||||
tfree(pClause->pClause);
|
tfree(pClause->pClause);
|
||||||
}
|
}
|
||||||
|
|
||||||
SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSelect, int32_t type) {
|
SCreateTableSql *tSetCreateTableInfo(SArray *pCols, SArray *pTags, SQuerySqlNode *pSelect, int32_t type) {
|
||||||
SCreateTableSQL *pCreate = calloc(1, sizeof(SCreateTableSQL));
|
SCreateTableSql *pCreate = calloc(1, sizeof(SCreateTableSql));
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TSQL_CREATE_TABLE: {
|
case TSQL_CREATE_TABLE: {
|
||||||
|
@ -687,7 +735,7 @@ SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagNam
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
SAlterTableInfo *tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableType) {
|
SAlterTableInfo *tSetAlterTableInfo(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableType) {
|
||||||
SAlterTableInfo *pAlterTable = calloc(1, sizeof(SAlterTableInfo));
|
SAlterTableInfo *pAlterTable = calloc(1, sizeof(SAlterTableInfo));
|
||||||
|
|
||||||
pAlterTable->name = *pTableName;
|
pAlterTable->name = *pTableName;
|
||||||
|
@ -709,8 +757,8 @@ SAlterTableInfo *tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArra
|
||||||
return pAlterTable;
|
return pAlterTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* destroyCreateTableSql(SCreateTableSQL* pCreate) {
|
void* destroyCreateTableSql(SCreateTableSql* pCreate) {
|
||||||
doDestroyQuerySql(pCreate->pSelect);
|
destroyQuerySqlNode(pCreate->pSelect);
|
||||||
|
|
||||||
taosArrayDestroy(pCreate->colInfo.pColumns);
|
taosArrayDestroy(pCreate->colInfo.pColumns);
|
||||||
taosArrayDestroy(pCreate->colInfo.pTagColumns);
|
taosArrayDestroy(pCreate->colInfo.pTagColumns);
|
||||||
|
@ -757,7 +805,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) {
|
||||||
return pSubclause;
|
return pSubclause;
|
||||||
}
|
}
|
||||||
|
|
||||||
pSubclause->pClause = (SQuerySQL**) tmp;
|
pSubclause->pClause = (SQuerySqlNode**) tmp;
|
||||||
|
|
||||||
pSubclause->pClause[newSize - 1] = pSqlExprInfo;
|
pSubclause->pClause[newSize - 1] = pSqlExprInfo;
|
||||||
pSubclause->numOfClause++;
|
pSubclause->numOfClause++;
|
||||||
|
@ -765,7 +813,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) {
|
||||||
return pSubclause;
|
return pSubclause;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSqlInfo*setSqlInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pTableName, int32_t type) {
|
SSqlInfo* setSqlInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pTableName, int32_t type) {
|
||||||
pInfo->type = type;
|
pInfo->type = type;
|
||||||
|
|
||||||
if (type == TSDB_SQL_SELECT) {
|
if (type == TSDB_SQL_SELECT) {
|
||||||
|
@ -788,7 +836,7 @@ SSubclauseInfo* appendSelectClause(SSubclauseInfo *pQueryInfo, void *pSubclause)
|
||||||
return pQueryInfo;
|
return pQueryInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
pQueryInfo->pClause = (SQuerySQL**) tmp;
|
pQueryInfo->pClause = (SQuerySqlNode**) tmp;
|
||||||
pQueryInfo->pClause[pQueryInfo->numOfClause++] = pSubclause;
|
pQueryInfo->pClause[pQueryInfo->numOfClause++] = pSubclause;
|
||||||
|
|
||||||
return pQueryInfo;
|
return pQueryInfo;
|
||||||
|
@ -799,7 +847,7 @@ void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken
|
||||||
pInfo->pCreateTableInfo->existCheck = (pIfNotExists->n != 0);
|
pInfo->pCreateTableInfo->existCheck = (pIfNotExists->n != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) {
|
void setDCLSqlElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) {
|
||||||
pInfo->type = type;
|
pInfo->type = type;
|
||||||
if (nParam == 0) {
|
if (nParam == 0) {
|
||||||
return;
|
return;
|
|
@ -104,15 +104,14 @@ typedef union {
|
||||||
int yyinit;
|
int yyinit;
|
||||||
ParseTOKENTYPE yy0;
|
ParseTOKENTYPE yy0;
|
||||||
SCreatedTableInfo yy96;
|
SCreatedTableInfo yy96;
|
||||||
tSQLExpr* yy178;
|
tSqlExpr* yy178;
|
||||||
SCreateAcctInfo yy187;
|
SCreateAcctInfo yy187;
|
||||||
SQuerySQL* yy216;
|
SCreateTableSql* yy230;
|
||||||
SCreateTableSQL* yy230;
|
|
||||||
SArray* yy285;
|
SArray* yy285;
|
||||||
TAOS_FIELD yy295;
|
TAOS_FIELD yy295;
|
||||||
|
SQuerySqlNode* yy342;
|
||||||
tVariant yy362;
|
tVariant yy362;
|
||||||
SIntervalVal yy376;
|
SIntervalVal yy376;
|
||||||
tSQLExprList* yy434;
|
|
||||||
SLimitVal yy438;
|
SLimitVal yy438;
|
||||||
int yy460;
|
int yy460;
|
||||||
SSubclauseInfo* yy513;
|
SSubclauseInfo* yy513;
|
||||||
|
@ -1426,14 +1425,14 @@ destroyCreateTableSql((yypminor->yy230));
|
||||||
break;
|
break;
|
||||||
case 235: /* select */
|
case 235: /* select */
|
||||||
{
|
{
|
||||||
doDestroyQuerySql((yypminor->yy216));
|
destroyQuerySqlNode((yypminor->yy342));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 238: /* selcollist */
|
case 238: /* selcollist */
|
||||||
case 251: /* sclp */
|
case 251: /* sclp */
|
||||||
case 262: /* exprlist */
|
case 262: /* exprlist */
|
||||||
{
|
{
|
||||||
tSqlExprListDestroy((yypminor->yy434));
|
tSqlExprListDestroy((yypminor->yy285));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 240: /* where_opt */
|
case 240: /* where_opt */
|
||||||
|
@ -2156,12 +2155,12 @@ static void yy_reduce(
|
||||||
case 20: /* cmd ::= SHOW CREATE TABLE ids cpxName */
|
case 20: /* cmd ::= SHOW CREATE TABLE ids cpxName */
|
||||||
{
|
{
|
||||||
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
|
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &yymsp[-1].minor.yy0);
|
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &yymsp[-1].minor.yy0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 21: /* cmd ::= SHOW CREATE DATABASE ids */
|
case 21: /* cmd ::= SHOW CREATE DATABASE ids */
|
||||||
{
|
{
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &yymsp[0].minor.yy0);
|
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &yymsp[0].minor.yy0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 22: /* cmd ::= SHOW dbPrefix TABLES */
|
case 22: /* cmd ::= SHOW dbPrefix TABLES */
|
||||||
|
@ -2182,21 +2181,21 @@ static void yy_reduce(
|
||||||
case 25: /* cmd ::= SHOW dbPrefix STABLES LIKE ids */
|
case 25: /* cmd ::= SHOW dbPrefix STABLES LIKE ids */
|
||||||
{
|
{
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &yymsp[-3].minor.yy0);
|
tSetDbName(&token, &yymsp[-3].minor.yy0);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &yymsp[0].minor.yy0);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &yymsp[0].minor.yy0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 26: /* cmd ::= SHOW dbPrefix VGROUPS */
|
case 26: /* cmd ::= SHOW dbPrefix VGROUPS */
|
||||||
{
|
{
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &yymsp[-1].minor.yy0);
|
tSetDbName(&token, &yymsp[-1].minor.yy0);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 27: /* cmd ::= SHOW dbPrefix VGROUPS ids */
|
case 27: /* cmd ::= SHOW dbPrefix VGROUPS ids */
|
||||||
{
|
{
|
||||||
SStrToken token;
|
SStrToken token;
|
||||||
setDbName(&token, &yymsp[-2].minor.yy0);
|
tSetDbName(&token, &yymsp[-2].minor.yy0);
|
||||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, &yymsp[0].minor.yy0);
|
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, &yymsp[0].minor.yy0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2219,21 +2218,21 @@ static void yy_reduce(
|
||||||
{ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &yymsp[0].minor.yy0, &yymsp[-1].minor.yy0, TSDB_DB_TYPE_TOPIC, -1); }
|
{ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &yymsp[0].minor.yy0, &yymsp[-1].minor.yy0, TSDB_DB_TYPE_TOPIC, -1); }
|
||||||
break;
|
break;
|
||||||
case 32: /* cmd ::= DROP DNODE ids */
|
case 32: /* cmd ::= DROP DNODE ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 33: /* cmd ::= DROP USER ids */
|
case 33: /* cmd ::= DROP USER ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_DROP_USER, 1, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 34: /* cmd ::= DROP ACCOUNT ids */
|
case 34: /* cmd ::= DROP ACCOUNT ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 35: /* cmd ::= USE ids */
|
case 35: /* cmd ::= USE ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_USE_DB, 1, &yymsp[0].minor.yy0);}
|
{ setDCLSqlElems(pInfo, TSDB_SQL_USE_DB, 1, &yymsp[0].minor.yy0);}
|
||||||
break;
|
break;
|
||||||
case 36: /* cmd ::= DESCRIBE ids cpxName */
|
case 36: /* cmd ::= DESCRIBE ids cpxName */
|
||||||
{
|
{
|
||||||
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
|
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
|
||||||
setDCLSQLElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &yymsp[-1].minor.yy0);
|
setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &yymsp[-1].minor.yy0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 37: /* cmd ::= ALTER USER ids PASS ids */
|
case 37: /* cmd ::= ALTER USER ids PASS ids */
|
||||||
|
@ -2243,16 +2242,16 @@ static void yy_reduce(
|
||||||
{ setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &yymsp[-2].minor.yy0, NULL, &yymsp[0].minor.yy0);}
|
{ setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &yymsp[-2].minor.yy0, NULL, &yymsp[0].minor.yy0);}
|
||||||
break;
|
break;
|
||||||
case 39: /* cmd ::= ALTER DNODE ids ids */
|
case 39: /* cmd ::= ALTER DNODE ids ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 40: /* cmd ::= ALTER DNODE ids ids ids */
|
case 40: /* cmd ::= ALTER DNODE ids ids ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 41: /* cmd ::= ALTER LOCAL ids */
|
case 41: /* cmd ::= ALTER LOCAL ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 42: /* cmd ::= ALTER LOCAL ids ids */
|
case 42: /* cmd ::= ALTER LOCAL ids ids */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
{ setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
|
||||||
break;
|
break;
|
||||||
case 43: /* cmd ::= ALTER DATABASE ids alter_db_optr */
|
case 43: /* cmd ::= ALTER DATABASE ids alter_db_optr */
|
||||||
case 44: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==44);
|
case 44: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==44);
|
||||||
|
@ -2281,7 +2280,7 @@ static void yy_reduce(
|
||||||
{ yymsp[-2].minor.yy0.n = 1;}
|
{ yymsp[-2].minor.yy0.n = 1;}
|
||||||
break;
|
break;
|
||||||
case 53: /* cmd ::= CREATE DNODE ids */
|
case 53: /* cmd ::= CREATE DNODE ids */
|
||||||
{ 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 54: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
|
case 54: /* 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.yy187);}
|
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy187);}
|
||||||
|
@ -2437,7 +2436,7 @@ static void yy_reduce(
|
||||||
case 123: /* typename ::= ids */
|
case 123: /* typename ::= ids */
|
||||||
{
|
{
|
||||||
yymsp[0].minor.yy0.type = 0;
|
yymsp[0].minor.yy0.type = 0;
|
||||||
tSqlSetColumnType (&yylhsminor.yy295, &yymsp[0].minor.yy0);
|
tSetColumnType (&yylhsminor.yy295, &yymsp[0].minor.yy0);
|
||||||
}
|
}
|
||||||
yymsp[0].minor.yy295 = yylhsminor.yy295;
|
yymsp[0].minor.yy295 = yylhsminor.yy295;
|
||||||
break;
|
break;
|
||||||
|
@ -2445,10 +2444,10 @@ static void yy_reduce(
|
||||||
{
|
{
|
||||||
if (yymsp[-1].minor.yy525 <= 0) {
|
if (yymsp[-1].minor.yy525 <= 0) {
|
||||||
yymsp[-3].minor.yy0.type = 0;
|
yymsp[-3].minor.yy0.type = 0;
|
||||||
tSqlSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
||||||
} else {
|
} else {
|
||||||
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy525; // negative value of name length
|
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy525; // negative value of name length
|
||||||
tSqlSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
yymsp[-3].minor.yy295 = yylhsminor.yy295;
|
yymsp[-3].minor.yy295 = yylhsminor.yy295;
|
||||||
|
@ -2457,7 +2456,7 @@ static void yy_reduce(
|
||||||
{
|
{
|
||||||
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);
|
||||||
tSqlSetColumnType (&yylhsminor.yy295, &yymsp[-1].minor.yy0);
|
tSetColumnType (&yylhsminor.yy295, &yymsp[-1].minor.yy0);
|
||||||
}
|
}
|
||||||
yymsp[-1].minor.yy295 = yylhsminor.yy295;
|
yymsp[-1].minor.yy295 = yylhsminor.yy295;
|
||||||
break;
|
break;
|
||||||
|
@ -2476,7 +2475,7 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 133: /* create_table_list ::= create_from_stable */
|
case 133: /* 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.yy96);
|
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy96);
|
||||||
|
@ -2494,7 +2493,7 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 135: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
|
case 135: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
|
||||||
{
|
{
|
||||||
yylhsminor.yy230 = tSetCreateSqlElems(yymsp[-1].minor.yy285, NULL, NULL, TSQL_CREATE_TABLE);
|
yylhsminor.yy230 = tSetCreateTableInfo(yymsp[-1].minor.yy285, NULL, NULL, TSQL_CREATE_TABLE);
|
||||||
setSqlInfo(pInfo, yylhsminor.yy230, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, yylhsminor.yy230, 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;
|
||||||
|
@ -2504,7 +2503,7 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 136: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
|
case 136: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
|
||||||
{
|
{
|
||||||
yylhsminor.yy230 = tSetCreateSqlElems(yymsp[-5].minor.yy285, yymsp[-1].minor.yy285, NULL, TSQL_CREATE_STABLE);
|
yylhsminor.yy230 = tSetCreateTableInfo(yymsp[-5].minor.yy285, yymsp[-1].minor.yy285, NULL, TSQL_CREATE_STABLE);
|
||||||
setSqlInfo(pInfo, yylhsminor.yy230, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, yylhsminor.yy230, 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;
|
||||||
|
@ -2538,7 +2537,7 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 141: /* create_table_args ::= ifnotexists ids cpxName AS select */
|
case 141: /* create_table_args ::= ifnotexists ids cpxName AS select */
|
||||||
{
|
{
|
||||||
yylhsminor.yy230 = tSetCreateSqlElems(NULL, NULL, yymsp[0].minor.yy216, TSQL_CREATE_STREAM);
|
yylhsminor.yy230 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy342, TSQL_CREATE_STREAM);
|
||||||
setSqlInfo(pInfo, yylhsminor.yy230, NULL, TSDB_SQL_CREATE_TABLE);
|
setSqlInfo(pInfo, yylhsminor.yy230, NULL, TSDB_SQL_CREATE_TABLE);
|
||||||
|
|
||||||
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
|
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
|
||||||
|
@ -2556,7 +2555,7 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 144: /* column ::= ids typename */
|
case 144: /* column ::= ids typename */
|
||||||
{
|
{
|
||||||
tSqlSetColumnInfo(&yylhsminor.yy295, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy295);
|
tSetColumnInfo(&yylhsminor.yy295, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy295);
|
||||||
}
|
}
|
||||||
yymsp[-1].minor.yy295 = yylhsminor.yy295;
|
yymsp[-1].minor.yy295 = yylhsminor.yy295;
|
||||||
break;
|
break;
|
||||||
|
@ -2593,23 +2592,23 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 156: /* select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
|
case 156: /* select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
|
||||||
{
|
{
|
||||||
yylhsminor.yy216 = tSetQuerySqlNode(&yymsp[-12].minor.yy0, yymsp[-11].minor.yy434, yymsp[-10].minor.yy285, yymsp[-9].minor.yy178, yymsp[-4].minor.yy285, yymsp[-3].minor.yy285, &yymsp[-8].minor.yy376, &yymsp[-7].minor.yy523, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy285, &yymsp[0].minor.yy438, &yymsp[-1].minor.yy438);
|
yylhsminor.yy342 = tSetQuerySqlNode(&yymsp[-12].minor.yy0, yymsp[-11].minor.yy285, yymsp[-10].minor.yy285, yymsp[-9].minor.yy178, yymsp[-4].minor.yy285, yymsp[-3].minor.yy285, &yymsp[-8].minor.yy376, &yymsp[-7].minor.yy523, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy285, &yymsp[0].minor.yy438, &yymsp[-1].minor.yy438);
|
||||||
}
|
}
|
||||||
yymsp[-12].minor.yy216 = yylhsminor.yy216;
|
yymsp[-12].minor.yy342 = yylhsminor.yy342;
|
||||||
break;
|
break;
|
||||||
case 157: /* union ::= select */
|
case 157: /* union ::= select */
|
||||||
{ yylhsminor.yy513 = setSubclause(NULL, yymsp[0].minor.yy216); }
|
{ yylhsminor.yy513 = setSubclause(NULL, yymsp[0].minor.yy342); }
|
||||||
yymsp[0].minor.yy513 = yylhsminor.yy513;
|
yymsp[0].minor.yy513 = yylhsminor.yy513;
|
||||||
break;
|
break;
|
||||||
case 158: /* union ::= LP union RP */
|
case 158: /* union ::= LP union RP */
|
||||||
{ yymsp[-2].minor.yy513 = yymsp[-1].minor.yy513; }
|
{ yymsp[-2].minor.yy513 = yymsp[-1].minor.yy513; }
|
||||||
break;
|
break;
|
||||||
case 159: /* union ::= union UNION ALL select */
|
case 159: /* union ::= union UNION ALL select */
|
||||||
{ yylhsminor.yy513 = appendSelectClause(yymsp[-3].minor.yy513, yymsp[0].minor.yy216); }
|
{ yylhsminor.yy513 = appendSelectClause(yymsp[-3].minor.yy513, yymsp[0].minor.yy342); }
|
||||||
yymsp[-3].minor.yy513 = yylhsminor.yy513;
|
yymsp[-3].minor.yy513 = yylhsminor.yy513;
|
||||||
break;
|
break;
|
||||||
case 160: /* union ::= union UNION ALL LP select RP */
|
case 160: /* union ::= union UNION ALL LP select RP */
|
||||||
{ yylhsminor.yy513 = appendSelectClause(yymsp[-5].minor.yy513, yymsp[-1].minor.yy216); }
|
{ yylhsminor.yy513 = appendSelectClause(yymsp[-5].minor.yy513, yymsp[-1].minor.yy342); }
|
||||||
yymsp[-5].minor.yy513 = yylhsminor.yy513;
|
yymsp[-5].minor.yy513 = yylhsminor.yy513;
|
||||||
break;
|
break;
|
||||||
case 161: /* cmd ::= union */
|
case 161: /* cmd ::= union */
|
||||||
|
@ -2617,29 +2616,30 @@ static void yy_reduce(
|
||||||
break;
|
break;
|
||||||
case 162: /* select ::= SELECT selcollist */
|
case 162: /* select ::= SELECT selcollist */
|
||||||
{
|
{
|
||||||
yylhsminor.yy216 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy434, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
yylhsminor.yy342 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy285, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
yymsp[-1].minor.yy216 = yylhsminor.yy216;
|
yymsp[-1].minor.yy342 = yylhsminor.yy342;
|
||||||
break;
|
break;
|
||||||
case 163: /* sclp ::= selcollist COMMA */
|
case 163: /* sclp ::= selcollist COMMA */
|
||||||
{yylhsminor.yy434 = yymsp[-1].minor.yy434;}
|
{yylhsminor.yy285 = yymsp[-1].minor.yy285;}
|
||||||
yymsp[-1].minor.yy434 = yylhsminor.yy434;
|
yymsp[-1].minor.yy285 = yylhsminor.yy285;
|
||||||
break;
|
break;
|
||||||
case 164: /* sclp ::= */
|
case 164: /* sclp ::= */
|
||||||
{yymsp[1].minor.yy434 = 0;}
|
case 188: /* orderby_opt ::= */ yytestcase(yyruleno==188);
|
||||||
|
{yymsp[1].minor.yy285 = 0;}
|
||||||
break;
|
break;
|
||||||
case 165: /* selcollist ::= sclp distinct expr as */
|
case 165: /* selcollist ::= sclp distinct expr as */
|
||||||
{
|
{
|
||||||
yylhsminor.yy434 = tSqlExprListAppend(yymsp[-3].minor.yy434, yymsp[-1].minor.yy178, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
|
yylhsminor.yy285 = tSqlExprListAppend(yymsp[-3].minor.yy285, yymsp[-1].minor.yy178, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
|
||||||
}
|
}
|
||||||
yymsp[-3].minor.yy434 = yylhsminor.yy434;
|
yymsp[-3].minor.yy285 = yylhsminor.yy285;
|
||||||
break;
|
break;
|
||||||
case 166: /* selcollist ::= sclp STAR */
|
case 166: /* selcollist ::= sclp STAR */
|
||||||
{
|
{
|
||||||
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
|
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
|
||||||
yylhsminor.yy434 = tSqlExprListAppend(yymsp[-1].minor.yy434, pNode, 0, 0);
|
yylhsminor.yy285 = tSqlExprListAppend(yymsp[-1].minor.yy285, pNode, 0, 0);
|
||||||
}
|
}
|
||||||
yymsp[-1].minor.yy434 = yylhsminor.yy434;
|
yymsp[-1].minor.yy285 = yylhsminor.yy285;
|
||||||
break;
|
break;
|
||||||
case 167: /* as ::= AS ids */
|
case 167: /* as ::= AS ids */
|
||||||
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
|
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
|
||||||
|
@ -2744,9 +2744,6 @@ static void yy_reduce(
|
||||||
case 187: /* sliding_opt ::= */
|
case 187: /* sliding_opt ::= */
|
||||||
{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 188: /* orderby_opt ::= */
|
|
||||||
{yymsp[1].minor.yy285 = 0;}
|
|
||||||
break;
|
|
||||||
case 189: /* orderby_opt ::= ORDER BY sortlist */
|
case 189: /* orderby_opt ::= ORDER BY sortlist */
|
||||||
{yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;}
|
{yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;}
|
||||||
break;
|
break;
|
||||||
|
@ -2832,53 +2829,53 @@ static void yy_reduce(
|
||||||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 213: /* expr ::= ID */
|
case 213: /* expr ::= ID */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 214: /* expr ::= ID DOT ID */
|
case 214: /* expr ::= ID DOT ID */
|
||||||
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
|
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);}
|
||||||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 215: /* expr ::= ID DOT STAR */
|
case 215: /* expr ::= ID DOT STAR */
|
||||||
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
|
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);}
|
||||||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 216: /* expr ::= INTEGER */
|
case 216: /* expr ::= INTEGER */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 217: /* expr ::= MINUS INTEGER */
|
case 217: /* expr ::= MINUS INTEGER */
|
||||||
case 218: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==218);
|
case 218: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==218);
|
||||||
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
|
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);}
|
||||||
yymsp[-1].minor.yy178 = yylhsminor.yy178;
|
yymsp[-1].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 219: /* expr ::= FLOAT */
|
case 219: /* expr ::= FLOAT */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 220: /* expr ::= MINUS FLOAT */
|
case 220: /* expr ::= MINUS FLOAT */
|
||||||
case 221: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==221);
|
case 221: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==221);
|
||||||
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
|
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);}
|
||||||
yymsp[-1].minor.yy178 = yylhsminor.yy178;
|
yymsp[-1].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 222: /* expr ::= STRING */
|
case 222: /* expr ::= STRING */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 223: /* expr ::= NOW */
|
case 223: /* expr ::= NOW */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); }
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 224: /* expr ::= VARIABLE */
|
case 224: /* expr ::= VARIABLE */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 225: /* expr ::= BOOL */
|
case 225: /* expr ::= BOOL */
|
||||||
{ yylhsminor.yy178 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
|
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 226: /* expr ::= ID LP exprlist RP */
|
case 226: /* expr ::= ID LP exprlist RP */
|
||||||
{ yylhsminor.yy178 = tSqlExprCreateFunction(yymsp[-1].minor.yy434, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
|
{ yylhsminor.yy178 = tSqlExprCreateFunction(yymsp[-1].minor.yy285, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
|
||||||
yymsp[-3].minor.yy178 = yylhsminor.yy178;
|
yymsp[-3].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 227: /* expr ::= ID LP STAR RP */
|
case 227: /* expr ::= ID LP STAR RP */
|
||||||
|
@ -2918,7 +2915,7 @@ static void yy_reduce(
|
||||||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 236: /* expr ::= expr BETWEEN expr AND expr */
|
case 236: /* expr ::= expr BETWEEN expr AND expr */
|
||||||
{ tSQLExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy178); yylhsminor.yy178 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy178, yymsp[-2].minor.yy178, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy178, TK_LE), TK_AND);}
|
{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy178); yylhsminor.yy178 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy178, yymsp[-2].minor.yy178, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy178, TK_LE), TK_AND);}
|
||||||
yymsp[-4].minor.yy178 = yylhsminor.yy178;
|
yymsp[-4].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 237: /* expr ::= expr AND expr */
|
case 237: /* expr ::= expr AND expr */
|
||||||
|
@ -2954,28 +2951,28 @@ static void yy_reduce(
|
||||||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 245: /* expr ::= expr IN LP exprlist RP */
|
case 245: /* expr ::= expr IN LP exprlist RP */
|
||||||
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-4].minor.yy178, (tSQLExpr*)yymsp[-1].minor.yy434, TK_IN); }
|
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-4].minor.yy178, (tSqlExpr*)yymsp[-1].minor.yy285, TK_IN); }
|
||||||
yymsp[-4].minor.yy178 = yylhsminor.yy178;
|
yymsp[-4].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 246: /* exprlist ::= exprlist COMMA expritem */
|
case 246: /* exprlist ::= exprlist COMMA expritem */
|
||||||
{yylhsminor.yy434 = tSqlExprListAppend(yymsp[-2].minor.yy434,yymsp[0].minor.yy178,0, 0);}
|
{yylhsminor.yy285 = tSqlExprListAppend(yymsp[-2].minor.yy285,yymsp[0].minor.yy178,0, 0);}
|
||||||
yymsp[-2].minor.yy434 = yylhsminor.yy434;
|
yymsp[-2].minor.yy285 = yylhsminor.yy285;
|
||||||
break;
|
break;
|
||||||
case 247: /* exprlist ::= expritem */
|
case 247: /* exprlist ::= expritem */
|
||||||
{yylhsminor.yy434 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);}
|
{yylhsminor.yy285 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);}
|
||||||
yymsp[0].minor.yy434 = yylhsminor.yy434;
|
yymsp[0].minor.yy285 = yylhsminor.yy285;
|
||||||
break;
|
break;
|
||||||
case 248: /* expritem ::= expr */
|
case 248: /* expritem ::= expr */
|
||||||
{yylhsminor.yy178 = yymsp[0].minor.yy178;}
|
{yylhsminor.yy178 = yymsp[0].minor.yy178;}
|
||||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||||
break;
|
break;
|
||||||
case 250: /* cmd ::= RESET QUERY CACHE */
|
case 250: /* cmd ::= RESET QUERY CACHE */
|
||||||
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
{ setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
||||||
break;
|
break;
|
||||||
case 251: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
|
case 251: /* 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 = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, 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;
|
||||||
|
@ -2986,14 +2983,14 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 253: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
|
case 253: /* 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 = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, 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;
|
||||||
|
@ -3004,7 +3001,7 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3018,7 +3015,7 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
|
A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3030,14 +3027,14 @@ static void yy_reduce(
|
||||||
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
|
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
|
||||||
A = tVariantListAppend(A, &yymsp[0].minor.yy362, -1);
|
A = tVariantListAppend(A, &yymsp[0].minor.yy362, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&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 257: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
|
case 257: /* 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 = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, 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;
|
||||||
|
@ -3048,14 +3045,14 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 259: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
|
case 259: /* 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 = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, 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;
|
||||||
|
@ -3066,7 +3063,7 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3080,7 +3077,7 @@ static void yy_reduce(
|
||||||
toTSDBType(yymsp[0].minor.yy0.type);
|
toTSDBType(yymsp[0].minor.yy0.type);
|
||||||
A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
|
A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tAlterTableSqlElems(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -469,11 +469,12 @@ if $data25 != 33 then
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10s) order by ts desc limit 1000;
|
sql select count(*),stddev(c1),count(c1),first(c2),last(c3) from sliding_tb0 where ts>'2000-1-1 00:00:00' and ts<'2000-1-1 00:00:01.002' and c2 >= 0 interval(30s) sliding(10s) order by ts desc limit 1000;
|
||||||
if $row != 1 then
|
if $row != 3 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
if $data00 != @99-12-31 23:59:40.000@ then
|
if $data00 != @00-01-01 00:00:00.000@ then
|
||||||
|
print expect 00-01-01 00:00:00.000, actual: $data00
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
|
@ -489,7 +490,28 @@ if $data03 != 33 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
print check boundary check crash at client side
|
if $data10 != @99-12-31 23:59:50.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data11 != 33 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data12 != 9.521904571 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data20 != @99-12-31 23:59:40.000@ then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data21 != 33 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data22 != 9.521904571 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
print ====================>check boundary check crash at client side
|
||||||
sql select count(*) from sliding_mt0 where ts>now and ts < now-1h;
|
sql select count(*) from sliding_mt0 where ts>now and ts < now-1h;
|
||||||
|
|
||||||
print ========================query on super table
|
print ========================query on super table
|
||||||
|
|
Loading…
Reference in New Issue