enh: add projection plan
This commit is contained in:
parent
1b6bb5e4b9
commit
bde18abb60
|
@ -766,19 +766,22 @@ void qptMakeOperatorNode(SNode** ppNode) {
|
||||||
|
|
||||||
void qptMakeColumnNode(SNode** ppNode) {
|
void qptMakeColumnNode(SNode** ppNode) {
|
||||||
SColumnNode* pCol = NULL;
|
SColumnNode* pCol = NULL;
|
||||||
if (qptCtx.param.correctExpected) {
|
nodesMakeNode(QUERY_NODE_COLUMN, (SNode**)&pCol);
|
||||||
|
SSlotDescNode* pSlot = NULL;
|
||||||
|
|
||||||
|
if (QPT_CORRECT_HIGH_PROB() && qptCtx.makeCtx.pInputDataBlockDesc && qptCtx.makeCtx.pInputDataBlockDesc->pSlots) {
|
||||||
SNodeList* pColList = qptCtx.makeCtx.pInputDataBlockDesc->pSlots;
|
SNodeList* pColList = qptCtx.makeCtx.pInputDataBlockDesc->pSlots;
|
||||||
int32_t colIdx = taosRand() % pColList->length;
|
int32_t colIdx = taosRand() % pColList->length;
|
||||||
SNode* pNode = nodesListGetNode(pColList, colIdx);
|
SNode* pNode = nodesListGetNode(pColList, colIdx);
|
||||||
assert(nodeType(pNode) == QUERY_NODE_SLOT_DESC);
|
if (pNode && nodeType(pNode) == QUERY_NODE_SLOT_DESC) {
|
||||||
|
pSlot = (SSlotDescNode*)pNode;
|
||||||
SSlotDescNode* pSlot = (SSlotDescNode*)pNode;
|
|
||||||
nodesMakeNode(QUERY_NODE_COLUMN, (SNode**)&pCol);
|
|
||||||
pCol->node.resType = pSlot->dataType;
|
pCol->node.resType = pSlot->dataType;
|
||||||
pCol->dataBlockId = qptCtx.makeCtx.pInputDataBlockDesc->dataBlockId;
|
pCol->dataBlockId = qptCtx.makeCtx.pInputDataBlockDesc->dataBlockId;
|
||||||
pCol->slotId = pSlot->slotId;
|
pCol->slotId = pSlot->slotId;
|
||||||
} else {
|
}
|
||||||
nodesMakeNode(QUERY_NODE_COLUMN, (SNode**)&pCol);
|
}
|
||||||
|
|
||||||
|
if (NULL == pSlot) {
|
||||||
qptGetRandValue(&pCol->node.resType.type, &pCol->node.resType.bytes, NULL);
|
qptGetRandValue(&pCol->node.resType.type, &pCol->node.resType.bytes, NULL);
|
||||||
pCol->dataBlockId = taosRand();
|
pCol->dataBlockId = taosRand();
|
||||||
pCol->slotId = taosRand();
|
pCol->slotId = taosRand();
|
||||||
|
@ -1132,7 +1135,7 @@ SPhysiNode* qptCreatePhysiNode(int32_t nodeType) {
|
||||||
void qptPostCreatePhysiNode(SPhysiNode* pPhysiNode) {
|
void qptPostCreatePhysiNode(SPhysiNode* pPhysiNode) {
|
||||||
pPhysiNode->outputTsOrder = qptGetCurrTsOrder();
|
pPhysiNode->outputTsOrder = qptGetCurrTsOrder();
|
||||||
|
|
||||||
if (taosRand() % 2) {
|
if (QPT_RAND_BOOL_V) {
|
||||||
pPhysiNode->pConditions = qptMakeConditionNode(false);
|
pPhysiNode->pConditions = qptMakeConditionNode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1302,6 +1305,34 @@ SNode* qptCreateTagScanPhysiNode(int32_t nodeType) {
|
||||||
return (SNode*)pPhysiNode;
|
return (SNode*)pPhysiNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qptMakeExprList(SNodeList** ppList) {
|
||||||
|
int32_t exprNum = taosRand() % QPT_MAX_COLUMN_NUM + (QPT_CORRECT_HIGH_PROB() ? 1 : 0);
|
||||||
|
for (int32_t i = 0; i < exprNum; ++i) {
|
||||||
|
SNode* pNode = NULL;
|
||||||
|
qptResetMakeNodeCtx(qptCtx.buildCtx.pChild ? qptCtx.buildCtx.pChild->pOutputDataBlockDesc : NULL, false);
|
||||||
|
qptMakeExprNode(&pNode);
|
||||||
|
qptNodesListMakeStrictAppend(ppList, pNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SNode* qptCreateProjectPhysiNode(int32_t nodeType) {
|
||||||
|
SPhysiNode* pPhysiNode = qptCreatePhysiNode(nodeType);
|
||||||
|
|
||||||
|
SProjectPhysiNode* pProject = (SProjectPhysiNode*)pPhysiNode;
|
||||||
|
|
||||||
|
pProject->mergeDataBlock = QPT_RAND_BOOL_V;
|
||||||
|
pProject->ignoreGroupId = QPT_RAND_BOOL_V;
|
||||||
|
pProject->inputIgnoreGroup = QPT_RAND_BOOL_V;
|
||||||
|
|
||||||
|
qptMakeExprList(&pProject->pProjections);
|
||||||
|
|
||||||
|
qptAddDataBlockSlots(pProject->pProjections, pProject->node.pOutputDataBlockDesc);
|
||||||
|
|
||||||
|
qptPostCreatePhysiNode(pPhysiNode);
|
||||||
|
|
||||||
|
return (SNode*)pPhysiNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SNode* qptCreateSortMergeJoinPhysiNode(int32_t nodeType) {
|
SNode* qptCreateSortMergeJoinPhysiNode(int32_t nodeType) {
|
||||||
SPhysiNode* pPhysiNode = qptCreatePhysiNode(nodeType);
|
SPhysiNode* pPhysiNode = qptCreatePhysiNode(nodeType);
|
||||||
|
@ -1387,6 +1418,7 @@ SNode* qptCreatePhysicalPlanNode(int32_t nodeType) {
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
|
case QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN:
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
|
case QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN:
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_PROJECT:
|
case QUERY_NODE_PHYSICAL_PLAN_PROJECT:
|
||||||
|
return (SNode*)qptCreateProjectPhysiNode(nodeType);
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN:
|
case QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN:
|
||||||
return (SNode*)qptCreateSortMergeJoinPhysiNode(nodeType);
|
return (SNode*)qptCreateSortMergeJoinPhysiNode(nodeType);
|
||||||
case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG:
|
case QUERY_NODE_PHYSICAL_PLAN_HASH_AGG:
|
||||||
|
|
Loading…
Reference in New Issue