fix: json tag plan ut
This commit is contained in:
parent
1674e41dee
commit
730a256228
|
@ -157,6 +157,28 @@ void generateTestST1(MockCatalogService* mcs) {
|
||||||
mcs->createSubTable("test", "st1", "st1s3", 1);
|
mcs->createSubTable("test", "st1", "st1s3", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Super Table: st2
|
||||||
|
* Field | Type | DataType | Bytes |
|
||||||
|
* ==========================================================================
|
||||||
|
* ts | column | TIMESTAMP | 8 |
|
||||||
|
* c1 | column | INT | 4 |
|
||||||
|
* c2 | column | VARCHAR | 20 |
|
||||||
|
* jtag | tag | json | -- |
|
||||||
|
* Child Table: st2s1, st2s2
|
||||||
|
*/
|
||||||
|
void generateTestST2(MockCatalogService* mcs) {
|
||||||
|
ITableBuilder& builder = mcs->createTableBuilder("test", "st2", TSDB_SUPER_TABLE, 3, 1)
|
||||||
|
.setPrecision(TSDB_TIME_PRECISION_MILLI)
|
||||||
|
.addColumn("ts", TSDB_DATA_TYPE_TIMESTAMP)
|
||||||
|
.addColumn("c1", TSDB_DATA_TYPE_INT)
|
||||||
|
.addColumn("c2", TSDB_DATA_TYPE_BINARY, 20)
|
||||||
|
.addTag("jtag", TSDB_DATA_TYPE_JSON);
|
||||||
|
builder.done();
|
||||||
|
mcs->createSubTable("test", "st2", "st2s1", 1);
|
||||||
|
mcs->createSubTable("test", "st2", "st2s2", 2);
|
||||||
|
}
|
||||||
|
|
||||||
void generateFunctions(MockCatalogService* mcs) {
|
void generateFunctions(MockCatalogService* mcs) {
|
||||||
mcs->createFunction("udf1", TSDB_FUNC_TYPE_SCALAR, TSDB_DATA_TYPE_INT, tDataTypes[TSDB_DATA_TYPE_INT].bytes, 0);
|
mcs->createFunction("udf1", TSDB_FUNC_TYPE_SCALAR, TSDB_DATA_TYPE_INT, tDataTypes[TSDB_DATA_TYPE_INT].bytes, 0);
|
||||||
mcs->createFunction("udf2", TSDB_FUNC_TYPE_AGGREGATE, TSDB_DATA_TYPE_DOUBLE, tDataTypes[TSDB_DATA_TYPE_DOUBLE].bytes,
|
mcs->createFunction("udf2", TSDB_FUNC_TYPE_AGGREGATE, TSDB_DATA_TYPE_DOUBLE, tDataTypes[TSDB_DATA_TYPE_DOUBLE].bytes,
|
||||||
|
@ -283,6 +305,7 @@ void generateMetaData() {
|
||||||
generatePerformanceSchema(g_mockCatalogService.get());
|
generatePerformanceSchema(g_mockCatalogService.get());
|
||||||
generateTestT1(g_mockCatalogService.get());
|
generateTestT1(g_mockCatalogService.get());
|
||||||
generateTestST1(g_mockCatalogService.get());
|
generateTestST1(g_mockCatalogService.get());
|
||||||
|
generateTestST2(g_mockCatalogService.get());
|
||||||
generateFunctions(g_mockCatalogService.get());
|
generateFunctions(g_mockCatalogService.get());
|
||||||
g_mockCatalogService->showTables();
|
g_mockCatalogService->showTables();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,14 +56,14 @@ static int32_t getSlotKey(SNode* pNode, const char* pStmtName, char* pKey) {
|
||||||
return sprintf(pKey, "%s", ((SExprNode*)pNode)->aliasName);
|
return sprintf(pKey, "%s", ((SExprNode*)pNode)->aliasName);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SNode* createSlotDesc(SPhysiPlanContext* pCxt, const SNode* pNode, int16_t slotId, bool output) {
|
static SNode* createSlotDesc(SPhysiPlanContext* pCxt, const SNode* pNode, int16_t slotId, bool output, bool reserve) {
|
||||||
SSlotDescNode* pSlot = (SSlotDescNode*)nodesMakeNode(QUERY_NODE_SLOT_DESC);
|
SSlotDescNode* pSlot = (SSlotDescNode*)nodesMakeNode(QUERY_NODE_SLOT_DESC);
|
||||||
if (NULL == pSlot) {
|
if (NULL == pSlot) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
pSlot->slotId = slotId;
|
pSlot->slotId = slotId;
|
||||||
pSlot->dataType = ((SExprNode*)pNode)->resType;
|
pSlot->dataType = ((SExprNode*)pNode)->resType;
|
||||||
pSlot->reserve = false;
|
pSlot->reserve = reserve;
|
||||||
pSlot->output = output;
|
pSlot->output = output;
|
||||||
return (SNode*)pSlot;
|
return (SNode*)pSlot;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ static int32_t buildDataBlockSlots(SPhysiPlanContext* pCxt, SNodeList* pList, SD
|
||||||
int16_t slotId = 0;
|
int16_t slotId = 0;
|
||||||
SNode* pNode = NULL;
|
SNode* pNode = NULL;
|
||||||
FOREACH(pNode, pList) {
|
FOREACH(pNode, pList) {
|
||||||
code = nodesListStrictAppend(pDataBlockDesc->pSlots, createSlotDesc(pCxt, pNode, slotId, true));
|
code = nodesListStrictAppend(pDataBlockDesc->pSlots, createSlotDesc(pCxt, pNode, slotId, true, false));
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = putSlotToHash(pDataBlockDesc->dataBlockId, slotId, pNode, pHash);
|
code = putSlotToHash(pDataBlockDesc->dataBlockId, slotId, pNode, pHash);
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ static int16_t getUnsetSlotId(const SArray* pSlotIdsInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t addDataBlockSlotsImpl(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc,
|
static int32_t addDataBlockSlotsImpl(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc,
|
||||||
const char* pStmtName, bool output) {
|
const char* pStmtName, bool output, bool reserve) {
|
||||||
if (NULL == pList) {
|
if (NULL == pList) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ static int32_t addDataBlockSlotsImpl(SPhysiPlanContext* pCxt, SNodeList* pList,
|
||||||
int32_t len = getSlotKey(pExpr, pStmtName, name);
|
int32_t len = getSlotKey(pExpr, pStmtName, name);
|
||||||
SSlotIndex* pIndex = taosHashGet(pHash, name, len);
|
SSlotIndex* pIndex = taosHashGet(pHash, name, len);
|
||||||
if (NULL == pIndex) {
|
if (NULL == pIndex) {
|
||||||
code = nodesListStrictAppend(pDataBlockDesc->pSlots, createSlotDesc(pCxt, pExpr, nextSlotId, output));
|
code = nodesListStrictAppend(pDataBlockDesc->pSlots, createSlotDesc(pCxt, pExpr, nextSlotId, output, reserve));
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = putSlotToHashImpl(pDataBlockDesc->dataBlockId, nextSlotId, name, len, pHash);
|
code = putSlotToHashImpl(pDataBlockDesc->dataBlockId, nextSlotId, name, len, pHash);
|
||||||
}
|
}
|
||||||
|
@ -226,7 +226,7 @@ static int32_t addDataBlockSlotsImpl(SPhysiPlanContext* pCxt, SNodeList* pList,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t addDataBlockSlots(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc) {
|
static int32_t addDataBlockSlots(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc) {
|
||||||
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, NULL, false);
|
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, NULL, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t addDataBlockSlot(SPhysiPlanContext* pCxt, SNode** pNode, SDataBlockDescNode* pDataBlockDesc) {
|
static int32_t addDataBlockSlot(SPhysiPlanContext* pCxt, SNode** pNode, SDataBlockDescNode* pDataBlockDesc) {
|
||||||
|
@ -248,11 +248,11 @@ static int32_t addDataBlockSlot(SPhysiPlanContext* pCxt, SNode** pNode, SDataBlo
|
||||||
|
|
||||||
static int32_t addDataBlockSlotsForProject(SPhysiPlanContext* pCxt, const char* pStmtName, SNodeList* pList,
|
static int32_t addDataBlockSlotsForProject(SPhysiPlanContext* pCxt, const char* pStmtName, SNodeList* pList,
|
||||||
SDataBlockDescNode* pDataBlockDesc) {
|
SDataBlockDescNode* pDataBlockDesc) {
|
||||||
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, pStmtName, true);
|
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, pStmtName, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t pushdownDataBlockSlots(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc) {
|
static int32_t pushdownDataBlockSlots(SPhysiPlanContext* pCxt, SNodeList* pList, SDataBlockDescNode* pDataBlockDesc) {
|
||||||
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, NULL, true);
|
return addDataBlockSlotsImpl(pCxt, pList, pDataBlockDesc, NULL, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct SSetSlotIdCxt {
|
typedef struct SSetSlotIdCxt {
|
||||||
|
@ -1117,7 +1117,7 @@ static int32_t createPartitionPhysiNode(SPhysiPlanContext* pCxt, SNodeList* pChi
|
||||||
if (TSDB_CODE_SUCCESS == code && NULL != pPrecalcExprs) {
|
if (TSDB_CODE_SUCCESS == code && NULL != pPrecalcExprs) {
|
||||||
code = setListSlotId(pCxt, pChildTupe->dataBlockId, -1, pPrecalcExprs, &pPart->pExprs);
|
code = setListSlotId(pCxt, pChildTupe->dataBlockId, -1, pPrecalcExprs, &pPart->pExprs);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = addDataBlockSlots(pCxt, pPart->pExprs, pChildTupe);
|
code = pushdownDataBlockSlots(pCxt, pPart->pExprs, pChildTupe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,10 @@ TEST_F(PlanPartitionByTest, basic) {
|
||||||
useDb("root", "test");
|
useDb("root", "test");
|
||||||
|
|
||||||
run("select * from t1 partition by c1");
|
run("select * from t1 partition by c1");
|
||||||
|
|
||||||
|
run("select ts, c1 + 1 from st1 partition by c1 + 1");
|
||||||
|
|
||||||
|
run("select ts, jtag->'tag1' from st2 partition by jtag->'tag1'");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(PlanPartitionByTest, withAggFunc) {
|
TEST_F(PlanPartitionByTest, withAggFunc) {
|
||||||
|
|
Loading…
Reference in New Issue