This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 6ad6d66dd5c [fix](Index)Make column unique ids in index dynamically 
computed (#48988) (#49283)
6ad6d66dd5c is described below

commit 6ad6d66dd5cafce55bcacb1813e357c8c321fe3d
Author: qiye <l...@selectdb.com>
AuthorDate: Thu Mar 20 15:09:58 2025 +0800

    [fix](Index)Make column unique ids in index dynamically computed (#48988) 
(#49283)
    
    bp #48988
---
 .../apache/doris/alter/SchemaChangeHandler.java    |   2 -
 .../apache/doris/analysis/BuildIndexClause.java    |   2 +-
 .../apache/doris/analysis/CreateIndexClause.java   |   2 +-
 .../org/apache/doris/analysis/CreateTableStmt.java |   3 +-
 .../java/org/apache/doris/analysis/IndexDef.java   |   5 -
 .../main/java/org/apache/doris/catalog/Index.java  |  40 ++---
 .../doris/catalog/MaterializedIndexMeta.java       |   7 -
 .../cloud/datasource/CloudInternalCatalog.java     |   5 +-
 .../trees/plans/commands/info/IndexDefinition.java |   2 +-
 .../org/apache/doris/planner/OlapScanNode.java     |   2 +-
 .../org/apache/doris/planner/OlapTableSink.java    |   2 +-
 .../apache/doris/task/AlterInvertedIndexTask.java  |   4 +-
 .../org/apache/doris/task/CreateReplicaTask.java   |   2 +-
 .../java/org/apache/doris/catalog/IndexTest.java   | 164 +++++++++++++++++++++
 .../org/apache/doris/catalog/OlapTableTest.java    |   2 +-
 .../doris/common/proc/IndexesProcNodeTest.java     |   8 +-
 .../persist/TableAddOrDropColumnsInfoTest.java     |   2 +-
 17 files changed, 202 insertions(+), 52 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
index 55f4d7255c7..ac3f8ad40be 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
@@ -2712,7 +2712,6 @@ public class SchemaChangeHandler extends AlterHandler {
                 indexDef.checkColumn(column, olapTable.getKeysType(),
                         
olapTable.getTableProperty().getEnableUniqueKeyMergeOnWrite(),
                                                                         
disableInvertedIndexV1ForVariant);
-                indexDef.getColumnUniqueIds().add(column.getUniqueId());
             } else {
                 throw new DdlException("index column does not exist in table. 
invalid column: " + col);
             }
@@ -2723,7 +2722,6 @@ public class SchemaChangeHandler extends AlterHandler {
         // so here update column name in CreateIndexClause after checkColumn 
for indexDef,
         // there will use the column name in olapTable instead of the column 
name in CreateIndexClause.
         alterIndex.setColumns(indexDef.getColumns());
-        alterIndex.setColumnUniqueIds(indexDef.getColumnUniqueIds());
         newIndexes.add(alterIndex);
         return false;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
index 46520162db7..d04d24e86e4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
@@ -77,7 +77,7 @@ public class BuildIndexClause extends AlterTableClause {
         indexDef.analyze();
         this.index = new Index(Env.getCurrentEnv().getNextId(), 
indexDef.getIndexName(),
                 indexDef.getColumns(), indexDef.getIndexType(),
-                indexDef.getProperties(), indexDef.getComment(), 
indexDef.getColumnUniqueIds());
+                indexDef.getProperties(), indexDef.getComment());
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateIndexClause.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateIndexClause.java
index 62d051ca318..a3193943cac 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateIndexClause.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateIndexClause.java
@@ -73,7 +73,7 @@ public class CreateIndexClause extends AlterTableClause {
         indexDef.analyze();
         this.index = new Index(Env.getCurrentEnv().getNextId(), 
indexDef.getIndexName(),
                 indexDef.getColumns(), indexDef.getIndexType(),
-                indexDef.getProperties(), indexDef.getComment(), 
indexDef.getColumnUniqueIds());
+                indexDef.getProperties(), indexDef.getComment());
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
index 6afee3ad843..431f0dff8ff 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java
@@ -592,8 +592,7 @@ public class CreateTableStmt extends DdlStmt implements 
NotFallbackInParser {
                     }
                 }
                 indexes.add(new Index(Env.getCurrentEnv().getNextId(), 
indexDef.getIndexName(), indexDef.getColumns(),
-                        indexDef.getIndexType(), indexDef.getProperties(), 
indexDef.getComment(),
-                        indexDef.getColumnUniqueIds()));
+                        indexDef.getIndexType(), indexDef.getProperties(), 
indexDef.getComment()));
                 distinct.add(indexDef.getIndexName());
                 distinctCol.add(Pair.of(indexDef.getIndexType(),
                         
indexDef.getColumns().stream().map(String::toUpperCase).collect(Collectors.toList())));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
index 3e44d7c76ad..0f07a953b9e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
@@ -42,7 +42,6 @@ public class IndexDef {
     private Map<String, String> properties;
     private boolean isBuildDeferred = false;
     private PartitionNames partitionNames;
-    private List<Integer> columnUniqueIds = Lists.newArrayList();
     public static final int MIN_NGRAM_SIZE = 1;
     public static final int MAX_NGRAM_SIZE = 255;
     public static final int MIN_BF_SIZE = 64;
@@ -202,10 +201,6 @@ public class IndexDef {
         return partitionNames == null ? Lists.newArrayList() : 
partitionNames.getPartitionNames();
     }
 
-    public List<Integer> getColumnUniqueIds() {
-        return columnUniqueIds;
-    }
-
     public enum IndexType {
         BITMAP,
         INVERTED,
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java
index f770de9176f..1718c26bdb4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java
@@ -65,19 +65,15 @@ public class Index implements Writable {
     private Map<String, String> properties;
     @SerializedName(value = "ct", alternate = {"comment"})
     private String comment;
-    @SerializedName(value = "cui", alternate = {"columnUniqueIds"})
-    private List<Integer> columnUniqueIds;
 
     public Index(long indexId, String indexName, List<String> columns,
-            IndexDef.IndexType indexType, Map<String, String> properties, 
String comment,
-            List<Integer> columnUniqueIds) {
+            IndexDef.IndexType indexType, Map<String, String> properties, 
String comment) {
         this.indexId = indexId;
         this.indexName = indexName;
         this.columns = columns == null ? Lists.newArrayList() : 
Lists.newArrayList(columns);
         this.indexType = indexType;
         this.properties = properties == null ? Maps.newHashMap() : 
Maps.newHashMap(properties);
         this.comment = comment;
-        this.columnUniqueIds = columnUniqueIds == null ? Lists.newArrayList() 
: Lists.newArrayList(columnUniqueIds);
         if (indexType == IndexDef.IndexType.INVERTED) {
             if (this.properties != null && !this.properties.isEmpty()) {
                 if 
(this.properties.containsKey(InvertedIndexUtil.INVERTED_INDEX_PARSER_KEY)) {
@@ -101,7 +97,6 @@ public class Index implements Writable {
         this.indexType = null;
         this.properties = null;
         this.comment = null;
-        this.columnUniqueIds = null;
     }
 
     public long getIndexId() {
@@ -191,14 +186,6 @@ public class Index implements Writable {
         this.comment = comment;
     }
 
-    public List<Integer> getColumnUniqueIds() {
-        return columnUniqueIds;
-    }
-
-    public void setColumnUniqueIds(List<Integer> columnUniqueIds) {
-        this.columnUniqueIds = columnUniqueIds;
-    }
-
     @Override
     public void write(DataOutput out) throws IOException {
         Text.writeString(out, GsonUtils.GSON.toJson(this));
@@ -216,7 +203,7 @@ public class Index implements Writable {
 
     public Index clone() {
         return new Index(indexId, indexName, new ArrayList<>(columns),
-                indexType, new HashMap<>(properties), comment, 
columnUniqueIds);
+                indexType, new HashMap<>(properties), comment);
     }
 
     @Override
@@ -251,7 +238,21 @@ public class Index implements Writable {
         return sb.toString();
     }
 
-    public TOlapTableIndex toThrift() {
+    public List<Integer> getColumnUniqueIds(List<Column> schema) {
+        List<Integer> columnUniqueIds = new ArrayList<>();
+        if (schema != null) {
+            for (String columnName : columns) {
+                for (Column column : schema) {
+                    if (columnName.equalsIgnoreCase(column.getName())) {
+                        columnUniqueIds.add(column.getUniqueId());
+                    }
+                }
+            }
+        }
+        return columnUniqueIds;
+    }
+
+    public TOlapTableIndex toThrift(List<Integer> indexColumnUniqueIds) {
         TOlapTableIndex tIndex = new TOlapTableIndex();
         tIndex.setIndexId(indexId);
         tIndex.setIndexName(indexName);
@@ -260,15 +261,16 @@ public class Index implements Writable {
         if (properties != null) {
             tIndex.setProperties(properties);
         }
-        tIndex.setColumnUniqueIds(columnUniqueIds);
+        tIndex.setColumnUniqueIds(indexColumnUniqueIds);
         return tIndex;
     }
 
-    public OlapFile.TabletIndexPB toPb(Map<Integer, Column> columnMap) {
+    public OlapFile.TabletIndexPB toPb(Map<Integer, Column> columnMap, 
List<Integer> indexColumnUniqueIds) {
         OlapFile.TabletIndexPB.Builder builder = 
OlapFile.TabletIndexPB.newBuilder();
         builder.setIndexId(indexId);
         builder.setIndexName(indexName);
-        for (Integer columnUniqueId : columnUniqueIds) {
+
+        for (Integer columnUniqueId : indexColumnUniqueIds) {
             Column column = columnMap.get(columnUniqueId);
             if (column != null) {
                 builder.addColUniqueId(column.getUniqueId());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
index b0d483751d7..6a30e771a58 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
@@ -391,13 +391,6 @@ public class MaterializedIndexMeta implements Writable, 
GsonPostProcessable {
         maxColUniqueId = Column.COLUMN_UNIQUE_ID_INIT_VALUE;
         this.schema.forEach(column -> {
             column.setUniqueId(incAndGetMaxColUniqueId());
-            this.indexes.forEach(index -> {
-                index.getColumns().forEach(col -> {
-                    if (col.equalsIgnoreCase(column.getName())) {
-                        index.getColumnUniqueIds().add(column.getUniqueId());
-                    }
-                });
-            });
             if (LOG.isDebugEnabled()) {
                 LOG.debug("indexId: {},  column:{}, uniqueId:{}",
                         indexId, column, column.getUniqueId());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
index 17bc301c050..7867931f071 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/cloud/datasource/CloudInternalCatalog.java
@@ -321,9 +321,8 @@ public class CloudInternalCatalog extends InternalCatalog {
             columnMap.put(column.getUniqueId(), column);
         }
         if (indexes != null) {
-            for (int i = 0; i < indexes.size(); i++) {
-                Index index = indexes.get(i);
-                schemaBuilder.addIndex(index.toPb(columnMap));
+            for (Index index : indexes) {
+                schemaBuilder.addIndex(index.toPb(columnMap, 
index.getColumnUniqueIds(schemaColumns)));
             }
         }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
index 9ee52e5b7a5..f3ad6e81ec1 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
@@ -209,6 +209,6 @@ public class IndexDefinition {
 
     public Index translateToCatalogStyle() {
         return new Index(Env.getCurrentEnv().getNextId(), name, cols, 
indexType, properties,
-                comment, null);
+                comment);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 74d7de03bab..a6a56074432 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -1518,7 +1518,7 @@ public class OlapScanNode extends ScanNode {
         }
 
         for (Index index : olapTable.getIndexes()) {
-            TOlapTableIndex tIndex = index.toThrift();
+            TOlapTableIndex tIndex = 
index.toThrift(index.getColumnUniqueIds(olapTable.getBaseSchema()));
             indexDesc.add(tIndex);
         }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java
index b63da388d20..31c15d8a2c1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java
@@ -316,7 +316,7 @@ public class OlapTableSink extends DataSink {
                 indexes = table.getIndexes();
             }
             for (Index index : indexes) {
-                TOlapTableIndex tIndex = index.toThrift();
+                TOlapTableIndex tIndex = 
index.toThrift(index.getColumnUniqueIds(table.getBaseSchema()));
                 indexDesc.add(tIndex);
             }
             TOlapTableIndexSchema indexSchema = new 
TOlapTableIndexSchema(pair.getKey(), columns,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/task/AlterInvertedIndexTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/task/AlterInvertedIndexTask.java
index caf7733165e..c11d0e67497 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/AlterInvertedIndexTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/AlterInvertedIndexTask.java
@@ -103,7 +103,7 @@ public class AlterInvertedIndexTask extends AgentTask {
         if (!alterInvertedIndexes.isEmpty()) {
             List<TOlapTableIndex> tIndexes = new ArrayList<>();
             for (Index index : alterInvertedIndexes) {
-                tIndexes.add(index.toThrift());
+                
tIndexes.add(index.toThrift(index.getColumnUniqueIds(schemaColumns)));
             }
             req.setAlterInvertedIndexes(tIndexes);
         }
@@ -111,7 +111,7 @@ public class AlterInvertedIndexTask extends AgentTask {
         if (existIndexes != null) {
             List<TOlapTableIndex> indexDesc = new ArrayList<TOlapTableIndex>();
             for (Index index : existIndexes) {
-                TOlapTableIndex tIndex = index.toThrift();
+                TOlapTableIndex tIndex = 
index.toThrift(index.getColumnUniqueIds(schemaColumns));
                 indexDesc.add(tIndex);
             }
             req.setIndexesDesc(indexDesc);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java
index 94b73ef2864..6328bf2f2a0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java
@@ -351,7 +351,7 @@ public class CreateReplicaTask extends AgentTask {
             } else {
                 tIndexes = new ArrayList<>();
                 for (Index index : indexes) {
-                    tIndexes.add(index.toThrift());
+                    
tIndexes.add(index.toThrift(index.getColumnUniqueIds(columns)));
                 }
             }
             tSchema.setIndexes(tIndexes);
diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/IndexTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/IndexTest.java
new file mode 100644
index 00000000000..776c97ca76b
--- /dev/null
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/IndexTest.java
@@ -0,0 +1,164 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.catalog;
+
+import org.apache.doris.analysis.IndexDef;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class IndexTest {
+
+    @Test
+    public void testGetColumnUniqueIds() {
+        // Create test columns with unique IDs
+        List<Column> schema = new ArrayList<>();
+        Column col1 = new Column("col1", Type.INT);
+        col1.setUniqueId(101);
+        Column col2 = new Column("col2", Type.VARCHAR);
+        col2.setUniqueId(102);
+        Column col3 = new Column("col3", Type.DOUBLE);
+        col3.setUniqueId(103);
+        Column specialCol = new Column("special-name!@#", Type.STRING);
+        specialCol.setUniqueId(104);
+        Column mixedCaseCol = new Column("MiXeD_CaSe", Type.BIGINT);
+        mixedCaseCol.setUniqueId(105);
+
+        schema.add(col1);
+        schema.add(col2);
+        schema.add(col3);
+        schema.add(specialCol);
+        schema.add(mixedCaseCol);
+
+        // Test case 1: Basic column matching
+        List<String> indexColumns1 = new ArrayList<>();
+        indexColumns1.add("col1");
+        indexColumns1.add("col3");
+        Index index1 = new Index(1, "test_index1", indexColumns1, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> uniqueIds1 = index1.getColumnUniqueIds(schema);
+        Assert.assertEquals(2, uniqueIds1.size());
+        Assert.assertEquals(Integer.valueOf(101), uniqueIds1.get(0));
+        Assert.assertEquals(Integer.valueOf(103), uniqueIds1.get(1));
+
+        // Test case 2: Case-insensitive matching
+        List<String> indexColumns2 = new ArrayList<>();
+        indexColumns2.add("CoL1");
+        indexColumns2.add("COL3");
+        Index index2 = new Index(2, "test_index2", indexColumns2, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> uniqueIds2 = index2.getColumnUniqueIds(schema);
+        Assert.assertEquals(2, uniqueIds2.size());
+        Assert.assertEquals(Integer.valueOf(101), uniqueIds2.get(0));
+        Assert.assertEquals(Integer.valueOf(103), uniqueIds2.get(1));
+
+        // Test case 3: Non-existent column name
+        List<String> indexColumns3 = new ArrayList<>();
+        indexColumns3.add("col1");
+        indexColumns3.add("non_existent_column");
+        Index index3 = new Index(3, "test_index3", indexColumns3, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> uniqueIds3 = index3.getColumnUniqueIds(schema);
+        Assert.assertEquals(1, uniqueIds3.size());
+        Assert.assertEquals(Integer.valueOf(101), uniqueIds3.get(0));
+
+        // Test case 4: Null schema
+        List<Integer> uniqueIds4 = index1.getColumnUniqueIds(null);
+        Assert.assertEquals(0, uniqueIds4.size());
+
+        // Test case 5: Empty column list
+        Index emptyColIndex = new Index(5, "empty_col_index", new 
ArrayList<>(),
+                IndexDef.IndexType.BITMAP, null, null);
+        List<Integer> emptyColUniqueIds = 
emptyColIndex.getColumnUniqueIds(schema);
+        Assert.assertEquals(0, emptyColUniqueIds.size());
+
+        // Test case 6: Empty schema (non-null)
+        List<Integer> emptySchemaUniqueIds = index1.getColumnUniqueIds(new 
ArrayList<>());
+        Assert.assertEquals(0, emptySchemaUniqueIds.size());
+
+        // Test case 7: Duplicate column names
+        List<String> dupColumns = new ArrayList<>();
+        dupColumns.add("col1");
+        dupColumns.add("col1");  // Duplicated
+        dupColumns.add("col2");
+        Index dupIndex = new Index(7, "dup_index", dupColumns, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> dupUniqueIds = dupIndex.getColumnUniqueIds(schema);
+        Assert.assertEquals(3, dupUniqueIds.size());
+        Assert.assertEquals(Integer.valueOf(101), dupUniqueIds.get(0));
+        Assert.assertEquals(Integer.valueOf(101), dupUniqueIds.get(1));
+        Assert.assertEquals(Integer.valueOf(102), dupUniqueIds.get(2));
+
+        // Test case 8: Special characters in column names
+        List<String> specialColList = new ArrayList<>();
+        specialColList.add("special-name!@#");
+        Index specialIndex = new Index(8, "special_index", specialColList, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> specialUniqueIds = 
specialIndex.getColumnUniqueIds(schema);
+        Assert.assertEquals(1, specialUniqueIds.size());
+        Assert.assertEquals(Integer.valueOf(104), specialUniqueIds.get(0));
+
+        // Test case 9: Mixed case column name
+        List<String> mixedCaseList = new ArrayList<>();
+        mixedCaseList.add("mixed_case");  // Testing case insensitivity with 
underscores
+        Index mixedCaseIndex = new Index(9, "mixed_case_index", mixedCaseList, 
IndexDef.IndexType.BITMAP, null, null);
+
+        List<Integer> mixedCaseUniqueIds = 
mixedCaseIndex.getColumnUniqueIds(schema);
+        Assert.assertEquals(1, mixedCaseUniqueIds.size());
+        Assert.assertEquals(Integer.valueOf(105), mixedCaseUniqueIds.get(0));
+
+        // Test case 10: Large number of columns
+        List<String> largeColumnList = new ArrayList<>();
+        List<Column> largeSchema = new ArrayList<>();
+        for (int i = 0; i < 1000; i++) {
+            Column tempCol = new Column("col" + i, Type.INT);
+            tempCol.setUniqueId(1000 + i);
+            largeSchema.add(tempCol);
+
+            // Add every other column to the index
+            if (i % 2 == 0) {
+                largeColumnList.add("col" + i);
+            }
+        }
+
+        Index largeIndex = new Index(10, "large_index", largeColumnList, 
IndexDef.IndexType.BITMAP, null, null);
+        List<Integer> largeUniqueIds = 
largeIndex.getColumnUniqueIds(largeSchema);
+
+        Assert.assertEquals(500, largeUniqueIds.size());
+        // Check first and last elements
+        Assert.assertEquals(Integer.valueOf(1000), largeUniqueIds.get(0));
+        Assert.assertEquals(Integer.valueOf(1000 + 998), 
largeUniqueIds.get(499));
+
+        // Test case 11: Order preservation - ensure column order in index is 
preserved in IDs
+        List<String> reverseOrderColumns = new ArrayList<>();
+        reverseOrderColumns.add("col3");
+        reverseOrderColumns.add("col2");
+        reverseOrderColumns.add("col1");
+
+        Index reverseIndex = new Index(11, "reverse_index", 
reverseOrderColumns, IndexDef.IndexType.BITMAP, null, null);
+        List<Integer> reverseUniqueIds = 
reverseIndex.getColumnUniqueIds(schema);
+
+        Assert.assertEquals(3, reverseUniqueIds.size());
+        Assert.assertEquals(Integer.valueOf(103), reverseUniqueIds.get(0));
+        Assert.assertEquals(Integer.valueOf(102), reverseUniqueIds.get(1));
+        Assert.assertEquals(Integer.valueOf(101), reverseUniqueIds.get(2));
+    }
+}
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
index 84b8c6062d2..950371de303 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/OlapTableTest.java
@@ -59,7 +59,7 @@ public class OlapTableTest {
             }
             OlapTable tbl = (OlapTable) table;
             tbl.setIndexes(Lists.newArrayList(new Index(0, "index", 
Lists.newArrayList("col"),
-                    IndexDef.IndexType.BITMAP, null, "xxxxxx", 
Lists.newArrayList(1))));
+                    IndexDef.IndexType.BITMAP, null, "xxxxxx")));
             System.out.println("orig table id: " + tbl.getId());
 
             FastByteArrayOutputStream byteArrayOutputStream = new 
FastByteArrayOutputStream();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/common/proc/IndexesProcNodeTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/common/proc/IndexesProcNodeTest.java
index 273915a2d20..c19bb0fecb9 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/common/proc/IndexesProcNodeTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/common/proc/IndexesProcNodeTest.java
@@ -42,18 +42,18 @@ public class IndexesProcNodeTest {
     public void testFetchResult() throws AnalysisException {
         List<Index> indexes = new ArrayList<>();
         Index indexBitmap = new Index(1, "bitmap_index", 
Lists.newArrayList("col_1"),
-                IndexType.BITMAP, null, "bitmap index on col_1", 
Lists.newArrayList(1));
+                IndexType.BITMAP, null, "bitmap index on col_1");
         Map<String, String> invertedProperties = new HashMap<>();
         invertedProperties.put("parser", "unicode");
         Index indexInverted = new Index(2, "inverted_index", 
Lists.newArrayList("col_2"),
-                        IndexType.INVERTED, invertedProperties, "inverted 
index on col_2", Lists.newArrayList(2));
+                        IndexType.INVERTED, invertedProperties, "inverted 
index on col_2");
         Index indexBf = new Index(3, "bloomfilter_index", 
Lists.newArrayList("col_3"),
-                IndexType.BLOOMFILTER, null, "bloomfilter index on col_3", 
Lists.newArrayList(3));
+                IndexType.BLOOMFILTER, null, "bloomfilter index on col_3");
         Map<String, String> ngramProperties = new HashMap<>();
         ngramProperties.put("gram_size", "3");
         ngramProperties.put("bf_size", "256");
         Index indexNgramBf = new Index(4, "ngram_bf_index", 
Lists.newArrayList("col_4"),
-                        IndexType.NGRAM_BF, ngramProperties, "ngram_bf index 
on col_4", Lists.newArrayList(4));
+                        IndexType.NGRAM_BF, ngramProperties, "ngram_bf index 
on col_4");
         indexes.add(indexBitmap);
         indexes.add(indexInverted);
         indexes.add(indexBf);
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/persist/TableAddOrDropColumnsInfoTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/persist/TableAddOrDropColumnsInfoTest.java
index da48a24c79f..e3c55f70c07 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/persist/TableAddOrDropColumnsInfoTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/persist/TableAddOrDropColumnsInfoTest.java
@@ -71,7 +71,7 @@ public class TableAddOrDropColumnsInfoTest {
         indexNameToId.put("index", 1L);
 
         List<Index> indexes = Lists.newArrayList(
-                new Index(0, "index", Lists.newArrayList("testCol1"), 
IndexDef.IndexType.INVERTED, null, "xxxxxx", Lists.newArrayList(1)));
+                new Index(0, "index", Lists.newArrayList("testCol1"), 
IndexDef.IndexType.INVERTED, null, "xxxxxx"));
 
         TableAddOrDropColumnsInfo tableAddOrDropColumnsInfo1 = new 
TableAddOrDropColumnsInfo(
                 "", dbId, tableId, tableId,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to