From d736a5085684964463fcbec1fd6c5f3fdc033c92 Mon Sep 17 00:00:00 2001 From: zclllhhjj Date: Wed, 11 Sep 2024 19:08:33 +0800 Subject: [PATCH] [Fix](iot) Fix unexpected error when iot auto detect get no data (#40657) ## Proposed changes Issue Number: close #xxx before: ``` ERROR 1105 (HY000): errCode = 2, detailMessage = Index 0 out of bounds for length 0 ``` now: ``` Query OK, 0 rows affected ``` --- .../insertoverwrite/InsertOverwriteUtil.java | 3 ++ .../insert_overwrite_auto_detect.groovy | 20 ++++++++----- .../test_auto_partition_behavior.groovy | 28 +++++++++++-------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java b/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java index 7f1595ea59dbea..90cb8cf1fd2cb4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java @@ -79,6 +79,9 @@ public static void replacePartition(TableIf olapTable, List partitionNam ReplacePartitionClause replacePartitionClause = new ReplacePartitionClause( new PartitionNames(false, partitionNames), new PartitionNames(true, tempPartitionNames), true, properties); + if (replacePartitionClause.getTempPartitionNames().isEmpty()) { + return; + } Env.getCurrentEnv() .replaceTempPartition((Database) olapTable.getDatabase(), (OlapTable) olapTable, replacePartitionClause); diff --git a/regression-test/suites/insert_overwrite_p0/insert_overwrite_auto_detect.groovy b/regression-test/suites/insert_overwrite_p0/insert_overwrite_auto_detect.groovy index cd33775f221ff9..ffd3c3e642f1db 100644 --- a/regression-test/suites/insert_overwrite_p0/insert_overwrite_auto_detect.groovy +++ b/regression-test/suites/insert_overwrite_p0/insert_overwrite_auto_detect.groovy @@ -148,12 +148,18 @@ suite("test_iot_auto_detect") { sql """ insert into dt values ("2005-01-01"), ("2013-02-02"), ("2022-03-03"); """ sql """ insert overwrite table dt partition(*) values ("2008-01-01"), ("2008-02-02"); """ qt_sql " select * from dt order by k0; " - try { + test { sql """ insert overwrite table dt partition(*) values ("2023-02-02"), ("3000-12-12"); """ - } catch (Exception e) { - log.info(e.getMessage()) - assertTrue(e.getMessage().contains('Insert has filtered data in strict mode') || - e.getMessage().contains('Cannot found origin partitions in auto detect overwriting')) - } - + check { result, exception, startTime, endTime -> + assertTrue(exception.getMessage().contains('Insert has filtered data in strict mode') || + exception.getMessage().contains('Cannot found origin partitions in auto detect overwriting')) + } + } + // test no rows(no partition hits) overwrite + sql " drop table if exists dt2" + sql " create table dt2 like dt" + sql " insert overwrite table dt2 partition(*) select * from dt2" + sql " insert overwrite table dt partition(*) select * from dt2" + sql " insert overwrite table dt partition(p10, pMAX) select * from dt2" + sql " insert overwrite table dt select * from dt2" } diff --git a/regression-test/suites/partition_p0/auto_partition/test_auto_partition_behavior.groovy b/regression-test/suites/partition_p0/auto_partition/test_auto_partition_behavior.groovy index 01fdfd4d634261..0a6d46290a7a04 100644 --- a/regression-test/suites/partition_p0/auto_partition/test_auto_partition_behavior.groovy +++ b/regression-test/suites/partition_p0/auto_partition/test_auto_partition_behavior.groovy @@ -50,11 +50,9 @@ suite("test_auto_partition_behavior") { result = sql "show partitions from unique_table" assertEquals(result.size(), 10) // add partition - try { + test { sql """ alter table unique_table add partition padd values in ("Xxx") """ - fail() - } catch (Exception e) { - assertTrue(e.getMessage().contains("is conflict with current partitionKeys")) + exception "is conflict with current partitionKeys" } // drop partition def partitions = sql "show partitions from unique_table order by PartitionName" @@ -94,11 +92,9 @@ suite("test_auto_partition_behavior") { result = sql "show partitions from dup_table" assertEquals(result.size(), 10) // add partition - try { + test { sql """ alter table dup_table add partition padd values in ("Xxx") """ - fail() - } catch (Exception e) { - assertTrue(e.getMessage().contains("is conflict with current partitionKeys")) + exception "is conflict with current partitionKeys" } // drop partition partitions = sql "show partitions from dup_table order by PartitionName" @@ -168,11 +164,9 @@ suite("test_auto_partition_behavior") { ); """ sql """ insert into rewrite values ("Xxx"); """ - try { + test { sql """ insert overwrite table rewrite partition(p1) values ("") """ - fail() - } catch (Exception e) { - assertTrue(e.getMessage().contains("Insert has filtered data in strict mode")) + exception "Insert has filtered data in strict mode" } sql """ insert overwrite table rewrite partition(p1) values ("Xxx") """ qt_sql_overwrite """ select * from rewrite """ // Xxx @@ -297,6 +291,9 @@ suite("test_auto_partition_behavior") { part_result = sql " show tablets from test_change " assertEquals(part_result.size, 52 * replicaNum) + + + // test not auto partition have expr. test { sql """ CREATE TABLE not_auto_expr ( @@ -310,4 +307,11 @@ suite("test_auto_partition_behavior") { """ exception "Non-auto partition table not support partition expr!" } + + + // test insert empty + sql "create table if not exists empty_range like test_change" + sql "insert into test_change select * from empty_range" + sql "create table if not exists empty_list like long_value" + sql "insert into long_value select * from empty_list" }