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

morningman pushed a commit to branch dev-1.0.1
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git

commit 048b3406cd9de65259ff046845ba19575d488591
Author: Mingyu Chen <[email protected]>
AuthorDate: Sun May 1 18:26:56 2022 +0800

    [fix](truncate) fix bug that truncate partition throw NPE (#9339)
    
    1. partition name is case insensitive.
    2. add a simple help-resource.zip to help pass the FE ut.
---
 .../java/org/apache/doris/catalog/Catalog.java     |   2 +-
 .../java/org/apache/doris/catalog/OlapTable.java   |   6 ++-
 .../org/apache/doris/common/CaseSensibility.java   |   2 +-
 .../apache/doris/catalog/TruncateTableTest.java    |  41 +++++++++++++++++++++
 fe/fe-core/src/test/resources/help-resource.zip    | Bin 0 -> 1056 bytes
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
index 74b0ad54ca..a6e658e535 100755
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Catalog.java
@@ -6807,7 +6807,7 @@ public class Catalog {
             // check partitions
             for (Map.Entry<String, Long> entry : origPartitions.entrySet()) {
                 Partition partition = copiedTbl.getPartition(entry.getValue());
-                if (partition == null || 
!partition.getName().equals(entry.getKey())) {
+                if (partition == null || 
!partition.getName().equalsIgnoreCase(entry.getKey())) {
                     throw new DdlException("Partition [" + entry.getKey() + "] 
is changed");
                 }
             }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 29f7faea4a..4b015c685d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -1287,11 +1287,13 @@ public class OlapTable extends Table {
             return copied;
         }
 
-        Set<String> partNames = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
+        Set<String> partNames = Sets.newHashSet();
         partNames.addAll(copied.getPartitionNames());
 
+        // partition name is case insensitive:
+        Set<String> lowerReservedPartitionNames = 
reservedPartitions.stream().map(String::toLowerCase).collect(Collectors.toSet());
         for (String partName : partNames) {
-            if (!reservedPartitions.contains(partName)) {
+            if (!lowerReservedPartitionNames.contains(partName.toLowerCase())) 
{
                 copied.dropPartitionAndReserveTablet(partName);
             }
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java 
b/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
index ebd7b63b5b..d0545a14dd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/CaseSensibility.java
@@ -22,7 +22,7 @@ public enum CaseSensibility {
     DATABASE(true),
     TABLE(true),
     ROLLUP(true),
-    PARTITION(true),
+    PARTITION(false),
     COLUMN(false),
     USER(true),
     ROLE(false),
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/catalog/TruncateTableTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/catalog/TruncateTableTest.java
index db8951da4e..80aec2011f 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/catalog/TruncateTableTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/TruncateTableTest.java
@@ -56,6 +56,24 @@ public class TruncateTableTest {
                                         "properties('replication_num' = '1');";
         createDb(createDbStmtStr);
         createTable(createTableStr);
+
+        String createTable2 = "CREATE TABLE test.case_sensitive_table (\n" +
+                "  `date_id` date NULL COMMENT \"\",\n" +
+                "  `column2` tinyint(4) NULL COMMENT \"\"\n" +
+                ") ENGINE=OLAP\n" +
+                "DUPLICATE KEY(`date_id`, `column2`)\n" +
+                "COMMENT \"OLAP\"\n" +
+                "PARTITION BY RANGE(`date_id`)\n" +
+                "(\n" +
+                "PARTITION p20211006 VALUES [('2021-10-06'), 
('2021-10-07')),\n" +
+                "PARTITION P20211007 VALUES [('2021-10-07'), 
('2021-10-08')),\n" +
+                "PARTITION P20211008 VALUES [('2021-10-08'), 
('2021-10-09')))\n" +
+                "DISTRIBUTED BY HASH(`column2`) BUCKETS 1\n" +
+                "PROPERTIES (\n" +
+                "\"replication_allocation\" = \"tag.location.default: 1\"\n" +
+                ");";
+
+        createTable(createTable2);
     }
 
     @AfterClass
@@ -64,6 +82,29 @@ public class TruncateTableTest {
         file.delete();
     }
 
+    @Test
+    public void testTruncateWithCaseInsensitivePartitionName() throws 
Exception {
+        Database db = 
Catalog.getCurrentCatalog().getDbNullable("default_cluster:test");
+        OlapTable tbl = db.getOlapTableOrDdlException("case_sensitive_table");
+        long p20211006Id = tbl.getPartition("P20211006").getId();
+        long p20211007Id = tbl.getPartition("P20211007").getId();
+        long p20211008Id = tbl.getPartition("p20211008").getId();
+        // truncate p20211008(real name is P20211008)
+        String truncateStr = "TRUNCATE TABLE test.case_sensitive_table 
PARTITION p20211008; \n";
+        TruncateTableStmt truncateTableStmt = (TruncateTableStmt) 
UtFrameUtils.parseAndAnalyzeStmt(truncateStr, connectContext);
+        Catalog.getCurrentCatalog().truncateTable(truncateTableStmt);
+        Assert.assertNotEquals(p20211008Id, 
tbl.getPartition("p20211008").getId());
+        // 2. truncate P20211007
+        truncateStr = "TRUNCATE TABLE test.case_sensitive_table PARTITION 
P20211007; \n";
+        truncateTableStmt = (TruncateTableStmt) 
UtFrameUtils.parseAndAnalyzeStmt(truncateStr, connectContext);
+        Catalog.getCurrentCatalog().truncateTable(truncateTableStmt);
+        Assert.assertEquals(3, tbl.getPartitionInfo().idToDataProperty.size());
+        Assert.assertNotEquals(p20211007Id, 
tbl.getPartition("p20211007").getId());
+        Assert.assertEquals(p20211006Id, 
tbl.getPartition("p20211006").getId());
+        Assert.assertNotNull(tbl.getPartition("p20211006"));
+        Assert.assertNotNull(tbl.getPartition("P20211006"));
+    }
+
     @Test
     public void testTruncateTable() throws Exception {
         String stmtStr = "ALTER TABLE test.tbl ADD PARTITION p20210902 VALUES 
[('2021-09-02'), ('2021-09-03')) DISTRIBUTED BY HASH(`k1`) BUCKETS 3;";
diff --git a/fe/fe-core/src/test/resources/help-resource.zip 
b/fe/fe-core/src/test/resources/help-resource.zip
new file mode 100644
index 0000000000..7ab08e7bf2
Binary files /dev/null and b/fe/fe-core/src/test/resources/help-resource.zip 
differ


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to