bugfix
This commit is contained in:
parent
b4571036b6
commit
ad11ba9365
|
@ -851,9 +851,7 @@ static int32_t jsonToPhysiJoinNode(const SJson* pJson, void* pObj) {
|
||||||
|
|
||||||
int32_t code = jsonToPhysicPlanNode(pJson, pObj);
|
int32_t code = jsonToPhysicPlanNode(pJson, pObj);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
int32_t val;
|
code = tjsonGetNumberValue(pJson, jkJoinPhysiPlanJoinType, pNode->joinType);
|
||||||
code = tjsonGetIntValue(pJson, jkJoinPhysiPlanJoinType, &val);
|
|
||||||
pNode->joinType = val;
|
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = jsonToNodeObject(pJson, jkJoinPhysiPlanOnConditions, &pNode->pOnConditions);
|
code = jsonToNodeObject(pJson, jkJoinPhysiPlanOnConditions, &pNode->pOnConditions);
|
||||||
|
@ -1216,9 +1214,7 @@ static int32_t jsonToSubplan(const SJson* pJson, void* pObj) {
|
||||||
|
|
||||||
int32_t code = tjsonToObject(pJson, jkSubplanId, jsonToSubplanId, &pNode->id);
|
int32_t code = tjsonToObject(pJson, jkSubplanId, jsonToSubplanId, &pNode->id);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
int32_t val;
|
code = tjsonGetNumberValue(pJson, jkSubplanType, pNode->subplanType);
|
||||||
code = tjsonGetIntValue(pJson, jkSubplanType, &val);
|
|
||||||
pNode->subplanType = val;
|
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = tjsonGetIntValue(pJson, jkSubplanMsgType, &pNode->msgType);
|
code = tjsonGetIntValue(pJson, jkSubplanMsgType, &pNode->msgType);
|
||||||
|
@ -1408,9 +1404,7 @@ static int32_t jsonToColumnNode(const SJson* pJson, void* pObj) {
|
||||||
code = tjsonGetSmallIntValue(pJson, jkColumnColId, &pNode->colId);
|
code = tjsonGetSmallIntValue(pJson, jkColumnColId, &pNode->colId);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
int32_t tmp;
|
code = tjsonGetNumberValue(pJson, jkColumnColType, pNode->colType);
|
||||||
code = tjsonGetIntValue(pJson, jkColumnColType, &tmp);
|
|
||||||
pNode->colType = tmp;
|
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = tjsonGetStringValue(pJson, jkColumnDbName, pNode->dbName);
|
code = tjsonGetStringValue(pJson, jkColumnDbName, pNode->dbName);
|
||||||
|
@ -1598,9 +1592,7 @@ static int32_t jsonToOperatorNode(const SJson* pJson, void* pObj) {
|
||||||
|
|
||||||
int32_t code = jsonToExprNode(pJson, pObj);
|
int32_t code = jsonToExprNode(pJson, pObj);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
int32_t val;
|
code = tjsonGetNumberValue(pJson, jkOperatorType, pNode->opType);
|
||||||
code = tjsonGetIntValue(pJson, jkOperatorType, &val);
|
|
||||||
pNode->opType = val;
|
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = jsonToNodeObject(pJson, jkOperatorLeft, &pNode->pLeft);
|
code = jsonToNodeObject(pJson, jkOperatorLeft, &pNode->pLeft);
|
||||||
|
@ -1634,9 +1626,7 @@ static int32_t jsonToLogicConditionNode(const SJson* pJson, void* pObj) {
|
||||||
|
|
||||||
int32_t code = jsonToExprNode(pJson, pObj);
|
int32_t code = jsonToExprNode(pJson, pObj);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
int32_t val;
|
code = tjsonGetNumberValue(pJson, jkLogicCondType, pNode->condType);
|
||||||
code = tjsonGetIntValue(pJson, jkLogicCondType, &val);
|
|
||||||
pNode->condType = val;
|
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = jsonToNodeList(pJson, jkLogicCondParameters, &pNode->pParameterList);
|
code = jsonToNodeList(pJson, jkLogicCondParameters, &pNode->pParameterList);
|
||||||
|
@ -1895,6 +1885,7 @@ static const char* jkIntervalWindowInterval = "Interval";
|
||||||
static const char* jkIntervalWindowOffset = "Offset";
|
static const char* jkIntervalWindowOffset = "Offset";
|
||||||
static const char* jkIntervalWindowSliding = "Sliding";
|
static const char* jkIntervalWindowSliding = "Sliding";
|
||||||
static const char* jkIntervalWindowFill = "Fill";
|
static const char* jkIntervalWindowFill = "Fill";
|
||||||
|
static const char* jkIntervalWindowTsPk = "TsPk";
|
||||||
|
|
||||||
static int32_t intervalWindowNodeToJson(const void* pObj, SJson* pJson) {
|
static int32_t intervalWindowNodeToJson(const void* pObj, SJson* pJson) {
|
||||||
const SIntervalWindowNode* pNode = (const SIntervalWindowNode*)pObj;
|
const SIntervalWindowNode* pNode = (const SIntervalWindowNode*)pObj;
|
||||||
|
@ -1909,6 +1900,9 @@ static int32_t intervalWindowNodeToJson(const void* pObj, SJson* pJson) {
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = tjsonAddObject(pJson, jkIntervalWindowFill, nodeToJson, pNode->pFill);
|
code = tjsonAddObject(pJson, jkIntervalWindowFill, nodeToJson, pNode->pFill);
|
||||||
}
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = tjsonAddObject(pJson, jkIntervalWindowTsPk, nodeToJson, pNode->pCol);
|
||||||
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -1926,6 +1920,9 @@ static int32_t jsonToIntervalWindowNode(const SJson* pJson, void* pObj) {
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = jsonToNodeObject(pJson, jkIntervalWindowFill, &pNode->pFill);
|
code = jsonToNodeObject(pJson, jkIntervalWindowFill, &pNode->pFill);
|
||||||
}
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = jsonToNodeObject(pJson, jkIntervalWindowTsPk, &pNode->pCol);
|
||||||
|
}
|
||||||
|
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@ -2436,9 +2433,7 @@ static int32_t nodeToJson(const void* pObj, SJson* pJson) {
|
||||||
static int32_t jsonToNode(const SJson* pJson, void* pObj) {
|
static int32_t jsonToNode(const SJson* pJson, void* pObj) {
|
||||||
SNode* pNode = (SNode*)pObj;
|
SNode* pNode = (SNode*)pObj;
|
||||||
|
|
||||||
int32_t val = 0;
|
int32_t code = tjsonGetNumberValue(pJson, jkNodeType, pNode->type);
|
||||||
int32_t code = tjsonGetIntValue(pJson, jkNodeType, &val);
|
|
||||||
pNode->type = val;
|
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = tjsonToObject(pJson, nodesNodeName(pNode->type), jsonToSpecificNode, pNode);
|
code = tjsonToObject(pJson, nodesNodeName(pNode->type), jsonToSpecificNode, pNode);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
|
|
|
@ -1452,6 +1452,7 @@ static int32_t getSmaIndexBuildAst(STranslateContext* pCxt, SCreateIndexStmt* pS
|
||||||
if (NULL == pSelect) {
|
if (NULL == pSelect) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
sprintf(pSelect->stmtName, "%p", pSelect);
|
||||||
|
|
||||||
SRealTableNode* pTable = nodesMakeNode(QUERY_NODE_REAL_TABLE);
|
SRealTableNode* pTable = nodesMakeNode(QUERY_NODE_REAL_TABLE);
|
||||||
if (NULL == pTable) {
|
if (NULL == pTable) {
|
||||||
|
@ -1467,6 +1468,10 @@ static int32_t getSmaIndexBuildAst(STranslateContext* pCxt, SCreateIndexStmt* pS
|
||||||
nodesDestroyNode(pSelect);
|
nodesDestroyNode(pSelect);
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
SNode* pProject = NULL;
|
||||||
|
FOREACH(pProject, pSelect->pProjectionList) {
|
||||||
|
sprintf(((SExprNode*)pProject)->aliasName, "#sma_%p", pProject);
|
||||||
|
}
|
||||||
|
|
||||||
SIntervalWindowNode* pInterval = nodesMakeNode(QUERY_NODE_INTERVAL_WINDOW);
|
SIntervalWindowNode* pInterval = nodesMakeNode(QUERY_NODE_INTERVAL_WINDOW);
|
||||||
if (NULL == pInterval) {
|
if (NULL == pInterval) {
|
||||||
|
@ -1474,14 +1479,18 @@ static int32_t getSmaIndexBuildAst(STranslateContext* pCxt, SCreateIndexStmt* pS
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
pSelect->pWindow = (SNode*)pInterval;
|
pSelect->pWindow = (SNode*)pInterval;
|
||||||
|
pInterval->pCol = nodesMakeNode(QUERY_NODE_COLUMN);
|
||||||
pInterval->pInterval = nodesCloneNode(pStmt->pOptions->pInterval);
|
pInterval->pInterval = nodesCloneNode(pStmt->pOptions->pInterval);
|
||||||
pInterval->pOffset = nodesCloneNode(pStmt->pOptions->pOffset);
|
pInterval->pOffset = nodesCloneNode(pStmt->pOptions->pOffset);
|
||||||
pInterval->pSliding = nodesCloneNode(pStmt->pOptions->pSliding);
|
pInterval->pSliding = nodesCloneNode(pStmt->pOptions->pSliding);
|
||||||
if (NULL == pInterval->pInterval || (NULL != pStmt->pOptions->pOffset && NULL == pInterval->pOffset) ||
|
if (NULL == pInterval->pCol || NULL == pInterval->pInterval ||
|
||||||
|
(NULL != pStmt->pOptions->pOffset && NULL == pInterval->pOffset) ||
|
||||||
(NULL != pStmt->pOptions->pSliding && NULL == pInterval->pSliding)) {
|
(NULL != pStmt->pOptions->pSliding && NULL == pInterval->pSliding)) {
|
||||||
nodesDestroyNode(pSelect);
|
nodesDestroyNode(pSelect);
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
((SColumnNode*)pInterval->pCol)->colId = PRIMARYKEY_TIMESTAMP_COL_ID;
|
||||||
|
strcpy(((SColumnNode*)pInterval->pCol)->colName, PK_TS_COL_INTERNAL_NAME);
|
||||||
|
|
||||||
int32_t code = translateQuery(pCxt, (SNode*)pSelect);
|
int32_t code = translateQuery(pCxt, (SNode*)pSelect);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
|
|
@ -67,17 +67,12 @@ static EDealRes doRewriteExpr(SNode** pNode, void* pContext) {
|
||||||
return DEAL_RES_CONTINUE;
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct SNameExprCxt {
|
|
||||||
int32_t rewriteId;
|
|
||||||
} SNameExprCxt;
|
|
||||||
|
|
||||||
static EDealRes doNameExpr(SNode* pNode, void* pContext) {
|
static EDealRes doNameExpr(SNode* pNode, void* pContext) {
|
||||||
switch (nodeType(pNode)) {
|
switch (nodeType(pNode)) {
|
||||||
case QUERY_NODE_OPERATOR:
|
case QUERY_NODE_OPERATOR:
|
||||||
case QUERY_NODE_LOGIC_CONDITION:
|
case QUERY_NODE_LOGIC_CONDITION:
|
||||||
case QUERY_NODE_FUNCTION: {
|
case QUERY_NODE_FUNCTION: {
|
||||||
SNameExprCxt* pCxt = (SNameExprCxt*)pContext;
|
sprintf(((SExprNode*)pNode)->aliasName, "#expr_%p", pNode);
|
||||||
sprintf(((SExprNode*)pNode)->aliasName, "#expr_%d", pCxt->rewriteId++);
|
|
||||||
return DEAL_RES_IGNORE_CHILD;
|
return DEAL_RES_IGNORE_CHILD;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -88,9 +83,7 @@ static EDealRes doNameExpr(SNode* pNode, void* pContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t rewriteExpr(SNodeList* pExprs, SSelectStmt* pSelect, ESqlClause clause) {
|
static int32_t rewriteExpr(SNodeList* pExprs, SSelectStmt* pSelect, ESqlClause clause) {
|
||||||
static int32_t rewriteId = 1; // todo modify
|
nodesWalkList(pExprs, doNameExpr, NULL);
|
||||||
SNameExprCxt nameCxt = { .rewriteId = rewriteId };
|
|
||||||
nodesWalkList(pExprs, doNameExpr, &nameCxt);
|
|
||||||
SRewriteExprCxt cxt = { .errCode = TSDB_CODE_SUCCESS, .pExprs = pExprs };
|
SRewriteExprCxt cxt = { .errCode = TSDB_CODE_SUCCESS, .pExprs = pExprs };
|
||||||
nodesRewriteSelectStmt(pSelect, clause, doRewriteExpr, &cxt);
|
nodesRewriteSelectStmt(pSelect, clause, doRewriteExpr, &cxt);
|
||||||
return cxt.errCode;
|
return cxt.errCode;
|
||||||
|
|
Loading…
Reference in New Issue