提交 c522a4f0 编写于 作者: X xywang

[TS-1318]<fix>: used merge sort to sort vgId and updated test cases

上级 ecfb830c
......@@ -936,6 +936,96 @@ static void setTidTagType(SJoinSupporter* p, uint8_t type) {
}
}
static int32_t tidTagsMerge(SArray *arr, int32_t start, int32_t mid, int32_t end, const int32_t tagSize)
{
char *pTmp, *pRes = NULL;
char *result = NULL;
STidTags *pi, *pj, *p;
int32_t k = 0;
int32_t i = start;
int32_t j = mid + 1;
if (end - start > 0) {
result = calloc(1, (end - start + 1) * tagSize);
if (result == NULL) {
tscError("failed to allocate memory for tidTagsMerge");
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
}
pRes = result;
while (i <= mid && j <= end) {
pi = taosArrayGet(arr, i);
pj = taosArrayGet(arr, j);
if (pi->vgId <= pj->vgId) {
p = taosArrayGet(arr, i++);
memcpy(pRes, p, tagSize);
} else {
p = taosArrayGet(arr, j++);
memcpy(pRes, p, tagSize);
}
k++;
pRes += tagSize;
}
if (i == mid + 1) {
while(j <= end) {
p = taosArrayGet(arr, j++);
memcpy(pRes, p, tagSize);
k++;
pRes += tagSize;
}
}
if (j == end + 1) {
while (i <= mid) {
p = taosArrayGet(arr, i++);
memcpy(pRes, p, tagSize);
k++;
pRes += tagSize;
}
}
for (i = start, j = 0, pTmp = result; j < k; i++, j++, pTmp += tagSize) {
p = (STidTags *) taosArrayGet(arr, i);
memcpy(p, pTmp, tagSize);
}
if (result) {
tfree(result);
}
return TSDB_CODE_SUCCESS;
}
static int32_t tidTagsMergeSort(SArray *arr, int32_t start, int32_t end, const int32_t tagSize)
{
int32_t ret;
int32_t mid;
if (start >= end) {
return TSDB_CODE_SUCCESS;
}
mid = (start + end) / 2;
ret = tidTagsMergeSort(arr, start, mid, tagSize);
if (ret != TSDB_CODE_SUCCESS) {
return ret;
}
ret = tidTagsMergeSort(arr, mid + 1, end, tagSize);
if (ret != TSDB_CODE_SUCCESS) {
return ret;
}
return tidTagsMerge(arr, start, mid, end, tagSize);
}
static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pParentSql, SArray* resList) {
int16_t joinNum = pParentSql->subState.numOfSub;
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
......@@ -1125,7 +1215,10 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
// sort according to the tag value
size_t num = taosArrayGetSize(ctxlist[i].res);
qsort((ctxlist[i].res)->pData, num, size, tidTagsCompar);
int32_t ret = tidTagsMergeSort(ctxlist[i].res, 0, num - 1, size);
if (ret != TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
taosArrayPush(resList, &ctxlist[i].res);
......
......@@ -83,8 +83,8 @@ class TDTestCase:
tdSql.checkData(3, 0, "2021-12-24 01:31:31")
tdSql.checkData(0, 1, 1)
tdSql.checkData(1, 1, 2)
tdSql.checkData(2, 1, 19)
tdSql.checkData(3, 1, 9)
tdSql.checkData(2, 1, 9)
tdSql.checkData(3, 1, 19)
tdSql.query('select ts,unique(voltage),ts,groupid,location,tbname from unique')
tdSql.checkRows(4)
......@@ -106,19 +106,19 @@ class TDTestCase:
tdSql.checkData(2, 0, "2021-12-24 01:31:31")
tdSql.checkData(2, 1, "2021-12-24 01:31:31")
tdSql.checkData(2, 2, 19)
tdSql.checkData(2, 2, 9)
tdSql.checkData(2, 3, "2021-12-24 01:31:31")
tdSql.checkData(2, 4, 2)
tdSql.checkData(2, 5, "Beijing.haidian")
tdSql.checkData(2, 6, "d002")
tdSql.checkData(2, 4, 3)
tdSql.checkData(2, 5, "Beijing.Tongzhou")
tdSql.checkData(2, 6, "d003")
tdSql.checkData(3, 0, "2021-12-24 01:31:31")
tdSql.checkData(3, 1, "2021-12-24 01:31:31")
tdSql.checkData(3, 2, 9)
tdSql.checkData(3, 2, 19)
tdSql.checkData(3, 3, "2021-12-24 01:31:31")
tdSql.checkData(3, 4, 3)
tdSql.checkData(3, 5, "Beijing.Tongzhou")
tdSql.checkData(3, 6, "d003")
tdSql.checkData(3, 4, 2)
tdSql.checkData(3, 5, "Beijing.haidian")
tdSql.checkData(3, 6, "d002")
tdSql.execute('insert into D004 values("2021-10-15 00:00:01", 10, 2) ("2021-12-24 00:21:31", 5, 2) ("2021-12-25 01:31:31", 9, 4)')
......@@ -151,9 +151,9 @@ class TDTestCase:
tdSql.query('select ts,unique(voltage) from unique group by ts')
tdSql.checkRows(9)
tdSql.checkData(1, 2, 1)
tdSql.checkData(4, 2, 1)
tdSql.checkData(4, 2, 2)
tdSql.checkData(8, 2, 1)
tdSql.checkData(6, 2, 9)
tdSql.checkData(6, 2, 19)
tdSql.checkData(7, 2, 9)
#group by tag,column
tdSql.query('select ts,unique(voltage) from unique group by location,num')
......@@ -165,13 +165,13 @@ class TDTestCase:
tdSql.query('select unique(voltage) from unique order by ts desc')
tdSql.checkRows(6)
tdSql.checkData(0, 0, "2021-12-24 01:31:31")
tdSql.checkData(0, 1, 9)
tdSql.checkData(0, 1, 19)
tdSql.checkData(5, 0, "2021-10-15 00:00:01")
tdSql.checkData(5, 1, 10)
tdSql.query('select unique(voltage) from unique order by ts')
tdSql.checkRows(6)
tdSql.checkData(5, 0, "2021-12-24 01:31:31")
tdSql.checkData(5, 1, 9)
tdSql.checkData(5, 1, 19)
tdSql.checkData(0, 0, "2021-10-15 00:00:01")
tdSql.checkData(0, 1, 10)
#order by column [desc]
......@@ -216,7 +216,7 @@ class TDTestCase:
tdSql.checkData(6, 0, "2021-12-25 01:31:31")
tdSql.checkData(6, 1, 9)
tdSql.checkData(0, 0, "2021-12-24 01:31:31")
tdSql.checkData(0, 1, 9)
tdSql.checkData(0, 1, 19)
# error
tdSql.error("select unique(ts) from unique")
......@@ -246,7 +246,7 @@ class TDTestCase:
tdSql.query('select unique(voltage) from unique where voltage > 2 limit 2 offset 1')
tdSql.checkRows(2)
tdSql.checkData(0, 1, 5)
tdSql.checkData(1, 1, 19)
tdSql.checkData(1, 1, 9)
#having
tdSql.query('select unique(voltage) from unique group by num having unique(voltage)>5')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册