[TD-1875]<fix>: disable group by in join query.
This commit is contained in:
parent
a1fc9d8061
commit
37f485a98a
|
@ -2758,6 +2758,7 @@ int32_t parseGroupbyClause(SQueryInfo* pQueryInfo, tVariantList* pList, SSqlCmd*
|
||||||
const char* msg1 = "too many columns in group by clause";
|
const char* msg1 = "too many columns in group by clause";
|
||||||
const char* msg2 = "invalid column name in group by clause";
|
const char* msg2 = "invalid column name in group by clause";
|
||||||
const char* msg3 = "columns from one table allowed as group by columns";
|
const char* msg3 = "columns from one table allowed as group by columns";
|
||||||
|
const char* msg4 = "join query does not support group by";
|
||||||
const char* msg7 = "not support group by expression";
|
const char* msg7 = "not support group by expression";
|
||||||
const char* msg8 = "not allowed column type for group by";
|
const char* msg8 = "not allowed column type for group by";
|
||||||
const char* msg9 = "tags not allowed for table query";
|
const char* msg9 = "tags not allowed for table query";
|
||||||
|
@ -2778,6 +2779,10 @@ int32_t parseGroupbyClause(SQueryInfo* pQueryInfo, tVariantList* pList, SSqlCmd*
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pQueryInfo->numOfTables > 1) {
|
||||||
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4);
|
||||||
|
}
|
||||||
|
|
||||||
STableMeta* pTableMeta = NULL;
|
STableMeta* pTableMeta = NULL;
|
||||||
SSchema* pSchema = NULL;
|
SSchema* pSchema = NULL;
|
||||||
SSchema s = tscGetTbnameColumnSchema();
|
SSchema s = tscGetTbnameColumnSchema();
|
||||||
|
|
|
@ -42,7 +42,7 @@ void simpleTest() {
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->tsData.len, sizeof(int64_t) * num);
|
EXPECT_EQ(pTSBuf->tsData.len, sizeof(int64_t) * num);
|
||||||
EXPECT_EQ(tVariantCompare(&pTSBuf->block.tag, &t), 0);
|
EXPECT_EQ(tVariantCompare(&pTSBuf->block.tag, &t), 0);
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, 1);
|
||||||
|
|
||||||
tsBufFlush(pTSBuf);
|
tsBufFlush(pTSBuf);
|
||||||
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
||||||
|
@ -69,7 +69,7 @@ void largeTSTest() {
|
||||||
// the data has been flush to disk, no data in cache
|
// the data has been flush to disk, no data in cache
|
||||||
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
||||||
EXPECT_EQ(tVariantCompare(&pTSBuf->block.tag, &t), 0);
|
EXPECT_EQ(tVariantCompare(&pTSBuf->block.tag, &t), 0);
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, 1);
|
||||||
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
||||||
|
|
||||||
tsBufFlush(pTSBuf);
|
tsBufFlush(pTSBuf);
|
||||||
|
@ -105,7 +105,7 @@ void multiTagsTest() {
|
||||||
EXPECT_EQ(pTSBuf->tsData.len, num * sizeof(int64_t));
|
EXPECT_EQ(pTSBuf->tsData.len, num * sizeof(int64_t));
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->block.tag.i64Key, numOfTags - 1);
|
EXPECT_EQ(pTSBuf->block.tag.i64Key, numOfTags - 1);
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, 1);
|
||||||
|
|
||||||
tsBufFlush(pTSBuf);
|
tsBufFlush(pTSBuf);
|
||||||
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
EXPECT_EQ(pTSBuf->tsData.len, 0);
|
||||||
|
@ -139,7 +139,7 @@ void multiVnodeTagsTest() {
|
||||||
start += step * num;
|
start += step * num;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, j + 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, j + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
||||||
|
@ -184,7 +184,7 @@ void loadDataTest() {
|
||||||
start += step * num;
|
start += step * num;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, j + 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, j + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
EXPECT_EQ(pTSBuf->tsOrder, TSDB_ORDER_ASC);
|
||||||
|
@ -203,7 +203,7 @@ void loadDataTest() {
|
||||||
// create from exists file
|
// create from exists file
|
||||||
STSBuf* pNewBuf = tsBufCreateFromFile(pTSBuf->path, false);
|
STSBuf* pNewBuf = tsBufCreateFromFile(pTSBuf->path, false);
|
||||||
EXPECT_EQ(pNewBuf->tsOrder, pTSBuf->tsOrder);
|
EXPECT_EQ(pNewBuf->tsOrder, pTSBuf->tsOrder);
|
||||||
EXPECT_EQ(pNewBuf->numOfVnodes, numOfVnode);
|
EXPECT_EQ(pNewBuf->numOfGroups, numOfVnode);
|
||||||
EXPECT_EQ(pNewBuf->fileSize, pTSBuf->fileSize);
|
EXPECT_EQ(pNewBuf->fileSize, pTSBuf->fileSize);
|
||||||
|
|
||||||
EXPECT_EQ(pNewBuf->pData[0].info.offset, pTSBuf->pData[0].info.offset);
|
EXPECT_EQ(pNewBuf->pData[0].info.offset, pTSBuf->pData[0].info.offset);
|
||||||
|
@ -269,7 +269,7 @@ void TSTraverse() {
|
||||||
start += step * num;
|
start += step * num;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(pTSBuf->numOfVnodes, j + 1);
|
EXPECT_EQ(pTSBuf->numOfGroups, j + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
tsBufResetPos(pTSBuf);
|
tsBufResetPos(pTSBuf);
|
||||||
|
@ -304,7 +304,7 @@ void TSTraverse() {
|
||||||
int32_t totalOutput = 10;
|
int32_t totalOutput = 10;
|
||||||
while (1) {
|
while (1) {
|
||||||
STSElem elem = tsBufGetElem(pTSBuf);
|
STSElem elem = tsBufGetElem(pTSBuf);
|
||||||
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.vnode, elem.tag->i64Key, elem.ts);
|
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.id, elem.tag->i64Key, elem.ts);
|
||||||
|
|
||||||
if (!tsBufNextPos(pTSBuf)) {
|
if (!tsBufNextPos(pTSBuf)) {
|
||||||
break;
|
break;
|
||||||
|
@ -352,7 +352,7 @@ void TSTraverse() {
|
||||||
totalOutput = 10;
|
totalOutput = 10;
|
||||||
while (1) {
|
while (1) {
|
||||||
STSElem elem = tsBufGetElem(pTSBuf);
|
STSElem elem = tsBufGetElem(pTSBuf);
|
||||||
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.vnode, elem.tag->i64Key, elem.ts);
|
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.id, elem.tag->i64Key, elem.ts);
|
||||||
|
|
||||||
if (!tsBufNextPos(pTSBuf)) {
|
if (!tsBufNextPos(pTSBuf)) {
|
||||||
break;
|
break;
|
||||||
|
@ -427,7 +427,7 @@ void mergeDiffVnodeBufferTest() {
|
||||||
tsBufFlush(pTSBuf2);
|
tsBufFlush(pTSBuf2);
|
||||||
|
|
||||||
tsBufMerge(pTSBuf1, pTSBuf2);
|
tsBufMerge(pTSBuf1, pTSBuf2);
|
||||||
EXPECT_EQ(pTSBuf1->numOfVnodes, 2);
|
EXPECT_EQ(pTSBuf1->numOfGroups, 2);
|
||||||
EXPECT_EQ(pTSBuf1->numOfTotal, numOfTags * 2 * num);
|
EXPECT_EQ(pTSBuf1->numOfTotal, numOfTags * 2 * num);
|
||||||
|
|
||||||
tsBufDisplay(pTSBuf1);
|
tsBufDisplay(pTSBuf1);
|
||||||
|
@ -472,7 +472,7 @@ void mergeIdenticalVnodeBufferTest() {
|
||||||
tsBufFlush(pTSBuf2);
|
tsBufFlush(pTSBuf2);
|
||||||
|
|
||||||
tsBufMerge(pTSBuf1, pTSBuf2);
|
tsBufMerge(pTSBuf1, pTSBuf2);
|
||||||
EXPECT_EQ(pTSBuf1->numOfVnodes, 2);
|
EXPECT_EQ(pTSBuf1->numOfGroups, 2);
|
||||||
EXPECT_EQ(pTSBuf1->numOfTotal, numOfTags * 2 * num);
|
EXPECT_EQ(pTSBuf1->numOfTotal, numOfTags * 2 * num);
|
||||||
|
|
||||||
tsBufResetPos(pTSBuf1);
|
tsBufResetPos(pTSBuf1);
|
||||||
|
@ -482,12 +482,12 @@ void mergeIdenticalVnodeBufferTest() {
|
||||||
STSElem elem = tsBufGetElem(pTSBuf1);
|
STSElem elem = tsBufGetElem(pTSBuf1);
|
||||||
|
|
||||||
if (count++ < numOfTags * num) {
|
if (count++ < numOfTags * num) {
|
||||||
EXPECT_EQ(elem.vnode, 12);
|
EXPECT_EQ(elem.id, 12);
|
||||||
} else {
|
} else {
|
||||||
EXPECT_EQ(elem.vnode, 77);
|
EXPECT_EQ(elem.id, 77);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.vnode, elem.tag->i64Key, elem.ts);
|
printf("%d-%" PRIu64 "-%" PRIu64 "\n", elem.id, elem.tag->i64Key, elem.ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
tsBufDestroy(pTSBuf1);
|
tsBufDestroy(pTSBuf1);
|
||||||
|
|
Loading…
Reference in New Issue