提交 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) { ...@@ -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) { static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pParentSql, SArray* resList) {
int16_t joinNum = pParentSql->subState.numOfSub; int16_t joinNum = pParentSql->subState.numOfSub;
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
...@@ -1125,7 +1215,10 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar ...@@ -1125,7 +1215,10 @@ static int32_t getIntersectionOfTableTuple(SQueryInfo* pQueryInfo, SSqlObj* pPar
// sort according to the tag value // sort according to the tag value
size_t num = taosArrayGetSize(ctxlist[i].res); 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); taosArrayPush(resList, &ctxlist[i].res);
......
...@@ -83,8 +83,8 @@ class TDTestCase: ...@@ -83,8 +83,8 @@ class TDTestCase:
tdSql.checkData(3, 0, "2021-12-24 01:31:31") tdSql.checkData(3, 0, "2021-12-24 01:31:31")
tdSql.checkData(0, 1, 1) tdSql.checkData(0, 1, 1)
tdSql.checkData(1, 1, 2) tdSql.checkData(1, 1, 2)
tdSql.checkData(2, 1, 19) tdSql.checkData(2, 1, 9)
tdSql.checkData(3, 1, 9) tdSql.checkData(3, 1, 19)
tdSql.query('select ts,unique(voltage),ts,groupid,location,tbname from unique') tdSql.query('select ts,unique(voltage),ts,groupid,location,tbname from unique')
tdSql.checkRows(4) tdSql.checkRows(4)
...@@ -106,19 +106,19 @@ class TDTestCase: ...@@ -106,19 +106,19 @@ class TDTestCase:
tdSql.checkData(2, 0, "2021-12-24 01:31:31") tdSql.checkData(2, 0, "2021-12-24 01:31:31")
tdSql.checkData(2, 1, "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, 3, "2021-12-24 01:31:31")
tdSql.checkData(2, 4, 2) tdSql.checkData(2, 4, 3)
tdSql.checkData(2, 5, "Beijing.haidian") tdSql.checkData(2, 5, "Beijing.Tongzhou")
tdSql.checkData(2, 6, "d002") tdSql.checkData(2, 6, "d003")
tdSql.checkData(3, 0, "2021-12-24 01:31:31") tdSql.checkData(3, 0, "2021-12-24 01:31:31")
tdSql.checkData(3, 1, "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, 3, "2021-12-24 01:31:31")
tdSql.checkData(3, 4, 3) tdSql.checkData(3, 4, 2)
tdSql.checkData(3, 5, "Beijing.Tongzhou") tdSql.checkData(3, 5, "Beijing.haidian")
tdSql.checkData(3, 6, "d003") 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)') 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: ...@@ -151,9 +151,9 @@ class TDTestCase:
tdSql.query('select ts,unique(voltage) from unique group by ts') tdSql.query('select ts,unique(voltage) from unique group by ts')
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkData(1, 2, 1) tdSql.checkData(1, 2, 1)
tdSql.checkData(4, 2, 1) tdSql.checkData(4, 2, 2)
tdSql.checkData(8, 2, 1) tdSql.checkData(8, 2, 1)
tdSql.checkData(6, 2, 9) tdSql.checkData(6, 2, 19)
tdSql.checkData(7, 2, 9) tdSql.checkData(7, 2, 9)
#group by tag,column #group by tag,column
tdSql.query('select ts,unique(voltage) from unique group by location,num') tdSql.query('select ts,unique(voltage) from unique group by location,num')
...@@ -165,13 +165,13 @@ class TDTestCase: ...@@ -165,13 +165,13 @@ class TDTestCase:
tdSql.query('select unique(voltage) from unique order by ts desc') tdSql.query('select unique(voltage) from unique order by ts desc')
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkData(0, 0, "2021-12-24 01:31:31") 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, 0, "2021-10-15 00:00:01")
tdSql.checkData(5, 1, 10) tdSql.checkData(5, 1, 10)
tdSql.query('select unique(voltage) from unique order by ts') tdSql.query('select unique(voltage) from unique order by ts')
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkData(5, 0, "2021-12-24 01:31:31") 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, 0, "2021-10-15 00:00:01")
tdSql.checkData(0, 1, 10) tdSql.checkData(0, 1, 10)
#order by column [desc] #order by column [desc]
...@@ -216,7 +216,7 @@ class TDTestCase: ...@@ -216,7 +216,7 @@ class TDTestCase:
tdSql.checkData(6, 0, "2021-12-25 01:31:31") tdSql.checkData(6, 0, "2021-12-25 01:31:31")
tdSql.checkData(6, 1, 9) tdSql.checkData(6, 1, 9)
tdSql.checkData(0, 0, "2021-12-24 01:31:31") tdSql.checkData(0, 0, "2021-12-24 01:31:31")
tdSql.checkData(0, 1, 9) tdSql.checkData(0, 1, 19)
# error # error
tdSql.error("select unique(ts) from unique") tdSql.error("select unique(ts) from unique")
...@@ -246,7 +246,7 @@ class TDTestCase: ...@@ -246,7 +246,7 @@ class TDTestCase:
tdSql.query('select unique(voltage) from unique where voltage > 2 limit 2 offset 1') tdSql.query('select unique(voltage) from unique where voltage > 2 limit 2 offset 1')
tdSql.checkRows(2) tdSql.checkRows(2)
tdSql.checkData(0, 1, 5) tdSql.checkData(0, 1, 5)
tdSql.checkData(1, 1, 19) tdSql.checkData(1, 1, 9)
#having #having
tdSql.query('select unique(voltage) from unique group by num having unique(voltage)>5') 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.
先完成此消息的编辑!
想要评论请 注册