From 707f814fc2e624904ae1caac667d5ea3e4da36c2 Mon Sep 17 00:00:00 2001 From: YueW <45946325+Tanya-W@users.noreply.github.com> Date: Thu, 2 Mar 2023 11:12:54 +0800 Subject: [PATCH] [fix](inverted index) fix still execute match query after drop inverted index (#17293) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit background: At the moment, match query must with inverted index, problem description: After drop inverted index which is the only index in table, there still can use match query for this index column. fix it: The index should be updated on BE regardless of whether the indexes_desc from FE is empty. --- be/src/vec/exec/scan/new_olap_scanner.cpp | 3 +- .../test_add_drop_index_with_data.groovy | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/be/src/vec/exec/scan/new_olap_scanner.cpp b/be/src/vec/exec/scan/new_olap_scanner.cpp index b5b82c00f7..23d448ad0a 100644 --- a/be/src/vec/exec/scan/new_olap_scanner.cpp +++ b/be/src/vec/exec/scan/new_olap_scanner.cpp @@ -91,8 +91,7 @@ Status NewOlapScanner::prepare(const TPaloScanRange& scan_range, } } - if (olap_scan_node.__isset.indexes_desc && !olap_scan_node.indexes_desc.empty() && - olap_scan_node.indexes_desc[0].index_id >= 0) { + if (olap_scan_node.__isset.indexes_desc) { _tablet_schema->update_indexes_from_thrift(olap_scan_node.indexes_desc); } diff --git a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy index d9d5d7adad..c62889bfc1 100644 --- a/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy +++ b/regression-test/suites/inverted_index_p0/test_add_drop_index_with_data.groovy @@ -164,6 +164,49 @@ suite("test_add_drop_index_with_data", "inverted_index"){ assertEquals(select_result[0][1], "name2") assertEquals(select_result[0][2], "desc 2") + // drop idx_id index + sql "drop index idx_id on ${indexTbName1}" + wait_for_latest_op_on_table_finish(indexTbName1, timeout) + + // show index of create table + show_result = sql "show index from ${indexTbName1}" + logger.info("show index from " + indexTbName1 + " result: " + show_result) + assertEquals(show_result.size(), 1) + assertEquals(show_result[0][2], "idx_name") + + // query rows where name match 'name1' + select_result = sql "select * from ${indexTbName1} where name match 'name1'" + assertEquals(select_result.size(), 1) + assertEquals(select_result[0][0], 1) + assertEquals(select_result[0][1], "name1") + assertEquals(select_result[0][2], "desc 1") + + // query rows where name match 'name2' + select_result = sql "select * from ${indexTbName1} where name match 'name2'" + assertEquals(select_result.size(), 1) + assertEquals(select_result[0][0], 2) + assertEquals(select_result[0][1], "name2") + assertEquals(select_result[0][2], "desc 2") + + // drop idx_id index + sql "drop index idx_name on ${indexTbName1}" + wait_for_latest_op_on_table_finish(indexTbName1, timeout) + + // query rows where name match 'name1', should fail without index + success = false + try { + sql "select * from ${indexTbName1} where name match 'name1'" + success = true + } catch(Exception ex) { + logger.info("sql exception: " + ex) + } + assertEquals(success, false) + + // show index of create table + show_result = sql "show index from ${indexTbName1}" + logger.info("show index from " + indexTbName1 + " result: " + show_result) + assertEquals(show_result.size(), 0) + // add index on column description sql "create index idx_desc on ${indexTbName1}(description) USING INVERTED PROPERTIES(\"parser\"=\"standard\");" wait_for_latest_op_on_table_finish(indexTbName1, timeout)