[td-10564] Fix bug in parse sql.
This commit is contained in:
parent
bdcaeff12b
commit
a7058d818a
|
@ -30,7 +30,6 @@
|
||||||
#include "tmsgtype.h"
|
#include "tmsgtype.h"
|
||||||
#include "ttoken.h"
|
#include "ttoken.h"
|
||||||
#include "ttokendef.h"
|
#include "ttokendef.h"
|
||||||
//#include "tutil.h"
|
|
||||||
#include "tvariant.h"
|
#include "tvariant.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,10 +783,8 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
|
||||||
|
|
||||||
cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
|
||||||
X.n += F.n;
|
X.n += F.n;
|
||||||
|
|
||||||
toTSDBType(A.type);
|
toTSDBType(A.type);
|
||||||
SArray* K = tListItemAppendToken(NULL, &A, -1);
|
SArray* K = tListItemAppendToken(NULL, &A, -1);
|
||||||
|
|
||||||
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
|
||||||
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2017,12 +2017,18 @@ int32_t extractFunctionParameterInfo(SQueryStmtInfo* pQueryInfo, int32_t tokenId
|
||||||
static int32_t checkForkParam(tSqlExpr* pSqlExpr, size_t k, SMsgBuf* pMsgBuf) {
|
static int32_t checkForkParam(tSqlExpr* pSqlExpr, size_t k, SMsgBuf* pMsgBuf) {
|
||||||
const char* msg1 = "invalid parameters";
|
const char* msg1 = "invalid parameters";
|
||||||
|
|
||||||
|
SArray* pParamList = pSqlExpr->Expr.paramList;
|
||||||
|
|
||||||
if (k == 0) {
|
if (k == 0) {
|
||||||
if (pSqlExpr->Expr.paramList != NULL && taosArrayGetSize(pSqlExpr->Expr.paramList) != 0) {
|
if (pParamList != NULL && taosArrayGetSize(pParamList) != 0) {
|
||||||
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
||||||
}
|
}
|
||||||
|
} else if (k == 1) {
|
||||||
|
if (!(pParamList == NULL || taosArrayGetSize(pParamList) == k)) {
|
||||||
|
return buildInvalidOperationMsg(pMsgBuf, msg1);;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (pSqlExpr->Expr.paramList == NULL || taosArrayGetSize(pSqlExpr->Expr.paramList) != k) {
|
if (pParamList != NULL && taosArrayGetSize(pParamList) != k) {
|
||||||
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
return buildInvalidOperationMsg(pMsgBuf, msg1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,6 +408,8 @@ TEST(testCase, function_Test10) {
|
||||||
|
|
||||||
sqlCheck("select concat(concat(a,b), concat(a,b)) from `t.1abc`", true);
|
sqlCheck("select concat(concat(a,b), concat(a,b)) from `t.1abc`", true);
|
||||||
sqlCheck("select length(length(length(a))) from `t.1abc`", true);
|
sqlCheck("select length(length(length(a))) from `t.1abc`", true);
|
||||||
|
sqlCheck("select count() from `t.1abc`", false);
|
||||||
|
sqlCheck("select block_dist() from `t.1abc`", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(testCase, function_Test6) {
|
TEST(testCase, function_Test6) {
|
||||||
|
|
|
@ -64,6 +64,44 @@ void setTableMetaInfo(SQueryStmtInfo* pQueryInfo, SMetaReq *req) {
|
||||||
setSchema(&pSchema[2], TSDB_DATA_TYPE_DOUBLE, 8, "b", 2);
|
setSchema(&pSchema[2], TSDB_DATA_TYPE_DOUBLE, 8, "b", 2);
|
||||||
setSchema(&pSchema[3], TSDB_DATA_TYPE_DOUBLE, 8, "col", 3);
|
setSchema(&pSchema[3], TSDB_DATA_TYPE_DOUBLE, 8, "col", 3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void generateLogicplan(const char* sql) {
|
||||||
|
SSqlInfo info1 = doGenerateAST(sql);
|
||||||
|
ASSERT_EQ(info1.valid, true);
|
||||||
|
|
||||||
|
char msg[128] = {0};
|
||||||
|
SMsgBuf buf;
|
||||||
|
buf.len = 128;
|
||||||
|
buf.buf = msg;
|
||||||
|
|
||||||
|
SSqlNode* pNode = (SSqlNode*) taosArrayGetP(((SArray*)info1.list), 0);
|
||||||
|
int32_t code = evaluateSqlNode(pNode, TSDB_TIME_PRECISION_NANO, &buf);
|
||||||
|
ASSERT_EQ(code, 0);
|
||||||
|
|
||||||
|
SMetaReq req = {0};
|
||||||
|
int32_t ret = qParserExtractRequestedMetaInfo(&info1, &req, msg, 128);
|
||||||
|
ASSERT_EQ(ret, 0);
|
||||||
|
ASSERT_EQ(taosArrayGetSize(req.pTableName), 1);
|
||||||
|
|
||||||
|
SQueryStmtInfo* pQueryInfo = createQueryInfo();
|
||||||
|
setTableMetaInfo(pQueryInfo, &req);
|
||||||
|
|
||||||
|
SSqlNode* pSqlNode = (SSqlNode*)taosArrayGetP(info1.list, 0);
|
||||||
|
ret = validateSqlNode(pSqlNode, pQueryInfo, &buf);
|
||||||
|
ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
|
struct SQueryPlanNode* n = nullptr;
|
||||||
|
code = qCreateQueryPlan(pQueryInfo, &n);
|
||||||
|
|
||||||
|
char* str = NULL;
|
||||||
|
qQueryPlanToString(n, &str);
|
||||||
|
printf("%s\n", str);
|
||||||
|
|
||||||
|
destroyQueryInfo(pQueryInfo);
|
||||||
|
qParserClearupMetaRequestInfo(&req);
|
||||||
|
destroySqlInfo(&info1);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,3 +162,10 @@ TEST(testCase, planner_test) {
|
||||||
qParserClearupMetaRequestInfo(&req);
|
qParserClearupMetaRequestInfo(&req);
|
||||||
destroySqlInfo(&info1);
|
destroySqlInfo(&info1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(testCase, displayPlan) {
|
||||||
|
generateLogicplan("select count(*) from `t.1abc`");
|
||||||
|
generateLogicplan("select count(*) from `t.1abc` group by a");
|
||||||
|
generateLogicplan("select count(*) from `t.1abc` interval(10s, 5s) sliding(7s)");
|
||||||
|
generateLogicplan("select count(*),sum(a),avg(b),min(a+b) from `t.1abc`");
|
||||||
|
}
|
Loading…
Reference in New Issue