From 209f15dd51a6cc32f75906be93704e99d8d857cc Mon Sep 17 00:00:00 2001 From: dennis zhuang Date: Sun, 25 May 2025 21:44:05 -0700 Subject: [PATCH] fix: set column index can't work in physical table (#6179) --- src/metric-engine/src/data_region.rs | 4 +- .../common/alter/alter_physical_table.result | 109 ++++++++++++++++++ .../common/alter/alter_physical_table.sql | 23 ++++ 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 tests/cases/standalone/common/alter/alter_physical_table.result create mode 100644 tests/cases/standalone/common/alter/alter_physical_table.sql diff --git a/src/metric-engine/src/data_region.rs b/src/metric-engine/src/data_region.rs index a491b22063..c07cbd88ce 100644 --- a/src/metric-engine/src/data_region.rs +++ b/src/metric-engine/src/data_region.rs @@ -206,7 +206,9 @@ impl DataRegion { ) -> Result { match request.kind { AlterKind::SetRegionOptions { options: _ } - | AlterKind::UnsetRegionOptions { keys: _ } => { + | AlterKind::UnsetRegionOptions { keys: _ } + | AlterKind::SetIndex { options: _ } + | AlterKind::UnsetIndex { options: _ } => { let region_id = utils::to_data_region_id(region_id); self.mito .handle_request(region_id, RegionRequest::Alter(request)) diff --git a/tests/cases/standalone/common/alter/alter_physical_table.result b/tests/cases/standalone/common/alter/alter_physical_table.result new file mode 100644 index 0000000000..48ec2a50ac --- /dev/null +++ b/tests/cases/standalone/common/alter/alter_physical_table.result @@ -0,0 +1,109 @@ +CREATE TABLE phy (ts timestamp time index, val double, a_label STRING, PRIMARY KEY(a_label)) engine=metric with ("physical_metric_table" = ""); + +Affected Rows: 0 + +ALTER TABLE phy ADD COLUMN b_label STRING PRIMARY KEY; + +Error: 1001(Unsupported), Alter request to physical region is forbidden + +ALTER TABLE phy DROP COLUMN a_label; + +Error: 1004(InvalidArguments), Not allowed to remove index column a_label from table phy + +ALTER TABLE phy SET 'ttl'='1d'; + +Affected Rows: 0 + +SHOW CREATE TABLE phy; + ++-------+------------------------------------+ +| Table | Create Table | ++-------+------------------------------------+ +| phy | CREATE TABLE IF NOT EXISTS "phy" ( | +| | "ts" TIMESTAMP(3) NOT NULL, | +| | "val" DOUBLE NULL, | +| | "a_label" STRING NULL, | +| | TIME INDEX ("ts"), | +| | PRIMARY KEY ("a_label") | +| | ) | +| | | +| | ENGINE=metric | +| | WITH( | +| | physical_metric_table = '', | +| | ttl = '1day' | +| | ) | ++-------+------------------------------------+ + +ALTER TABLE phy UNSET 'ttl'; + +Affected Rows: 0 + +SHOW CREATE TABLE phy; + ++-------+------------------------------------+ +| Table | Create Table | ++-------+------------------------------------+ +| phy | CREATE TABLE IF NOT EXISTS "phy" ( | +| | "ts" TIMESTAMP(3) NOT NULL, | +| | "val" DOUBLE NULL, | +| | "a_label" STRING NULL, | +| | TIME INDEX ("ts"), | +| | PRIMARY KEY ("a_label") | +| | ) | +| | | +| | ENGINE=metric | +| | WITH( | +| | physical_metric_table = '' | +| | ) | ++-------+------------------------------------+ + +ALTER TABLE phy MODIFY COLUMN a_label SET INVERTED INDEX; + +Affected Rows: 0 + +SHOW CREATE TABLE phy; + ++-------+-----------------------------------------+ +| Table | Create Table | ++-------+-----------------------------------------+ +| phy | CREATE TABLE IF NOT EXISTS "phy" ( | +| | "ts" TIMESTAMP(3) NOT NULL, | +| | "val" DOUBLE NULL, | +| | "a_label" STRING NULL INVERTED INDEX, | +| | TIME INDEX ("ts"), | +| | PRIMARY KEY ("a_label") | +| | ) | +| | | +| | ENGINE=metric | +| | WITH( | +| | physical_metric_table = '' | +| | ) | ++-------+-----------------------------------------+ + +ALTER TABLE phy MODIFY COLUMN a_label UNSET INVERTED INDEX; + +Affected Rows: 0 + +SHOW CREATE TABLE phy; + ++-------+------------------------------------+ +| Table | Create Table | ++-------+------------------------------------+ +| phy | CREATE TABLE IF NOT EXISTS "phy" ( | +| | "ts" TIMESTAMP(3) NOT NULL, | +| | "val" DOUBLE NULL, | +| | "a_label" STRING NULL, | +| | TIME INDEX ("ts"), | +| | PRIMARY KEY ("a_label") | +| | ) | +| | | +| | ENGINE=metric | +| | WITH( | +| | physical_metric_table = '' | +| | ) | ++-------+------------------------------------+ + +DROP TABLE phy; + +Affected Rows: 0 + diff --git a/tests/cases/standalone/common/alter/alter_physical_table.sql b/tests/cases/standalone/common/alter/alter_physical_table.sql new file mode 100644 index 0000000000..4fac32f710 --- /dev/null +++ b/tests/cases/standalone/common/alter/alter_physical_table.sql @@ -0,0 +1,23 @@ +CREATE TABLE phy (ts timestamp time index, val double, a_label STRING, PRIMARY KEY(a_label)) engine=metric with ("physical_metric_table" = ""); + +ALTER TABLE phy ADD COLUMN b_label STRING PRIMARY KEY; + +ALTER TABLE phy DROP COLUMN a_label; + +ALTER TABLE phy SET 'ttl'='1d'; + +SHOW CREATE TABLE phy; + +ALTER TABLE phy UNSET 'ttl'; + +SHOW CREATE TABLE phy; + +ALTER TABLE phy MODIFY COLUMN a_label SET INVERTED INDEX; + +SHOW CREATE TABLE phy; + +ALTER TABLE phy MODIFY COLUMN a_label UNSET INVERTED INDEX; + +SHOW CREATE TABLE phy; + +DROP TABLE phy;