Skip to content

Commit

Permalink
[Fix](schema change) Fix NPE when rename column on table which has se…
Browse files Browse the repository at this point in the history
…quence type column (apache#46906)

### What problem does this PR solve?
Problem Summary:
```mysql
CREATE TABLE `tbl` (
  `c` tinyint NULL,
) ENGINE=OLAP
UNIQUE KEY(`c`)
DISTRIBUTED BY HASH(`c`) BUCKETS 10
PROPERTIES (
  "function_column.sequence_type" = "bigint"
);

mysql> alter table tbl rename column c c_bk;                                                         
ERROR 1105 (HY000): errCode = 2, detailMessage = Cannot invoke "String.equalsIgnoreCase(String)" because the return value of "org.apache.doris.catalog.OlapTable.getSequenceMapCol()" is null
```
  • Loading branch information
bobhan1 authored Jan 14, 2025
1 parent 0a10004 commit 9a324bc
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
3 changes: 2 additions & 1 deletion fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
Original file line number Diff line number Diff line change
Expand Up @@ -5225,7 +5225,8 @@ private void renameColumn(Database db, OlapTable table, String colName,
}

// 5. modify sequence map col
if (table.hasSequenceCol() && table.getSequenceMapCol().equalsIgnoreCase(colName)) {
if (table.hasSequenceCol() && table.getSequenceMapCol() != null
&& table.getSequenceMapCol().equalsIgnoreCase(colName)) {
table.setSequenceMapCol(newColName);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !sql --
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6

-- !sql --
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6

Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@

// 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.

suite("test_seq_type_rename_col", "p0") {

def table1 = "test_seq_type_rename_col"
sql "DROP TABLE IF EXISTS ${table1} FORCE;"
sql """ CREATE TABLE IF NOT EXISTS ${table1} (
`k1` int NOT NULL,
`c1` int,
`c2` int,
)UNIQUE KEY(k1)
DISTRIBUTED BY HASH(k1) BUCKETS 1
PROPERTIES (
"enable_mow_light_delete" = "false",
"function_column.sequence_type" = "bigint",
"disable_auto_compaction" = "true",
"replication_num" = "1"); """

sql "insert into ${table1}(k1,c1,c2,__DORIS_SEQUENCE_COL__) values(1,1,1,1),(2,2,2,2),(3,3,3,3);"
sql "insert into ${table1}(k1,c1,c2,__DORIS_SEQUENCE_COL__) values(4,4,4,4),(5,5,5,5),(6,6,6,6);"
sql "sync;"
qt_sql "select * from ${table1} order by k1;"

sql "alter table ${table1} rename column c1 c1_rename;"


qt_sql "select * from ${table1} order by k1;"
}

0 comments on commit 9a324bc

Please sign in to comment.