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 {
|
||||
SSqlInfo SQLInfo = qSQLParse(pSql->sqlstr);
|
||||
SSqlInfo SQLInfo = qSqlParse(pSql->sqlstr);
|
||||
ret = tscToSQLCmd(pSql, &SQLInfo);
|
||||
if (ret == TSDB_CODE_TSC_INVALID_SQL && pSql->parseRetry == 0 && SQLInfo.type == TSDB_SQL_NULL) {
|
||||
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);
|
||||
int32_t size = minMsgSize() + sizeof(SCMCreateTableMsg) + sizeof(SCreateTableMsg);
|
||||
|
||||
SCreateTableSQL *pCreateTableInfo = pInfo->pCreateTableInfo;
|
||||
SCreateTableSql *pCreateTableInfo = pInfo->pCreateTableInfo;
|
||||
if (pCreateTableInfo->type == TSQL_CREATE_TABLE_FROM_STABLE) {
|
||||
int32_t numOfTables = (int32_t)taosArrayGetSize(pInfo->pCreateTableInfo->childTableInfo);
|
||||
size += numOfTables * (sizeof(SCreateTableMsg) + TSDB_MAX_TAGS_LEN);
|
||||
|
@ -1359,7 +1359,7 @@ int tscEstimateCreateTableMsgLength(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
}
|
||||
|
||||
if (pCreateTableInfo->pSelect != NULL) {
|
||||
size += (pCreateTableInfo->pSelect->selectToken.n + 1);
|
||||
size += (pCreateTableInfo->pSelect->sqlstr.n + 1);
|
||||
}
|
||||
|
||||
return size + TSDB_EXTRA_PAYLOAD_SIZE;
|
||||
|
@ -1417,7 +1417,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
int32_t code = tNameExtractFullName(&pTableMetaInfo->name, pCreateMsg->tableName);
|
||||
assert(code == 0);
|
||||
|
||||
SCreateTableSQL *pCreateTable = pInfo->pCreateTableInfo;
|
||||
SCreateTableSql *pCreateTable = pInfo->pCreateTableInfo;
|
||||
|
||||
pCreateMsg->igExists = pCreateTable->existCheck ? 1 : 0;
|
||||
pCreateMsg->numOfColumns = htons(pCmd->numOfCols);
|
||||
|
@ -1440,11 +1440,11 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
|
||||
pMsg = (char *)pSchema;
|
||||
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);
|
||||
pCreateMsg->sqlLen = htons(pQuerySql->selectToken.n + 1);
|
||||
pMsg += pQuerySql->selectToken.n + 1;
|
||||
strncpy(pMsg, pQuerySql->sqlstr.z, pQuerySql->sqlstr.n + 1);
|
||||
pCreateMsg->sqlLen = htons(pQuerySql->sqlstr.n + 1);
|
||||
pMsg += pQuerySql->sqlstr.n + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,168 +27,6 @@ extern "C" {
|
|||
#include "tvariant.h"
|
||||
|
||||
#define ParseTOKENTYPE SStrToken
|
||||
extern char tTokenTypeSwitcher[13];
|
||||
|
||||
#define toTSDBType(x) \
|
||||
do { \
|
||||
if ((x) >= tListLen(tTokenTypeSwitcher)) { \
|
||||
(x) = TSDB_DATA_TYPE_BINARY; \
|
||||
} else { \
|
||||
(x) = tTokenTypeSwitcher[(x)]; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
typedef struct SLimitVal {
|
||||
int64_t limit;
|
||||
int64_t offset;
|
||||
} SLimitVal;
|
||||
|
||||
typedef struct SOrderVal {
|
||||
uint32_t order;
|
||||
int32_t orderColId;
|
||||
} SOrderVal;
|
||||
|
||||
typedef struct tVariantListItem {
|
||||
tVariant pVar;
|
||||
uint8_t sortOrder;
|
||||
} tVariantListItem;
|
||||
|
||||
typedef struct SIntervalVal {
|
||||
SStrToken interval;
|
||||
SStrToken offset;
|
||||
} SIntervalVal;
|
||||
|
||||
typedef struct SSessionWindowVal {
|
||||
SStrToken col;
|
||||
SStrToken gap;
|
||||
} SSessionWindowVal;
|
||||
|
||||
typedef struct SQuerySQL {
|
||||
struct tSQLExprList *pSelection; // select clause
|
||||
SArray * from; // from clause SArray<tVariantListItem>
|
||||
struct tSQLExpr * pWhere; // where clause [optional]
|
||||
SArray * pGroupby; // groupby clause, only for tags[optional], SArray<tVariantListItem>
|
||||
SArray * pSortOrder; // orderby [optional], SArray<tVariantListItem>
|
||||
SIntervalVal interval; // (interval, interval_offset) [optional]
|
||||
SSessionWindowVal sessionVal; // session window [optional]
|
||||
SStrToken sliding; // sliding window [optional]
|
||||
SLimitVal limit; // limit offset [optional]
|
||||
SLimitVal slimit; // group limit offset [optional]
|
||||
SArray * fillType; // fill type[optional], SArray<tVariantListItem>
|
||||
SStrToken selectToken; // sql string
|
||||
} SQuerySQL;
|
||||
|
||||
typedef struct SCreatedTableInfo {
|
||||
SStrToken name; // table name token
|
||||
SStrToken stableName; // super table name token , for using clause
|
||||
SArray *pTagNames; // create by using super table, tag name
|
||||
SArray *pTagVals; // create by using super table, tag value
|
||||
char *fullname; // table full name
|
||||
STagData tagdata; // true tag data, super table full name is in STagData
|
||||
int8_t igExist; // ignore if exists
|
||||
} SCreatedTableInfo;
|
||||
|
||||
typedef struct SCreateTableSQL {
|
||||
SStrToken name; // table name, create table [name] xxx
|
||||
int8_t type; // create normal table/from super table/ stream
|
||||
bool existCheck;
|
||||
|
||||
struct {
|
||||
SArray *pTagColumns; // SArray<TAOS_FIELD>
|
||||
SArray *pColumns; // SArray<TAOS_FIELD>
|
||||
} colInfo;
|
||||
|
||||
SArray *childTableInfo; // SArray<SCreatedTableInfo>
|
||||
SQuerySQL *pSelect;
|
||||
} SCreateTableSQL;
|
||||
|
||||
typedef struct SAlterTableInfo {
|
||||
SStrToken name;
|
||||
int16_t tableType;
|
||||
int16_t type;
|
||||
STagData tagData;
|
||||
SArray *pAddColumns; // SArray<TAOS_FIELD>
|
||||
SArray *varList; // set t=val or: change src dst, SArray<tVariantListItem>
|
||||
} SAlterTableInfo;
|
||||
|
||||
typedef struct SCreateDbInfo {
|
||||
SStrToken dbname;
|
||||
int32_t replica;
|
||||
int32_t cacheBlockSize;
|
||||
int32_t maxTablesPerVnode;
|
||||
int32_t numOfBlocks;
|
||||
int32_t daysPerFile;
|
||||
int32_t minRowsPerBlock;
|
||||
int32_t maxRowsPerBlock;
|
||||
int32_t fsyncPeriod;
|
||||
int64_t commitTime;
|
||||
int32_t walLevel;
|
||||
int32_t quorum;
|
||||
int32_t compressionLevel;
|
||||
SStrToken precision;
|
||||
bool ignoreExists;
|
||||
int8_t update;
|
||||
int8_t cachelast;
|
||||
SArray *keep;
|
||||
int8_t dbType;
|
||||
int16_t partitions;
|
||||
} SCreateDbInfo;
|
||||
|
||||
typedef struct SCreateAcctInfo {
|
||||
int32_t maxUsers;
|
||||
int32_t maxDbs;
|
||||
int32_t maxTimeSeries;
|
||||
int32_t maxStreams;
|
||||
int32_t maxPointsPerSecond;
|
||||
int64_t maxStorage;
|
||||
int64_t maxQueryTime;
|
||||
int32_t maxConnections;
|
||||
SStrToken stat;
|
||||
} SCreateAcctInfo;
|
||||
|
||||
typedef struct SShowInfo {
|
||||
uint8_t showType;
|
||||
SStrToken prefix;
|
||||
SStrToken pattern;
|
||||
} SShowInfo;
|
||||
|
||||
typedef struct SUserInfo {
|
||||
SStrToken user;
|
||||
SStrToken passwd;
|
||||
SStrToken privilege;
|
||||
int16_t type;
|
||||
} SUserInfo;
|
||||
|
||||
typedef struct SMiscInfo {
|
||||
SArray *a; // SArray<SStrToken>
|
||||
bool existsCheck;
|
||||
int16_t dbType;
|
||||
int16_t tableType;
|
||||
SUserInfo user;
|
||||
union {
|
||||
SCreateDbInfo dbOpt;
|
||||
SCreateAcctInfo acctOpt;
|
||||
SShowInfo showOpt;
|
||||
SStrToken id;
|
||||
};
|
||||
} SMiscInfo;
|
||||
|
||||
typedef struct SSubclauseInfo { // "UNION" multiple select sub-clause
|
||||
SQuerySQL **pClause;
|
||||
int32_t numOfClause;
|
||||
} SSubclauseInfo;
|
||||
|
||||
typedef struct SSqlInfo {
|
||||
int32_t type;
|
||||
bool valid;
|
||||
SSubclauseInfo subclauseInfo;
|
||||
char msg[256];
|
||||
union {
|
||||
SCreateTableSQL *pCreateTableInfo;
|
||||
SAlterTableInfo *pAlterInfo;
|
||||
SMiscInfo *pMiscInfo;
|
||||
};
|
||||
} SSqlInfo;
|
||||
|
||||
#define NON_ARITHMEIC_EXPR 0
|
||||
#define NORMAL_ARITHMETIC 1
|
||||
|
@ -201,36 +39,254 @@ enum SQL_NODE_TYPE {
|
|||
SQL_NODE_EXPR = 4,
|
||||
};
|
||||
|
||||
typedef struct tSQLExpr {
|
||||
uint16_t type; // sql node type
|
||||
uint32_t tokenId; // TK_FUNCTION: sql function, TK_LE: less than(binary expr)
|
||||
extern char tTokenTypeSwitcher[13];
|
||||
|
||||
#define toTSDBType(x) \
|
||||
do { \
|
||||
if ((x) >= tListLen(tTokenTypeSwitcher)) { \
|
||||
(x) = TSDB_DATA_TYPE_BINARY; \
|
||||
} else { \
|
||||
(x) = tTokenTypeSwitcher[(x)]; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define TPARSER_HAS_TOKEN(_t) ((_t).n > 0)
|
||||
#define TPARSER_SET_NONE_TOKEN(_t) ((_t).n = 0)
|
||||
|
||||
typedef struct SLimitVal {
|
||||
int64_t limit;
|
||||
int64_t offset;
|
||||
} SLimitVal;
|
||||
|
||||
typedef struct SOrderVal {
|
||||
uint32_t order;
|
||||
int32_t orderColId;
|
||||
} SOrderVal;
|
||||
|
||||
typedef struct tVariantListItem {
|
||||
tVariant pVar;
|
||||
uint8_t sortOrder;
|
||||
} tVariantListItem;
|
||||
|
||||
typedef struct SIntervalVal {
|
||||
SStrToken interval;
|
||||
SStrToken offset;
|
||||
} SIntervalVal;
|
||||
|
||||
typedef struct SSessionWindowVal {
|
||||
SStrToken col;
|
||||
SStrToken gap;
|
||||
} SSessionWindowVal;
|
||||
|
||||
typedef struct SQuerySqlNode {
|
||||
struct SArray *pSelectList; // select clause
|
||||
SArray *from; // from clause SArray<SQuerySqlNode>
|
||||
struct tSqlExpr *pWhere; // where clause [optional]
|
||||
SArray *pGroupby; // groupby clause, only for tags[optional], SArray<tVariantListItem>
|
||||
SArray *pSortOrder; // orderby [optional], SArray<tVariantListItem>
|
||||
SArray *fillType; // fill type[optional], SArray<tVariantListItem>
|
||||
SIntervalVal interval; // (interval, interval_offset) [optional]
|
||||
SSessionWindowVal sessionVal; // session window [optional]
|
||||
SStrToken sliding; // sliding window [optional]
|
||||
SLimitVal limit; // limit offset [optional]
|
||||
SLimitVal slimit; // group limit offset [optional]
|
||||
SStrToken sqlstr; // sql string in select clause
|
||||
} SQuerySqlNode;
|
||||
|
||||
typedef struct SCreatedTableInfo {
|
||||
SStrToken name; // table name token
|
||||
SStrToken stableName; // super table name token , for using clause
|
||||
SArray *pTagNames; // create by using super table, tag name
|
||||
SArray *pTagVals; // create by using super table, tag value
|
||||
char *fullname; // table full name
|
||||
STagData tagdata; // true tag data, super table full name is in STagData
|
||||
int8_t igExist; // ignore if exists
|
||||
} SCreatedTableInfo;
|
||||
|
||||
typedef struct SCreateTableSql {
|
||||
SStrToken name; // table name, create table [name] xxx
|
||||
int8_t type; // create normal table/from super table/ stream
|
||||
bool existCheck;
|
||||
|
||||
struct {
|
||||
SArray *pTagColumns; // SArray<TAOS_FIELD>
|
||||
SArray *pColumns; // SArray<TAOS_FIELD>
|
||||
} colInfo;
|
||||
|
||||
SArray *childTableInfo; // SArray<SCreatedTableInfo>
|
||||
SQuerySqlNode *pSelect;
|
||||
} SCreateTableSql;
|
||||
|
||||
typedef struct SAlterTableInfo {
|
||||
SStrToken name;
|
||||
int16_t tableType;
|
||||
int16_t type;
|
||||
STagData tagData;
|
||||
SArray *pAddColumns; // SArray<TAOS_FIELD>
|
||||
SArray *varList; // set t=val or: change src dst, SArray<tVariantListItem>
|
||||
} SAlterTableInfo;
|
||||
|
||||
typedef struct SCreateDbInfo {
|
||||
SStrToken dbname;
|
||||
int32_t replica;
|
||||
int32_t cacheBlockSize;
|
||||
int32_t maxTablesPerVnode;
|
||||
int32_t numOfBlocks;
|
||||
int32_t daysPerFile;
|
||||
int32_t minRowsPerBlock;
|
||||
int32_t maxRowsPerBlock;
|
||||
int32_t fsyncPeriod;
|
||||
int64_t commitTime;
|
||||
int32_t walLevel;
|
||||
int32_t quorum;
|
||||
int32_t compressionLevel;
|
||||
SStrToken precision;
|
||||
bool ignoreExists;
|
||||
int8_t update;
|
||||
int8_t cachelast;
|
||||
SArray *keep;
|
||||
int8_t dbType;
|
||||
int16_t partitions;
|
||||
} SCreateDbInfo;
|
||||
|
||||
typedef struct SCreateAcctInfo {
|
||||
int32_t maxUsers;
|
||||
int32_t maxDbs;
|
||||
int32_t maxTimeSeries;
|
||||
int32_t maxStreams;
|
||||
int32_t maxPointsPerSecond;
|
||||
int64_t maxStorage;
|
||||
int64_t maxQueryTime;
|
||||
int32_t maxConnections;
|
||||
SStrToken stat;
|
||||
} SCreateAcctInfo;
|
||||
|
||||
typedef struct SShowInfo {
|
||||
uint8_t showType;
|
||||
SStrToken prefix;
|
||||
SStrToken pattern;
|
||||
} SShowInfo;
|
||||
|
||||
typedef struct SUserInfo {
|
||||
SStrToken user;
|
||||
SStrToken passwd;
|
||||
SStrToken privilege;
|
||||
int16_t type;
|
||||
} SUserInfo;
|
||||
|
||||
typedef struct SMiscInfo {
|
||||
SArray *a; // SArray<SStrToken>
|
||||
bool existsCheck;
|
||||
int16_t dbType;
|
||||
int16_t tableType;
|
||||
SUserInfo user;
|
||||
union {
|
||||
SCreateDbInfo dbOpt;
|
||||
SCreateAcctInfo acctOpt;
|
||||
SShowInfo showOpt;
|
||||
SStrToken id;
|
||||
};
|
||||
} SMiscInfo;
|
||||
|
||||
typedef struct SSubclauseInfo { // "UNION" multiple select sub-clause
|
||||
SQuerySqlNode **pClause;
|
||||
int32_t numOfClause;
|
||||
} SSubclauseInfo;
|
||||
|
||||
typedef struct SSqlInfo {
|
||||
int32_t type;
|
||||
bool valid;
|
||||
SSubclauseInfo subclauseInfo;
|
||||
char msg[256];
|
||||
union {
|
||||
SCreateTableSql *pCreateTableInfo;
|
||||
SAlterTableInfo *pAlterInfo;
|
||||
SMiscInfo *pMiscInfo;
|
||||
};
|
||||
} SSqlInfo;
|
||||
|
||||
typedef struct tSqlExpr {
|
||||
uint16_t type; // sql node type
|
||||
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
|
||||
SStrToken operand;
|
||||
uint32_t functionId; // function id
|
||||
SStrToken operand;
|
||||
uint32_t functionId; // function id
|
||||
|
||||
SStrToken colInfo; // table column info
|
||||
tVariant value; // the use input value
|
||||
SStrToken token; // original sql expr string
|
||||
SStrToken colInfo; // table column info
|
||||
tVariant value; // the use input value
|
||||
SStrToken token; // original sql expr string
|
||||
|
||||
struct tSQLExpr *pLeft; // left child
|
||||
struct tSQLExpr *pRight; // right child
|
||||
struct tSQLExprList *pParam; // function parameters list
|
||||
} tSQLExpr;
|
||||
struct tSqlExpr *pLeft; // left child
|
||||
struct tSqlExpr *pRight; // right child
|
||||
struct SArray *pParam; // function parameters list
|
||||
} tSqlExpr;
|
||||
|
||||
// used in select clause. select <tSQLExprList> from xxx
|
||||
// used in select clause. select <SArray> from xxx
|
||||
typedef struct tSqlExprItem {
|
||||
tSQLExpr *pNode; // The list of expressions
|
||||
char * aliasName; // alias name, null-terminated string
|
||||
bool distinct;
|
||||
tSqlExpr *pNode; // The list of expressions
|
||||
char *aliasName; // alias name, null-terminated string
|
||||
bool distinct;
|
||||
} tSqlExprItem;
|
||||
|
||||
// todo refactor by using SArray
|
||||
typedef struct tSQLExprList {
|
||||
int32_t nExpr; /* Number of expressions on the list */
|
||||
int32_t nAlloc; /* Number of entries allocated below */
|
||||
tSqlExprItem *a; /* One entry for each expression */
|
||||
} tSQLExprList;
|
||||
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);
|
||||
|
||||
// sql expr leaf node
|
||||
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 *));
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param mallocProc The parser allocator
|
||||
* @return
|
||||
*/
|
||||
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
|
||||
}
|
||||
|
|
|
@ -92,11 +92,11 @@ cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
|
|||
|
||||
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
|
||||
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). {
|
||||
setDCLSQLElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
|
||||
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
|
||||
}
|
||||
|
||||
cmd ::= SHOW dbPrefix(X) TABLES. {
|
||||
|
@ -113,19 +113,19 @@ cmd ::= SHOW dbPrefix(X) STABLES. {
|
|||
|
||||
cmd ::= SHOW dbPrefix(X) STABLES LIKE ids(Y). {
|
||||
SStrToken token;
|
||||
setDbName(&token, &X);
|
||||
tSetDbName(&token, &X);
|
||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &Y);
|
||||
}
|
||||
|
||||
cmd ::= SHOW dbPrefix(X) VGROUPS. {
|
||||
SStrToken token;
|
||||
setDbName(&token, &X);
|
||||
tSetDbName(&token, &X);
|
||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
||||
}
|
||||
|
||||
cmd ::= SHOW dbPrefix(X) VGROUPS ids(Y). {
|
||||
SStrToken token;
|
||||
setDbName(&token, &X);
|
||||
tSetDbName(&token, &X);
|
||||
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 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 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 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 ACCOUNT ids(X). { setDCLSqlElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
||||
|
||||
/////////////////////////////////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/////////////////////////////////////
|
||||
cmd ::= DESCRIBE ids(X) cpxName(Y). {
|
||||
X.n += Y.n;
|
||||
setDCLSQLElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
|
||||
setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
|
||||
}
|
||||
|
||||
/////////////////////////////////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) 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) 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) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 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 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 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);}
|
||||
|
||||
|
@ -187,7 +187,7 @@ ifnotexists(X) ::= . { X.n = 0;}
|
|||
|
||||
/////////////////////////////////THE CREATE STATEMENT///////////////////////////////////////
|
||||
//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).
|
||||
{ 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);}
|
||||
|
@ -299,17 +299,17 @@ alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X). { Y = Z; Y.parti
|
|||
%type typename {TAOS_FIELD}
|
||||
typename(A) ::= ids(X). {
|
||||
X.type = 0;
|
||||
tSqlSetColumnType (&A, &X);
|
||||
tSetColumnType (&A, &X);
|
||||
}
|
||||
|
||||
//define binary type, e.g., binary(10), nchar(10)
|
||||
typename(A) ::= ids(X) LP signed(Y) RP. {
|
||||
if (Y <= 0) {
|
||||
X.type = 0;
|
||||
tSqlSetColumnType(&A, &X);
|
||||
tSetColumnType(&A, &X);
|
||||
} else {
|
||||
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). {
|
||||
X.type = 0;
|
||||
X.n = ((Z.z + Z.n) - X.z);
|
||||
tSqlSetColumnType (&A, &X);
|
||||
tSetColumnType (&A, &X);
|
||||
}
|
||||
|
||||
%type signed {int64_t}
|
||||
|
@ -331,10 +331,10 @@ cmd ::= CREATE TABLE 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;}
|
||||
|
||||
%type create_table_list{SCreateTableSQL*}
|
||||
%type create_table_list{SCreateTableSql*}
|
||||
%destructor create_table_list{destroyCreateTableSql($$);}
|
||||
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));
|
||||
|
||||
taosArrayPush(pCreateTable->childTableInfo, &Z);
|
||||
|
@ -347,9 +347,9 @@ create_table_list(A) ::= create_table_list(X) create_from_stable(Z). {
|
|||
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. {
|
||||
A = tSetCreateSqlElems(X, NULL, NULL, TSQL_CREATE_TABLE);
|
||||
A = tSetCreateTableInfo(X, NULL, NULL, TSQL_CREATE_TABLE);
|
||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||
|
||||
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
|
||||
%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. {
|
||||
A = tSetCreateSqlElems(X, Y, NULL, TSQL_CREATE_STABLE);
|
||||
A = tSetCreateTableInfo(X, Y, NULL, TSQL_CREATE_STABLE);
|
||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||
|
||||
V.n += Z.n;
|
||||
|
@ -389,7 +389,7 @@ tagNamelist(A) ::= ids(X). {A = taosArrayInit(4, sizeof(SSt
|
|||
// create stream
|
||||
// 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). {
|
||||
A = tSetCreateSqlElems(NULL, NULL, S, TSQL_CREATE_STREAM);
|
||||
A = tSetCreateTableInfo(NULL, NULL, S, TSQL_CREATE_STREAM);
|
||||
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
|
||||
|
||||
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:
|
||||
// tinyint smallint int bigint float double bool timestamp binary(x) nchar(x)
|
||||
column(A) ::= ids(X) typename(Y). {
|
||||
tSqlSetColumnInfo(&A, &X, &Y);
|
||||
tSetColumnInfo(&A, &X, &Y);
|
||||
}
|
||||
|
||||
%type tagitemlist {SArray*}
|
||||
|
@ -450,8 +450,8 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). {
|
|||
}
|
||||
|
||||
//////////////////////// The SELECT statement /////////////////////////////////
|
||||
%type select {SQuerySQL*}
|
||||
%destructor select {doDestroyQuerySql($$);}
|
||||
%type select {SQuerySqlNode*}
|
||||
%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). {
|
||||
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
|
||||
// values of the SELECT statement. The "*" in statements like
|
||||
// "SELECT * FROM ..." is encoded as a special expression with an opcode of TK_ALL.
|
||||
%type selcollist {tSQLExprList*}
|
||||
%type selcollist {SArray*}
|
||||
%destructor selcollist {tSqlExprListDestroy($$);}
|
||||
|
||||
%type sclp {tSQLExprList*}
|
||||
%type sclp {SArray*}
|
||||
%destructor sclp {tSqlExprListDestroy($$);}
|
||||
sclp(A) ::= selcollist(X) COMMA. {A = X;}
|
||||
sclp(A) ::= . {A = 0;}
|
||||
|
@ -489,7 +489,7 @@ selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y). {
|
|||
}
|
||||
|
||||
selcollist(A) ::= sclp(P) STAR. {
|
||||
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
|
||||
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
|
||||
A = tSqlExprListAppend(P, pNode, 0, 0);
|
||||
}
|
||||
|
||||
|
@ -630,7 +630,7 @@ grouplist(A) ::= item(X). {
|
|||
}
|
||||
|
||||
//having clause, ignore the input condition in having
|
||||
%type having_opt {tSQLExpr*}
|
||||
%type having_opt {tSqlExpr*}
|
||||
%destructor having_opt {tSqlExprDestroy($$);}
|
||||
having_opt(A) ::=. {A = 0;}
|
||||
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).
|
||||
{A.limit = Y; A.offset = X;}
|
||||
|
||||
%type where_opt {tSQLExpr*}
|
||||
%type where_opt {tSqlExpr*}
|
||||
%destructor where_opt {tSqlExprDestroy($$);}
|
||||
|
||||
where_opt(A) ::= . {A = 0;}
|
||||
|
@ -660,25 +660,25 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
|
|||
|
||||
/////////////////////////// Expression Processing /////////////////////////////
|
||||
//
|
||||
%type expr {tSQLExpr*}
|
||||
%type expr {tSqlExpr*}
|
||||
%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) ::= ID(X). { A = tSqlExprIdValueCreate(&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 STAR(Y). { X.n += (1+Y.n); A = tSqlExprIdValueCreate(&X, TK_ALL);}
|
||||
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(&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 = tSqlExprCreateIdValue(&X, TK_ALL);}
|
||||
|
||||
expr(A) ::= INTEGER(X). { A = tSqlExprIdValueCreate(&X, TK_INTEGER);}
|
||||
expr(A) ::= MINUS(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 = tSqlExprIdValueCreate(&X, TK_INTEGER);}
|
||||
expr(A) ::= FLOAT(X). { A = tSqlExprIdValueCreate(&X, TK_FLOAT);}
|
||||
expr(A) ::= MINUS(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 = tSqlExprIdValueCreate(&X, TK_FLOAT);}
|
||||
expr(A) ::= STRING(X). { A = tSqlExprIdValueCreate(&X, TK_STRING);}
|
||||
expr(A) ::= NOW(X). { A = tSqlExprIdValueCreate(&X, TK_NOW); }
|
||||
expr(A) ::= VARIABLE(X). { A = tSqlExprIdValueCreate(&X, TK_VARIABLE);}
|
||||
expr(A) ::= BOOL(X). { A = tSqlExprIdValueCreate(&X, TK_BOOL);}
|
||||
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(&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 = tSqlExprCreateIdValue(&X, TK_INTEGER);}
|
||||
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(&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 = tSqlExprCreateIdValue(&X, TK_FLOAT);}
|
||||
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(&X, TK_STRING);}
|
||||
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(&X, TK_NOW); }
|
||||
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
|
||||
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(&X, TK_BOOL);}
|
||||
|
||||
// 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); }
|
||||
|
@ -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) 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) 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); }
|
||||
|
||||
//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($$);}
|
||||
|
||||
%type expritem {tSQLExpr*}
|
||||
%type expritem {tSqlExpr*}
|
||||
%destructor expritem {tSqlExprDestroy($$);}
|
||||
|
||||
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;}
|
||||
|
||||
///////////////////////////////////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//////////////////////////////////
|
||||
cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -743,14 +743,14 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
|||
toTSDBType(A.type);
|
||||
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);
|
||||
}
|
||||
|
||||
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
||||
cmd ::= ALTER TABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
||||
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);
|
||||
}
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -772,7 +772,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
|
|||
toTSDBType(Z.type);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -783,7 +783,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z). {
|
|||
SArray* A = tVariantListAppendToken(NULL, &Y, -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);
|
||||
}
|
||||
|
||||
|
@ -791,7 +791,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z). {
|
|||
///////////////////////////////////ALTER STABLE statement//////////////////////////////////
|
||||
cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -801,14 +801,14 @@ cmd ::= ALTER STABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
|||
toTSDBType(A.type);
|
||||
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);
|
||||
}
|
||||
|
||||
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
|
||||
cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
|
||||
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);
|
||||
}
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -830,7 +830,7 @@ cmd ::= ALTER STABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
|
|||
toTSDBType(Z.type);
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -476,22 +476,41 @@ static SResultRow *doPrepareResultRowFromKey(SQueryRuntimeEnv *pRuntimeEnv, SRes
|
|||
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
|
||||
static STimeWindow getActiveTimeWindow(SResultRowInfo * pResultRowInfo, int64_t ts, SQuery *pQuery) {
|
||||
STimeWindow w = {0};
|
||||
|
||||
if (pResultRowInfo->curIndex == -1) { // the first window, from the previous stored value
|
||||
if (pResultRowInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
||||
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);
|
||||
}
|
||||
|
||||
pResultRowInfo->prevSKey = w.skey;
|
||||
} else {
|
||||
w.skey = pResultRowInfo->prevSKey;
|
||||
}
|
||||
if (pResultRowInfo->prevSKey == TSKEY_INITIAL_VAL) {
|
||||
getInitialStartTimeWindow(pQuery, ts, &w);
|
||||
pResultRowInfo->prevSKey = w.skey;
|
||||
} else {
|
||||
w.skey = pResultRowInfo->prevSKey;
|
||||
}
|
||||
|
||||
if (pQuery->interval.intervalUnit == 'n' || pQuery->interval.intervalUnit == 'y') {
|
||||
w.ekey = taosTimeAdd(w.skey, pQuery->interval.interval, pQuery->interval.intervalUnit, pQuery->precision) - 1;
|
||||
|
@ -4564,7 +4583,7 @@ static SSDataBlock* doOffset(void* param) {
|
|||
|
||||
if (pRuntimeEnv->currentOffset == 0) {
|
||||
return pBlock;
|
||||
} else if (pRuntimeEnv->currentOffset > pBlock->info.rows) {
|
||||
} else if (pRuntimeEnv->currentOffset >= pBlock->info.rows) {
|
||||
pRuntimeEnv->currentOffset -= pBlock->info.rows;
|
||||
} else {
|
||||
int32_t remain = (int32_t)(pBlock->info.rows - pRuntimeEnv->currentOffset);
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "ttokendef.h"
|
||||
#include "tutil.h"
|
||||
|
||||
SSqlInfo qSQLParse(const char *pStr) {
|
||||
SSqlInfo qSqlParse(const char *pStr) {
|
||||
void *pParser = ParseAlloc(malloc);
|
||||
|
||||
SSqlInfo sqlInfo = {0};
|
||||
|
@ -80,53 +80,48 @@ abort_parse:
|
|||
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) {
|
||||
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) {
|
||||
struct tSqlExprItem *pItem = &pList->a[pList->nExpr++];
|
||||
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;
|
||||
struct tSqlExprItem item = {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;
|
||||
}
|
||||
|
||||
void tSqlExprListDestroy(tSQLExprList *pList) {
|
||||
if (pList == NULL) return;
|
||||
static void freeExprElem(void* item) {
|
||||
tSqlExprItem* exprItem = item;
|
||||
|
||||
for (int32_t i = 0; i < pList->nExpr; ++i) {
|
||||
if (pList->a[i].aliasName != NULL) {
|
||||
free(pList->a[i].aliasName);
|
||||
}
|
||||
tSqlExprDestroy(pList->a[i].pNode);
|
||||
}
|
||||
|
||||
free(pList->a);
|
||||
free(pList);
|
||||
tfree(exprItem->aliasName);
|
||||
tSqlExprDestroy(exprItem->pNode);
|
||||
}
|
||||
|
||||
tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
|
||||
tSQLExpr *pSqlExpr = calloc(1, sizeof(tSQLExpr));
|
||||
void tSqlExprListDestroy(SArray *pList) {
|
||||
if (pList == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
taosArrayDestroyEx(pList, freeExprElem);
|
||||
}
|
||||
|
||||
tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType) {
|
||||
tSqlExpr *pSqlExpr = calloc(1, sizeof(tSqlExpr));
|
||||
|
||||
if (pToken != NULL) {
|
||||
pSqlExpr->token = *pToken;
|
||||
|
@ -171,15 +166,15 @@ tSQLExpr *tSqlExprIdValueCreate(SStrToken *pToken, int32_t optrType) {
|
|||
* pList is the parameters for function with id(optType)
|
||||
* 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) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
tSQLExpr *pExpr = calloc(1, sizeof(tSQLExpr));
|
||||
tSqlExpr *pExpr = calloc(1, sizeof(tSqlExpr));
|
||||
pExpr->tokenId = optType;
|
||||
pExpr->type = SQL_NODE_SQLFUNCTION;
|
||||
pExpr->pParam = pList;
|
||||
pExpr->pParam = pParam;
|
||||
|
||||
int32_t len = (int32_t)((endToken->z + endToken->n) - pFuncToken->z);
|
||||
pExpr->operand = (*pFuncToken);
|
||||
|
@ -193,14 +188,14 @@ tSQLExpr *tSqlExprCreateFunction(tSQLExprList *pList, SStrToken *pFuncToken, SSt
|
|||
|
||||
/*
|
||||
* 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 *pExpr = calloc(1, sizeof(tSQLExpr));
|
||||
tSqlExpr *tSqlExprCreate(tSqlExpr *pLeft, tSqlExpr *pRight, int32_t optrType) {
|
||||
tSqlExpr *pExpr = calloc(1, sizeof(tSqlExpr));
|
||||
|
||||
pExpr->type = SQL_NODE_EXPR;
|
||||
if (pLeft != NULL && pRight != NULL && (optrType != TK_IN)) {
|
||||
char* endPos = pRight->token.z + pRight->token.n;
|
||||
char* endPos = pRight->token.z + pRight->token.n;
|
||||
pExpr->token.z = pLeft->token.z;
|
||||
pExpr->token.n = (uint32_t)(endPos - pExpr->token.z);
|
||||
pExpr->token.type = pLeft->token.type;
|
||||
|
@ -291,9 +286,9 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
|||
pExpr->tokenId = optrType;
|
||||
pExpr->pLeft = pLeft;
|
||||
|
||||
tSQLExpr *pRSub = calloc(1, sizeof(tSQLExpr));
|
||||
tSqlExpr *pRSub = calloc(1, sizeof(tSqlExpr));
|
||||
pRSub->tokenId = TK_SET; // TODO refactor .....
|
||||
pRSub->pParam = (tSQLExprList *)pRight;
|
||||
pRSub->pParam = (SArray *)pRight;
|
||||
|
||||
pExpr->pRight = pRSub;
|
||||
} else {
|
||||
|
@ -301,7 +296,7 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
|||
pExpr->pLeft = pLeft;
|
||||
|
||||
if (pLeft != NULL && pRight == NULL) {
|
||||
pRight = calloc(1, sizeof(tSQLExpr));
|
||||
pRight = calloc(1, sizeof(tSqlExpr));
|
||||
}
|
||||
|
||||
pExpr->pRight = pRight;
|
||||
|
@ -310,10 +305,8 @@ tSQLExpr *tSqlExprCreate(tSQLExpr *pLeft, tSQLExpr *pRight, int32_t optrType) {
|
|||
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));
|
||||
|
||||
|
@ -327,12 +320,51 @@ tSQLExpr *tSqlExprClone(tSQLExpr *pSrc) {
|
|||
|
||||
//we don't clone pParam now because clone is only used for between/and
|
||||
assert(pSrc->pParam == NULL);
|
||||
|
||||
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) {
|
||||
return;
|
||||
}
|
||||
|
@ -342,11 +374,10 @@ void tSqlExprNodeDestroy(tSQLExpr *pExpr) {
|
|||
}
|
||||
|
||||
tSqlExprListDestroy(pExpr->pParam);
|
||||
|
||||
free(pExpr);
|
||||
}
|
||||
|
||||
void tSqlExprDestroy(tSQLExpr *pExpr) {
|
||||
void tSqlExprDestroy(tSqlExpr *pExpr) {
|
||||
if (pExpr == NULL) {
|
||||
return;
|
||||
}
|
||||
|
@ -355,7 +386,8 @@ void tSqlExprDestroy(tSQLExpr *pExpr) {
|
|||
pExpr->pLeft = NULL;
|
||||
tSqlExprDestroy(pExpr->pRight);
|
||||
pExpr->pRight = NULL;
|
||||
tSqlExprNodeDestroy(pExpr);
|
||||
|
||||
doDestroySqlExprNode(pExpr);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void setDbName(SStrToken *pCpxName, SStrToken *pDb) {
|
||||
void tSetDbName(SStrToken *pCpxName, SStrToken *pDb) {
|
||||
pCpxName->type = pDb->type;
|
||||
pCpxName->z = pDb->z;
|
||||
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]);
|
||||
|
||||
// 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
|
||||
pField->type = -1;
|
||||
pField->name[0] = 0;
|
||||
|
@ -550,43 +582,59 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
|
|||
/*
|
||||
* 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,
|
||||
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pGLimit) {
|
||||
assert(pSelection != NULL);
|
||||
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *psLimit) {
|
||||
assert(pSelectList != NULL);
|
||||
|
||||
SQuerySQL *pQuery = calloc(1, sizeof(SQuerySQL));
|
||||
pQuery->selectToken = *pSelectToken;
|
||||
pQuery->selectToken.n = (uint32_t)strlen(pQuery->selectToken.z); // all later sql string are belonged to the stream sql
|
||||
SQuerySqlNode *pSqlNode = calloc(1, sizeof(SQuerySqlNode));
|
||||
|
||||
pQuery->pSelection = pSelection;
|
||||
pQuery->from = pFrom;
|
||||
pQuery->pGroupby = pGroupby;
|
||||
pQuery->pSortOrder = pSortOrder;
|
||||
pQuery->pWhere = pWhere;
|
||||
// all later sql string are belonged to the stream sql
|
||||
pSqlNode->sqlstr = *pSelectToken;
|
||||
pSqlNode->sqlstr.n = (uint32_t)strlen(pSqlNode->sqlstr.z);
|
||||
|
||||
pSqlNode->pSelectList = pSelectList;
|
||||
pSqlNode->from = pFrom;
|
||||
pSqlNode->pGroupby = pGroupby;
|
||||
pSqlNode->pSortOrder = pSortOrder;
|
||||
pSqlNode->pWhere = pWhere;
|
||||
pSqlNode->fillType = pFill;
|
||||
|
||||
if (pLimit != NULL) {
|
||||
pQuery->limit = *pLimit;
|
||||
pSqlNode->limit = *pLimit;
|
||||
} else {
|
||||
pSqlNode->limit.limit = -1;
|
||||
pSqlNode->limit.offset = 0;
|
||||
}
|
||||
|
||||
if (pGLimit != NULL) {
|
||||
pQuery->slimit = *pGLimit;
|
||||
if (psLimit != NULL) {
|
||||
pSqlNode->slimit = *psLimit;
|
||||
} else {
|
||||
pSqlNode->slimit.limit = -1;
|
||||
pSqlNode->slimit.offset = 0;
|
||||
}
|
||||
|
||||
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) {
|
||||
pQuery->sliding = *pSliding;
|
||||
pSqlNode->sliding = *pSliding;
|
||||
} else {
|
||||
TPARSER_SET_NONE_TOKEN(pSqlNode->sliding);
|
||||
}
|
||||
|
||||
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 pQuery;
|
||||
return pSqlNode;
|
||||
}
|
||||
|
||||
static void freeVariant(void *pItem) {
|
||||
|
@ -602,14 +650,14 @@ void freeCreateTableInfo(void* p) {
|
|||
tfree(pInfo->tagdata.data);
|
||||
}
|
||||
|
||||
void doDestroyQuerySql(SQuerySQL *pQuerySql) {
|
||||
void destroyQuerySqlNode(SQuerySqlNode *pQuerySql) {
|
||||
if (pQuerySql == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
tSqlExprListDestroy(pQuerySql->pSelection);
|
||||
tSqlExprListDestroy(pQuerySql->pSelectList);
|
||||
|
||||
pQuerySql->pSelection = NULL;
|
||||
pQuerySql->pSelectList = NULL;
|
||||
|
||||
tSqlExprDestroy(pQuerySql->pWhere);
|
||||
pQuerySql->pWhere = NULL;
|
||||
|
@ -635,15 +683,15 @@ void destroyAllSelectClause(SSubclauseInfo *pClause) {
|
|||
}
|
||||
|
||||
for(int32_t i = 0; i < pClause->numOfClause; ++i) {
|
||||
SQuerySQL *pQuerySql = pClause->pClause[i];
|
||||
doDestroyQuerySql(pQuerySql);
|
||||
SQuerySqlNode *pQuerySql = pClause->pClause[i];
|
||||
destroyQuerySqlNode(pQuerySql);
|
||||
}
|
||||
|
||||
tfree(pClause->pClause);
|
||||
}
|
||||
|
||||
SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSelect, int32_t type) {
|
||||
SCreateTableSQL *pCreate = calloc(1, sizeof(SCreateTableSQL));
|
||||
SCreateTableSql *tSetCreateTableInfo(SArray *pCols, SArray *pTags, SQuerySqlNode *pSelect, int32_t type) {
|
||||
SCreateTableSql *pCreate = calloc(1, sizeof(SCreateTableSql));
|
||||
|
||||
switch (type) {
|
||||
case TSQL_CREATE_TABLE: {
|
||||
|
@ -687,7 +735,7 @@ SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagNam
|
|||
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));
|
||||
|
||||
pAlterTable->name = *pTableName;
|
||||
|
@ -709,8 +757,8 @@ SAlterTableInfo *tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArra
|
|||
return pAlterTable;
|
||||
}
|
||||
|
||||
void* destroyCreateTableSql(SCreateTableSQL* pCreate) {
|
||||
doDestroyQuerySql(pCreate->pSelect);
|
||||
void* destroyCreateTableSql(SCreateTableSql* pCreate) {
|
||||
destroyQuerySqlNode(pCreate->pSelect);
|
||||
|
||||
taosArrayDestroy(pCreate->colInfo.pColumns);
|
||||
taosArrayDestroy(pCreate->colInfo.pTagColumns);
|
||||
|
@ -757,7 +805,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) {
|
|||
return pSubclause;
|
||||
}
|
||||
|
||||
pSubclause->pClause = (SQuerySQL**) tmp;
|
||||
pSubclause->pClause = (SQuerySqlNode**) tmp;
|
||||
|
||||
pSubclause->pClause[newSize - 1] = pSqlExprInfo;
|
||||
pSubclause->numOfClause++;
|
||||
|
@ -765,7 +813,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) {
|
|||
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;
|
||||
|
||||
if (type == TSDB_SQL_SELECT) {
|
||||
|
@ -788,7 +836,7 @@ SSubclauseInfo* appendSelectClause(SSubclauseInfo *pQueryInfo, void *pSubclause)
|
|||
return pQueryInfo;
|
||||
}
|
||||
|
||||
pQueryInfo->pClause = (SQuerySQL**) tmp;
|
||||
pQueryInfo->pClause = (SQuerySqlNode**) tmp;
|
||||
pQueryInfo->pClause[pQueryInfo->numOfClause++] = pSubclause;
|
||||
|
||||
return pQueryInfo;
|
||||
|
@ -799,7 +847,7 @@ void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken
|
|||
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;
|
||||
if (nParam == 0) {
|
||||
return;
|
|
@ -104,15 +104,14 @@ typedef union {
|
|||
int yyinit;
|
||||
ParseTOKENTYPE yy0;
|
||||
SCreatedTableInfo yy96;
|
||||
tSQLExpr* yy178;
|
||||
tSqlExpr* yy178;
|
||||
SCreateAcctInfo yy187;
|
||||
SQuerySQL* yy216;
|
||||
SCreateTableSQL* yy230;
|
||||
SCreateTableSql* yy230;
|
||||
SArray* yy285;
|
||||
TAOS_FIELD yy295;
|
||||
SQuerySqlNode* yy342;
|
||||
tVariant yy362;
|
||||
SIntervalVal yy376;
|
||||
tSQLExprList* yy434;
|
||||
SLimitVal yy438;
|
||||
int yy460;
|
||||
SSubclauseInfo* yy513;
|
||||
|
@ -1426,14 +1425,14 @@ destroyCreateTableSql((yypminor->yy230));
|
|||
break;
|
||||
case 235: /* select */
|
||||
{
|
||||
doDestroyQuerySql((yypminor->yy216));
|
||||
destroyQuerySqlNode((yypminor->yy342));
|
||||
}
|
||||
break;
|
||||
case 238: /* selcollist */
|
||||
case 251: /* sclp */
|
||||
case 262: /* exprlist */
|
||||
{
|
||||
tSqlExprListDestroy((yypminor->yy434));
|
||||
tSqlExprListDestroy((yypminor->yy285));
|
||||
}
|
||||
break;
|
||||
case 240: /* where_opt */
|
||||
|
@ -2156,12 +2155,12 @@ static void yy_reduce(
|
|||
case 20: /* cmd ::= SHOW CREATE TABLE ids cpxName */
|
||||
{
|
||||
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;
|
||||
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;
|
||||
case 22: /* cmd ::= SHOW dbPrefix TABLES */
|
||||
|
@ -2182,21 +2181,21 @@ static void yy_reduce(
|
|||
case 25: /* cmd ::= SHOW dbPrefix STABLES LIKE ids */
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
case 26: /* cmd ::= SHOW dbPrefix VGROUPS */
|
||||
{
|
||||
SStrToken token;
|
||||
setDbName(&token, &yymsp[-1].minor.yy0);
|
||||
tSetDbName(&token, &yymsp[-1].minor.yy0);
|
||||
setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
|
||||
}
|
||||
break;
|
||||
case 27: /* cmd ::= SHOW dbPrefix VGROUPS ids */
|
||||
{
|
||||
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);
|
||||
}
|
||||
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); }
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
case 36: /* cmd ::= DESCRIBE ids cpxName */
|
||||
{
|
||||
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;
|
||||
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);}
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
case 43: /* cmd ::= ALTER DATABASE ids alter_db_optr */
|
||||
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;}
|
||||
break;
|
||||
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;
|
||||
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);}
|
||||
|
@ -2437,7 +2436,7 @@ static void yy_reduce(
|
|||
case 123: /* typename ::= ids */
|
||||
{
|
||||
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;
|
||||
break;
|
||||
|
@ -2445,10 +2444,10 @@ static void yy_reduce(
|
|||
{
|
||||
if (yymsp[-1].minor.yy525 <= 0) {
|
||||
yymsp[-3].minor.yy0.type = 0;
|
||||
tSqlSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
||||
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
|
||||
} else {
|
||||
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;
|
||||
|
@ -2457,7 +2456,7 @@ static void yy_reduce(
|
|||
{
|
||||
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);
|
||||
tSqlSetColumnType (&yylhsminor.yy295, &yymsp[-1].minor.yy0);
|
||||
tSetColumnType (&yylhsminor.yy295, &yymsp[-1].minor.yy0);
|
||||
}
|
||||
yymsp[-1].minor.yy295 = yylhsminor.yy295;
|
||||
break;
|
||||
|
@ -2476,7 +2475,7 @@ static void yy_reduce(
|
|||
break;
|
||||
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));
|
||||
|
||||
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy96);
|
||||
|
@ -2494,7 +2493,7 @@ static void yy_reduce(
|
|||
break;
|
||||
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);
|
||||
|
||||
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
|
||||
|
@ -2504,7 +2503,7 @@ static void yy_reduce(
|
|||
break;
|
||||
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);
|
||||
|
||||
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
|
||||
|
@ -2538,7 +2537,7 @@ static void yy_reduce(
|
|||
break;
|
||||
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);
|
||||
|
||||
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
|
||||
|
@ -2556,7 +2555,7 @@ static void yy_reduce(
|
|||
break;
|
||||
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;
|
||||
break;
|
||||
|
@ -2593,23 +2592,23 @@ static void yy_reduce(
|
|||
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 */
|
||||
{
|
||||
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;
|
||||
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;
|
||||
break;
|
||||
case 158: /* union ::= LP union RP */
|
||||
{ yymsp[-2].minor.yy513 = yymsp[-1].minor.yy513; }
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 161: /* cmd ::= union */
|
||||
|
@ -2617,29 +2616,30 @@ static void yy_reduce(
|
|||
break;
|
||||
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;
|
||||
case 163: /* sclp ::= selcollist COMMA */
|
||||
{yylhsminor.yy434 = yymsp[-1].minor.yy434;}
|
||||
yymsp[-1].minor.yy434 = yylhsminor.yy434;
|
||||
{yylhsminor.yy285 = yymsp[-1].minor.yy285;}
|
||||
yymsp[-1].minor.yy285 = yylhsminor.yy285;
|
||||
break;
|
||||
case 164: /* sclp ::= */
|
||||
{yymsp[1].minor.yy434 = 0;}
|
||||
case 188: /* orderby_opt ::= */ yytestcase(yyruleno==188);
|
||||
{yymsp[1].minor.yy285 = 0;}
|
||||
break;
|
||||
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;
|
||||
case 166: /* selcollist ::= sclp STAR */
|
||||
{
|
||||
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
|
||||
yylhsminor.yy434 = tSqlExprListAppend(yymsp[-1].minor.yy434, pNode, 0, 0);
|
||||
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
|
||||
yylhsminor.yy285 = tSqlExprListAppend(yymsp[-1].minor.yy285, pNode, 0, 0);
|
||||
}
|
||||
yymsp[-1].minor.yy434 = yylhsminor.yy434;
|
||||
yymsp[-1].minor.yy285 = yylhsminor.yy285;
|
||||
break;
|
||||
case 167: /* as ::= AS ids */
|
||||
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
|
||||
|
@ -2744,9 +2744,6 @@ static void yy_reduce(
|
|||
case 187: /* sliding_opt ::= */
|
||||
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
|
||||
break;
|
||||
case 188: /* orderby_opt ::= */
|
||||
{yymsp[1].minor.yy285 = 0;}
|
||||
break;
|
||||
case 189: /* orderby_opt ::= ORDER BY sortlist */
|
||||
{yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;}
|
||||
break;
|
||||
|
@ -2832,53 +2829,53 @@ static void yy_reduce(
|
|||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 217: /* expr ::= MINUS INTEGER */
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 220: /* expr ::= MINUS FLOAT */
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 227: /* expr ::= ID LP STAR RP */
|
||||
|
@ -2918,7 +2915,7 @@ static void yy_reduce(
|
|||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 237: /* expr ::= expr AND expr */
|
||||
|
@ -2954,28 +2951,28 @@ static void yy_reduce(
|
|||
yymsp[-2].minor.yy178 = yylhsminor.yy178;
|
||||
break;
|
||||
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;
|
||||
break;
|
||||
case 246: /* exprlist ::= exprlist COMMA expritem */
|
||||
{yylhsminor.yy434 = tSqlExprListAppend(yymsp[-2].minor.yy434,yymsp[0].minor.yy178,0, 0);}
|
||||
yymsp[-2].minor.yy434 = yylhsminor.yy434;
|
||||
{yylhsminor.yy285 = tSqlExprListAppend(yymsp[-2].minor.yy285,yymsp[0].minor.yy178,0, 0);}
|
||||
yymsp[-2].minor.yy285 = yylhsminor.yy285;
|
||||
break;
|
||||
case 247: /* exprlist ::= expritem */
|
||||
{yylhsminor.yy434 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);}
|
||||
yymsp[0].minor.yy434 = yylhsminor.yy434;
|
||||
{yylhsminor.yy285 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);}
|
||||
yymsp[0].minor.yy285 = yylhsminor.yy285;
|
||||
break;
|
||||
case 248: /* expritem ::= expr */
|
||||
{yylhsminor.yy178 = yymsp[0].minor.yy178;}
|
||||
yymsp[0].minor.yy178 = yylhsminor.yy178;
|
||||
break;
|
||||
case 250: /* cmd ::= RESET QUERY CACHE */
|
||||
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
||||
{ setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
|
||||
break;
|
||||
case 251: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -2986,14 +2983,14 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
case 253: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3004,7 +3001,7 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3018,7 +3015,7 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3030,14 +3027,14 @@ static void yy_reduce(
|
|||
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -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);
|
||||
}
|
||||
break;
|
||||
case 257: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3048,14 +3045,14 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
case 259: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3066,7 +3063,7 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
@ -3080,7 +3077,7 @@ static void yy_reduce(
|
|||
toTSDBType(yymsp[0].minor.yy0.type);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -469,11 +469,12 @@ if $data25 != 33 then
|
|||
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;
|
||||
if $row != 1 then
|
||||
if $row != 3 then
|
||||
return -1
|
||||
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
|
||||
endi
|
||||
|
||||
|
@ -489,7 +490,28 @@ if $data03 != 33 then
|
|||
return -1
|
||||
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;
|
||||
|
||||
print ========================query on super table
|
||||
|
|
Loading…
Reference in New Issue