fix(search_family): Add error on creating indexes from non-zero databases (#3537)

This commit is contained in:
Stepan Bagritsevich 2024-08-21 14:19:21 +02:00 committed by GitHub
parent 4835b5debc
commit 54cf6f0d06
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 31 additions and 0 deletions

View file

@ -462,6 +462,10 @@ void ReplySorted(search::AggregationInfo agg, const SearchParams& params,
} // namespace
void SearchFamily::FtCreate(CmdArgList args, ConnectionContext* cntx) {
if (cntx->conn_state.db_index != 0) {
return cntx->SendError("Cannot create index on db != 0"sv);
}
DocIndex index{};
CmdArgParser parser{args};

View file

@ -88,6 +88,33 @@ TEST_F(SearchFamilyTest, CreateDropListIndex) {
EXPECT_EQ(Run({"ft._list"}), "idx-3");
}
TEST_F(SearchFamilyTest, CreateDropDifferentDatabases) {
// Create index on db 0
auto resp =
Run({"ft.create", "idx-1", "ON", "HASH", "PREFIX", "1", "doc-", "SCHEMA", "name", "TEXT"});
EXPECT_EQ(resp, "OK");
EXPECT_EQ(Run({"select", "1"}), "OK"); // change database
// Creating an index on non zero database must fail
resp = Run({"ft.create", "idx-2", "ON", "JSON", "PREFIX", "1", "prefix-2"});
EXPECT_THAT(resp, ErrArg("ERR Cannot create index on db != 0"));
// Add some data to the index
Run({"hset", "doc-0", "name", "Name of 0"});
// ft.search must work on the another database
resp = Run({"ft.search", "idx-1", "*"});
EXPECT_THAT(resp, IsArray(IntArg(1), "doc-0", IsArray("name", "Name of 0")));
// ft.dropindex must work on the another database
EXPECT_EQ(Run({"ft.dropindex", "idx-1"}), "OK");
EXPECT_THAT(Run({"ft.info", "idx-1"}), ErrArg("ERR Unknown Index name"));
EXPECT_EQ(Run({"select", "0"}), "OK");
EXPECT_THAT(Run({"ft.info", "idx-1"}), ErrArg("ERR Unknown Index name"));
}
TEST_F(SearchFamilyTest, AlterIndex) {
Run({"hset", "d:1", "color", "blue", "cost", "150"});
Run({"hset", "d:2", "color", "green", "cost", "200"});