提交 40b3b5a4 编写于 作者: H Haojun Liao

[TD-2425]<feature>: multi-table creation in one request.

上级 261adee9
...@@ -234,7 +234,7 @@ void tscVgroupTableCopy(SVgroupTableInfo* info, SVgroupTableInfo* pInfo); ...@@ -234,7 +234,7 @@ void tscVgroupTableCopy(SVgroupTableInfo* info, SVgroupTableInfo* pInfo);
int tscGetSTableVgroupInfo(SSqlObj* pSql, int32_t clauseIndex); int tscGetSTableVgroupInfo(SSqlObj* pSql, int32_t clauseIndex);
int tscGetTableMeta(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo); int tscGetTableMeta(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo);
int tscGetMeterMetaEx(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, bool createIfNotExists); int tscGetTableMetaEx(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, bool createIfNotExists);
void tscResetForNextRetrieve(SSqlRes* pRes); void tscResetForNextRetrieve(SSqlRes* pRes);
void tscDoQuery(SSqlObj* pSql); void tscDoQuery(SSqlObj* pSql);
...@@ -287,6 +287,9 @@ bool tscSetSqlOwner(SSqlObj* pSql); ...@@ -287,6 +287,9 @@ bool tscSetSqlOwner(SSqlObj* pSql);
void tscClearSqlOwner(SSqlObj* pSql); void tscClearSqlOwner(SSqlObj* pSql);
int32_t doArithmeticCalculate(SQueryInfo* pQueryInfo, tFilePage* pOutput, int32_t rowSize, int32_t finalRowSize); int32_t doArithmeticCalculate(SQueryInfo* pQueryInfo, tFilePage* pOutput, int32_t rowSize, int32_t finalRowSize);
char* serializeTagData(STagData* pTagData, char* pMsg);
int32_t copyTagData(STagData* dst, const STagData* src);
void* malloc_throw(size_t size); void* malloc_throw(size_t size);
void* calloc_throw(size_t nmemb, size_t size); void* calloc_throw(size_t nmemb, size_t size);
char* strdup_throw(const char* str); char* strdup_throw(const char* str);
......
...@@ -246,7 +246,7 @@ typedef struct { ...@@ -246,7 +246,7 @@ typedef struct {
int8_t dataSourceType; // load data from file or not int8_t dataSourceType; // load data from file or not
int8_t submitSchema; // submit block is built with table schema int8_t submitSchema; // submit block is built with table schema
STagData *pTagData; // NOTE: pTagData->data is used as a variant length array STagData tagData; // NOTE: pTagData->data is used as a variant length array
STableMeta **pTableMetaList; // all involved tableMeta list of current insert sql statement. STableMeta **pTableMetaList; // all involved tableMeta list of current insert sql statement.
int32_t numOfTables; int32_t numOfTables;
......
...@@ -796,8 +796,6 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) { ...@@ -796,8 +796,6 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
sToken = tStrGetToken(sql, &index, false, 0, NULL); sToken = tStrGetToken(sql, &index, false, 0, NULL);
sql += index; sql += index;
tscAllocPayload(pCmd, sizeof(STagData));
//the source super table is moved to the secondary position of the pTableMetaInfo list //the source super table is moved to the secondary position of the pTableMetaInfo list
if (pQueryInfo->numOfTables < 2) { if (pQueryInfo->numOfTables < 2) {
tscAddEmptyMetaInfo(pQueryInfo); tscAddEmptyMetaInfo(pQueryInfo);
...@@ -809,13 +807,8 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) { ...@@ -809,13 +807,8 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
return code; return code;
} }
STagData *pTag = realloc(pCmd->pTagData, offsetof(STagData, data)); tstrncpy(pCmd->tagData.name, pSTableMeterMetaInfo->name, sizeof(pCmd->tagData.name));
if (pTag == NULL) { pCmd->tagData.dataLen = 0;
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
memset(pTag, 0, offsetof(STagData, data));
tstrncpy(pTag->name, pSTableMeterMetaInfo->name, sizeof(pTag->name));
pCmd->pTagData = pTag;
code = tscGetTableMeta(pSql, pSTableMeterMetaInfo); code = tscGetTableMeta(pSql, pSTableMeterMetaInfo);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
...@@ -946,14 +939,15 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) { ...@@ -946,14 +939,15 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
} }
tdSortKVRowByColIdx(row); tdSortKVRowByColIdx(row);
pTag = (STagData*)realloc(pCmd->pTagData, offsetof(STagData, data) + kvRowLen(row)); pCmd->tagData.dataLen = kvRowLen(row);
char* pTag = realloc(pCmd->tagData.data, pCmd->tagData.dataLen);
if (pTag == NULL) { if (pTag == NULL) {
return TSDB_CODE_TSC_OUT_OF_MEMORY; return TSDB_CODE_TSC_OUT_OF_MEMORY;
} }
pCmd->pTagData = pTag;
pTag->dataLen = htonl(kvRowLen(row)); kvRowCpy(pTag, row);
kvRowCpy(pTag->data, row);
free(row); free(row);
pCmd->tagData.data = pTag;
index = 0; index = 0;
sToken = tStrGetToken(sql, &index, false, 0, NULL); sToken = tStrGetToken(sql, &index, false, 0, NULL);
...@@ -972,7 +966,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) { ...@@ -972,7 +966,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
} }
createTable = true; createTable = true;
code = tscGetMeterMetaEx(pSql, pTableMetaInfo, true); code = tscGetTableMetaEx(pSql, pTableMetaInfo, true);
if (TSDB_CODE_TSC_ACTION_IN_PROGRESS == code) { if (TSDB_CODE_TSC_ACTION_IN_PROGRESS == code) {
return code; return code;
} }
...@@ -983,7 +977,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) { ...@@ -983,7 +977,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
} else { } else {
sql = sToken.z; sql = sToken.z;
} }
code = tscGetMeterMetaEx(pSql, pTableMetaInfo, false); code = tscGetTableMetaEx(pSql, pTableMetaInfo, false);
if (pCmd->curSql == NULL) { if (pCmd->curSql == NULL) {
assert(code == TSDB_CODE_TSC_ACTION_IN_PROGRESS); assert(code == TSDB_CODE_TSC_ACTION_IN_PROGRESS);
......
...@@ -1775,12 +1775,15 @@ void setResultColName(char* name, tSQLExprItem* pItem, int32_t functionId, SStrT ...@@ -1775,12 +1775,15 @@ void setResultColName(char* name, tSQLExprItem* pItem, int32_t functionId, SStrT
int32_t len = MIN(pToken->n + 1, TSDB_COL_NAME_LEN); int32_t len = MIN(pToken->n + 1, TSDB_COL_NAME_LEN);
tstrncpy(uname, pToken->z, len); tstrncpy(uname, pToken->z, len);
if (tsKeepOriginalColumnName) { // keep the original column name
tstrncpy(name, uname, TSDB_COL_NAME_LEN);
} else {
int32_t size = TSDB_COL_NAME_LEN + tListLen(aAggs[functionId].aName) + 2 + 1; int32_t size = TSDB_COL_NAME_LEN + tListLen(aAggs[functionId].aName) + 2 + 1;
char tmp[TSDB_COL_NAME_LEN + tListLen(aAggs[functionId].aName) + 2 + 1] = {0}; char tmp[TSDB_COL_NAME_LEN + tListLen(aAggs[functionId].aName) + 2 + 1] = {0};
snprintf(tmp, size, "%s(%s)", aAggs[functionId].aName, uname); snprintf(tmp, size, "%s(%s)", aAggs[functionId].aName, uname);
tstrncpy(name, tmp, TSDB_COL_NAME_LEN); tstrncpy(name, tmp, TSDB_COL_NAME_LEN);
}
} else { // use the user-input result column name } else { // use the user-input result column name
int32_t len = MIN(pItem->pNode->token.n + 1, TSDB_COL_NAME_LEN); int32_t len = MIN(pItem->pNode->token.n + 1, TSDB_COL_NAME_LEN);
tstrncpy(name, pItem->pNode->token.z, len); tstrncpy(name, pItem->pNode->token.z, len);
...@@ -4910,6 +4913,8 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -4910,6 +4913,8 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
tVariantListItem* pItem = taosArrayGet(pVarList, 1); tVariantListItem* pItem = taosArrayGet(pVarList, 1);
SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex); SSchema* pTagsSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, columnIndex.columnIndex);
pAlterSQL->tagData.data = calloc(1, pTagsSchema->bytes * TSDB_NCHAR_SIZE + VARSTR_HEADER_SIZE);
if (tVariantDump(&pItem->pVar, pAlterSQL->tagData.data, pTagsSchema->type, true) != TSDB_CODE_SUCCESS) { if (tVariantDump(&pItem->pVar, pAlterSQL->tagData.data, pTagsSchema->type, true) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg13); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg13);
} }
...@@ -6149,38 +6154,41 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { ...@@ -6149,38 +6154,41 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
const int32_t TABLE_INDEX = 0; const int32_t TABLE_INDEX = 0;
const int32_t STABLE_INDEX = 1; const int32_t STABLE_INDEX = 1;
STableMetaInfo* pStableMeterMetaInfo = tscGetMetaInfo(pQueryInfo, STABLE_INDEX); STableMetaInfo* pStableMetaInfo = tscGetMetaInfo(pQueryInfo, STABLE_INDEX);
// super table name, create table by using dst // super table name, create table by using dst
SStrToken* pToken = &(pCreateTable->usingInfo.stableName); int32_t numOfTables = taosArrayGetSize(pCreateTable->childTableInfo);
for(int32_t j = 0; j < numOfTables; ++j) {
SCreatedTableInfo* pCreateTableInfo = taosArrayGet(pCreateTable->childTableInfo, j);
SStrToken* pToken = &pCreateTableInfo->stableName;
if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) { if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
} }
int32_t code = tscSetTableFullName(pStableMeterMetaInfo, pToken, pSql); int32_t code = tscSetTableFullName(pStableMetaInfo, pToken, pSql);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
return code; return code;
} }
// get meter meta from mnode // get table meta from mnode
tstrncpy(pCreateTable->usingInfo.tagdata.name, pStableMeterMetaInfo->name, sizeof(pCreateTable->usingInfo.tagdata.name)); tstrncpy(pCreateTableInfo->tagdata.name, pStableMetaInfo->name, tListLen(pCreateTableInfo->tagdata.name));
SArray* pList = pInfo->pCreateTableInfo->usingInfo.pTagVals; SArray* pList = pCreateTableInfo->pTagVals;
code = tscGetTableMeta(pSql, pStableMeterMetaInfo); code = tscGetTableMeta(pSql, pStableMetaInfo);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
return code; return code;
} }
size_t size = taosArrayGetSize(pList); size_t size = taosArrayGetSize(pList);
if (tscGetNumOfTags(pStableMeterMetaInfo->pTableMeta) != size) { if (tscGetNumOfTags(pStableMetaInfo->pTableMeta) != size) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg5); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg5);
} }
// too long tag values will return invalid sql, not be truncated automatically // too long tag values will return invalid sql, not be truncated automatically
SSchema* pTagSchema = tscGetTableTagSchema(pStableMeterMetaInfo->pTableMeta); SSchema *pTagSchema = tscGetTableTagSchema(pStableMetaInfo->pTableMeta);
STagData *pTag = &pCreateTableInfo->tagdata;
STagData* pTag = &pCreateTable->usingInfo.tagdata;
SKVRowBuilder kvRowBuilder = {0}; SKVRowBuilder kvRowBuilder = {0};
if (tdInitKVRowBuilder(&kvRowBuilder) < 0) { if (tdInitKVRowBuilder(&kvRowBuilder) < 0) {
return TSDB_CODE_TSC_OUT_OF_MEMORY; return TSDB_CODE_TSC_OUT_OF_MEMORY;
...@@ -6215,8 +6223,6 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { ...@@ -6215,8 +6223,6 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4);
} }
tdAddColToKVRow(&kvRowBuilder, pSchema->colId, pSchema->type, tagVal); tdAddColToKVRow(&kvRowBuilder, pSchema->colId, pSchema->type, tagVal);
} }
...@@ -6227,20 +6233,28 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { ...@@ -6227,20 +6233,28 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
} }
tdSortKVRowByColIdx(row); tdSortKVRowByColIdx(row);
pTag->dataLen = kvRowLen(row); pTag->dataLen = kvRowLen(row);
if (pTag->data == NULL) {
pTag->data = malloc(pTag->dataLen);
}
kvRowCpy(pTag->data, row); kvRowCpy(pTag->data, row);
free(row); free(row);
// table name // table name
if (tscValidateName(&pInfo->pCreateTableInfo->name) != TSDB_CODE_SUCCESS) { if (tscValidateName(&(pCreateTableInfo->name)) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
} }
STableMetaInfo* pTableMeterMetaInfo = tscGetMetaInfo(pQueryInfo, TABLE_INDEX); STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, TABLE_INDEX);
ret = tscSetTableFullName(pTableMeterMetaInfo, &pInfo->pCreateTableInfo->name, pSql); ret = tscSetTableFullName(pTableMetaInfo, &pCreateTableInfo->name, pSql);
if (ret != TSDB_CODE_SUCCESS) { if (ret != TSDB_CODE_SUCCESS) {
return ret; return ret;
} }
pCreateTableInfo->fullname = strndup(pTableMetaInfo->name, TSDB_TABLE_FNAME_LEN);
}
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
...@@ -185,7 +185,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) { ...@@ -185,7 +185,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
pSql->res.code = TSDB_CODE_RPC_NETWORK_UNAVAIL; pSql->res.code = TSDB_CODE_RPC_NETWORK_UNAVAIL;
} }
if (pRes->buffer == NULL) { if (pRes->length == NULL) {
pRes->length = calloc(2, sizeof(int32_t)); pRes->length = calloc(2, sizeof(int32_t));
} }
...@@ -193,7 +193,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) { ...@@ -193,7 +193,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
pRes->length[1] = online; pRes->length[1] = online;
} else { } else {
tscDebug("%" PRId64 " heartbeat failed, code:%s", pObj->hbrid, tstrerror(code)); tscDebug("%" PRId64 " heartbeat failed, code:%s", pObj->hbrid, tstrerror(code));
if (pRes->buffer == NULL) { if (pRes->length == NULL) {
pRes->length = calloc(2, sizeof(int32_t)); pRes->length = calloc(2, sizeof(int32_t));
} }
...@@ -1267,10 +1267,10 @@ int32_t tscBuildKillMsg(SSqlObj *pSql, SSqlInfo *pInfo) { ...@@ -1267,10 +1267,10 @@ int32_t tscBuildKillMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
// TODO update it
int tscEstimateCreateTableMsgLength(SSqlObj *pSql, SSqlInfo *pInfo) { int tscEstimateCreateTableMsgLength(SSqlObj *pSql, SSqlInfo *pInfo) {
SSqlCmd *pCmd = &(pSql->cmd); SSqlCmd *pCmd = &(pSql->cmd);
int32_t size = minMsgSize() + sizeof(SCMCreateTableMsg) + sizeof(SCreatedTableInfo);
int32_t size = minMsgSize() + sizeof(SCMCreateTableMsg);
SCreateTableSQL *pCreateTableInfo = pInfo->pCreateTableInfo; SCreateTableSQL *pCreateTableInfo = pInfo->pCreateTableInfo;
if (pCreateTableInfo->type == TSQL_CREATE_TABLE_FROM_STABLE) { if (pCreateTableInfo->type == TSQL_CREATE_TABLE_FROM_STABLE) {
...@@ -1302,33 +1302,55 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) { ...@@ -1302,33 +1302,55 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return TSDB_CODE_TSC_OUT_OF_MEMORY; return TSDB_CODE_TSC_OUT_OF_MEMORY;
} }
SCMCreateTableMsg *pCreateTableMsg = (SCMCreateTableMsg *)pCmd->payload; SCMCreateTableMsg *pCreateTableMsg = (SCMCreateTableMsg *)pCmd->payload;
strcpy(pCreateTableMsg->tableId, pTableMetaInfo->name);
SCreateTableMsg* pCreateMsg = (SCreateTableMsg*)((char*) pCreateTableMsg + sizeof(SCMCreateTableMsg));
char* pMsg = NULL;
int8_t type = pInfo->pCreateTableInfo->type;
if (type == TSQL_CREATE_TABLE_FROM_STABLE) { // create by using super table, tags value
SArray* list = pInfo->pCreateTableInfo->childTableInfo;
int32_t numOfTables = taosArrayGetSize(list);
pCreateTableMsg->numOfTables = htonl(numOfTables);
pMsg = (char*) pCreateMsg;
for(int32_t i = 0; i < numOfTables; ++i) {
SCreateTableMsg* pCreate = (SCreateTableMsg*) pMsg;
pCreate->numOfColumns = htons(pCmd->numOfCols);
pCreate->numOfTags = htons(pCmd->count);
pMsg += sizeof(SCreateTableMsg);
SCreatedTableInfo* p = taosArrayGet(list, i);
strcpy(pCreate->tableId, p->fullname);
pCreate->igExists = (p->igExist)? 1 : 0;
// use dbinfo from table id without modifying current db info // use dbinfo from table id without modifying current db info
tscGetDBInfoFromTableFullName(pTableMetaInfo->name, pCreateTableMsg->db); tscGetDBInfoFromTableFullName(p->fullname, pCreate->db);
pMsg = serializeTagData(&p->tagdata, pMsg);
int32_t len = pMsg - (char*) pCreate;
pCreate->len = htonl(len);
}
} else { // create (super) table
pCreateTableMsg->numOfTables = htonl(1); // only one table will be created
strcpy(pCreateMsg->tableId, pTableMetaInfo->name);
// use dbinfo from table id without modifying current db info
tscGetDBInfoFromTableFullName(pTableMetaInfo->name, pCreateMsg->db);
SCreateTableSQL *pCreateTable = pInfo->pCreateTableInfo; SCreateTableSQL *pCreateTable = pInfo->pCreateTableInfo;
pCreateTableMsg->igExists = pCreateTable->existCheck ? 1 : 0; pCreateMsg->igExists = pCreateTable->existCheck ? 1 : 0;
pCreateTableMsg->numOfColumns = htons(pCmd->numOfCols); pCreateMsg->numOfColumns = htons(pCmd->numOfCols);
pCreateTableMsg->numOfTags = htons(pCmd->count); pCreateMsg->numOfTags = htons(pCmd->count);
pCreateTableMsg->sqlLen = 0; pCreateMsg->sqlLen = 0;
char *pMsg = (char *)pCreateTableMsg->schema; pMsg = (char *)pCreateMsg->schema;
int8_t type = pInfo->pCreateTableInfo->type; pSchema = (SSchema *)pCreateMsg->schema;
if (type == TSQL_CREATE_TABLE_FROM_STABLE) { // create by using super table, tags value
STagData* pTag = &pInfo->pCreateTableInfo->usingInfo.tagdata;
*(int32_t*)pMsg = htonl(pTag->dataLen);
pMsg += sizeof(int32_t);
memcpy(pMsg, pTag->name, sizeof(pTag->name));
pMsg += sizeof(pTag->name);
memcpy(pMsg, pTag->data, pTag->dataLen);
pMsg += pTag->dataLen;
} else { // create (super) table
pSchema = (SSchema *)pCreateTableMsg->schema;
for (int i = 0; i < pCmd->numOfCols + pCmd->count; ++i) { for (int i = 0; i < pCmd->numOfCols + pCmd->count; ++i) {
TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i); TAOS_FIELD *pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, i);
...@@ -1345,7 +1367,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) { ...@@ -1345,7 +1367,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SQuerySQL *pQuerySql = pInfo->pCreateTableInfo->pSelect; SQuerySQL *pQuerySql = pInfo->pCreateTableInfo->pSelect;
strncpy(pMsg, pQuerySql->selectToken.z, pQuerySql->selectToken.n + 1); strncpy(pMsg, pQuerySql->selectToken.z, pQuerySql->selectToken.n + 1);
pCreateTableMsg->sqlLen = htons(pQuerySql->selectToken.n + 1); pCreateMsg->sqlLen = htons(pQuerySql->selectToken.n + 1);
pMsg += pQuerySql->selectToken.n + 1; pMsg += pQuerySql->selectToken.n + 1;
} }
} }
...@@ -1622,13 +1644,8 @@ int tscBuildTableMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) { ...@@ -1622,13 +1644,8 @@ int tscBuildTableMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
char *pMsg = (char *)pInfoMsg + sizeof(STableInfoMsg); char *pMsg = (char *)pInfoMsg + sizeof(STableInfoMsg);
if (pCmd->autoCreated && pCmd->pTagData != NULL) { if (pCmd->autoCreated && pCmd->tagData.dataLen != 0) {
int len = htonl(pCmd->pTagData->dataLen); pMsg = serializeTagData(&pCmd->tagData, pMsg);
if (len > 0) {
len += sizeof(pCmd->pTagData->name) + sizeof(pCmd->pTagData->dataLen);
memcpy(pInfoMsg->tags, pCmd->pTagData, len);
pMsg += len;
}
} }
pCmd->payloadLen = (int32_t)(pMsg - (char*)pInfoMsg); pCmd->payloadLen = (int32_t)(pMsg - (char*)pInfoMsg);
...@@ -2174,10 +2191,7 @@ int tscProcessDropTableRsp(SSqlObj *pSql) { ...@@ -2174,10 +2191,7 @@ int tscProcessDropTableRsp(SSqlObj *pSql) {
*/ */
tscDebug("%p force release table meta after drop table:%s", pSql, pTableMetaInfo->name); tscDebug("%p force release table meta after drop table:%s", pSql, pTableMetaInfo->name);
taosCacheRelease(tscMetaCache, (void **)&pTableMeta, true); taosCacheRelease(tscMetaCache, (void **)&pTableMeta, true);
assert(pTableMetaInfo->pTableMeta == NULL);
if (pTableMetaInfo->pTableMeta) {
taosCacheRelease(tscMetaCache, (void **)&(pTableMetaInfo->pTableMeta), true);
}
return 0; return 0;
} }
...@@ -2285,7 +2299,7 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) { ...@@ -2285,7 +2299,7 @@ int tscProcessRetrieveRspFromNode(SSqlObj *pSql) {
void tscTableMetaCallBack(void *param, TAOS_RES *res, int code); void tscTableMetaCallBack(void *param, TAOS_RES *res, int code);
static int32_t getTableMetaFromMgmt(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) { static int32_t getTableMetaFromMnode(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) {
SSqlObj *pNew = calloc(1, sizeof(SSqlObj)); SSqlObj *pNew = calloc(1, sizeof(SSqlObj));
if (NULL == pNew) { if (NULL == pNew) {
tscError("%p malloc failed for new sqlobj to get table meta", pSql); tscError("%p malloc failed for new sqlobj to get table meta", pSql);
...@@ -2312,15 +2326,13 @@ static int32_t getTableMetaFromMgmt(SSqlObj *pSql, STableMetaInfo *pTableMetaInf ...@@ -2312,15 +2326,13 @@ static int32_t getTableMetaFromMgmt(SSqlObj *pSql, STableMetaInfo *pTableMetaInf
tstrncpy(pNewMeterMetaInfo->name, pTableMetaInfo->name, sizeof(pNewMeterMetaInfo->name)); tstrncpy(pNewMeterMetaInfo->name, pTableMetaInfo->name, sizeof(pNewMeterMetaInfo->name));
if (pSql->cmd.pTagData != NULL) { if (pSql->cmd.autoCreated) {
int size = offsetof(STagData, data) + htonl(pSql->cmd.pTagData->dataLen); int32_t code = copyTagData(&pNew->cmd.tagData, &pSql->cmd.tagData);
pNew->cmd.pTagData = calloc(1, size); if (code != TSDB_CODE_SUCCESS) {
if (pNew->cmd.pTagData == NULL) {
tscError("%p malloc failed for new tag data to get table meta", pSql); tscError("%p malloc failed for new tag data to get table meta", pSql);
tscFreeSqlObj(pNew); tscFreeSqlObj(pNew);
return TSDB_CODE_TSC_OUT_OF_MEMORY; return TSDB_CODE_TSC_OUT_OF_MEMORY;
} }
memcpy(pNew->cmd.pTagData, pSql->cmd.pTagData, size);
} }
tscDebug("%p new pSqlObj:%p to get tableMeta, auto create:%d", pSql, pNew, pNew->cmd.autoCreated); tscDebug("%p new pSqlObj:%p to get tableMeta, auto create:%d", pSql, pNew, pNew->cmd.autoCreated);
...@@ -2355,10 +2367,10 @@ int32_t tscGetTableMeta(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) { ...@@ -2355,10 +2367,10 @@ int32_t tscGetTableMeta(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
return getTableMetaFromMgmt(pSql, pTableMetaInfo); return getTableMetaFromMnode(pSql, pTableMetaInfo);
} }
int tscGetMeterMetaEx(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo, bool createIfNotExists) { int tscGetTableMetaEx(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo, bool createIfNotExists) {
pSql->cmd.autoCreated = createIfNotExists; pSql->cmd.autoCreated = createIfNotExists;
return tscGetTableMeta(pSql, pTableMetaInfo); return tscGetTableMeta(pSql, pTableMetaInfo);
} }
...@@ -2382,7 +2394,7 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) { ...@@ -2382,7 +2394,7 @@ int tscRenewTableMeta(SSqlObj *pSql, int32_t tableIndex) {
} }
taosCacheRelease(tscMetaCache, (void **)&(pTableMetaInfo->pTableMeta), true); taosCacheRelease(tscMetaCache, (void **)&(pTableMetaInfo->pTableMeta), true);
return getTableMetaFromMgmt(pSql, pTableMetaInfo); return getTableMetaFromMnode(pSql, pTableMetaInfo);
} }
static bool allVgroupInfoRetrieved(SSqlCmd* pCmd, int32_t clauseIndex) { static bool allVgroupInfoRetrieved(SSqlCmd* pCmd, int32_t clauseIndex) {
......
...@@ -518,7 +518,8 @@ void tscFreeSqlObj(SSqlObj* pSql) { ...@@ -518,7 +518,8 @@ void tscFreeSqlObj(SSqlObj* pSql) {
tscFreeSqlResult(pSql); tscFreeSqlResult(pSql);
tscResetSqlCmdObj(pCmd, false); tscResetSqlCmdObj(pCmd, false);
tfree(pCmd->pTagData); tfree(pCmd->tagData.data);
pCmd->tagData.dataLen = 0;
memset(pCmd->payload, 0, (size_t)pCmd->allocSize); memset(pCmd->payload, 0, (size_t)pCmd->allocSize);
tfree(pCmd->payload); tfree(pCmd->payload);
...@@ -1937,16 +1938,12 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, void (*fp)(), void* param, int32_t cm ...@@ -1937,16 +1938,12 @@ SSqlObj* createSimpleSubObj(SSqlObj* pSql, void (*fp)(), void* param, int32_t cm
pCmd->parseFinished = 1; pCmd->parseFinished = 1;
pCmd->autoCreated = pSql->cmd.autoCreated; pCmd->autoCreated = pSql->cmd.autoCreated;
if (pSql->cmd.pTagData != NULL) { int32_t code = copyTagData(&pNew->cmd.tagData, &pSql->cmd.tagData);
int size = offsetof(STagData, data) + htonl(pSql->cmd.pTagData->dataLen); if (code != TSDB_CODE_SUCCESS) {
pNew->cmd.pTagData = calloc(1, size);
if (pNew->cmd.pTagData == NULL) {
tscError("%p new subquery failed, unable to malloc tag data, tableIndex:%d", pSql, 0); tscError("%p new subquery failed, unable to malloc tag data, tableIndex:%d", pSql, 0);
free(pNew); free(pNew);
return NULL; return NULL;
} }
memcpy(pNew->cmd.pTagData, pSql->cmd.pTagData, size);
}
if (tscAddSubqueryInfo(pCmd) != TSDB_CODE_SUCCESS) { if (tscAddSubqueryInfo(pCmd) != TSDB_CODE_SUCCESS) {
tscFreeSqlObj(pNew); tscFreeSqlObj(pNew);
...@@ -2595,3 +2592,36 @@ void tscSVgroupInfoCopy(SVgroupInfo* dst, const SVgroupInfo* src) { ...@@ -2595,3 +2592,36 @@ void tscSVgroupInfoCopy(SVgroupInfo* dst, const SVgroupInfo* src) {
dst->epAddr[i].fqdn = strdup(src->epAddr[i].fqdn); dst->epAddr[i].fqdn = strdup(src->epAddr[i].fqdn);
} }
} }
char* serializeTagData(STagData* pTagData, char* pMsg) {
int32_t n = strlen(pTagData->name);
*(int32_t*) pMsg = htonl(n);
pMsg += sizeof(n);
memcpy(pMsg, pTagData->name, n);
pMsg += n;
*(int32_t*)pMsg = htonl(pTagData->dataLen);
pMsg += sizeof(int32_t);
memcpy(pMsg, pTagData->data, pTagData->dataLen);
pMsg += pTagData->dataLen;
return pMsg;
}
int32_t copyTagData(STagData* dst, const STagData* src) {
dst->dataLen = src->dataLen;
tstrncpy(dst->name, src->name, tListLen(dst->name));
if (dst->dataLen > 0) {
dst->data = malloc(dst->dataLen);
if (dst->data == NULL) {
return -1;
}
memcpy(dst->data, src->data, dst->dataLen);
}
return 0;
}
\ No newline at end of file
...@@ -57,7 +57,9 @@ extern char tsTempDir[]; ...@@ -57,7 +57,9 @@ extern char tsTempDir[];
//query buffer management //query buffer management
extern int32_t tsQueryBufferSize; // maximum allowed usage buffer for each data node during query processing extern int32_t tsQueryBufferSize; // maximum allowed usage buffer for each data node during query processing
extern int32_t tsRetrieveBlockingModel; // only 50% will be used in query processing extern int32_t tsRetrieveBlockingModel;// retrieve threads will be blocked
extern int32_t tsKeepOriginalColumnName;
// client // client
extern int32_t tsTableMetaKeepTimer; extern int32_t tsTableMetaKeepTimer;
......
...@@ -110,6 +110,9 @@ int32_t tsQueryBufferSize = -1; ...@@ -110,6 +110,9 @@ int32_t tsQueryBufferSize = -1;
// in retrieve blocking model, the retrieve threads will wait for the completion of the query processing. // in retrieve blocking model, the retrieve threads will wait for the completion of the query processing.
int32_t tsRetrieveBlockingModel = 0; int32_t tsRetrieveBlockingModel = 0;
// last_row(*), first(*), last_row(ts, col1, col2) query, the result fields will be the original column name
int32_t tsKeepOriginalColumnName = 0;
// db parameters // db parameters
int32_t tsCacheBlockSize = TSDB_DEFAULT_CACHE_BLOCK_SIZE; int32_t tsCacheBlockSize = TSDB_DEFAULT_CACHE_BLOCK_SIZE;
int32_t tsBlocksPerVnode = TSDB_DEFAULT_TOTAL_BLOCKS; int32_t tsBlocksPerVnode = TSDB_DEFAULT_TOTAL_BLOCKS;
...@@ -897,6 +900,16 @@ static void doInitGlobalConfig(void) { ...@@ -897,6 +900,16 @@ static void doInitGlobalConfig(void) {
cfg.unitType = TAOS_CFG_UTYPE_NONE; cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg); taosInitConfigOption(cfg);
cfg.option = "keepColumnName";
cfg.ptr = &tsKeepOriginalColumnName;
cfg.valType = TAOS_CFG_VTYPE_INT32;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW | TSDB_CFG_CTYPE_B_CLIENT;
cfg.minValue = 0;
cfg.maxValue = 1;
cfg.ptrLength = 1;
cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg);
// locale & charset // locale & charset
cfg.option = "timezone"; cfg.option = "timezone";
cfg.ptr = tsTimezone; cfg.ptr = tsTimezone;
......
...@@ -266,6 +266,7 @@ typedef struct { ...@@ -266,6 +266,7 @@ typedef struct {
} SMDCreateTableMsg; } SMDCreateTableMsg;
typedef struct { typedef struct {
int32_t len; // one create table message
char tableId[TSDB_TABLE_FNAME_LEN]; char tableId[TSDB_TABLE_FNAME_LEN];
char db[TSDB_ACCT_LEN + TSDB_DB_NAME_LEN]; char db[TSDB_ACCT_LEN + TSDB_DB_NAME_LEN];
int8_t igExists; int8_t igExists;
...@@ -273,9 +274,13 @@ typedef struct { ...@@ -273,9 +274,13 @@ typedef struct {
int16_t numOfTags; int16_t numOfTags;
int16_t numOfColumns; int16_t numOfColumns;
int16_t sqlLen; // the length of SQL, it starts after schema , sql is a null-terminated string int16_t sqlLen; // the length of SQL, it starts after schema , sql is a null-terminated string
int32_t contLen;
int8_t reserved[16]; int8_t reserved[16];
char schema[]; char schema[];
} SCreateTableMsg;
typedef struct {
int32_t numOfTables;
int32_t contLen;
} SCMCreateTableMsg; } SCMCreateTableMsg;
typedef struct { typedef struct {
...@@ -731,7 +736,7 @@ typedef struct SMultiTableMeta { ...@@ -731,7 +736,7 @@ typedef struct SMultiTableMeta {
typedef struct { typedef struct {
int32_t dataLen; int32_t dataLen;
char name[TSDB_TABLE_FNAME_LEN]; char name[TSDB_TABLE_FNAME_LEN];
char data[TSDB_MAX_TAGS_LEN + TD_KV_ROW_HEAD_SIZE + sizeof(SColIdx) * TSDB_MAX_TAGS]; char *data;
} STagData; } STagData;
/* /*
......
...@@ -721,9 +721,16 @@ static void mnodeExtractTableName(char* tableId, char* name) { ...@@ -721,9 +721,16 @@ static void mnodeExtractTableName(char* tableId, char* name) {
static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) { static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) {
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont; SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont;
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(pCreate->db); int32_t numOfTables = htonl(pCreate->numOfTables);
int32_t contentLen = htonl(pCreate->contLen);
if (numOfTables == 0 || contentLen == 0) {
// todo return error
}
SCreateTableMsg *p = (SCreateTableMsg*)((char*) pCreate + sizeof(SCMCreateTableMsg));
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(p->db);
if (pMsg->pDb == NULL) { if (pMsg->pDb == NULL) {
mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId); mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
return TSDB_CODE_MND_DB_NOT_SELECTED; return TSDB_CODE_MND_DB_NOT_SELECTED;
} }
...@@ -732,28 +739,28 @@ static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) { ...@@ -732,28 +739,28 @@ static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) {
return TSDB_CODE_MND_DB_IN_DROPPING; return TSDB_CODE_MND_DB_IN_DROPPING;
} }
if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreate->tableId); if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(p->tableId);
if (pMsg->pTable != NULL && pMsg->retry == 0) { if (pMsg->pTable != NULL && pMsg->retry == 0) {
if (pCreate->getMeta) { if (p->getMeta) {
mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId); mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
return mnodeGetChildTableMeta(pMsg); return mnodeGetChildTableMeta(pMsg);
} else if (pCreate->igExists) { } else if (p->igExists) {
mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId); mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} else { } else {
mError("msg:%p, app:%p table:%s, failed to create, table already exist", pMsg, pMsg->rpcMsg.ahandle, mError("msg:%p, app:%p table:%s, failed to create, table already exist", pMsg, pMsg->rpcMsg.ahandle,
pCreate->tableId); p->tableId);
return TSDB_CODE_MND_TABLE_ALREADY_EXIST; return TSDB_CODE_MND_TABLE_ALREADY_EXIST;
} }
} }
if (pCreate->numOfTags != 0) { if (p->numOfTags != 0) {
mDebug("msg:%p, app:%p table:%s, create stable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle, mDebug("msg:%p, app:%p table:%s, create stable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
pCreate->tableId, pMsg->rpcMsg.handle); p->tableId, pMsg->rpcMsg.handle);
return mnodeProcessCreateSuperTableMsg(pMsg); return mnodeProcessCreateSuperTableMsg(pMsg);
} else { } else {
mDebug("msg:%p, app:%p table:%s, create ctable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle, mDebug("msg:%p, app:%p table:%s, create ctable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
pCreate->tableId, pMsg->rpcMsg.handle); p->tableId, pMsg->rpcMsg.handle);
return mnodeProcessCreateChildTableMsg(pMsg); return mnodeProcessCreateChildTableMsg(pMsg);
} }
} }
...@@ -859,7 +866,13 @@ static int32_t mnodeCreateSuperTableCb(SMnodeMsg *pMsg, int32_t code) { ...@@ -859,7 +866,13 @@ static int32_t mnodeCreateSuperTableCb(SMnodeMsg *pMsg, int32_t code) {
static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) { static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
if (pMsg == NULL) return TSDB_CODE_MND_APP_ERROR; if (pMsg == NULL) return TSDB_CODE_MND_APP_ERROR;
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont; SCMCreateTableMsg *pCreate1 = pMsg->rpcMsg.pCont;
if (pCreate1->numOfTables == 0) {
// todo return to error message
}
SCreateTableMsg* pCreate = (SCreateTableMsg*)((char*)pCreate1 + sizeof(SCMCreateTableMsg));
SSTableObj * pStable = calloc(1, sizeof(SSTableObj)); SSTableObj * pStable = calloc(1, sizeof(SSTableObj));
if (pStable == NULL) { if (pStable == NULL) {
mError("msg:%p, app:%p table:%s, failed to create, no enough memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId); mError("msg:%p, app:%p table:%s, failed to create, no enough memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
...@@ -1599,8 +1612,11 @@ static void mnodeProcessDropSuperTableRsp(SRpcMsg *rpcMsg) { ...@@ -1599,8 +1612,11 @@ static void mnodeProcessDropSuperTableRsp(SRpcMsg *rpcMsg) {
mInfo("drop stable rsp received, result:%s", tstrerror(rpcMsg->code)); mInfo("drop stable rsp received, result:%s", tstrerror(rpcMsg->code));
} }
static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SCTableObj *pTable) { static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pCreateMsg, SCTableObj *pTable) {
STagData * pTagData = NULL; SCreateTableMsg* pMsg = (SCreateTableMsg*) ((char*)pCreateMsg + sizeof(SCMCreateTableMsg));
char* tagData = NULL;
int32_t tagDataLen = 0; int32_t tagDataLen = 0;
int32_t totalCols = 0; int32_t totalCols = 0;
int32_t contLen = 0; int32_t contLen = 0;
...@@ -1608,9 +1624,13 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SCTableObj * ...@@ -1608,9 +1624,13 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SCTableObj *
totalCols = pTable->superTable->numOfColumns + pTable->superTable->numOfTags; totalCols = pTable->superTable->numOfColumns + pTable->superTable->numOfTags;
contLen = sizeof(SMDCreateTableMsg) + totalCols * sizeof(SSchema) + pTable->sqlLen; contLen = sizeof(SMDCreateTableMsg) + totalCols * sizeof(SSchema) + pTable->sqlLen;
if (pMsg != NULL) { if (pMsg != NULL) {
pTagData = (STagData *)pMsg->schema; int32_t nameLen = htonl(*(int32_t*)pMsg->schema);
tagDataLen = htonl(pTagData->dataLen); char* p = pMsg->schema + nameLen + sizeof(int32_t);
tagDataLen = htonl(*(int32_t*) p);
contLen += tagDataLen; contLen += tagDataLen;
tagData = p + sizeof(int32_t);
} }
} else { } else {
totalCols = pTable->numOfColumns; totalCols = pTable->numOfColumns;
...@@ -1662,7 +1682,7 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SCTableObj * ...@@ -1662,7 +1682,7 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pMsg, SCTableObj *
} }
if (pTable->info.type == TSDB_CHILD_TABLE && pMsg != NULL) { if (pTable->info.type == TSDB_CHILD_TABLE && pMsg != NULL) {
memcpy(pCreate->data + totalCols * sizeof(SSchema), pTagData->data, tagDataLen); memcpy(pCreate->data + totalCols * sizeof(SSchema), tagData, tagDataLen);
} }
if (pTable->info.type == TSDB_STREAM_TABLE) { if (pTable->info.type == TSDB_STREAM_TABLE) {
...@@ -1700,7 +1720,8 @@ static int32_t mnodeDoCreateChildTableFp(SMnodeMsg *pMsg) { ...@@ -1700,7 +1720,8 @@ static int32_t mnodeDoCreateChildTableFp(SMnodeMsg *pMsg) {
static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) { static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
SCTableObj *pTable = (SCTableObj *)pMsg->pTable; SCTableObj *pTable = (SCTableObj *)pMsg->pTable;
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont;
SCreateTableMsg *pCreate = (SCreateTableMsg*) ((char*)pMsg->rpcMsg.pCont + sizeof(SCMCreateTableMsg));
assert(pTable); assert(pTable);
if (code == TSDB_CODE_SUCCESS) { if (code == TSDB_CODE_SUCCESS) {
...@@ -1728,40 +1749,42 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) { ...@@ -1728,40 +1749,42 @@ static int32_t mnodeDoCreateChildTableCb(SMnodeMsg *pMsg, int32_t code) {
static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) { static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
SVgObj *pVgroup = pMsg->pVgroup; SVgObj *pVgroup = pMsg->pVgroup;
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont;
SCMCreateTableMsg *p1 = pMsg->rpcMsg.pCont;
SCreateTableMsg *pCreate = (SCreateTableMsg*)((char*)p1 + sizeof(SCMCreateTableMsg));
SCTableObj *pTable = calloc(1, sizeof(SCTableObj)); SCTableObj *pTable = calloc(1, sizeof(SCTableObj));
if (pTable == NULL) { if (pTable == NULL) {
mError("msg:%p, app:%p table:%s, failed to alloc memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId); mError("msg:%p, app:%p table:%s, failed to alloc memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
return TSDB_CODE_MND_OUT_OF_MEMORY; return TSDB_CODE_MND_OUT_OF_MEMORY;
} }
if (pCreate->numOfColumns == 0) { pTable->info.type = (pCreate->numOfColumns == 0)? TSDB_CHILD_TABLE:TSDB_NORMAL_TABLE;
pTable->info.type = TSDB_CHILD_TABLE;
} else {
pTable->info.type = TSDB_NORMAL_TABLE;
}
pTable->info.tableId = strdup(pCreate->tableId); pTable->info.tableId = strdup(pCreate->tableId);
pTable->createdTime = taosGetTimestampMs(); pTable->createdTime = taosGetTimestampMs();
pTable->tid = tid; pTable->tid = tid;
pTable->vgId = pVgroup->vgId; pTable->vgId = pVgroup->vgId;
if (pTable->info.type == TSDB_CHILD_TABLE) { if (pTable->info.type == TSDB_CHILD_TABLE) {
STagData *pTagData = (STagData *)pCreate->schema; // it is a tag key int32_t nameLen = htonl(*(int32_t*) pCreate->schema);
char* name = (char*)pCreate->schema + sizeof(int32_t);
char stableName[TSDB_TABLE_FNAME_LEN] = {0};
memcpy(stableName, name, nameLen);
char prefix[64] = {0}; char prefix[64] = {0};
size_t prefixLen = tableIdPrefix(pMsg->pDb->name, prefix, 64); size_t prefixLen = tableIdPrefix(pMsg->pDb->name, prefix, 64);
if (0 != strncasecmp(prefix, pTagData->name, prefixLen)) { if (0 != strncasecmp(prefix, stableName, prefixLen)) {
mError("msg:%p, app:%p table:%s, corresponding super table:%s not in this db", pMsg, pMsg->rpcMsg.ahandle, mError("msg:%p, app:%p table:%s, corresponding super table:%s not in this db", pMsg, pMsg->rpcMsg.ahandle,
pCreate->tableId, pTagData->name); pCreate->tableId, stableName);
mnodeDestroyChildTable(pTable); mnodeDestroyChildTable(pTable);
return TSDB_CODE_TDB_INVALID_CREATE_TB_MSG; return TSDB_CODE_TDB_INVALID_CREATE_TB_MSG;
} }
if (pMsg->pSTable == NULL) pMsg->pSTable = mnodeGetSuperTable(pTagData->name); if (pMsg->pSTable == NULL) pMsg->pSTable = mnodeGetSuperTable(stableName);
if (pMsg->pSTable == NULL) { if (pMsg->pSTable == NULL) {
mError("msg:%p, app:%p table:%s, corresponding super table:%s does not exist", pMsg, pMsg->rpcMsg.ahandle, mError("msg:%p, app:%p table:%s, corresponding super table:%s does not exist", pMsg, pMsg->rpcMsg.ahandle,
pCreate->tableId, pTagData->name); pCreate->tableId, stableName);
mnodeDestroyChildTable(pTable); mnodeDestroyChildTable(pTable);
return TSDB_CODE_MND_INVALID_TABLE_NAME; return TSDB_CODE_MND_INVALID_TABLE_NAME;
} }
...@@ -1839,7 +1862,9 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) { ...@@ -1839,7 +1862,9 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
} }
static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) { static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) {
SCMCreateTableMsg *pCreate = pMsg->rpcMsg.pCont; //SCMCreateTableMsg* p1 = pMsg->rpcMsg.pCont; // there are several tables here.
SCreateTableMsg* pCreate = (SCreateTableMsg*)(pMsg->rpcMsg.pCont + sizeof(SCMCreateTableMsg));
int32_t code = grantCheck(TSDB_GRANT_TIMESERIES); int32_t code = grantCheck(TSDB_GRANT_TIMESERIES);
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
mError("msg:%p, app:%p table:%s, failed to create, grant timeseries failed", pMsg, pMsg->rpcMsg.ahandle, mError("msg:%p, app:%p table:%s, failed to create, grant timeseries failed", pMsg, pMsg->rpcMsg.ahandle,
...@@ -2187,15 +2212,23 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) { ...@@ -2187,15 +2212,23 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) { static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
STableInfoMsg *pInfo = pMsg->rpcMsg.pCont; STableInfoMsg *pInfo = pMsg->rpcMsg.pCont;
STagData *pTags = (STagData *)pInfo->tags;
int32_t tagLen = htonl(pTags->dataLen); char* p = pInfo->tags;
if (pTags->name[0] == 0) { int32_t nameLen = htonl(*(int32_t*) p);
mError("msg:%p, app:%p table:%s, failed to create table on demand for stable is empty, tagLen:%d", pMsg, p += sizeof(int32_t);
p += nameLen;
int32_t tagLen = htonl(*(int32_t*) p);
p += sizeof(int32_t);
int32_t totalLen = nameLen + tagLen + sizeof(int32_t)*2;
if (tagLen == 0 || nameLen == 0) {
mError("msg:%p, app:%p table:%s, failed to create table on demand for super table is empty, tagLen:%d", pMsg,
pMsg->rpcMsg.ahandle, pInfo->tableId, tagLen); pMsg->rpcMsg.ahandle, pInfo->tableId, tagLen);
return TSDB_CODE_MND_INVALID_STABLE_NAME; return TSDB_CODE_MND_INVALID_STABLE_NAME;
} }
int32_t contLen = sizeof(SCMCreateTableMsg) + offsetof(STagData, data) + tagLen; int32_t contLen = sizeof(SCMCreateTableMsg) + sizeof(SCreateTableMsg) + totalLen;
SCMCreateTableMsg *pCreateMsg = calloc(1, contLen); SCMCreateTableMsg *pCreateMsg = calloc(1, contLen);
if (pCreateMsg == NULL) { if (pCreateMsg == NULL) {
mError("msg:%p, app:%p table:%s, failed to create table while get meta info, no enough memory", pMsg, mError("msg:%p, app:%p table:%s, failed to create table while get meta info, no enough memory", pMsg,
...@@ -2203,16 +2236,24 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) { ...@@ -2203,16 +2236,24 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
return TSDB_CODE_MND_OUT_OF_MEMORY; return TSDB_CODE_MND_OUT_OF_MEMORY;
} }
size_t size = sizeof(pInfo->tableId); SCreateTableMsg* pCreate = (SCreateTableMsg*) ((char*) pCreateMsg + sizeof(SCMCreateTableMsg));
tstrncpy(pCreateMsg->tableId, pInfo->tableId, size);
tstrncpy(pCreateMsg->db, pMsg->pDb->name, sizeof(pCreateMsg->db)); size_t size = tListLen(pInfo->tableId);
pCreateMsg->igExists = 1; tstrncpy(pCreate->tableId, pInfo->tableId, size);
pCreateMsg->getMeta = 1; tstrncpy(pCreate->db, pMsg->pDb->name, sizeof(pCreate->db));
pCreate->igExists = 1;
pCreate->getMeta = 1;
pCreateMsg->numOfTables = htonl(1);
pCreateMsg->contLen = htonl(contLen); pCreateMsg->contLen = htonl(contLen);
memcpy(pCreateMsg->schema, pTags, contLen - sizeof(SCMCreateTableMsg)); memcpy(pCreate->schema, pInfo->tags, totalLen);
char name[TSDB_TABLE_FNAME_LEN] = {0};
memcpy(name, pInfo->tags + sizeof(int32_t), nameLen);
mDebug("msg:%p, app:%p table:%s, start to create on demand, tagLen:%d stable:%s", pMsg, pMsg->rpcMsg.ahandle, mDebug("msg:%p, app:%p table:%s, start to create on demand, tagLen:%d stable:%s", pMsg, pMsg->rpcMsg.ahandle,
pInfo->tableId, tagLen, pTags->name); pInfo->tableId, tagLen, name);
if (pMsg->rpcMsg.pCont != pMsg->pCont) { if (pMsg->rpcMsg.pCont != pMsg->pCont) {
tfree(pMsg->rpcMsg.pCont); tfree(pMsg->rpcMsg.pCont);
......
...@@ -39,7 +39,7 @@ extern "C" { ...@@ -39,7 +39,7 @@ extern "C" {
do { \ do { \
strncpy((dst), (src), (size)); \ strncpy((dst), (src), (size)); \
(dst)[(size)-1] = 0; \ (dst)[(size)-1] = 0; \
} while (0); } while (0)
#ifndef TAOS_OS_FUNC_STRING_STR2INT64 #ifndef TAOS_OS_FUNC_STRING_STR2INT64
int64_t tsosStr2int64(char *str); int64_t tsosStr2int64(char *str);
......
...@@ -73,22 +73,26 @@ typedef struct SQuerySQL { ...@@ -73,22 +73,26 @@ typedef struct SQuerySQL {
SStrToken selectToken; // sql string SStrToken selectToken; // sql string
} SQuerySQL; } SQuerySQL;
typedef struct SCreatedTableInfo {
SStrToken name; // table name token
SStrToken stableName; // super table name token , for using clause
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 { typedef struct SCreateTableSQL {
struct SStrToken name; // meter name, create table [meterName] xxx SStrToken name; // table name, create table [name] xxx
int8_t type; // create normal table/from super table/ stream
bool existCheck; bool existCheck;
int8_t type; // create normal table/from super table/ stream
struct { struct {
SArray *pTagColumns; // SArray<TAOS_FIELD> SArray *pTagColumns; // SArray<TAOS_FIELD>
SArray *pColumns; // SArray<TAOS_FIELD> SArray *pColumns; // SArray<TAOS_FIELD>
} colInfo; } colInfo;
struct { SArray *childTableInfo; // SArray<SCreatedTableInfo>
SStrToken stableName; // super table name, for using clause
SArray *pTagVals; // create by using metric, tag value
STagData tagdata;
} usingInfo;
SQuerySQL *pSelect; SQuerySQL *pSelect;
} SCreateTableSQL; } SCreateTableSQL;
...@@ -241,22 +245,23 @@ SQuerySQL *tSetQuerySQLElems(SStrToken *pSelectToken, tSQLExprList *pSelection, ...@@ -241,22 +245,23 @@ SQuerySQL *tSetQuerySQLElems(SStrToken *pSelectToken, tSQLExprList *pSelection,
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval,
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pGLimit); SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pGLimit);
SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SStrToken *pMetricName, SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SQuerySQL *pSelect, int32_t type);
SArray *pTagVals, SQuerySQL *pSelect, int32_t type);
void tSQLExprNodeDestroy(tSQLExpr *pExpr); void tSQLExprNodeDestroy(tSQLExpr *pExpr);
SAlterTableSQL *tAlterTableSQLElems(SStrToken *pMeterName, SArray *pCols, SArray *pVals, int32_t type); SAlterTableSQL *tAlterTableSQLElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type);
SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagVals, SStrToken *pToken, SStrToken* igExists);
void destroyAllSelectClause(SSubclauseInfo *pSql); void destroyAllSelectClause(SSubclauseInfo *pSql);
void doDestroyQuerySql(SQuerySQL *pSql); void doDestroyQuerySql(SQuerySQL *pSql);
void freeCreateTableInfo(void* p);
SSqlInfo * setSQLInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pMeterName, int32_t type); SSqlInfo *setSQLInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pTableName, int32_t type);
SSubclauseInfo *setSubclause(SSubclauseInfo *pClause, void *pSqlExprInfo); SSubclauseInfo *setSubclause(SSubclauseInfo *pClause, void *pSqlExprInfo);
SSubclauseInfo *appendSelectClause(SSubclauseInfo *pInfo, void *pSubclause); SSubclauseInfo *appendSelectClause(SSubclauseInfo *pInfo, void *pSubclause);
void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pMeterName, SStrToken *pIfNotExists); void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken *pIfNotExists);
void SQLInfoDestroy(SSqlInfo *pInfo); void SQLInfoDestroy(SSqlInfo *pInfo);
......
...@@ -168,12 +168,12 @@ ids(A) ::= ID(X). {A = X; } ...@@ -168,12 +168,12 @@ ids(A) ::= ID(X). {A = X; }
ids(A) ::= STRING(X). {A = X; } ids(A) ::= STRING(X). {A = X; }
%type ifexists {SStrToken} %type ifexists {SStrToken}
ifexists(X) ::= IF EXISTS. {X.n = 1;} ifexists(X) ::= IF EXISTS. { X.n = 1;}
ifexists(X) ::= . {X.n = 0;} ifexists(X) ::= . { X.n = 0;}
%type ifnotexists {SStrToken} %type ifnotexists {SStrToken}
ifnotexists(X) ::= IF NOT EXISTS. {X.n = 1;} ifnotexists(X) ::= IF NOT EXISTS. { X.n = 1;}
ifnotexists(X) ::= . {X.n = 0;} 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
...@@ -183,32 +183,32 @@ cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z). ...@@ -183,32 +183,32 @@ cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);} cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSQL(pInfo, &X, &Y);} cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSQL(pInfo, &X, &Y);}
pps(Y) ::= . {Y.n = 0; } pps(Y) ::= . { Y.n = 0; }
pps(Y) ::= PPS INTEGER(X). {Y = X; } pps(Y) ::= PPS INTEGER(X). { Y = X; }
tseries(Y) ::= . {Y.n = 0; } tseries(Y) ::= . { Y.n = 0; }
tseries(Y) ::= TSERIES INTEGER(X). {Y = X; } tseries(Y) ::= TSERIES INTEGER(X). { Y = X; }
dbs(Y) ::= . {Y.n = 0; } dbs(Y) ::= . { Y.n = 0; }
dbs(Y) ::= DBS INTEGER(X). {Y = X; } dbs(Y) ::= DBS INTEGER(X). { Y = X; }
streams(Y) ::= . {Y.n = 0; } streams(Y) ::= . { Y.n = 0; }
streams(Y) ::= STREAMS INTEGER(X). {Y = X; } streams(Y) ::= STREAMS INTEGER(X). { Y = X; }
storage(Y) ::= . {Y.n = 0; } storage(Y) ::= . { Y.n = 0; }
storage(Y) ::= STORAGE INTEGER(X). {Y = X; } storage(Y) ::= STORAGE INTEGER(X). { Y = X; }
qtime(Y) ::= . {Y.n = 0; } qtime(Y) ::= . { Y.n = 0; }
qtime(Y) ::= QTIME INTEGER(X). {Y = X; } qtime(Y) ::= QTIME INTEGER(X). { Y = X; }
users(Y) ::= . {Y.n = 0; } users(Y) ::= . { Y.n = 0; }
users(Y) ::= USERS INTEGER(X). {Y = X; } users(Y) ::= USERS INTEGER(X). { Y = X; }
conns(Y) ::= . {Y.n = 0; } conns(Y) ::= . { Y.n = 0; }
conns(Y) ::= CONNS INTEGER(X). {Y = X; } conns(Y) ::= CONNS INTEGER(X). { Y = X; }
state(Y) ::= . {Y.n = 0; } state(Y) ::= . { Y.n = 0; }
state(Y) ::= STATE ids(X). {Y = X; } state(Y) ::= STATE ids(X). { Y = X; }
%type acct_optr {SCreateAcctSQL} %type acct_optr {SCreateAcctSQL}
acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K) conns(L) state(M). { acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K) conns(L) state(M). {
...@@ -294,36 +294,60 @@ signed(A) ::= PLUS INTEGER(X). { A = strtol(X.z, NULL, 10); } ...@@ -294,36 +294,60 @@ signed(A) ::= PLUS INTEGER(X). { A = strtol(X.z, NULL, 10); }
signed(A) ::= MINUS INTEGER(X). { A = -strtol(X.z, NULL, 10);} signed(A) ::= MINUS INTEGER(X). { A = -strtol(X.z, NULL, 10);}
////////////////////////////////// The CREATE TABLE statement /////////////////////////////// ////////////////////////////////// The CREATE TABLE statement ///////////////////////////////
cmd ::= CREATE TABLE ifnotexists(Y) ids(X) cpxName(Z) create_table_args. { cmd ::= CREATE TABLE create_table_args. {}
X.n += Z.n; cmd ::= CREATE TABLE create_table_list(Z). { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = Z;}
setCreatedTableName(pInfo, &X, &Y);
%type create_table_list{SCreateTableSQL*}
%destructor create_table_list{destroyCreateTableSQL($$);}
create_table_list(A) ::= create_from_stable(Z). {
SCreateTableSQL* pCreateTable = calloc(1, sizeof(SCreateTableSQL));
pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));
taosArrayPush(pCreateTable->childTableInfo, &Z);
pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
A = pCreateTable;
}
create_table_list(A) ::= create_table_list(X) create_from_stable(Z). {
taosArrayPush(X->childTableInfo, &Z);
A = X;
} }
%type create_table_args{SCreateTableSQL*} %type create_table_args{SCreateTableSQL*}
create_table_args(A) ::= LP columnlist(X) RP. { create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
A = tSetCreateSQLElems(X, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); A = tSetCreateSQLElems(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;
setCreatedTableName(pInfo, &V, &U);
} }
// create super table // create super table
create_table_args(A) ::= LP columnlist(X) RP TAGS LP columnlist(Y) RP. { create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
A = tSetCreateSQLElems(X, Y, NULL, NULL, NULL, TSQL_CREATE_STABLE); A = tSetCreateSQLElems(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;
setCreatedTableName(pInfo, &V, &U);
} }
// create table by using super table // create table by using super table
// create table table_name using super_table_name tags(tag_values1, tag_values2) // create table table_name using super_table_name tags(tag_values1, tag_values2)
create_table_args(A) ::= USING ids(X) cpxName(F) TAGS LP tagitemlist(Y) RP. { %type create_from_stable{SCreatedTableInfo}
create_from_stable(A) ::= ifnotexists(U) ids(V) cpxName(Z) USING ids(X) cpxName(F) TAGS LP tagitemlist(Y) RP. {
X.n += F.n; X.n += F.n;
A = tSetCreateSQLElems(NULL, NULL, &X, Y, NULL, TSQL_CREATE_TABLE_FROM_STABLE); V.n += Z.n;
setSQLInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE); A = createNewChildTableInfo(&X, Y, &V, &U);
} }
// 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) ::= AS select(S). { create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) AS select(S). {
A = tSetCreateSQLElems(NULL, NULL, NULL, NULL, S, TSQL_CREATE_STREAM); A = tSetCreateSQLElems(NULL, NULL, S, TSQL_CREATE_STREAM);
setSQLInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
U.n += Z.n;
setCreatedTableName(pInfo, &U, &V);
} }
%type column{TAOS_FIELD} %type column{TAOS_FIELD}
...@@ -345,10 +369,10 @@ column(A) ::= ids(X) typename(Y). { ...@@ -345,10 +369,10 @@ column(A) ::= ids(X) typename(Y). {
tagitemlist(A) ::= tagitemlist(X) COMMA tagitem(Y). { A = tVariantListAppend(X, &Y, -1); } tagitemlist(A) ::= tagitemlist(X) COMMA tagitem(Y). { A = tVariantListAppend(X, &Y, -1); }
tagitemlist(A) ::= tagitem(X). { A = tVariantListAppend(NULL, &X, -1); } tagitemlist(A) ::= tagitem(X). { A = tVariantListAppend(NULL, &X, -1); }
tagitem(A) ::= INTEGER(X). {toTSDBType(X.type); tVariantCreate(&A, &X); } tagitem(A) ::= INTEGER(X). { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= FLOAT(X). {toTSDBType(X.type); tVariantCreate(&A, &X); } tagitem(A) ::= FLOAT(X). { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= STRING(X). {toTSDBType(X.type); tVariantCreate(&A, &X); } tagitem(A) ::= STRING(X). { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= BOOL(X). {toTSDBType(X.type); tVariantCreate(&A, &X); } tagitem(A) ::= BOOL(X). { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= NULL(X). { X.type = 0; tVariantCreate(&A, &X); } tagitem(A) ::= NULL(X). { X.type = 0; tVariantCreate(&A, &X); }
tagitem(A) ::= MINUS(X) INTEGER(Y).{ tagitem(A) ::= MINUS(X) INTEGER(Y).{
...@@ -526,9 +550,9 @@ item(A) ::= ids(X) cpxName(Y). { ...@@ -526,9 +550,9 @@ item(A) ::= ids(X) cpxName(Y). {
} }
%type sortorder {int} %type sortorder {int}
sortorder(A) ::= ASC. {A = TSDB_ORDER_ASC; } sortorder(A) ::= ASC. { A = TSDB_ORDER_ASC; }
sortorder(A) ::= DESC. {A = TSDB_ORDER_DESC;} sortorder(A) ::= DESC. { A = TSDB_ORDER_DESC;}
sortorder(A) ::= . {A = TSDB_ORDER_ASC;} //default is descend order sortorder(A) ::= . { A = TSDB_ORDER_ASC; } // Ascending order by default
//group by clause //group by clause
%type groupby_opt {SArray*} %type groupby_opt {SArray*}
...@@ -536,8 +560,8 @@ sortorder(A) ::= . {A = TSDB_ORDER_ASC;} //default is descend orde ...@@ -536,8 +560,8 @@ sortorder(A) ::= . {A = TSDB_ORDER_ASC;} //default is descend orde
%type grouplist {SArray*} %type grouplist {SArray*}
%destructor grouplist {taosArrayDestroy($$);} %destructor grouplist {taosArrayDestroy($$);}
groupby_opt(A) ::= . {A = 0;} groupby_opt(A) ::= . { A = 0;}
groupby_opt(A) ::= GROUP BY grouplist(X). {A = X;} groupby_opt(A) ::= GROUP BY grouplist(X). { A = X;}
grouplist(A) ::= grouplist(X) COMMA item(Y). { grouplist(A) ::= grouplist(X) COMMA item(Y). {
A = tVariantListAppend(X, &Y, -1); A = tVariantListAppend(X, &Y, -1);
...@@ -583,20 +607,20 @@ where_opt(A) ::= WHERE expr(X). {A = X;} ...@@ -583,20 +607,20 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
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 = 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 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) DOT STAR(Y). { X.n += (1+Y.n); A = tSQLExprIdValueCreate(&X, TK_ALL);}
expr(A) ::= INTEGER(X). {A = tSQLExprIdValueCreate(&X, TK_INTEGER);} 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) ::= 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) ::= 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) ::= 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) ::= 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) ::= 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) ::= STRING(X). { A = tSQLExprIdValueCreate(&X, TK_STRING);}
expr(A) ::= NOW(X). {A = tSQLExprIdValueCreate(&X, TK_NOW); } expr(A) ::= NOW(X). { A = tSQLExprIdValueCreate(&X, TK_NOW); }
expr(A) ::= VARIABLE(X). {A = tSQLExprIdValueCreate(&X, TK_VARIABLE);} expr(A) ::= VARIABLE(X). { A = tSQLExprIdValueCreate(&X, TK_VARIABLE);}
expr(A) ::= BOOL(X). {A = tSQLExprIdValueCreate(&X, TK_BOOL);} expr(A) ::= BOOL(X). { A = tSQLExprIdValueCreate(&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); }
......
...@@ -474,11 +474,18 @@ SQuerySQL *tSetQuerySQLElems(SStrToken *pSelectToken, tSQLExprList *pSelection, ...@@ -474,11 +474,18 @@ SQuerySQL *tSetQuerySQLElems(SStrToken *pSelectToken, tSQLExprList *pSelection,
return pQuery; return pQuery;
} }
void freeVariant(void *pItem) { static void freeVariant(void *pItem) {
tVariantListItem* p = (tVariantListItem*) pItem; tVariantListItem* p = (tVariantListItem*) pItem;
tVariantDestroy(&p->pVar); tVariantDestroy(&p->pVar);
} }
void freeCreateTableInfo(void* p) {
SCreatedTableInfo* pInfo = (SCreatedTableInfo*) p;
taosArrayDestroyEx(pInfo->pTagVals, freeVariant);
tfree(pInfo->fullname);
tfree(pInfo->tagdata.data);
}
void doDestroyQuerySql(SQuerySQL *pQuerySql) { void doDestroyQuerySql(SQuerySQL *pQuerySql) {
if (pQuerySql == NULL) { if (pQuerySql == NULL) {
return; return;
...@@ -519,31 +526,30 @@ void destroyAllSelectClause(SSubclauseInfo *pClause) { ...@@ -519,31 +526,30 @@ void destroyAllSelectClause(SSubclauseInfo *pClause) {
tfree(pClause->pClause); tfree(pClause->pClause);
} }
SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SStrToken *pStableName, SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SQuerySQL *pSelect, int32_t type) {
SArray *pTagVals, SQuerySQL *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: {
pCreate->colInfo.pColumns = pCols; pCreate->colInfo.pColumns = pCols;
assert(pTagVals == NULL && pTags == NULL); assert(pTags == NULL);
break; break;
} }
case TSQL_CREATE_STABLE: { case TSQL_CREATE_STABLE: {
pCreate->colInfo.pColumns = pCols; pCreate->colInfo.pColumns = pCols;
pCreate->colInfo.pTagColumns = pTags; pCreate->colInfo.pTagColumns = pTags;
assert(pTagVals == NULL && pTags != NULL && pCols != NULL); assert(pTags != NULL && pCols != NULL);
break;
}
case TSQL_CREATE_TABLE_FROM_STABLE: {
pCreate->usingInfo.pTagVals = pTagVals;
pCreate->usingInfo.stableName = *pStableName;
break; break;
} }
case TSQL_CREATE_STREAM: { case TSQL_CREATE_STREAM: {
pCreate->pSelect = pSelect; pCreate->pSelect = pSelect;
break; break;
} }
case TSQL_CREATE_TABLE_FROM_STABLE: {
assert(0);
}
default: default:
assert(false); assert(false);
} }
...@@ -552,10 +558,20 @@ SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SStrToken *pSt ...@@ -552,10 +558,20 @@ SCreateTableSQL *tSetCreateSQLElems(SArray *pCols, SArray *pTags, SStrToken *pSt
return pCreate; return pCreate;
} }
SAlterTableSQL *tAlterTableSQLElems(SStrToken *pMeterName, SArray *pCols, SArray *pVals, int32_t type) { SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagVals, SStrToken *pToken, SStrToken* igExists) {
SCreatedTableInfo info = {0};
info.name = *pToken;
info.pTagVals = pTagVals;
info.stableName = *pTableName;
info.igExist = (igExists->n > 0)? 1:0;
return info;
}
SAlterTableSQL *tAlterTableSQLElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type) {
SAlterTableSQL *pAlterTable = calloc(1, sizeof(SAlterTableSQL)); SAlterTableSQL *pAlterTable = calloc(1, sizeof(SAlterTableSQL));
pAlterTable->name = *pMeterName; pAlterTable->name = *pTableName;
pAlterTable->type = type; pAlterTable->type = type;
if (type == TSDB_ALTER_TABLE_ADD_COLUMN || type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) { if (type == TSDB_ALTER_TABLE_ADD_COLUMN || type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) {
...@@ -573,24 +589,29 @@ SAlterTableSQL *tAlterTableSQLElems(SStrToken *pMeterName, SArray *pCols, SArray ...@@ -573,24 +589,29 @@ SAlterTableSQL *tAlterTableSQLElems(SStrToken *pMeterName, SArray *pCols, SArray
return pAlterTable; return pAlterTable;
} }
void* destroyCreateTableSQL(SCreateTableSQL* pCreate) {
doDestroyQuerySql(pCreate->pSelect);
taosArrayDestroy(pCreate->colInfo.pColumns);
taosArrayDestroy(pCreate->colInfo.pTagColumns);
taosArrayDestroyEx(pCreate->childTableInfo, freeCreateTableInfo);
tfree(pCreate);
return NULL;
}
void SQLInfoDestroy(SSqlInfo *pInfo) { void SQLInfoDestroy(SSqlInfo *pInfo) {
if (pInfo == NULL) return; if (pInfo == NULL) return;
if (pInfo->type == TSDB_SQL_SELECT) { if (pInfo->type == TSDB_SQL_SELECT) {
destroyAllSelectClause(&pInfo->subclauseInfo); destroyAllSelectClause(&pInfo->subclauseInfo);
} else if (pInfo->type == TSDB_SQL_CREATE_TABLE) { } else if (pInfo->type == TSDB_SQL_CREATE_TABLE) {
SCreateTableSQL *pCreateTableInfo = pInfo->pCreateTableInfo; pInfo->pCreateTableInfo = destroyCreateTableSQL(pInfo->pCreateTableInfo);
doDestroyQuerySql(pCreateTableInfo->pSelect);
taosArrayDestroy(pCreateTableInfo->colInfo.pColumns);
taosArrayDestroy(pCreateTableInfo->colInfo.pTagColumns);
taosArrayDestroyEx(pCreateTableInfo->usingInfo.pTagVals, freeVariant);
tfree(pInfo->pCreateTableInfo);
} else if (pInfo->type == TSDB_SQL_ALTER_TABLE) { } else if (pInfo->type == TSDB_SQL_ALTER_TABLE) {
taosArrayDestroyEx(pInfo->pAlterInfo->varList, freeVariant); taosArrayDestroyEx(pInfo->pAlterInfo->varList, freeVariant);
taosArrayDestroy(pInfo->pAlterInfo->pAddColumns); taosArrayDestroy(pInfo->pAlterInfo->pAddColumns);
tfree(pInfo->pAlterInfo->tagData.data);
tfree(pInfo->pAlterInfo); tfree(pInfo->pAlterInfo);
} else { } else {
if (pInfo->pDCLInfo != NULL && pInfo->pDCLInfo->nAlloc > 0) { if (pInfo->pDCLInfo != NULL && pInfo->pDCLInfo->nAlloc > 0) {
...@@ -624,7 +645,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) { ...@@ -624,7 +645,7 @@ SSubclauseInfo* setSubclause(SSubclauseInfo* pSubclause, void *pSqlExprInfo) {
return pSubclause; return pSubclause;
} }
SSqlInfo* setSQLInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pMeterName, 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) {
...@@ -634,8 +655,8 @@ SSqlInfo* setSQLInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pMeterName, ...@@ -634,8 +655,8 @@ SSqlInfo* setSQLInfo(SSqlInfo *pInfo, void *pSqlExprInfo, SStrToken *pMeterName,
pInfo->pCreateTableInfo = pSqlExprInfo; pInfo->pCreateTableInfo = pSqlExprInfo;
} }
if (pMeterName != NULL) { if (pTableName != NULL) {
pInfo->pCreateTableInfo->name = *pMeterName; pInfo->pCreateTableInfo->name = *pTableName;
} }
return pInfo; return pInfo;
...@@ -653,8 +674,8 @@ SSubclauseInfo* appendSelectClause(SSubclauseInfo *pQueryInfo, void *pSubclause) ...@@ -653,8 +674,8 @@ SSubclauseInfo* appendSelectClause(SSubclauseInfo *pQueryInfo, void *pSubclause)
return pQueryInfo; return pQueryInfo;
} }
void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pMeterName, SStrToken *pIfNotExists) { void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken *pIfNotExists) {
pInfo->pCreateTableInfo->name = *pMeterName; pInfo->pCreateTableInfo->name = *pTableNameToken;
pInfo->pCreateTableInfo->existCheck = (pIfNotExists->n != 0); pInfo->pCreateTableInfo->existCheck = (pIfNotExists->n != 0);
} }
......
...@@ -97,26 +97,27 @@ ...@@ -97,26 +97,27 @@
#endif #endif
/************* Begin control #defines *****************************************/ /************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int #define YYCODETYPE unsigned short int
#define YYNOCODE 274 #define YYNOCODE 276
#define YYACTIONTYPE unsigned short int #define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken #define ParseTOKENTYPE SStrToken
typedef union { typedef union {
int yyinit; int yyinit;
ParseTOKENTYPE yy0; ParseTOKENTYPE yy0;
int yy46; int yy42;
tSQLExpr* yy64; SQuerySQL* yy84;
tVariant yy134; SCreatedTableInfo yy96;
SCreateAcctSQL yy149; SArray* yy131;
SArray* yy165; SCreateDBInfo yy148;
int64_t yy207; TAOS_FIELD yy163;
SLimitVal yy216; SLimitVal yy284;
TAOS_FIELD yy223; SCreateAcctSQL yy309;
SSubclauseInfo* yy231; tSQLExpr* yy420;
SCreateDBInfo yy268; int64_t yy459;
tSQLExprList* yy290; tSQLExprList* yy478;
SQuerySQL* yy414; SSubclauseInfo* yy513;
SCreateTableSQL* yy470; tVariant yy516;
SIntervalVal yy532; SIntervalVal yy530;
SCreateTableSQL* yy538;
} YYMINORTYPE; } YYMINORTYPE;
#ifndef YYSTACKDEPTH #ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100 #define YYSTACKDEPTH 100
...@@ -126,17 +127,17 @@ typedef union { ...@@ -126,17 +127,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo #define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1 #define YYFALLBACK 1
#define YYNSTATE 253 #define YYNSTATE 257
#define YYNRULE 233 #define YYNRULE 236
#define YYNTOKEN 207 #define YYNTOKEN 207
#define YY_MAX_SHIFT 252 #define YY_MAX_SHIFT 256
#define YY_MIN_SHIFTREDUCE 420 #define YY_MIN_SHIFTREDUCE 426
#define YY_MAX_SHIFTREDUCE 652 #define YY_MAX_SHIFTREDUCE 661
#define YY_ERROR_ACTION 653 #define YY_ERROR_ACTION 662
#define YY_ACCEPT_ACTION 654 #define YY_ACCEPT_ACTION 663
#define YY_NO_ACTION 655 #define YY_NO_ACTION 664
#define YY_MIN_REDUCE 656 #define YY_MIN_REDUCE 665
#define YY_MAX_REDUCE 888 #define YY_MAX_REDUCE 900
/************* End control #defines *******************************************/ /************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined /* Define the yytestcase() macro to be a no-op if is not already defined
...@@ -202,224 +203,226 @@ typedef union { ...@@ -202,224 +203,226 @@ typedef union {
** yy_default[] Default action for each state. ** yy_default[] Default action for each state.
** **
*********** Begin parsing tables **********************************************/ *********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (571) #define YY_ACTTAB_COUNT (579)
static const YYACTIONTYPE yy_action[] = { static const YYACTIONTYPE yy_action[] = {
/* 0 */ 108, 463, 141, 11, 654, 252, 802, 463, 140, 464, /* 0 */ 143, 469, 663, 256, 469, 162, 254, 12, 814, 470,
/* 10 */ 162, 165, 876, 35, 36, 464, 37, 38, 159, 250, /* 10 */ 887, 142, 470, 37, 38, 147, 39, 40, 803, 233,
/* 20 */ 170, 29, 141, 463, 206, 41, 39, 43, 40, 173, /* 20 */ 173, 31, 884, 469, 209, 43, 41, 45, 42, 64,
/* 30 */ 780, 464, 875, 34, 33, 145, 141, 32, 31, 30, /* 30 */ 883, 470, 163, 36, 35, 105, 143, 34, 33, 32,
/* 40 */ 35, 36, 791, 37, 38, 164, 876, 170, 29, 780, /* 40 */ 37, 38, 803, 39, 40, 168, 888, 173, 31, 110,
/* 50 */ 21, 206, 41, 39, 43, 40, 191, 829, 799, 201, /* 50 */ 790, 209, 43, 41, 45, 42, 194, 780, 22, 782,
/* 60 */ 34, 33, 21, 21, 32, 31, 30, 421, 422, 423, /* 60 */ 36, 35, 811, 882, 34, 33, 32, 427, 428, 429,
/* 70 */ 424, 425, 426, 427, 428, 429, 430, 431, 432, 251, /* 70 */ 430, 431, 432, 433, 434, 435, 436, 437, 438, 255,
/* 80 */ 35, 36, 181, 37, 38, 532, 776, 170, 29, 238, /* 80 */ 37, 38, 184, 39, 40, 538, 224, 173, 31, 143,
/* 90 */ 246, 206, 41, 39, 43, 40, 174, 175, 777, 777, /* 90 */ 197, 209, 43, 41, 45, 42, 165, 23, 167, 888,
/* 100 */ 34, 33, 872, 56, 32, 31, 30, 176, 871, 36, /* 100 */ 36, 35, 242, 57, 34, 33, 32, 179, 841, 38,
/* 110 */ 780, 37, 38, 227, 226, 170, 29, 791, 17, 206, /* 110 */ 204, 39, 40, 231, 230, 173, 31, 49, 792, 209,
/* 120 */ 41, 39, 43, 40, 108, 26, 870, 606, 34, 33, /* 120 */ 43, 41, 45, 42, 253, 252, 98, 615, 36, 35,
/* 130 */ 78, 160, 32, 31, 30, 238, 157, 16, 218, 245, /* 130 */ 178, 781, 34, 33, 32, 788, 50, 17, 222, 249,
/* 140 */ 244, 217, 216, 215, 243, 214, 242, 241, 240, 213, /* 140 */ 248, 221, 220, 219, 247, 218, 246, 245, 244, 217,
/* 150 */ 239, 755, 103, 743, 744, 745, 746, 747, 748, 749, /* 150 */ 243, 764, 792, 752, 753, 754, 755, 756, 757, 758,
/* 160 */ 750, 751, 752, 753, 754, 756, 37, 38, 229, 177, /* 160 */ 759, 760, 761, 762, 763, 765, 39, 40, 110, 180,
/* 170 */ 170, 29, 224, 223, 206, 41, 39, 43, 40, 203, /* 170 */ 173, 31, 228, 227, 209, 43, 41, 45, 42, 34,
/* 180 */ 62, 60, 8, 34, 33, 63, 118, 32, 31, 30, /* 180 */ 33, 32, 9, 36, 35, 65, 120, 34, 33, 32,
/* 190 */ 169, 619, 27, 12, 610, 184, 613, 158, 616, 778, /* 190 */ 172, 628, 18, 13, 619, 110, 622, 210, 625, 28,
/* 200 */ 169, 619, 188, 187, 610, 194, 613, 108, 616, 153, /* 200 */ 172, 628, 110, 159, 619, 187, 622, 224, 625, 155,
/* 210 */ 169, 619, 561, 108, 610, 154, 613, 18, 616, 90, /* 210 */ 172, 628, 191, 190, 619, 156, 622, 66, 625, 92,
/* 220 */ 89, 148, 166, 167, 34, 33, 205, 143, 32, 31, /* 220 */ 91, 150, 169, 170, 36, 35, 208, 840, 34, 33,
/* 230 */ 30, 697, 166, 167, 131, 144, 564, 41, 39, 43, /* 230 */ 32, 160, 169, 170, 617, 250, 573, 43, 41, 45,
/* 240 */ 40, 706, 166, 167, 131, 34, 33, 146, 17, 32, /* 240 */ 42, 706, 169, 170, 133, 36, 35, 783, 18, 34,
/* 250 */ 31, 30, 32, 31, 30, 26, 16, 207, 245, 244, /* 250 */ 33, 32, 206, 104, 61, 28, 17, 792, 249, 248,
/* 260 */ 21, 587, 588, 243, 828, 242, 241, 240, 698, 239, /* 260 */ 28, 62, 145, 247, 23, 246, 245, 244, 146, 243,
/* 270 */ 61, 131, 76, 80, 147, 190, 102, 151, 85, 88, /* 270 */ 618, 715, 78, 82, 133, 193, 565, 23, 87, 90,
/* 280 */ 79, 760, 156, 26, 758, 759, 82, 21, 42, 761, /* 280 */ 81, 769, 158, 196, 767, 768, 84, 631, 44, 770,
/* 290 */ 556, 763, 764, 762, 225, 765, 777, 193, 42, 618, /* 290 */ 23, 772, 773, 771, 148, 774, 80, 149, 44, 627,
/* 300 */ 249, 248, 96, 574, 121, 122, 608, 105, 42, 618, /* 300 */ 176, 242, 789, 707, 3, 124, 133, 23, 44, 627,
/* 310 */ 70, 66, 69, 578, 617, 168, 579, 46, 152, 618, /* 310 */ 72, 68, 71, 177, 626, 789, 596, 597, 570, 627,
/* 320 */ 14, 230, 548, 777, 617, 545, 638, 546, 150, 547, /* 320 */ 805, 63, 557, 19, 626, 554, 229, 555, 789, 556,
/* 330 */ 13, 135, 133, 612, 617, 615, 139, 93, 92, 91, /* 330 */ 171, 137, 135, 29, 626, 153, 583, 95, 94, 93,
/* 340 */ 620, 611, 609, 614, 13, 47, 538, 622, 50, 552, /* 340 */ 107, 154, 587, 234, 588, 789, 48, 647, 15, 52,
/* 350 */ 46, 553, 537, 178, 179, 3, 22, 211, 75, 74, /* 350 */ 152, 14, 629, 181, 182, 141, 14, 621, 620, 624,
/* 360 */ 149, 22, 10, 9, 48, 51, 142, 550, 885, 551, /* 360 */ 623, 546, 89, 88, 212, 24, 53, 547, 24, 151,
/* 370 */ 87, 86, 101, 99, 779, 839, 838, 171, 835, 834, /* 370 */ 4, 48, 561, 144, 562, 77, 76, 11, 10, 897,
/* 380 */ 172, 801, 771, 228, 806, 793, 808, 104, 821, 119, /* 380 */ 559, 851, 560, 103, 101, 791, 850, 174, 847, 846,
/* 390 */ 820, 117, 120, 708, 212, 137, 24, 221, 705, 222, /* 390 */ 175, 232, 813, 833, 818, 820, 106, 832, 121, 122,
/* 400 */ 26, 192, 100, 884, 72, 883, 881, 123, 726, 25, /* 400 */ 28, 123, 102, 119, 717, 216, 139, 26, 225, 714,
/* 410 */ 573, 23, 138, 695, 49, 81, 693, 83, 84, 691, /* 410 */ 195, 582, 226, 896, 74, 895, 893, 125, 735, 27,
/* 420 */ 790, 690, 195, 161, 199, 549, 57, 52, 180, 132, /* 420 */ 198, 25, 164, 202, 140, 558, 704, 83, 702, 85,
/* 430 */ 688, 687, 686, 685, 684, 134, 682, 109, 680, 678, /* 430 */ 86, 700, 699, 183, 54, 134, 697, 696, 695, 694,
/* 440 */ 44, 676, 674, 136, 204, 202, 58, 822, 200, 198, /* 440 */ 693, 136, 691, 689, 46, 687, 685, 802, 683, 138,
/* 450 */ 196, 220, 77, 28, 231, 232, 233, 235, 652, 234, /* 450 */ 51, 58, 59, 834, 207, 205, 199, 203, 201, 30,
/* 460 */ 236, 237, 247, 209, 183, 53, 651, 182, 185, 186, /* 460 */ 79, 235, 236, 237, 238, 239, 240, 241, 251, 161,
/* 470 */ 64, 67, 155, 650, 643, 189, 193, 689, 558, 94, /* 470 */ 661, 214, 215, 186, 185, 660, 189, 157, 188, 69,
/* 480 */ 683, 675, 126, 125, 727, 129, 124, 127, 128, 95, /* 480 */ 659, 652, 192, 60, 196, 166, 567, 698, 56, 128,
/* 490 */ 130, 1, 114, 110, 111, 775, 2, 55, 59, 116, /* 490 */ 96, 692, 736, 126, 130, 97, 127, 129, 131, 132,
/* 500 */ 112, 113, 115, 575, 106, 163, 197, 5, 580, 107, /* 500 */ 684, 1, 584, 787, 2, 108, 200, 117, 113, 111,
/* 510 */ 6, 65, 621, 19, 4, 20, 15, 208, 623, 7, /* 510 */ 112, 114, 115, 116, 589, 118, 109, 5, 6, 20,
/* 520 */ 210, 504, 500, 498, 497, 496, 493, 467, 219, 68, /* 520 */ 21, 630, 8, 7, 632, 211, 16, 213, 67, 510,
/* 530 */ 45, 71, 73, 22, 534, 533, 531, 488, 54, 486, /* 530 */ 65, 506, 504, 503, 502, 499, 473, 223, 24, 70,
/* 540 */ 478, 484, 480, 482, 476, 474, 505, 503, 502, 501, /* 540 */ 47, 73, 540, 539, 537, 55, 494, 492, 484, 490,
/* 550 */ 499, 495, 494, 46, 465, 436, 434, 656, 655, 655, /* 550 */ 75, 486, 488, 482, 480, 511, 509, 508, 507, 505,
/* 560 */ 655, 655, 655, 655, 655, 655, 655, 655, 655, 97, /* 560 */ 501, 500, 48, 471, 442, 440, 99, 665, 664, 664,
/* 570 */ 98, /* 570 */ 664, 664, 664, 664, 664, 664, 664, 664, 100,
}; };
static const YYCODETYPE yy_lookahead[] = { static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 211, 1, 262, 262, 208, 209, 211, 1, 262, 9, /* 0 */ 264, 1, 208, 209, 1, 210, 211, 264, 211, 9,
/* 10 */ 228, 271, 272, 13, 14, 9, 16, 17, 210, 211, /* 10 */ 274, 264, 9, 13, 14, 264, 16, 17, 248, 211,
/* 20 */ 20, 21, 262, 1, 24, 25, 26, 27, 28, 228, /* 20 */ 20, 21, 264, 1, 24, 25, 26, 27, 28, 216,
/* 30 */ 248, 9, 272, 33, 34, 262, 262, 37, 38, 39, /* 30 */ 264, 9, 262, 33, 34, 211, 264, 37, 38, 39,
/* 40 */ 13, 14, 246, 16, 17, 271, 272, 20, 21, 248, /* 40 */ 13, 14, 248, 16, 17, 273, 274, 20, 21, 211,
/* 50 */ 211, 24, 25, 26, 27, 28, 260, 268, 263, 270, /* 50 */ 242, 24, 25, 26, 27, 28, 262, 244, 245, 246,
/* 60 */ 33, 34, 211, 211, 37, 38, 39, 45, 46, 47, /* 60 */ 33, 34, 265, 264, 37, 38, 39, 45, 46, 47,
/* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, /* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
/* 80 */ 13, 14, 60, 16, 17, 5, 247, 20, 21, 78, /* 80 */ 13, 14, 60, 16, 17, 5, 76, 20, 21, 264,
/* 90 */ 228, 24, 25, 26, 27, 28, 245, 245, 247, 247, /* 90 */ 266, 24, 25, 26, 27, 28, 228, 211, 273, 274,
/* 100 */ 33, 34, 262, 103, 37, 38, 39, 66, 262, 14, /* 100 */ 33, 34, 78, 103, 37, 38, 39, 66, 270, 14,
/* 110 */ 248, 16, 17, 33, 34, 20, 21, 246, 99, 24, /* 110 */ 272, 16, 17, 33, 34, 20, 21, 104, 250, 24,
/* 120 */ 25, 26, 27, 28, 211, 106, 262, 100, 33, 34, /* 120 */ 25, 26, 27, 28, 63, 64, 65, 100, 33, 34,
/* 130 */ 73, 260, 37, 38, 39, 78, 262, 85, 86, 87, /* 130 */ 228, 0, 37, 38, 39, 249, 123, 85, 86, 87,
/* 140 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, /* 140 */ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
/* 150 */ 98, 227, 211, 229, 230, 231, 232, 233, 234, 235, /* 150 */ 98, 227, 250, 229, 230, 231, 232, 233, 234, 235,
/* 160 */ 236, 237, 238, 239, 240, 241, 16, 17, 211, 128, /* 160 */ 236, 237, 238, 239, 240, 241, 16, 17, 211, 128,
/* 170 */ 20, 21, 131, 132, 24, 25, 26, 27, 28, 266, /* 170 */ 20, 21, 131, 132, 24, 25, 26, 27, 28, 37,
/* 180 */ 249, 268, 99, 33, 34, 102, 103, 37, 38, 39, /* 180 */ 38, 39, 99, 33, 34, 102, 103, 37, 38, 39,
/* 190 */ 1, 2, 261, 44, 5, 127, 7, 262, 9, 242, /* 190 */ 1, 2, 99, 44, 5, 211, 7, 15, 9, 106,
/* 200 */ 1, 2, 134, 135, 5, 264, 7, 211, 9, 60, /* 200 */ 1, 2, 211, 264, 5, 127, 7, 76, 9, 60,
/* 210 */ 1, 2, 104, 211, 5, 66, 7, 109, 9, 70, /* 210 */ 1, 2, 134, 135, 5, 66, 7, 216, 9, 70,
/* 220 */ 71, 72, 33, 34, 33, 34, 37, 262, 37, 38, /* 220 */ 71, 72, 33, 34, 33, 34, 37, 270, 37, 38,
/* 230 */ 39, 215, 33, 34, 218, 262, 37, 25, 26, 27, /* 230 */ 39, 264, 33, 34, 1, 228, 37, 25, 26, 27,
/* 240 */ 28, 215, 33, 34, 218, 33, 34, 262, 99, 37, /* 240 */ 28, 215, 33, 34, 218, 33, 34, 246, 99, 37,
/* 250 */ 38, 39, 37, 38, 39, 106, 85, 15, 87, 88, /* 250 */ 38, 39, 268, 99, 270, 106, 85, 250, 87, 88,
/* 260 */ 211, 116, 117, 92, 268, 94, 95, 96, 215, 98, /* 260 */ 106, 270, 264, 92, 211, 94, 95, 96, 264, 98,
/* 270 */ 268, 218, 61, 62, 262, 126, 99, 262, 67, 68, /* 270 */ 37, 215, 61, 62, 218, 126, 100, 211, 67, 68,
/* 280 */ 69, 227, 133, 106, 230, 231, 75, 211, 99, 235, /* 280 */ 69, 227, 133, 107, 230, 231, 75, 105, 99, 235,
/* 290 */ 100, 237, 238, 239, 245, 241, 247, 107, 99, 110, /* 290 */ 211, 237, 238, 239, 264, 241, 73, 264, 99, 110,
/* 300 */ 63, 64, 65, 100, 61, 62, 1, 104, 99, 110, /* 300 */ 247, 78, 249, 215, 61, 62, 218, 211, 99, 110,
/* 310 */ 67, 68, 69, 100, 125, 59, 100, 104, 262, 110, /* 310 */ 67, 68, 69, 247, 125, 249, 116, 117, 104, 110,
/* 320 */ 104, 245, 2, 247, 125, 5, 100, 7, 262, 9, /* 320 */ 248, 251, 2, 109, 125, 5, 247, 7, 249, 9,
/* 330 */ 104, 61, 62, 5, 125, 7, 262, 67, 68, 69, /* 330 */ 59, 61, 62, 263, 125, 264, 100, 67, 68, 69,
/* 340 */ 100, 5, 37, 7, 104, 104, 100, 105, 104, 5, /* 340 */ 104, 264, 100, 247, 100, 249, 104, 100, 104, 104,
/* 350 */ 104, 7, 100, 33, 34, 99, 104, 100, 129, 130, /* 350 */ 264, 104, 100, 33, 34, 264, 104, 5, 5, 7,
/* 360 */ 262, 104, 129, 130, 123, 121, 262, 5, 248, 7, /* 360 */ 7, 100, 73, 74, 100, 104, 121, 100, 104, 264,
/* 370 */ 73, 74, 61, 62, 248, 243, 243, 243, 243, 243, /* 370 */ 99, 104, 5, 264, 7, 129, 130, 129, 130, 250,
/* 380 */ 243, 211, 244, 243, 211, 246, 211, 211, 269, 211, /* 380 */ 5, 243, 7, 61, 62, 250, 243, 243, 243, 243,
/* 390 */ 269, 250, 211, 211, 211, 211, 211, 211, 211, 211, /* 390 */ 243, 243, 211, 271, 211, 211, 211, 271, 211, 211,
/* 400 */ 106, 246, 59, 211, 211, 211, 211, 211, 211, 211, /* 400 */ 106, 211, 59, 252, 211, 211, 211, 211, 211, 211,
/* 410 */ 110, 211, 211, 211, 122, 211, 211, 211, 211, 211, /* 410 */ 248, 110, 211, 211, 211, 211, 211, 211, 211, 211,
/* 420 */ 259, 211, 265, 265, 265, 105, 212, 120, 211, 211, /* 420 */ 267, 211, 267, 267, 211, 105, 211, 211, 211, 211,
/* 430 */ 211, 211, 211, 211, 211, 211, 211, 258, 211, 211, /* 430 */ 211, 211, 211, 211, 120, 211, 211, 211, 211, 211,
/* 440 */ 119, 211, 211, 211, 114, 118, 212, 212, 113, 112, /* 440 */ 211, 211, 211, 211, 119, 211, 211, 261, 211, 211,
/* 450 */ 111, 76, 84, 124, 83, 49, 80, 53, 5, 82, /* 450 */ 122, 212, 212, 212, 114, 118, 111, 113, 112, 124,
/* 460 */ 81, 79, 76, 212, 5, 212, 5, 136, 136, 5, /* 460 */ 84, 83, 49, 80, 82, 53, 81, 79, 76, 212,
/* 470 */ 216, 216, 212, 5, 86, 127, 107, 212, 100, 213, /* 470 */ 5, 212, 212, 5, 136, 5, 5, 212, 136, 216,
/* 480 */ 212, 212, 220, 224, 226, 222, 225, 223, 221, 213, /* 480 */ 5, 86, 127, 104, 107, 1, 100, 212, 108, 220,
/* 490 */ 219, 217, 253, 257, 256, 246, 214, 108, 104, 251, /* 490 */ 213, 212, 226, 225, 221, 213, 224, 223, 222, 219,
/* 500 */ 255, 254, 252, 100, 99, 1, 99, 115, 100, 99, /* 500 */ 212, 217, 100, 248, 214, 99, 99, 254, 258, 260,
/* 510 */ 115, 73, 100, 104, 99, 104, 99, 101, 105, 99, /* 510 */ 259, 257, 256, 255, 100, 253, 99, 99, 115, 104,
/* 520 */ 101, 9, 5, 5, 5, 5, 5, 77, 15, 73, /* 520 */ 104, 100, 99, 115, 105, 101, 99, 101, 73, 9,
/* 530 */ 16, 130, 130, 104, 5, 5, 100, 5, 99, 5, /* 530 */ 102, 5, 5, 5, 5, 5, 77, 15, 104, 73,
/* 540 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* 540 */ 16, 130, 5, 5, 100, 99, 5, 5, 5, 5,
/* 550 */ 5, 5, 5, 104, 77, 59, 58, 0, 273, 273, /* 550 */ 130, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 560 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 21, /* 560 */ 5, 5, 104, 77, 59, 58, 21, 0, 275, 275,
/* 570 */ 21, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 570 */ 275, 275, 275, 275, 275, 275, 275, 275, 21, 275,
/* 580 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 580 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 590 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 590 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 600 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 600 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 610 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 610 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 620 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 620 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 630 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 630 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 640 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 640 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 650 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 650 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 660 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 660 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 670 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 670 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 680 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 680 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 690 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 690 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 700 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 700 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 710 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 710 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 720 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 720 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 730 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 730 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 740 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 740 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 750 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 750 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 760 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 760 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 770 */ 273, 273, 273, 273, 273, 273, 273, 273, /* 770 */ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
/* 780 */ 275, 275, 275, 275, 275, 275,
}; };
#define YY_SHIFT_COUNT (252) #define YY_SHIFT_COUNT (256)
#define YY_SHIFT_MIN (0) #define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (557) #define YY_SHIFT_MAX (567)
static const unsigned short int yy_shift_ofst[] = { static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 149, 52, 171, 189, 209, 6, 6, 6, 6, 6, /* 0 */ 149, 52, 171, 10, 189, 209, 3, 3, 3, 3,
/* 10 */ 6, 0, 22, 209, 320, 320, 320, 19, 6, 6, /* 10 */ 3, 3, 0, 22, 209, 320, 320, 320, 93, 3,
/* 20 */ 6, 6, 6, 57, 11, 11, 571, 199, 209, 209, /* 20 */ 3, 3, 131, 3, 3, 223, 24, 24, 579, 199,
/* 30 */ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, /* 30 */ 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
/* 40 */ 209, 209, 209, 209, 209, 320, 320, 80, 80, 80, /* 40 */ 209, 209, 209, 209, 209, 209, 209, 320, 320, 80,
/* 50 */ 80, 80, 80, 83, 80, 177, 6, 6, 6, 6, /* 50 */ 80, 80, 80, 80, 80, 80, 154, 3, 3, 3,
/* 60 */ 145, 145, 108, 6, 6, 6, 6, 6, 6, 6, /* 60 */ 3, 200, 200, 214, 3, 3, 3, 3, 3, 3,
/* 70 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* 70 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/* 80 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* 80 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/* 90 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* 90 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
/* 100 */ 6, 6, 294, 343, 343, 300, 300, 300, 343, 307, /* 100 */ 3, 3, 3, 3, 294, 343, 343, 301, 301, 301,
/* 110 */ 292, 321, 330, 327, 335, 337, 339, 329, 294, 343, /* 110 */ 343, 314, 328, 325, 340, 337, 344, 346, 345, 335,
/* 120 */ 343, 375, 375, 343, 368, 371, 406, 376, 377, 404, /* 120 */ 294, 343, 343, 343, 10, 343, 376, 378, 413, 383,
/* 130 */ 379, 382, 343, 386, 343, 386, 343, 571, 571, 27, /* 130 */ 382, 412, 385, 388, 343, 392, 343, 392, 343, 579,
/* 140 */ 67, 67, 67, 95, 150, 212, 212, 212, 211, 191, /* 140 */ 579, 27, 67, 67, 67, 95, 150, 212, 212, 212,
/* 150 */ 191, 191, 191, 243, 270, 41, 68, 215, 215, 237, /* 150 */ 211, 191, 191, 191, 191, 243, 270, 41, 78, 142,
/* 160 */ 190, 203, 213, 216, 226, 240, 328, 336, 305, 256, /* 160 */ 142, 83, 61, 176, 236, 242, 244, 247, 252, 352,
/* 170 */ 242, 241, 244, 246, 252, 257, 229, 233, 344, 362, /* 170 */ 353, 233, 271, 182, 13, 245, 261, 264, 267, 246,
/* 180 */ 297, 311, 453, 331, 459, 461, 332, 464, 468, 388, /* 180 */ 248, 367, 375, 289, 322, 465, 338, 468, 470, 342,
/* 190 */ 348, 369, 378, 389, 394, 403, 405, 504, 407, 408, /* 190 */ 471, 475, 395, 355, 377, 386, 380, 379, 402, 406,
/* 200 */ 410, 409, 392, 411, 395, 412, 415, 413, 417, 416, /* 200 */ 484, 407, 414, 417, 415, 403, 416, 408, 421, 418,
/* 210 */ 420, 419, 438, 512, 517, 518, 519, 520, 521, 450, /* 210 */ 419, 423, 424, 427, 426, 428, 455, 520, 526, 527,
/* 220 */ 513, 456, 514, 401, 402, 429, 529, 530, 436, 439, /* 220 */ 528, 529, 530, 459, 522, 466, 524, 411, 420, 434,
/* 230 */ 429, 532, 534, 535, 536, 537, 538, 539, 540, 541, /* 230 */ 537, 538, 444, 446, 434, 541, 542, 543, 544, 546,
/* 240 */ 542, 543, 544, 545, 546, 547, 449, 477, 548, 549, /* 240 */ 547, 548, 549, 550, 551, 552, 553, 554, 555, 556,
/* 250 */ 496, 498, 557, /* 250 */ 458, 486, 545, 557, 505, 507, 567,
}; };
#define YY_REDUCE_COUNT (138) #define YY_REDUCE_COUNT (140)
#define YY_REDUCE_MIN (-260) #define YY_REDUCE_MIN (-264)
#define YY_REDUCE_MAX (282) #define YY_REDUCE_MAX (290)
static const short yy_reduce_ofst[] = { static const short yy_reduce_ofst[] = {
/* 0 */ -204, -76, 54, -260, -226, -211, -87, -149, -148, 49, /* 0 */ -206, -76, 54, -187, -228, -175, -162, -16, 53, 66,
/* 10 */ 76, -205, -192, -240, -218, -199, -138, -129, -59, -4, /* 10 */ 79, 96, -203, -205, -264, -132, -98, 7, -230, -176,
/* 20 */ 2, -43, -161, 16, 26, 53, -69, -259, -254, -227, /* 20 */ -43, -9, 1, -192, -114, 26, 56, 88, 70, -257,
/* 30 */ -160, -154, -136, -126, -65, -35, -27, -15, 12, 15, /* 30 */ -253, -249, -242, -234, -201, -61, -33, -2, 4, 30,
/* 40 */ 56, 66, 74, 98, 104, 120, 126, 132, 133, 134, /* 40 */ 33, 71, 77, 86, 91, 105, 109, 129, 135, 138,
/* 50 */ 135, 136, 137, 138, 140, 139, 170, 173, 175, 176, /* 50 */ 143, 144, 145, 146, 147, 148, 72, 181, 183, 184,
/* 60 */ 119, 121, 141, 178, 181, 182, 183, 184, 185, 186, /* 60 */ 185, 122, 126, 151, 187, 188, 190, 193, 194, 195,
/* 70 */ 187, 188, 192, 193, 194, 195, 196, 197, 198, 200, /* 70 */ 196, 197, 198, 201, 202, 203, 204, 205, 206, 207,
/* 80 */ 201, 202, 204, 205, 206, 207, 208, 210, 217, 218, /* 80 */ 208, 210, 213, 215, 216, 217, 218, 219, 220, 221,
/* 90 */ 219, 220, 221, 222, 223, 224, 225, 227, 228, 230, /* 90 */ 222, 224, 225, 226, 227, 228, 229, 230, 231, 232,
/* 100 */ 231, 232, 155, 214, 234, 157, 158, 159, 235, 161, /* 100 */ 234, 235, 237, 238, 162, 239, 240, 153, 155, 156,
/* 110 */ 179, 236, 238, 245, 247, 239, 250, 248, 249, 251, /* 110 */ 241, 186, 249, 251, 250, 254, 256, 258, 253, 262,
/* 120 */ 253, 254, 255, 260, 258, 261, 259, 262, 264, 267, /* 120 */ 255, 257, 259, 260, 263, 265, 266, 268, 272, 269,
/* 130 */ 263, 271, 265, 266, 268, 276, 269, 274, 282, /* 130 */ 274, 273, 276, 280, 275, 277, 279, 282, 288, 284,
/* 140 */ 290,
}; };
static const YYACTIONTYPE yy_default[] = { static const YYACTIONTYPE yy_default[] = {
/* 0 */ 653, 707, 696, 878, 878, 653, 653, 653, 653, 653, /* 0 */ 662, 716, 705, 713, 890, 890, 662, 662, 662, 662,
/* 10 */ 653, 803, 671, 878, 653, 653, 653, 653, 653, 653, /* 10 */ 662, 662, 815, 680, 890, 662, 662, 662, 662, 662,
/* 20 */ 653, 653, 653, 709, 709, 709, 798, 653, 653, 653, /* 20 */ 662, 662, 713, 662, 662, 718, 718, 718, 810, 662,
/* 30 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, /* 30 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 40 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, /* 40 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 50 */ 653, 653, 653, 653, 653, 653, 653, 805, 807, 653, /* 50 */ 662, 662, 662, 662, 662, 662, 662, 662, 817, 819,
/* 60 */ 825, 825, 796, 653, 653, 653, 653, 653, 653, 653, /* 60 */ 662, 837, 837, 808, 662, 662, 662, 662, 662, 662,
/* 70 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, /* 70 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 80 */ 653, 694, 653, 692, 653, 653, 653, 653, 653, 653, /* 80 */ 662, 662, 662, 703, 662, 701, 662, 662, 662, 662,
/* 90 */ 653, 653, 653, 653, 653, 653, 681, 653, 653, 653, /* 90 */ 662, 662, 662, 662, 662, 662, 662, 662, 690, 662,
/* 100 */ 653, 653, 653, 673, 673, 653, 653, 653, 673, 832, /* 100 */ 662, 662, 662, 662, 662, 682, 682, 662, 662, 662,
/* 110 */ 836, 830, 818, 826, 817, 813, 812, 840, 653, 673, /* 110 */ 682, 844, 848, 842, 830, 838, 829, 825, 824, 852,
/* 120 */ 673, 704, 704, 673, 725, 723, 721, 713, 719, 715, /* 120 */ 662, 682, 682, 682, 713, 682, 734, 732, 730, 722,
/* 130 */ 717, 711, 673, 702, 673, 702, 673, 742, 757, 653, /* 130 */ 728, 724, 726, 720, 682, 711, 682, 711, 682, 751,
/* 140 */ 841, 877, 831, 867, 866, 873, 865, 864, 653, 860, /* 140 */ 766, 662, 853, 889, 843, 879, 878, 885, 877, 876,
/* 150 */ 861, 863, 862, 653, 653, 653, 653, 869, 868, 653, /* 150 */ 662, 872, 873, 875, 874, 662, 662, 662, 662, 881,
/* 160 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 843, /* 160 */ 880, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 170 */ 653, 837, 833, 653, 653, 653, 653, 653, 653, 653, /* 170 */ 662, 662, 855, 662, 849, 845, 662, 662, 662, 662,
/* 180 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, /* 180 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 190 */ 653, 795, 653, 653, 804, 653, 653, 653, 653, 653, /* 190 */ 662, 662, 662, 662, 807, 662, 662, 816, 662, 662,
/* 200 */ 653, 827, 653, 819, 653, 653, 653, 653, 653, 653, /* 200 */ 662, 662, 662, 662, 839, 662, 831, 662, 662, 662,
/* 210 */ 653, 772, 653, 653, 653, 653, 653, 653, 653, 653, /* 210 */ 662, 662, 784, 662, 662, 662, 662, 662, 662, 662,
/* 220 */ 653, 653, 653, 653, 653, 882, 653, 653, 653, 766, /* 220 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 894,
/* 230 */ 880, 653, 653, 653, 653, 653, 653, 653, 653, 653, /* 230 */ 662, 662, 662, 775, 892, 662, 662, 662, 662, 662,
/* 240 */ 653, 653, 653, 653, 653, 653, 728, 653, 679, 677, /* 240 */ 662, 662, 662, 662, 662, 662, 662, 662, 662, 662,
/* 250 */ 653, 669, 653, /* 250 */ 737, 662, 688, 686, 662, 678, 662,
}; };
/********** End of lemon-generated parsing tables *****************************/ /********** End of lemon-generated parsing tables *****************************/
...@@ -977,34 +980,36 @@ static const char *const yyTokenName[] = { ...@@ -977,34 +980,36 @@ static const char *const yyTokenName[] = {
/* 242 */ "typename", /* 242 */ "typename",
/* 243 */ "signed", /* 243 */ "signed",
/* 244 */ "create_table_args", /* 244 */ "create_table_args",
/* 245 */ "columnlist", /* 245 */ "create_table_list",
/* 246 */ "select", /* 246 */ "create_from_stable",
/* 247 */ "column", /* 247 */ "columnlist",
/* 248 */ "tagitem", /* 248 */ "select",
/* 249 */ "selcollist", /* 249 */ "column",
/* 250 */ "from", /* 250 */ "tagitem",
/* 251 */ "where_opt", /* 251 */ "selcollist",
/* 252 */ "interval_opt", /* 252 */ "from",
/* 253 */ "fill_opt", /* 253 */ "where_opt",
/* 254 */ "sliding_opt", /* 254 */ "interval_opt",
/* 255 */ "groupby_opt", /* 255 */ "fill_opt",
/* 256 */ "orderby_opt", /* 256 */ "sliding_opt",
/* 257 */ "having_opt", /* 257 */ "groupby_opt",
/* 258 */ "slimit_opt", /* 258 */ "orderby_opt",
/* 259 */ "limit_opt", /* 259 */ "having_opt",
/* 260 */ "union", /* 260 */ "slimit_opt",
/* 261 */ "sclp", /* 261 */ "limit_opt",
/* 262 */ "expr", /* 262 */ "union",
/* 263 */ "as", /* 263 */ "sclp",
/* 264 */ "tablelist", /* 264 */ "expr",
/* 265 */ "tmvar", /* 265 */ "as",
/* 266 */ "sortlist", /* 266 */ "tablelist",
/* 267 */ "sortitem", /* 267 */ "tmvar",
/* 268 */ "item", /* 268 */ "sortlist",
/* 269 */ "sortorder", /* 269 */ "sortitem",
/* 270 */ "grouplist", /* 270 */ "item",
/* 271 */ "exprlist", /* 271 */ "sortorder",
/* 272 */ "expritem", /* 272 */ "grouplist",
/* 273 */ "exprlist",
/* 274 */ "expritem",
}; };
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
...@@ -1127,124 +1132,127 @@ static const char *const yyRuleName[] = { ...@@ -1127,124 +1132,127 @@ static const char *const yyRuleName[] = {
/* 112 */ "signed ::= INTEGER", /* 112 */ "signed ::= INTEGER",
/* 113 */ "signed ::= PLUS INTEGER", /* 113 */ "signed ::= PLUS INTEGER",
/* 114 */ "signed ::= MINUS INTEGER", /* 114 */ "signed ::= MINUS INTEGER",
/* 115 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", /* 115 */ "cmd ::= CREATE TABLE create_table_args",
/* 116 */ "create_table_args ::= LP columnlist RP", /* 116 */ "cmd ::= CREATE TABLE create_table_list",
/* 117 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", /* 117 */ "create_table_list ::= create_from_stable",
/* 118 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", /* 118 */ "create_table_list ::= create_table_list create_from_stable",
/* 119 */ "create_table_args ::= AS select", /* 119 */ "create_table_args ::= ifnotexists ids cpxName LP columnlist RP",
/* 120 */ "columnlist ::= columnlist COMMA column", /* 120 */ "create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP",
/* 121 */ "columnlist ::= column", /* 121 */ "create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP",
/* 122 */ "column ::= ids typename", /* 122 */ "create_table_args ::= ifnotexists ids cpxName AS select",
/* 123 */ "tagitemlist ::= tagitemlist COMMA tagitem", /* 123 */ "columnlist ::= columnlist COMMA column",
/* 124 */ "tagitemlist ::= tagitem", /* 124 */ "columnlist ::= column",
/* 125 */ "tagitem ::= INTEGER", /* 125 */ "column ::= ids typename",
/* 126 */ "tagitem ::= FLOAT", /* 126 */ "tagitemlist ::= tagitemlist COMMA tagitem",
/* 127 */ "tagitem ::= STRING", /* 127 */ "tagitemlist ::= tagitem",
/* 128 */ "tagitem ::= BOOL", /* 128 */ "tagitem ::= INTEGER",
/* 129 */ "tagitem ::= NULL", /* 129 */ "tagitem ::= FLOAT",
/* 130 */ "tagitem ::= MINUS INTEGER", /* 130 */ "tagitem ::= STRING",
/* 131 */ "tagitem ::= MINUS FLOAT", /* 131 */ "tagitem ::= BOOL",
/* 132 */ "tagitem ::= PLUS INTEGER", /* 132 */ "tagitem ::= NULL",
/* 133 */ "tagitem ::= PLUS FLOAT", /* 133 */ "tagitem ::= MINUS INTEGER",
/* 134 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", /* 134 */ "tagitem ::= MINUS FLOAT",
/* 135 */ "union ::= select", /* 135 */ "tagitem ::= PLUS INTEGER",
/* 136 */ "union ::= LP union RP", /* 136 */ "tagitem ::= PLUS FLOAT",
/* 137 */ "union ::= union UNION ALL select", /* 137 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
/* 138 */ "union ::= union UNION ALL LP select RP", /* 138 */ "union ::= select",
/* 139 */ "cmd ::= union", /* 139 */ "union ::= LP union RP",
/* 140 */ "select ::= SELECT selcollist", /* 140 */ "union ::= union UNION ALL select",
/* 141 */ "sclp ::= selcollist COMMA", /* 141 */ "union ::= union UNION ALL LP select RP",
/* 142 */ "sclp ::=", /* 142 */ "cmd ::= union",
/* 143 */ "selcollist ::= sclp expr as", /* 143 */ "select ::= SELECT selcollist",
/* 144 */ "selcollist ::= sclp STAR", /* 144 */ "sclp ::= selcollist COMMA",
/* 145 */ "as ::= AS ids", /* 145 */ "sclp ::=",
/* 146 */ "as ::= ids", /* 146 */ "selcollist ::= sclp expr as",
/* 147 */ "as ::=", /* 147 */ "selcollist ::= sclp STAR",
/* 148 */ "from ::= FROM tablelist", /* 148 */ "as ::= AS ids",
/* 149 */ "tablelist ::= ids cpxName", /* 149 */ "as ::= ids",
/* 150 */ "tablelist ::= ids cpxName ids", /* 150 */ "as ::=",
/* 151 */ "tablelist ::= tablelist COMMA ids cpxName", /* 151 */ "from ::= FROM tablelist",
/* 152 */ "tablelist ::= tablelist COMMA ids cpxName ids", /* 152 */ "tablelist ::= ids cpxName",
/* 153 */ "tmvar ::= VARIABLE", /* 153 */ "tablelist ::= ids cpxName ids",
/* 154 */ "interval_opt ::= INTERVAL LP tmvar RP", /* 154 */ "tablelist ::= tablelist COMMA ids cpxName",
/* 155 */ "interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP", /* 155 */ "tablelist ::= tablelist COMMA ids cpxName ids",
/* 156 */ "interval_opt ::=", /* 156 */ "tmvar ::= VARIABLE",
/* 157 */ "fill_opt ::=", /* 157 */ "interval_opt ::= INTERVAL LP tmvar RP",
/* 158 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", /* 158 */ "interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP",
/* 159 */ "fill_opt ::= FILL LP ID RP", /* 159 */ "interval_opt ::=",
/* 160 */ "sliding_opt ::= SLIDING LP tmvar RP", /* 160 */ "fill_opt ::=",
/* 161 */ "sliding_opt ::=", /* 161 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 162 */ "orderby_opt ::=", /* 162 */ "fill_opt ::= FILL LP ID RP",
/* 163 */ "orderby_opt ::= ORDER BY sortlist", /* 163 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 164 */ "sortlist ::= sortlist COMMA item sortorder", /* 164 */ "sliding_opt ::=",
/* 165 */ "sortlist ::= item sortorder", /* 165 */ "orderby_opt ::=",
/* 166 */ "item ::= ids cpxName", /* 166 */ "orderby_opt ::= ORDER BY sortlist",
/* 167 */ "sortorder ::= ASC", /* 167 */ "sortlist ::= sortlist COMMA item sortorder",
/* 168 */ "sortorder ::= DESC", /* 168 */ "sortlist ::= item sortorder",
/* 169 */ "sortorder ::=", /* 169 */ "item ::= ids cpxName",
/* 170 */ "groupby_opt ::=", /* 170 */ "sortorder ::= ASC",
/* 171 */ "groupby_opt ::= GROUP BY grouplist", /* 171 */ "sortorder ::= DESC",
/* 172 */ "grouplist ::= grouplist COMMA item", /* 172 */ "sortorder ::=",
/* 173 */ "grouplist ::= item", /* 173 */ "groupby_opt ::=",
/* 174 */ "having_opt ::=", /* 174 */ "groupby_opt ::= GROUP BY grouplist",
/* 175 */ "having_opt ::= HAVING expr", /* 175 */ "grouplist ::= grouplist COMMA item",
/* 176 */ "limit_opt ::=", /* 176 */ "grouplist ::= item",
/* 177 */ "limit_opt ::= LIMIT signed", /* 177 */ "having_opt ::=",
/* 178 */ "limit_opt ::= LIMIT signed OFFSET signed", /* 178 */ "having_opt ::= HAVING expr",
/* 179 */ "limit_opt ::= LIMIT signed COMMA signed", /* 179 */ "limit_opt ::=",
/* 180 */ "slimit_opt ::=", /* 180 */ "limit_opt ::= LIMIT signed",
/* 181 */ "slimit_opt ::= SLIMIT signed", /* 181 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 182 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", /* 182 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 183 */ "slimit_opt ::= SLIMIT signed COMMA signed", /* 183 */ "slimit_opt ::=",
/* 184 */ "where_opt ::=", /* 184 */ "slimit_opt ::= SLIMIT signed",
/* 185 */ "where_opt ::= WHERE expr", /* 185 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 186 */ "expr ::= LP expr RP", /* 186 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 187 */ "expr ::= ID", /* 187 */ "where_opt ::=",
/* 188 */ "expr ::= ID DOT ID", /* 188 */ "where_opt ::= WHERE expr",
/* 189 */ "expr ::= ID DOT STAR", /* 189 */ "expr ::= LP expr RP",
/* 190 */ "expr ::= INTEGER", /* 190 */ "expr ::= ID",
/* 191 */ "expr ::= MINUS INTEGER", /* 191 */ "expr ::= ID DOT ID",
/* 192 */ "expr ::= PLUS INTEGER", /* 192 */ "expr ::= ID DOT STAR",
/* 193 */ "expr ::= FLOAT", /* 193 */ "expr ::= INTEGER",
/* 194 */ "expr ::= MINUS FLOAT", /* 194 */ "expr ::= MINUS INTEGER",
/* 195 */ "expr ::= PLUS FLOAT", /* 195 */ "expr ::= PLUS INTEGER",
/* 196 */ "expr ::= STRING", /* 196 */ "expr ::= FLOAT",
/* 197 */ "expr ::= NOW", /* 197 */ "expr ::= MINUS FLOAT",
/* 198 */ "expr ::= VARIABLE", /* 198 */ "expr ::= PLUS FLOAT",
/* 199 */ "expr ::= BOOL", /* 199 */ "expr ::= STRING",
/* 200 */ "expr ::= ID LP exprlist RP", /* 200 */ "expr ::= NOW",
/* 201 */ "expr ::= ID LP STAR RP", /* 201 */ "expr ::= VARIABLE",
/* 202 */ "expr ::= expr IS NULL", /* 202 */ "expr ::= BOOL",
/* 203 */ "expr ::= expr IS NOT NULL", /* 203 */ "expr ::= ID LP exprlist RP",
/* 204 */ "expr ::= expr LT expr", /* 204 */ "expr ::= ID LP STAR RP",
/* 205 */ "expr ::= expr GT expr", /* 205 */ "expr ::= expr IS NULL",
/* 206 */ "expr ::= expr LE expr", /* 206 */ "expr ::= expr IS NOT NULL",
/* 207 */ "expr ::= expr GE expr", /* 207 */ "expr ::= expr LT expr",
/* 208 */ "expr ::= expr NE expr", /* 208 */ "expr ::= expr GT expr",
/* 209 */ "expr ::= expr EQ expr", /* 209 */ "expr ::= expr LE expr",
/* 210 */ "expr ::= expr AND expr", /* 210 */ "expr ::= expr GE expr",
/* 211 */ "expr ::= expr OR expr", /* 211 */ "expr ::= expr NE expr",
/* 212 */ "expr ::= expr PLUS expr", /* 212 */ "expr ::= expr EQ expr",
/* 213 */ "expr ::= expr MINUS expr", /* 213 */ "expr ::= expr AND expr",
/* 214 */ "expr ::= expr STAR expr", /* 214 */ "expr ::= expr OR expr",
/* 215 */ "expr ::= expr SLASH expr", /* 215 */ "expr ::= expr PLUS expr",
/* 216 */ "expr ::= expr REM expr", /* 216 */ "expr ::= expr MINUS expr",
/* 217 */ "expr ::= expr LIKE expr", /* 217 */ "expr ::= expr STAR expr",
/* 218 */ "expr ::= expr IN LP exprlist RP", /* 218 */ "expr ::= expr SLASH expr",
/* 219 */ "exprlist ::= exprlist COMMA expritem", /* 219 */ "expr ::= expr REM expr",
/* 220 */ "exprlist ::= expritem", /* 220 */ "expr ::= expr LIKE expr",
/* 221 */ "expritem ::= expr", /* 221 */ "expr ::= expr IN LP exprlist RP",
/* 222 */ "expritem ::=", /* 222 */ "exprlist ::= exprlist COMMA expritem",
/* 223 */ "cmd ::= RESET QUERY CACHE", /* 223 */ "exprlist ::= expritem",
/* 224 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", /* 224 */ "expritem ::= expr",
/* 225 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", /* 225 */ "expritem ::=",
/* 226 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", /* 226 */ "cmd ::= RESET QUERY CACHE",
/* 227 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", /* 227 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 228 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", /* 228 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 229 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", /* 229 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 230 */ "cmd ::= KILL CONNECTION INTEGER", /* 230 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 231 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", /* 231 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 232 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", /* 232 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 233 */ "cmd ::= KILL CONNECTION INTEGER",
/* 234 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 235 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
}; };
#endif /* NDEBUG */ #endif /* NDEBUG */
...@@ -1367,44 +1375,49 @@ static void yy_destructor( ...@@ -1367,44 +1375,49 @@ static void yy_destructor(
/********* Begin destructor definitions ***************************************/ /********* Begin destructor definitions ***************************************/
case 227: /* keep */ case 227: /* keep */
case 228: /* tagitemlist */ case 228: /* tagitemlist */
case 245: /* columnlist */ case 247: /* columnlist */
case 253: /* fill_opt */ case 255: /* fill_opt */
case 255: /* groupby_opt */ case 257: /* groupby_opt */
case 256: /* orderby_opt */ case 258: /* orderby_opt */
case 266: /* sortlist */ case 268: /* sortlist */
case 270: /* grouplist */ case 272: /* grouplist */
{ {
taosArrayDestroy((yypminor->yy165)); taosArrayDestroy((yypminor->yy131));
} }
break; break;
case 246: /* select */ case 245: /* create_table_list */
{ {
doDestroyQuerySql((yypminor->yy414)); destroyCreateTableSQL((yypminor->yy538));
} }
break; break;
case 249: /* selcollist */ case 248: /* select */
case 261: /* sclp */
case 271: /* exprlist */
{ {
tSQLExprListDestroy((yypminor->yy290)); doDestroyQuerySql((yypminor->yy84));
} }
break; break;
case 251: /* where_opt */ case 251: /* selcollist */
case 257: /* having_opt */ case 263: /* sclp */
case 262: /* expr */ case 273: /* exprlist */
case 272: /* expritem */
{ {
tSQLExprDestroy((yypminor->yy64)); tSQLExprListDestroy((yypminor->yy478));
} }
break; break;
case 260: /* union */ case 253: /* where_opt */
case 259: /* having_opt */
case 264: /* expr */
case 274: /* expritem */
{ {
destroyAllSelectClause((yypminor->yy231)); tSQLExprDestroy((yypminor->yy420));
} }
break; break;
case 267: /* sortitem */ case 262: /* union */
{ {
tVariantDestroy(&(yypminor->yy134)); destroyAllSelectClause((yypminor->yy513));
}
break;
case 269: /* sortitem */
{
tVariantDestroy(&(yypminor->yy516));
} }
break; break;
/********* End destructor definitions *****************************************/ /********* End destructor definitions *****************************************/
...@@ -1813,124 +1826,127 @@ static const struct { ...@@ -1813,124 +1826,127 @@ static const struct {
{ 243, -1 }, /* (112) signed ::= INTEGER */ { 243, -1 }, /* (112) signed ::= INTEGER */
{ 243, -2 }, /* (113) signed ::= PLUS INTEGER */ { 243, -2 }, /* (113) signed ::= PLUS INTEGER */
{ 243, -2 }, /* (114) signed ::= MINUS INTEGER */ { 243, -2 }, /* (114) signed ::= MINUS INTEGER */
{ 209, -6 }, /* (115) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ { 209, -3 }, /* (115) cmd ::= CREATE TABLE create_table_args */
{ 244, -3 }, /* (116) create_table_args ::= LP columnlist RP */ { 209, -3 }, /* (116) cmd ::= CREATE TABLE create_table_list */
{ 244, -7 }, /* (117) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ { 245, -1 }, /* (117) create_table_list ::= create_from_stable */
{ 244, -7 }, /* (118) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ { 245, -2 }, /* (118) create_table_list ::= create_table_list create_from_stable */
{ 244, -2 }, /* (119) create_table_args ::= AS select */ { 244, -6 }, /* (119) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ 245, -3 }, /* (120) columnlist ::= columnlist COMMA column */ { 244, -10 }, /* (120) create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{ 245, -1 }, /* (121) columnlist ::= column */ { 246, -10 }, /* (121) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ 247, -2 }, /* (122) column ::= ids typename */ { 244, -5 }, /* (122) create_table_args ::= ifnotexists ids cpxName AS select */
{ 228, -3 }, /* (123) tagitemlist ::= tagitemlist COMMA tagitem */ { 247, -3 }, /* (123) columnlist ::= columnlist COMMA column */
{ 228, -1 }, /* (124) tagitemlist ::= tagitem */ { 247, -1 }, /* (124) columnlist ::= column */
{ 248, -1 }, /* (125) tagitem ::= INTEGER */ { 249, -2 }, /* (125) column ::= ids typename */
{ 248, -1 }, /* (126) tagitem ::= FLOAT */ { 228, -3 }, /* (126) tagitemlist ::= tagitemlist COMMA tagitem */
{ 248, -1 }, /* (127) tagitem ::= STRING */ { 228, -1 }, /* (127) tagitemlist ::= tagitem */
{ 248, -1 }, /* (128) tagitem ::= BOOL */ { 250, -1 }, /* (128) tagitem ::= INTEGER */
{ 248, -1 }, /* (129) tagitem ::= NULL */ { 250, -1 }, /* (129) tagitem ::= FLOAT */
{ 248, -2 }, /* (130) tagitem ::= MINUS INTEGER */ { 250, -1 }, /* (130) tagitem ::= STRING */
{ 248, -2 }, /* (131) tagitem ::= MINUS FLOAT */ { 250, -1 }, /* (131) tagitem ::= BOOL */
{ 248, -2 }, /* (132) tagitem ::= PLUS INTEGER */ { 250, -1 }, /* (132) tagitem ::= NULL */
{ 248, -2 }, /* (133) tagitem ::= PLUS FLOAT */ { 250, -2 }, /* (133) tagitem ::= MINUS INTEGER */
{ 246, -12 }, /* (134) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ { 250, -2 }, /* (134) tagitem ::= MINUS FLOAT */
{ 260, -1 }, /* (135) union ::= select */ { 250, -2 }, /* (135) tagitem ::= PLUS INTEGER */
{ 260, -3 }, /* (136) union ::= LP union RP */ { 250, -2 }, /* (136) tagitem ::= PLUS FLOAT */
{ 260, -4 }, /* (137) union ::= union UNION ALL select */ { 248, -12 }, /* (137) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ 260, -6 }, /* (138) union ::= union UNION ALL LP select RP */ { 262, -1 }, /* (138) union ::= select */
{ 209, -1 }, /* (139) cmd ::= union */ { 262, -3 }, /* (139) union ::= LP union RP */
{ 246, -2 }, /* (140) select ::= SELECT selcollist */ { 262, -4 }, /* (140) union ::= union UNION ALL select */
{ 261, -2 }, /* (141) sclp ::= selcollist COMMA */ { 262, -6 }, /* (141) union ::= union UNION ALL LP select RP */
{ 261, 0 }, /* (142) sclp ::= */ { 209, -1 }, /* (142) cmd ::= union */
{ 249, -3 }, /* (143) selcollist ::= sclp expr as */ { 248, -2 }, /* (143) select ::= SELECT selcollist */
{ 249, -2 }, /* (144) selcollist ::= sclp STAR */ { 263, -2 }, /* (144) sclp ::= selcollist COMMA */
{ 263, -2 }, /* (145) as ::= AS ids */ { 263, 0 }, /* (145) sclp ::= */
{ 263, -1 }, /* (146) as ::= ids */ { 251, -3 }, /* (146) selcollist ::= sclp expr as */
{ 263, 0 }, /* (147) as ::= */ { 251, -2 }, /* (147) selcollist ::= sclp STAR */
{ 250, -2 }, /* (148) from ::= FROM tablelist */ { 265, -2 }, /* (148) as ::= AS ids */
{ 264, -2 }, /* (149) tablelist ::= ids cpxName */ { 265, -1 }, /* (149) as ::= ids */
{ 264, -3 }, /* (150) tablelist ::= ids cpxName ids */ { 265, 0 }, /* (150) as ::= */
{ 264, -4 }, /* (151) tablelist ::= tablelist COMMA ids cpxName */ { 252, -2 }, /* (151) from ::= FROM tablelist */
{ 264, -5 }, /* (152) tablelist ::= tablelist COMMA ids cpxName ids */ { 266, -2 }, /* (152) tablelist ::= ids cpxName */
{ 265, -1 }, /* (153) tmvar ::= VARIABLE */ { 266, -3 }, /* (153) tablelist ::= ids cpxName ids */
{ 252, -4 }, /* (154) interval_opt ::= INTERVAL LP tmvar RP */ { 266, -4 }, /* (154) tablelist ::= tablelist COMMA ids cpxName */
{ 252, -6 }, /* (155) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ { 266, -5 }, /* (155) tablelist ::= tablelist COMMA ids cpxName ids */
{ 252, 0 }, /* (156) interval_opt ::= */ { 267, -1 }, /* (156) tmvar ::= VARIABLE */
{ 253, 0 }, /* (157) fill_opt ::= */ { 254, -4 }, /* (157) interval_opt ::= INTERVAL LP tmvar RP */
{ 253, -6 }, /* (158) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { 254, -6 }, /* (158) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{ 253, -4 }, /* (159) fill_opt ::= FILL LP ID RP */ { 254, 0 }, /* (159) interval_opt ::= */
{ 254, -4 }, /* (160) sliding_opt ::= SLIDING LP tmvar RP */ { 255, 0 }, /* (160) fill_opt ::= */
{ 254, 0 }, /* (161) sliding_opt ::= */ { 255, -6 }, /* (161) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 256, 0 }, /* (162) orderby_opt ::= */ { 255, -4 }, /* (162) fill_opt ::= FILL LP ID RP */
{ 256, -3 }, /* (163) orderby_opt ::= ORDER BY sortlist */ { 256, -4 }, /* (163) sliding_opt ::= SLIDING LP tmvar RP */
{ 266, -4 }, /* (164) sortlist ::= sortlist COMMA item sortorder */ { 256, 0 }, /* (164) sliding_opt ::= */
{ 266, -2 }, /* (165) sortlist ::= item sortorder */ { 258, 0 }, /* (165) orderby_opt ::= */
{ 268, -2 }, /* (166) item ::= ids cpxName */ { 258, -3 }, /* (166) orderby_opt ::= ORDER BY sortlist */
{ 269, -1 }, /* (167) sortorder ::= ASC */ { 268, -4 }, /* (167) sortlist ::= sortlist COMMA item sortorder */
{ 269, -1 }, /* (168) sortorder ::= DESC */ { 268, -2 }, /* (168) sortlist ::= item sortorder */
{ 269, 0 }, /* (169) sortorder ::= */ { 270, -2 }, /* (169) item ::= ids cpxName */
{ 255, 0 }, /* (170) groupby_opt ::= */ { 271, -1 }, /* (170) sortorder ::= ASC */
{ 255, -3 }, /* (171) groupby_opt ::= GROUP BY grouplist */ { 271, -1 }, /* (171) sortorder ::= DESC */
{ 270, -3 }, /* (172) grouplist ::= grouplist COMMA item */ { 271, 0 }, /* (172) sortorder ::= */
{ 270, -1 }, /* (173) grouplist ::= item */ { 257, 0 }, /* (173) groupby_opt ::= */
{ 257, 0 }, /* (174) having_opt ::= */ { 257, -3 }, /* (174) groupby_opt ::= GROUP BY grouplist */
{ 257, -2 }, /* (175) having_opt ::= HAVING expr */ { 272, -3 }, /* (175) grouplist ::= grouplist COMMA item */
{ 259, 0 }, /* (176) limit_opt ::= */ { 272, -1 }, /* (176) grouplist ::= item */
{ 259, -2 }, /* (177) limit_opt ::= LIMIT signed */ { 259, 0 }, /* (177) having_opt ::= */
{ 259, -4 }, /* (178) limit_opt ::= LIMIT signed OFFSET signed */ { 259, -2 }, /* (178) having_opt ::= HAVING expr */
{ 259, -4 }, /* (179) limit_opt ::= LIMIT signed COMMA signed */ { 261, 0 }, /* (179) limit_opt ::= */
{ 258, 0 }, /* (180) slimit_opt ::= */ { 261, -2 }, /* (180) limit_opt ::= LIMIT signed */
{ 258, -2 }, /* (181) slimit_opt ::= SLIMIT signed */ { 261, -4 }, /* (181) limit_opt ::= LIMIT signed OFFSET signed */
{ 258, -4 }, /* (182) slimit_opt ::= SLIMIT signed SOFFSET signed */ { 261, -4 }, /* (182) limit_opt ::= LIMIT signed COMMA signed */
{ 258, -4 }, /* (183) slimit_opt ::= SLIMIT signed COMMA signed */ { 260, 0 }, /* (183) slimit_opt ::= */
{ 251, 0 }, /* (184) where_opt ::= */ { 260, -2 }, /* (184) slimit_opt ::= SLIMIT signed */
{ 251, -2 }, /* (185) where_opt ::= WHERE expr */ { 260, -4 }, /* (185) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 262, -3 }, /* (186) expr ::= LP expr RP */ { 260, -4 }, /* (186) slimit_opt ::= SLIMIT signed COMMA signed */
{ 262, -1 }, /* (187) expr ::= ID */ { 253, 0 }, /* (187) where_opt ::= */
{ 262, -3 }, /* (188) expr ::= ID DOT ID */ { 253, -2 }, /* (188) where_opt ::= WHERE expr */
{ 262, -3 }, /* (189) expr ::= ID DOT STAR */ { 264, -3 }, /* (189) expr ::= LP expr RP */
{ 262, -1 }, /* (190) expr ::= INTEGER */ { 264, -1 }, /* (190) expr ::= ID */
{ 262, -2 }, /* (191) expr ::= MINUS INTEGER */ { 264, -3 }, /* (191) expr ::= ID DOT ID */
{ 262, -2 }, /* (192) expr ::= PLUS INTEGER */ { 264, -3 }, /* (192) expr ::= ID DOT STAR */
{ 262, -1 }, /* (193) expr ::= FLOAT */ { 264, -1 }, /* (193) expr ::= INTEGER */
{ 262, -2 }, /* (194) expr ::= MINUS FLOAT */ { 264, -2 }, /* (194) expr ::= MINUS INTEGER */
{ 262, -2 }, /* (195) expr ::= PLUS FLOAT */ { 264, -2 }, /* (195) expr ::= PLUS INTEGER */
{ 262, -1 }, /* (196) expr ::= STRING */ { 264, -1 }, /* (196) expr ::= FLOAT */
{ 262, -1 }, /* (197) expr ::= NOW */ { 264, -2 }, /* (197) expr ::= MINUS FLOAT */
{ 262, -1 }, /* (198) expr ::= VARIABLE */ { 264, -2 }, /* (198) expr ::= PLUS FLOAT */
{ 262, -1 }, /* (199) expr ::= BOOL */ { 264, -1 }, /* (199) expr ::= STRING */
{ 262, -4 }, /* (200) expr ::= ID LP exprlist RP */ { 264, -1 }, /* (200) expr ::= NOW */
{ 262, -4 }, /* (201) expr ::= ID LP STAR RP */ { 264, -1 }, /* (201) expr ::= VARIABLE */
{ 262, -3 }, /* (202) expr ::= expr IS NULL */ { 264, -1 }, /* (202) expr ::= BOOL */
{ 262, -4 }, /* (203) expr ::= expr IS NOT NULL */ { 264, -4 }, /* (203) expr ::= ID LP exprlist RP */
{ 262, -3 }, /* (204) expr ::= expr LT expr */ { 264, -4 }, /* (204) expr ::= ID LP STAR RP */
{ 262, -3 }, /* (205) expr ::= expr GT expr */ { 264, -3 }, /* (205) expr ::= expr IS NULL */
{ 262, -3 }, /* (206) expr ::= expr LE expr */ { 264, -4 }, /* (206) expr ::= expr IS NOT NULL */
{ 262, -3 }, /* (207) expr ::= expr GE expr */ { 264, -3 }, /* (207) expr ::= expr LT expr */
{ 262, -3 }, /* (208) expr ::= expr NE expr */ { 264, -3 }, /* (208) expr ::= expr GT expr */
{ 262, -3 }, /* (209) expr ::= expr EQ expr */ { 264, -3 }, /* (209) expr ::= expr LE expr */
{ 262, -3 }, /* (210) expr ::= expr AND expr */ { 264, -3 }, /* (210) expr ::= expr GE expr */
{ 262, -3 }, /* (211) expr ::= expr OR expr */ { 264, -3 }, /* (211) expr ::= expr NE expr */
{ 262, -3 }, /* (212) expr ::= expr PLUS expr */ { 264, -3 }, /* (212) expr ::= expr EQ expr */
{ 262, -3 }, /* (213) expr ::= expr MINUS expr */ { 264, -3 }, /* (213) expr ::= expr AND expr */
{ 262, -3 }, /* (214) expr ::= expr STAR expr */ { 264, -3 }, /* (214) expr ::= expr OR expr */
{ 262, -3 }, /* (215) expr ::= expr SLASH expr */ { 264, -3 }, /* (215) expr ::= expr PLUS expr */
{ 262, -3 }, /* (216) expr ::= expr REM expr */ { 264, -3 }, /* (216) expr ::= expr MINUS expr */
{ 262, -3 }, /* (217) expr ::= expr LIKE expr */ { 264, -3 }, /* (217) expr ::= expr STAR expr */
{ 262, -5 }, /* (218) expr ::= expr IN LP exprlist RP */ { 264, -3 }, /* (218) expr ::= expr SLASH expr */
{ 271, -3 }, /* (219) exprlist ::= exprlist COMMA expritem */ { 264, -3 }, /* (219) expr ::= expr REM expr */
{ 271, -1 }, /* (220) exprlist ::= expritem */ { 264, -3 }, /* (220) expr ::= expr LIKE expr */
{ 272, -1 }, /* (221) expritem ::= expr */ { 264, -5 }, /* (221) expr ::= expr IN LP exprlist RP */
{ 272, 0 }, /* (222) expritem ::= */ { 273, -3 }, /* (222) exprlist ::= exprlist COMMA expritem */
{ 209, -3 }, /* (223) cmd ::= RESET QUERY CACHE */ { 273, -1 }, /* (223) exprlist ::= expritem */
{ 209, -7 }, /* (224) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { 274, -1 }, /* (224) expritem ::= expr */
{ 209, -7 }, /* (225) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { 274, 0 }, /* (225) expritem ::= */
{ 209, -7 }, /* (226) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { 209, -3 }, /* (226) cmd ::= RESET QUERY CACHE */
{ 209, -7 }, /* (227) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { 209, -7 }, /* (227) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 209, -8 }, /* (228) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { 209, -7 }, /* (228) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 209, -9 }, /* (229) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { 209, -7 }, /* (229) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 209, -3 }, /* (230) cmd ::= KILL CONNECTION INTEGER */ { 209, -7 }, /* (230) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 209, -5 }, /* (231) cmd ::= KILL STREAM INTEGER COLON INTEGER */ { 209, -8 }, /* (231) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 209, -5 }, /* (232) cmd ::= KILL QUERY INTEGER COLON INTEGER */ { 209, -9 }, /* (232) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 209, -3 }, /* (233) cmd ::= KILL CONNECTION INTEGER */
{ 209, -5 }, /* (234) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 209, -5 }, /* (235) cmd ::= KILL QUERY INTEGER COLON INTEGER */
}; };
static void yy_accept(yyParser*); /* Forward Declaration */ static void yy_accept(yyParser*); /* Forward Declaration */
...@@ -2011,6 +2027,7 @@ static void yy_reduce( ...@@ -2011,6 +2027,7 @@ static void yy_reduce(
/********** Begin reduce actions **********************************************/ /********** Begin reduce actions **********************************************/
YYMINORTYPE yylhsminor; YYMINORTYPE yylhsminor;
case 0: /* program ::= cmd */ case 0: /* program ::= cmd */
case 115: /* cmd ::= CREATE TABLE create_table_args */ yytestcase(yyruleno==115);
{} {}
break; break;
case 1: /* cmd ::= SHOW DATABASES */ case 1: /* cmd ::= SHOW DATABASES */
...@@ -2161,13 +2178,13 @@ static void yy_reduce( ...@@ -2161,13 +2178,13 @@ static void yy_reduce(
{ 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 40: /* cmd ::= ALTER DATABASE ids alter_db_optr */ case 40: /* cmd ::= ALTER DATABASE ids alter_db_optr */
{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &t);} { SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy148, &t);}
break; break;
case 41: /* cmd ::= ALTER ACCOUNT ids acct_optr */ case 41: /* cmd ::= ALTER ACCOUNT ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy309);}
break; break;
case 42: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ case 42: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy309);}
break; break;
case 43: /* ids ::= ID */ case 43: /* ids ::= ID */
case 44: /* ids ::= STRING */ yytestcase(yyruleno==44); case 44: /* ids ::= STRING */ yytestcase(yyruleno==44);
...@@ -2175,23 +2192,23 @@ static void yy_reduce( ...@@ -2175,23 +2192,23 @@ static void yy_reduce(
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 45: /* ifexists ::= IF EXISTS */ case 45: /* ifexists ::= IF EXISTS */
{yymsp[-1].minor.yy0.n = 1;} { yymsp[-1].minor.yy0.n = 1;}
break; break;
case 46: /* ifexists ::= */ case 46: /* ifexists ::= */
case 48: /* ifnotexists ::= */ yytestcase(yyruleno==48); case 48: /* ifnotexists ::= */ yytestcase(yyruleno==48);
{yymsp[1].minor.yy0.n = 0;} { yymsp[1].minor.yy0.n = 0;}
break; break;
case 47: /* ifnotexists ::= IF NOT EXISTS */ case 47: /* ifnotexists ::= IF NOT EXISTS */
{yymsp[-2].minor.yy0.n = 1;} { yymsp[-2].minor.yy0.n = 1;}
break; break;
case 49: /* cmd ::= CREATE DNODE ids */ case 49: /* 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 50: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ case 50: /* 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.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy309);}
break; break;
case 51: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ case 51: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &yymsp[-2].minor.yy0);} { setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy148, &yymsp[-2].minor.yy0);}
break; break;
case 52: /* cmd ::= CREATE USER ids PASS ids */ case 52: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} { setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
...@@ -2205,7 +2222,7 @@ static void yy_reduce( ...@@ -2205,7 +2222,7 @@ static void yy_reduce(
case 65: /* users ::= */ yytestcase(yyruleno==65); case 65: /* users ::= */ yytestcase(yyruleno==65);
case 67: /* conns ::= */ yytestcase(yyruleno==67); case 67: /* conns ::= */ yytestcase(yyruleno==67);
case 69: /* state ::= */ yytestcase(yyruleno==69); case 69: /* state ::= */ yytestcase(yyruleno==69);
{yymsp[1].minor.yy0.n = 0; } { yymsp[1].minor.yy0.n = 0; }
break; break;
case 54: /* pps ::= PPS INTEGER */ case 54: /* pps ::= PPS INTEGER */
case 56: /* tseries ::= TSERIES INTEGER */ yytestcase(yyruleno==56); case 56: /* tseries ::= TSERIES INTEGER */ yytestcase(yyruleno==56);
...@@ -2216,24 +2233,24 @@ static void yy_reduce( ...@@ -2216,24 +2233,24 @@ static void yy_reduce(
case 66: /* users ::= USERS INTEGER */ yytestcase(yyruleno==66); case 66: /* users ::= USERS INTEGER */ yytestcase(yyruleno==66);
case 68: /* conns ::= CONNS INTEGER */ yytestcase(yyruleno==68); case 68: /* conns ::= CONNS INTEGER */ yytestcase(yyruleno==68);
case 70: /* state ::= STATE ids */ yytestcase(yyruleno==70); case 70: /* state ::= STATE ids */ yytestcase(yyruleno==70);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 71: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ case 71: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ {
yylhsminor.yy149.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; yylhsminor.yy309.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy149.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; yylhsminor.yy309.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy149.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; yylhsminor.yy309.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy149.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; yylhsminor.yy309.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy149.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; yylhsminor.yy309.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy149.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; yylhsminor.yy309.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; yylhsminor.yy309.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; yylhsminor.yy309.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy149.stat = yymsp[0].minor.yy0; yylhsminor.yy309.stat = yymsp[0].minor.yy0;
} }
yymsp[-8].minor.yy149 = yylhsminor.yy149; yymsp[-8].minor.yy309 = yylhsminor.yy309;
break; break;
case 72: /* keep ::= KEEP tagitemlist */ case 72: /* keep ::= KEEP tagitemlist */
{ yymsp[-1].minor.yy165 = yymsp[0].minor.yy165; } { yymsp[-1].minor.yy131 = yymsp[0].minor.yy131; }
break; break;
case 73: /* cache ::= CACHE INTEGER */ case 73: /* cache ::= CACHE INTEGER */
case 74: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==74); case 74: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==74);
...@@ -2251,547 +2268,579 @@ static void yy_reduce( ...@@ -2251,547 +2268,579 @@ static void yy_reduce(
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 86: /* db_optr ::= */ case 86: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy268);} {setDefaultCreateDbOption(&yymsp[1].minor.yy148);}
break; break;
case 87: /* db_optr ::= db_optr cache */ case 87: /* db_optr ::= db_optr cache */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 88: /* db_optr ::= db_optr replica */ case 88: /* db_optr ::= db_optr replica */
case 102: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==102); case 102: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==102);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 89: /* db_optr ::= db_optr quorum */ case 89: /* db_optr ::= db_optr quorum */
case 103: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==103); case 103: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==103);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 90: /* db_optr ::= db_optr days */ case 90: /* db_optr ::= db_optr days */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 91: /* db_optr ::= db_optr minrows */ case 91: /* db_optr ::= db_optr minrows */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 92: /* db_optr ::= db_optr maxrows */ case 92: /* db_optr ::= db_optr maxrows */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 93: /* db_optr ::= db_optr blocks */ case 93: /* db_optr ::= db_optr blocks */
case 105: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==105); case 105: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==105);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 94: /* db_optr ::= db_optr ctime */ case 94: /* db_optr ::= db_optr ctime */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 95: /* db_optr ::= db_optr wal */ case 95: /* db_optr ::= db_optr wal */
case 107: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==107); case 107: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==107);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 96: /* db_optr ::= db_optr fsync */ case 96: /* db_optr ::= db_optr fsync */
case 108: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==108); case 108: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==108);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 97: /* db_optr ::= db_optr comp */ case 97: /* db_optr ::= db_optr comp */
case 106: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==106); case 106: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==106);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 98: /* db_optr ::= db_optr prec */ case 98: /* db_optr ::= db_optr prec */
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.precision = yymsp[0].minor.yy0; } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 99: /* db_optr ::= db_optr keep */ case 99: /* db_optr ::= db_optr keep */
case 104: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==104); case 104: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==104);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.keep = yymsp[0].minor.yy165; } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.keep = yymsp[0].minor.yy131; }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 100: /* db_optr ::= db_optr update */ case 100: /* db_optr ::= db_optr update */
case 109: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==109); case 109: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==109);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy148 = yymsp[-1].minor.yy148; yylhsminor.yy148.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy148 = yylhsminor.yy148;
break; break;
case 101: /* alter_db_optr ::= */ case 101: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy268);} { setDefaultCreateDbOption(&yymsp[1].minor.yy148);}
break; break;
case 110: /* typename ::= ids */ case 110: /* typename ::= ids */
{ {
yymsp[0].minor.yy0.type = 0; yymsp[0].minor.yy0.type = 0;
tSQLSetColumnType (&yylhsminor.yy223, &yymsp[0].minor.yy0); tSQLSetColumnType (&yylhsminor.yy163, &yymsp[0].minor.yy0);
} }
yymsp[0].minor.yy223 = yylhsminor.yy223; yymsp[0].minor.yy163 = yylhsminor.yy163;
break; break;
case 111: /* typename ::= ids LP signed RP */ case 111: /* typename ::= ids LP signed RP */
{ {
if (yymsp[-1].minor.yy207 <= 0) { if (yymsp[-1].minor.yy459 <= 0) {
yymsp[-3].minor.yy0.type = 0; yymsp[-3].minor.yy0.type = 0;
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); tSQLSetColumnType(&yylhsminor.yy163, &yymsp[-3].minor.yy0);
} else { } else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy207; // negative value of name length yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy459; // negative value of name length
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); tSQLSetColumnType(&yylhsminor.yy163, &yymsp[-3].minor.yy0);
} }
} }
yymsp[-3].minor.yy223 = yylhsminor.yy223; yymsp[-3].minor.yy163 = yylhsminor.yy163;
break; break;
case 112: /* signed ::= INTEGER */ case 112: /* signed ::= INTEGER */
{ yylhsminor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy459 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy207 = yylhsminor.yy207; yymsp[0].minor.yy459 = yylhsminor.yy459;
break; break;
case 113: /* signed ::= PLUS INTEGER */ case 113: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yymsp[-1].minor.yy459 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break; break;
case 114: /* signed ::= MINUS INTEGER */ case 114: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy207 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} { yymsp[-1].minor.yy459 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break;
case 116: /* cmd ::= CREATE TABLE create_table_list */
{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy538;}
break; break;
case 115: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ case 117: /* create_table_list ::= create_from_stable */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; SCreateTableSQL* pCreateTable = calloc(1, sizeof(SCreateTableSQL));
setCreatedTableName(pInfo, &yymsp[-2].minor.yy0, &yymsp[-3].minor.yy0); pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy96);
pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
yylhsminor.yy538 = pCreateTable;
} }
yymsp[0].minor.yy538 = yylhsminor.yy538;
break; break;
case 116: /* create_table_args ::= LP columnlist RP */ case 118: /* create_table_list ::= create_table_list create_from_stable */
{ {
yymsp[-2].minor.yy470 = tSetCreateSQLElems(yymsp[-1].minor.yy165, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); taosArrayPush(yymsp[-1].minor.yy538->childTableInfo, &yymsp[0].minor.yy96);
setSQLInfo(pInfo, yymsp[-2].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); yylhsminor.yy538 = yymsp[-1].minor.yy538;
} }
yymsp[-1].minor.yy538 = yylhsminor.yy538;
break; break;
case 117: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ case 119: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ {
yymsp[-6].minor.yy470 = tSetCreateSQLElems(yymsp[-5].minor.yy165, yymsp[-1].minor.yy165, NULL, NULL, NULL, TSQL_CREATE_STABLE); yylhsminor.yy538 = tSetCreateSQLElems(yymsp[-1].minor.yy131, NULL, NULL, TSQL_CREATE_TABLE);
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yylhsminor.yy538, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0);
} }
yymsp[-5].minor.yy538 = yylhsminor.yy538;
break; break;
case 118: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ case 120: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
yylhsminor.yy538 = tSetCreateSQLElems(yymsp[-5].minor.yy131, yymsp[-1].minor.yy131, NULL, TSQL_CREATE_STABLE);
setSQLInfo(pInfo, yylhsminor.yy538, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
}
yymsp[-9].minor.yy538 = yylhsminor.yy538;
break;
case 121: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
yymsp[-6].minor.yy470 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy165, NULL, TSQL_CREATE_TABLE_FROM_STABLE); yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); yylhsminor.yy96 = createNewChildTableInfo(&yymsp[-5].minor.yy0, yymsp[-1].minor.yy131, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
} }
yymsp[-9].minor.yy96 = yylhsminor.yy96;
break; break;
case 119: /* create_table_args ::= AS select */ case 122: /* create_table_args ::= ifnotexists ids cpxName AS select */
{ {
yymsp[-1].minor.yy470 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy414, TSQL_CREATE_STREAM); yylhsminor.yy538 = tSetCreateSQLElems(NULL, NULL, yymsp[0].minor.yy84, TSQL_CREATE_STREAM);
setSQLInfo(pInfo, yymsp[-1].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yylhsminor.yy538, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-2].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0);
} }
yymsp[-4].minor.yy538 = yylhsminor.yy538;
break; break;
case 120: /* columnlist ::= columnlist COMMA column */ case 123: /* columnlist ::= columnlist COMMA column */
{taosArrayPush(yymsp[-2].minor.yy165, &yymsp[0].minor.yy223); yylhsminor.yy165 = yymsp[-2].minor.yy165; } {taosArrayPush(yymsp[-2].minor.yy131, &yymsp[0].minor.yy163); yylhsminor.yy131 = yymsp[-2].minor.yy131; }
yymsp[-2].minor.yy165 = yylhsminor.yy165; yymsp[-2].minor.yy131 = yylhsminor.yy131;
break; break;
case 121: /* columnlist ::= column */ case 124: /* columnlist ::= column */
{yylhsminor.yy165 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy165, &yymsp[0].minor.yy223);} {yylhsminor.yy131 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy131, &yymsp[0].minor.yy163);}
yymsp[0].minor.yy165 = yylhsminor.yy165; yymsp[0].minor.yy131 = yylhsminor.yy131;
break; break;
case 122: /* column ::= ids typename */ case 125: /* column ::= ids typename */
{ {
tSQLSetColumnInfo(&yylhsminor.yy223, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy223); tSQLSetColumnInfo(&yylhsminor.yy163, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy163);
} }
yymsp[-1].minor.yy223 = yylhsminor.yy223; yymsp[-1].minor.yy163 = yylhsminor.yy163;
break; break;
case 123: /* tagitemlist ::= tagitemlist COMMA tagitem */ case 126: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ yylhsminor.yy165 = tVariantListAppend(yymsp[-2].minor.yy165, &yymsp[0].minor.yy134, -1); } { yylhsminor.yy131 = tVariantListAppend(yymsp[-2].minor.yy131, &yymsp[0].minor.yy516, -1); }
yymsp[-2].minor.yy165 = yylhsminor.yy165; yymsp[-2].minor.yy131 = yylhsminor.yy131;
break; break;
case 124: /* tagitemlist ::= tagitem */ case 127: /* tagitemlist ::= tagitem */
{ yylhsminor.yy165 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); } { yylhsminor.yy131 = tVariantListAppend(NULL, &yymsp[0].minor.yy516, -1); }
yymsp[0].minor.yy165 = yylhsminor.yy165; yymsp[0].minor.yy131 = yylhsminor.yy131;
break; break;
case 125: /* tagitem ::= INTEGER */ case 128: /* tagitem ::= INTEGER */
case 126: /* tagitem ::= FLOAT */ yytestcase(yyruleno==126); case 129: /* tagitem ::= FLOAT */ yytestcase(yyruleno==129);
case 127: /* tagitem ::= STRING */ yytestcase(yyruleno==127); case 130: /* tagitem ::= STRING */ yytestcase(yyruleno==130);
case 128: /* tagitem ::= BOOL */ yytestcase(yyruleno==128); case 131: /* tagitem ::= BOOL */ yytestcase(yyruleno==131);
{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } { toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy516, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134; yymsp[0].minor.yy516 = yylhsminor.yy516;
break; break;
case 129: /* tagitem ::= NULL */ case 132: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } { yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy516, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134; yymsp[0].minor.yy516 = yylhsminor.yy516;
break; break;
case 130: /* tagitem ::= MINUS INTEGER */ case 133: /* tagitem ::= MINUS INTEGER */
case 131: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==131); case 134: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==134);
case 132: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==132); case 135: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==135);
case 133: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==133); case 136: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==136);
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type;
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); tVariantCreate(&yylhsminor.yy516, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy134 = yylhsminor.yy134; yymsp[-1].minor.yy516 = yylhsminor.yy516;
break; break;
case 134: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ case 137: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ {
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy290, yymsp[-9].minor.yy165, yymsp[-8].minor.yy64, yymsp[-4].minor.yy165, yymsp[-3].minor.yy165, &yymsp[-7].minor.yy532, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy165, &yymsp[0].minor.yy216, &yymsp[-1].minor.yy216); yylhsminor.yy84 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy478, yymsp[-9].minor.yy131, yymsp[-8].minor.yy420, yymsp[-4].minor.yy131, yymsp[-3].minor.yy131, &yymsp[-7].minor.yy530, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy131, &yymsp[0].minor.yy284, &yymsp[-1].minor.yy284);
} }
yymsp[-11].minor.yy414 = yylhsminor.yy414; yymsp[-11].minor.yy84 = yylhsminor.yy84;
break; break;
case 135: /* union ::= select */ case 138: /* union ::= select */
{ yylhsminor.yy231 = setSubclause(NULL, yymsp[0].minor.yy414); } { yylhsminor.yy513 = setSubclause(NULL, yymsp[0].minor.yy84); }
yymsp[0].minor.yy231 = yylhsminor.yy231; yymsp[0].minor.yy513 = yylhsminor.yy513;
break; break;
case 136: /* union ::= LP union RP */ case 139: /* union ::= LP union RP */
{ yymsp[-2].minor.yy231 = yymsp[-1].minor.yy231; } { yymsp[-2].minor.yy513 = yymsp[-1].minor.yy513; }
break; break;
case 137: /* union ::= union UNION ALL select */ case 140: /* union ::= union UNION ALL select */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-3].minor.yy231, yymsp[0].minor.yy414); } { yylhsminor.yy513 = appendSelectClause(yymsp[-3].minor.yy513, yymsp[0].minor.yy84); }
yymsp[-3].minor.yy231 = yylhsminor.yy231; yymsp[-3].minor.yy513 = yylhsminor.yy513;
break; break;
case 138: /* union ::= union UNION ALL LP select RP */ case 141: /* union ::= union UNION ALL LP select RP */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-5].minor.yy231, yymsp[-1].minor.yy414); } { yylhsminor.yy513 = appendSelectClause(yymsp[-5].minor.yy513, yymsp[-1].minor.yy84); }
yymsp[-5].minor.yy231 = yylhsminor.yy231; yymsp[-5].minor.yy513 = yylhsminor.yy513;
break; break;
case 139: /* cmd ::= union */ case 142: /* cmd ::= union */
{ setSQLInfo(pInfo, yymsp[0].minor.yy231, NULL, TSDB_SQL_SELECT); } { setSQLInfo(pInfo, yymsp[0].minor.yy513, NULL, TSDB_SQL_SELECT); }
break; break;
case 140: /* select ::= SELECT selcollist */ case 143: /* select ::= SELECT selcollist */
{ {
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy290, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); yylhsminor.yy84 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy478, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
} }
yymsp[-1].minor.yy414 = yylhsminor.yy414; yymsp[-1].minor.yy84 = yylhsminor.yy84;
break; break;
case 141: /* sclp ::= selcollist COMMA */ case 144: /* sclp ::= selcollist COMMA */
{yylhsminor.yy290 = yymsp[-1].minor.yy290;} {yylhsminor.yy478 = yymsp[-1].minor.yy478;}
yymsp[-1].minor.yy290 = yylhsminor.yy290; yymsp[-1].minor.yy478 = yylhsminor.yy478;
break; break;
case 142: /* sclp ::= */ case 145: /* sclp ::= */
{yymsp[1].minor.yy290 = 0;} {yymsp[1].minor.yy478 = 0;}
break; break;
case 143: /* selcollist ::= sclp expr as */ case 146: /* selcollist ::= sclp expr as */
{ {
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290, yymsp[-1].minor.yy64, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); yylhsminor.yy478 = tSQLExprListAppend(yymsp[-2].minor.yy478, yymsp[-1].minor.yy420, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
} }
yymsp[-2].minor.yy290 = yylhsminor.yy290; yymsp[-2].minor.yy478 = yylhsminor.yy478;
break; break;
case 144: /* selcollist ::= sclp STAR */ case 147: /* selcollist ::= sclp STAR */
{ {
tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL); tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL);
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-1].minor.yy290, pNode, 0); yylhsminor.yy478 = tSQLExprListAppend(yymsp[-1].minor.yy478, pNode, 0);
} }
yymsp[-1].minor.yy290 = yylhsminor.yy290; yymsp[-1].minor.yy478 = yylhsminor.yy478;
break; break;
case 145: /* as ::= AS ids */ case 148: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 146: /* as ::= ids */ case 149: /* as ::= ids */
{ yylhsminor.yy0 = yymsp[0].minor.yy0; } { yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 147: /* as ::= */ case 150: /* as ::= */
{ yymsp[1].minor.yy0.n = 0; } { yymsp[1].minor.yy0.n = 0; }
break; break;
case 148: /* from ::= FROM tablelist */ case 151: /* from ::= FROM tablelist */
{yymsp[-1].minor.yy165 = yymsp[0].minor.yy165;} {yymsp[-1].minor.yy131 = yymsp[0].minor.yy131;}
break; break;
case 149: /* tablelist ::= ids cpxName */ case 152: /* tablelist ::= ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy165 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
yylhsminor.yy165 = tVariantListAppendToken(yylhsminor.yy165, &yymsp[-1].minor.yy0, -1); // table alias name yylhsminor.yy131 = tVariantListAppendToken(yylhsminor.yy131, &yymsp[-1].minor.yy0, -1); // table alias name
} }
yymsp[-1].minor.yy165 = yylhsminor.yy165; yymsp[-1].minor.yy131 = yylhsminor.yy131;
break; break;
case 150: /* tablelist ::= ids cpxName ids */ case 153: /* tablelist ::= ids cpxName ids */
{ {
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
toTSDBType(yymsp[0].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type);
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy165 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
yylhsminor.yy165 = tVariantListAppendToken(yylhsminor.yy165, &yymsp[0].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(yylhsminor.yy131, &yymsp[0].minor.yy0, -1);
} }
yymsp[-2].minor.yy165 = yylhsminor.yy165; yymsp[-2].minor.yy131 = yylhsminor.yy131;
break; break;
case 151: /* tablelist ::= tablelist COMMA ids cpxName */ case 154: /* tablelist ::= tablelist COMMA ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy165 = tVariantListAppendToken(yymsp[-3].minor.yy165, &yymsp[-1].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(yymsp[-3].minor.yy131, &yymsp[-1].minor.yy0, -1);
yylhsminor.yy165 = tVariantListAppendToken(yylhsminor.yy165, &yymsp[-1].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(yylhsminor.yy131, &yymsp[-1].minor.yy0, -1);
} }
yymsp[-3].minor.yy165 = yylhsminor.yy165; yymsp[-3].minor.yy131 = yylhsminor.yy131;
break; break;
case 152: /* tablelist ::= tablelist COMMA ids cpxName ids */ case 155: /* tablelist ::= tablelist COMMA ids cpxName ids */
{ {
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
toTSDBType(yymsp[0].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type);
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy165 = tVariantListAppendToken(yymsp[-4].minor.yy165, &yymsp[-2].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(yymsp[-4].minor.yy131, &yymsp[-2].minor.yy0, -1);
yylhsminor.yy165 = tVariantListAppendToken(yylhsminor.yy165, &yymsp[0].minor.yy0, -1); yylhsminor.yy131 = tVariantListAppendToken(yylhsminor.yy131, &yymsp[0].minor.yy0, -1);
} }
yymsp[-4].minor.yy165 = yylhsminor.yy165; yymsp[-4].minor.yy131 = yylhsminor.yy131;
break; break;
case 153: /* tmvar ::= VARIABLE */ case 156: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;} {yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 154: /* interval_opt ::= INTERVAL LP tmvar RP */ case 157: /* interval_opt ::= INTERVAL LP tmvar RP */
{yymsp[-3].minor.yy532.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy532.offset.n = 0; yymsp[-3].minor.yy532.offset.z = NULL; yymsp[-3].minor.yy532.offset.type = 0;} {yymsp[-3].minor.yy530.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy530.offset.n = 0; yymsp[-3].minor.yy530.offset.z = NULL; yymsp[-3].minor.yy530.offset.type = 0;}
break; break;
case 155: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ case 158: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{yymsp[-5].minor.yy532.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy532.offset = yymsp[-1].minor.yy0;} {yymsp[-5].minor.yy530.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy530.offset = yymsp[-1].minor.yy0;}
break; break;
case 156: /* interval_opt ::= */ case 159: /* interval_opt ::= */
{memset(&yymsp[1].minor.yy532, 0, sizeof(yymsp[1].minor.yy532));} {memset(&yymsp[1].minor.yy530, 0, sizeof(yymsp[1].minor.yy530));}
break; break;
case 157: /* fill_opt ::= */ case 160: /* fill_opt ::= */
{yymsp[1].minor.yy165 = 0; } {yymsp[1].minor.yy131 = 0; }
break; break;
case 158: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ case 161: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ {
tVariant A = {0}; tVariant A = {0};
toTSDBType(yymsp[-3].minor.yy0.type); toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0); tVariantCreate(&A, &yymsp[-3].minor.yy0);
tVariantListInsert(yymsp[-1].minor.yy165, &A, -1, 0); tVariantListInsert(yymsp[-1].minor.yy131, &A, -1, 0);
yymsp[-5].minor.yy165 = yymsp[-1].minor.yy165; yymsp[-5].minor.yy131 = yymsp[-1].minor.yy131;
} }
break; break;
case 159: /* fill_opt ::= FILL LP ID RP */ case 162: /* fill_opt ::= FILL LP ID RP */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-3].minor.yy165 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); yymsp[-3].minor.yy131 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
} }
break; break;
case 160: /* sliding_opt ::= SLIDING LP tmvar RP */ case 163: /* sliding_opt ::= SLIDING LP tmvar RP */
{yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; } {yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break; break;
case 161: /* sliding_opt ::= */ case 164: /* 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 162: /* orderby_opt ::= */ case 165: /* orderby_opt ::= */
case 170: /* groupby_opt ::= */ yytestcase(yyruleno==170); {yymsp[1].minor.yy131 = 0;}
{yymsp[1].minor.yy165 = 0;}
break; break;
case 163: /* orderby_opt ::= ORDER BY sortlist */ case 166: /* orderby_opt ::= ORDER BY sortlist */
case 171: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==171); {yymsp[-2].minor.yy131 = yymsp[0].minor.yy131;}
{yymsp[-2].minor.yy165 = yymsp[0].minor.yy165;}
break; break;
case 164: /* sortlist ::= sortlist COMMA item sortorder */ case 167: /* sortlist ::= sortlist COMMA item sortorder */
{ {
yylhsminor.yy165 = tVariantListAppend(yymsp[-3].minor.yy165, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); yylhsminor.yy131 = tVariantListAppend(yymsp[-3].minor.yy131, &yymsp[-1].minor.yy516, yymsp[0].minor.yy42);
} }
yymsp[-3].minor.yy165 = yylhsminor.yy165; yymsp[-3].minor.yy131 = yylhsminor.yy131;
break; break;
case 165: /* sortlist ::= item sortorder */ case 168: /* sortlist ::= item sortorder */
{ {
yylhsminor.yy165 = tVariantListAppend(NULL, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); yylhsminor.yy131 = tVariantListAppend(NULL, &yymsp[-1].minor.yy516, yymsp[0].minor.yy42);
} }
yymsp[-1].minor.yy165 = yylhsminor.yy165; yymsp[-1].minor.yy131 = yylhsminor.yy131;
break; break;
case 166: /* item ::= ids cpxName */ case 169: /* item ::= ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); tVariantCreate(&yylhsminor.yy516, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy134 = yylhsminor.yy134; yymsp[-1].minor.yy516 = yylhsminor.yy516;
break;
case 170: /* sortorder ::= ASC */
{ yymsp[0].minor.yy42 = TSDB_ORDER_ASC; }
break;
case 171: /* sortorder ::= DESC */
{ yymsp[0].minor.yy42 = TSDB_ORDER_DESC;}
break; break;
case 167: /* sortorder ::= ASC */ case 172: /* sortorder ::= */
{yymsp[0].minor.yy46 = TSDB_ORDER_ASC; } { yymsp[1].minor.yy42 = TSDB_ORDER_ASC; }
break; break;
case 168: /* sortorder ::= DESC */ case 173: /* groupby_opt ::= */
{yymsp[0].minor.yy46 = TSDB_ORDER_DESC;} { yymsp[1].minor.yy131 = 0;}
break; break;
case 169: /* sortorder ::= */ case 174: /* groupby_opt ::= GROUP BY grouplist */
{yymsp[1].minor.yy46 = TSDB_ORDER_ASC;} { yymsp[-2].minor.yy131 = yymsp[0].minor.yy131;}
break; break;
case 172: /* grouplist ::= grouplist COMMA item */ case 175: /* grouplist ::= grouplist COMMA item */
{ {
yylhsminor.yy165 = tVariantListAppend(yymsp[-2].minor.yy165, &yymsp[0].minor.yy134, -1); yylhsminor.yy131 = tVariantListAppend(yymsp[-2].minor.yy131, &yymsp[0].minor.yy516, -1);
} }
yymsp[-2].minor.yy165 = yylhsminor.yy165; yymsp[-2].minor.yy131 = yylhsminor.yy131;
break; break;
case 173: /* grouplist ::= item */ case 176: /* grouplist ::= item */
{ {
yylhsminor.yy165 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); yylhsminor.yy131 = tVariantListAppend(NULL, &yymsp[0].minor.yy516, -1);
} }
yymsp[0].minor.yy165 = yylhsminor.yy165; yymsp[0].minor.yy131 = yylhsminor.yy131;
break; break;
case 174: /* having_opt ::= */ case 177: /* having_opt ::= */
case 184: /* where_opt ::= */ yytestcase(yyruleno==184); case 187: /* where_opt ::= */ yytestcase(yyruleno==187);
case 222: /* expritem ::= */ yytestcase(yyruleno==222); case 225: /* expritem ::= */ yytestcase(yyruleno==225);
{yymsp[1].minor.yy64 = 0;} {yymsp[1].minor.yy420 = 0;}
break; break;
case 175: /* having_opt ::= HAVING expr */ case 178: /* having_opt ::= HAVING expr */
case 185: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==185); case 188: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==188);
{yymsp[-1].minor.yy64 = yymsp[0].minor.yy64;} {yymsp[-1].minor.yy420 = yymsp[0].minor.yy420;}
break; break;
case 176: /* limit_opt ::= */ case 179: /* limit_opt ::= */
case 180: /* slimit_opt ::= */ yytestcase(yyruleno==180); case 183: /* slimit_opt ::= */ yytestcase(yyruleno==183);
{yymsp[1].minor.yy216.limit = -1; yymsp[1].minor.yy216.offset = 0;} {yymsp[1].minor.yy284.limit = -1; yymsp[1].minor.yy284.offset = 0;}
break; break;
case 177: /* limit_opt ::= LIMIT signed */ case 180: /* limit_opt ::= LIMIT signed */
case 181: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==181); case 184: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==184);
{yymsp[-1].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-1].minor.yy216.offset = 0;} {yymsp[-1].minor.yy284.limit = yymsp[0].minor.yy459; yymsp[-1].minor.yy284.offset = 0;}
break; break;
case 178: /* limit_opt ::= LIMIT signed OFFSET signed */ case 181: /* limit_opt ::= LIMIT signed OFFSET signed */
{ yymsp[-3].minor.yy216.limit = yymsp[-2].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[0].minor.yy207;} { yymsp[-3].minor.yy284.limit = yymsp[-2].minor.yy459; yymsp[-3].minor.yy284.offset = yymsp[0].minor.yy459;}
break; break;
case 179: /* limit_opt ::= LIMIT signed COMMA signed */ case 182: /* limit_opt ::= LIMIT signed COMMA signed */
{ yymsp[-3].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[-2].minor.yy207;} { yymsp[-3].minor.yy284.limit = yymsp[0].minor.yy459; yymsp[-3].minor.yy284.offset = yymsp[-2].minor.yy459;}
break; break;
case 182: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ case 185: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
{yymsp[-3].minor.yy216.limit = yymsp[-2].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[0].minor.yy207;} {yymsp[-3].minor.yy284.limit = yymsp[-2].minor.yy459; yymsp[-3].minor.yy284.offset = yymsp[0].minor.yy459;}
break; break;
case 183: /* slimit_opt ::= SLIMIT signed COMMA signed */ case 186: /* slimit_opt ::= SLIMIT signed COMMA signed */
{yymsp[-3].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[-2].minor.yy207;} {yymsp[-3].minor.yy284.limit = yymsp[0].minor.yy459; yymsp[-3].minor.yy284.offset = yymsp[-2].minor.yy459;}
break; break;
case 186: /* expr ::= LP expr RP */ case 189: /* expr ::= LP expr RP */
{yylhsminor.yy64 = yymsp[-1].minor.yy64; yylhsminor.yy64->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy64->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);} {yylhsminor.yy420 = yymsp[-1].minor.yy420; yylhsminor.yy420->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy420->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 187: /* expr ::= ID */ case 190: /* expr ::= ID */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 188: /* expr ::= ID DOT ID */ case 191: /* expr ::= ID DOT ID */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} { yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 189: /* expr ::= ID DOT STAR */ case 192: /* expr ::= ID DOT STAR */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} { yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 190: /* expr ::= INTEGER */ case 193: /* expr ::= INTEGER */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 191: /* expr ::= MINUS INTEGER */ case 194: /* expr ::= MINUS INTEGER */
case 192: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==192); case 195: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==195);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy64 = yylhsminor.yy64; yymsp[-1].minor.yy420 = yylhsminor.yy420;
break; break;
case 193: /* expr ::= FLOAT */ case 196: /* expr ::= FLOAT */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 194: /* expr ::= MINUS FLOAT */ case 197: /* expr ::= MINUS FLOAT */
case 195: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==195); case 198: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==198);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} { yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy64 = yylhsminor.yy64; yymsp[-1].minor.yy420 = yylhsminor.yy420;
break; break;
case 196: /* expr ::= STRING */ case 199: /* expr ::= STRING */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 197: /* expr ::= NOW */ case 200: /* expr ::= NOW */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 198: /* expr ::= VARIABLE */ case 201: /* expr ::= VARIABLE */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 199: /* expr ::= BOOL */ case 202: /* expr ::= BOOL */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} { yylhsminor.yy420 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 200: /* expr ::= ID LP exprlist RP */ case 203: /* expr ::= ID LP exprlist RP */
{ yylhsminor.yy64 = tSQLExprCreateFunction(yymsp[-1].minor.yy290, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } { yylhsminor.yy420 = tSQLExprCreateFunction(yymsp[-1].minor.yy478, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy64 = yylhsminor.yy64; yymsp[-3].minor.yy420 = yylhsminor.yy420;
break; break;
case 201: /* expr ::= ID LP STAR RP */ case 204: /* expr ::= ID LP STAR RP */
{ yylhsminor.yy64 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } { yylhsminor.yy420 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy64 = yylhsminor.yy64; yymsp[-3].minor.yy420 = yylhsminor.yy420;
break; break;
case 202: /* expr ::= expr IS NULL */ case 205: /* expr ::= expr IS NULL */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, NULL, TK_ISNULL);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, NULL, TK_ISNULL);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 203: /* expr ::= expr IS NOT NULL */ case 206: /* expr ::= expr IS NOT NULL */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-3].minor.yy64, NULL, TK_NOTNULL);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-3].minor.yy420, NULL, TK_NOTNULL);}
yymsp[-3].minor.yy64 = yylhsminor.yy64; yymsp[-3].minor.yy420 = yylhsminor.yy420;
break; break;
case 204: /* expr ::= expr LT expr */ case 207: /* expr ::= expr LT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LT);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_LT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 205: /* expr ::= expr GT expr */ case 208: /* expr ::= expr GT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GT);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_GT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 206: /* expr ::= expr LE expr */ case 209: /* expr ::= expr LE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LE);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_LE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 207: /* expr ::= expr GE expr */ case 210: /* expr ::= expr GE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GE);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_GE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 208: /* expr ::= expr NE expr */ case 211: /* expr ::= expr NE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_NE);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_NE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 209: /* expr ::= expr EQ expr */ case 212: /* expr ::= expr EQ expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_EQ);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_EQ);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 210: /* expr ::= expr AND expr */ case 213: /* expr ::= expr AND expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_AND);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_AND);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 211: /* expr ::= expr OR expr */ case 214: /* expr ::= expr OR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_OR); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_OR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 212: /* expr ::= expr PLUS expr */ case 215: /* expr ::= expr PLUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_PLUS); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_PLUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 213: /* expr ::= expr MINUS expr */ case 216: /* expr ::= expr MINUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_MINUS); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_MINUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 214: /* expr ::= expr STAR expr */ case 217: /* expr ::= expr STAR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_STAR); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_STAR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 215: /* expr ::= expr SLASH expr */ case 218: /* expr ::= expr SLASH expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_DIVIDE);} {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_DIVIDE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 216: /* expr ::= expr REM expr */ case 219: /* expr ::= expr REM expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_REM); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_REM); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 217: /* expr ::= expr LIKE expr */ case 220: /* expr ::= expr LIKE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LIKE); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-2].minor.yy420, yymsp[0].minor.yy420, TK_LIKE); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy420 = yylhsminor.yy420;
break; break;
case 218: /* expr ::= expr IN LP exprlist RP */ case 221: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-4].minor.yy64, (tSQLExpr*)yymsp[-1].minor.yy290, TK_IN); } {yylhsminor.yy420 = tSQLExprCreate(yymsp[-4].minor.yy420, (tSQLExpr*)yymsp[-1].minor.yy478, TK_IN); }
yymsp[-4].minor.yy64 = yylhsminor.yy64; yymsp[-4].minor.yy420 = yylhsminor.yy420;
break; break;
case 219: /* exprlist ::= exprlist COMMA expritem */ case 222: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290,yymsp[0].minor.yy64,0);} {yylhsminor.yy478 = tSQLExprListAppend(yymsp[-2].minor.yy478,yymsp[0].minor.yy420,0);}
yymsp[-2].minor.yy290 = yylhsminor.yy290; yymsp[-2].minor.yy478 = yylhsminor.yy478;
break; break;
case 220: /* exprlist ::= expritem */ case 223: /* exprlist ::= expritem */
{yylhsminor.yy290 = tSQLExprListAppend(0,yymsp[0].minor.yy64,0);} {yylhsminor.yy478 = tSQLExprListAppend(0,yymsp[0].minor.yy420,0);}
yymsp[0].minor.yy290 = yylhsminor.yy290; yymsp[0].minor.yy478 = yylhsminor.yy478;
break; break;
case 221: /* expritem ::= expr */ case 224: /* expritem ::= expr */
{yylhsminor.yy64 = yymsp[0].minor.yy64;} {yylhsminor.yy420 = yymsp[0].minor.yy420;}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy420 = yylhsminor.yy420;
break; break;
case 223: /* cmd ::= RESET QUERY CACHE */ case 226: /* cmd ::= RESET QUERY CACHE */
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break; break;
case 224: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ case 227: /* 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;
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy165, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy131, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 225: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ case 228: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -2802,14 +2851,14 @@ static void yy_reduce( ...@@ -2802,14 +2851,14 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 226: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ case 229: /* 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;
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy165, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy131, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 227: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ case 230: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -2820,7 +2869,7 @@ static void yy_reduce( ...@@ -2820,7 +2869,7 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 228: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ case 231: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -2834,25 +2883,25 @@ static void yy_reduce( ...@@ -2834,25 +2883,25 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 229: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ case 232: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ {
yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
A = tVariantListAppend(A, &yymsp[0].minor.yy134, -1); A = tVariantListAppend(A, &yymsp[0].minor.yy516, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 230: /* cmd ::= KILL CONNECTION INTEGER */ case 233: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} {setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break; break;
case 231: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ case 234: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);} {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);}
break; break;
case 232: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ case 235: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);} {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);}
break; break;
default: default:
......
...@@ -31,7 +31,7 @@ extern "C" { ...@@ -31,7 +31,7 @@ extern "C" {
typedef struct SStrToken { typedef struct SStrToken {
uint32_t n; uint32_t n;
uint32_t type; uint32_t type;
char * z; char *z;
} SStrToken; } SStrToken;
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册