TDengine/source/libs/parser/test/parInitialDTest.cpp

238 lines
6.2 KiB
C++
Raw Normal View History

/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "parTestUtil.h"
using namespace std;
namespace ParserTest {
2022-05-25 13:20:11 +00:00
class ParserInitialDTest : public ParserDdlTest {};
2022-06-06 06:12:57 +00:00
// DELETE FROM table_name [WHERE condition]
2022-06-04 11:54:55 +00:00
TEST_F(ParserInitialDTest, delete) {
useDb("root", "test");
run("DELETE FROM t1");
run("DELETE FROM t1 WHERE ts > now - 2d and ts < now - 1d");
2022-06-05 07:48:06 +00:00
run("DELETE FROM st1");
run("DELETE FROM st1 WHERE ts > now - 2d and ts < now - 1d AND tag1 = 10");
2022-06-04 11:54:55 +00:00
}
TEST_F(ParserInitialDTest, deleteSemanticCheck) {
useDb("root", "test");
run("DELETE FROM t1 WHERE c1 > 10", TSDB_CODE_PAR_INVALID_DELETE_WHERE, PARSER_STAGE_TRANSLATE);
}
2022-06-06 06:12:57 +00:00
// DESC table_name
TEST_F(ParserInitialDTest, describe) {
useDb("root", "test");
run("DESC t1");
run("DESCRIBE st1");
}
// todo describe
2022-06-03 08:45:33 +00:00
// todo DROP account
TEST_F(ParserInitialDTest, dropBnode) {
useDb("root", "test");
2022-05-25 13:20:11 +00:00
run("DROP BNODE ON DNODE 1");
}
// DROP CONSUMER GROUP [ IF EXISTS ] cgroup_name ON topic_name
2022-06-06 09:51:25 +00:00
TEST_F(ParserInitialDTest, dropConsumerGroup) {
2022-05-25 13:20:11 +00:00
useDb("root", "test");
SMDropCgroupReq expect = {0};
auto clearDropCgroupReq = [&]() { memset(&expect, 0, sizeof(SMDropCgroupReq)); };
auto setDropCgroupReq = [&](const char* pTopicName, const char* pCGroupName, int8_t igNotExists = 0) {
2022-05-25 13:20:11 +00:00
snprintf(expect.topic, sizeof(expect.topic), "0.%s", pTopicName);
strcpy(expect.cgroup, pCGroupName);
expect.igNotExists = igNotExists;
};
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_DROP_CGROUP_STMT);
SMDropCgroupReq req = {0};
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSMDropCgroupReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
ASSERT_EQ(std::string(req.topic), std::string(expect.topic));
ASSERT_EQ(std::string(req.cgroup), std::string(expect.cgroup));
ASSERT_EQ(req.igNotExists, expect.igNotExists);
});
setDropCgroupReq("tp1", "cg1");
run("DROP CONSUMER GROUP cg1 ON tp1");
clearDropCgroupReq();
2022-05-25 13:20:11 +00:00
setDropCgroupReq("tp1", "cg1", 1);
run("DROP CONSUMER GROUP IF EXISTS cg1 ON tp1");
clearDropCgroupReq();
}
2022-06-03 08:45:33 +00:00
// todo DROP database
2022-06-03 08:45:33 +00:00
// todo DROP dnode
TEST_F(ParserInitialDTest, dropDnode) {
useDb("root", "test");
SDropDnodeReq expect = {0};
auto clearDropDnodeReq = [&]() { memset(&expect, 0, sizeof(SDropDnodeReq)); };
auto setDropDnodeReqById = [&](int32_t dnodeId) { expect.dnodeId = dnodeId; };
auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port) {
strcpy(expect.fqdn, pFqdn);
expect.port = port;
};
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_DROP_DNODE_STMT);
SDropDnodeReq req = {0};
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSDropDnodeReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
ASSERT_EQ(req.dnodeId, expect.dnodeId);
ASSERT_EQ(std::string(req.fqdn), std::string(expect.fqdn));
ASSERT_EQ(req.port, expect.port);
});
setDropDnodeReqById(1);
run("DROP DNODE 1");
clearDropDnodeReq();
setDropDnodeReqByEndpoint("host1", 7030);
run("DROP DNODE 'host1:7030'");
clearDropDnodeReq();
}
2022-06-03 08:45:33 +00:00
// todo DROP function
TEST_F(ParserInitialDTest, dropIndex) {
useDb("root", "test");
2022-06-22 08:35:14 +00:00
SMDropSmaReq expect = {0};
auto clearDropSmaReq = [&]() { memset(&expect, 0, sizeof(SMDropSmaReq)); };
auto setDropSmaReq = [&](const char* pName, int8_t igNotExists = 0) {
sprintf(expect.name, "0.test.%s", pName);
expect.igNotExists = igNotExists;
};
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_DROP_INDEX_STMT);
SMDropSmaReq req = {0};
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSMDropSmaReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
ASSERT_EQ(std::string(req.name), std::string(expect.name));
ASSERT_EQ(req.igNotExists, expect.igNotExists);
});
setDropSmaReq("index1");
run("DROP INDEX index1");
clearDropSmaReq();
setDropSmaReq("index2", 1);
run("DROP INDEX IF EXISTS index2");
clearDropSmaReq();
}
TEST_F(ParserInitialDTest, dropMnode) {
useDb("root", "test");
2022-06-03 08:45:33 +00:00
run("DROP mnode on dnode 1");
}
TEST_F(ParserInitialDTest, dropQnode) {
useDb("root", "test");
2022-06-03 08:45:33 +00:00
run("DROP qnode on dnode 1");
}
TEST_F(ParserInitialDTest, dropSnode) {
useDb("root", "test");
2022-06-03 08:45:33 +00:00
run("DROP snode on dnode 1");
}
2022-06-03 08:45:33 +00:00
TEST_F(ParserInitialDTest, dropSTable) {
useDb("root", "test");
run("DROP STABLE st1");
}
2022-06-20 07:42:31 +00:00
TEST_F(ParserInitialDTest, dropStream) {
useDb("root", "test");
SMDropStreamReq expect = {0};
auto clearDropStreamReq = [&]() { memset(&expect, 0, sizeof(SMDropStreamReq)); };
auto setDropStreamReq = [&](const char* pStream, int8_t igNotExists = 0) {
sprintf(expect.name, "0.%s", pStream);
expect.igNotExists = igNotExists;
};
setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) {
ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_DROP_STREAM_STMT);
SMDropStreamReq req = {0};
ASSERT_TRUE(TSDB_CODE_SUCCESS == tDeserializeSMDropStreamReq(pQuery->pCmdMsg->pMsg, pQuery->pCmdMsg->msgLen, &req));
ASSERT_EQ(std::string(req.name), std::string(expect.name));
ASSERT_EQ(req.igNotExists, expect.igNotExists);
});
setDropStreamReq("s1");
run("DROP STREAM s1");
clearDropStreamReq();
setDropStreamReq("s2", 1);
run("DROP STREAM IF EXISTS s2");
clearDropStreamReq();
}
2022-06-03 08:45:33 +00:00
TEST_F(ParserInitialDTest, dropTable) {
useDb("root", "test");
run("DROP TABLE t1");
}
TEST_F(ParserInitialDTest, dropTopic) {
useDb("root", "test");
2022-06-03 08:45:33 +00:00
run("DROP topic tp1");
2022-06-03 08:45:33 +00:00
run("DROP topic if exists tp1");
}
TEST_F(ParserInitialDTest, dropUser) {
login("root");
useDb("root", "test");
2022-06-03 08:45:33 +00:00
run("DROP user wxy");
}
} // namespace ParserTest