This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.0 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 2be9380508085051881b3617546f0ac992dedd47 Author: Mingyu Chen <morningman....@gmail.com> AuthorDate: Tue Mar 1 11:12:10 2022 +0800 [fix][chore](insert)(fe) Fix analysis error of insert stmt and modify grpc-netty dependency (#8265) This bug is introduced from #8112. Also , I change the `grpc-netty` dependency to `grpc-netty-shaded`, to avoid dependency conflict: ``` java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator. ``` --- fe/fe-core/pom.xml | 2 +- .../apache/doris/analysis/CreateFunctionStmt.java | 2 +- .../java/org/apache/doris/analysis/InsertStmt.java | 4 +- .../org/apache/doris/rpc/BackendServiceClient.java | 2 +- .../org/apache/doris/planner/QueryPlanTest.java | 62 ++++++++++++++-------- fe/pom.xml | 2 +- 6 files changed, 48 insertions(+), 26 deletions(-) diff --git a/fe/fe-core/pom.xml b/fe/fe-core/pom.xml index 9b11108..10aa192 100644 --- a/fe/fe-core/pom.xml +++ b/fe/fe-core/pom.xml @@ -560,7 +560,7 @@ under the License. </dependency> <dependency> <groupId>io.grpc</groupId> - <artifactId>grpc-netty</artifactId> + <artifactId>grpc-netty-shaded</artifactId> </dependency> <dependency> <groupId>io.grpc</groupId> diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java index df609a9..6a5c18d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java @@ -55,7 +55,7 @@ import java.util.List; import java.util.Map; import io.grpc.ManagedChannel; -import io.grpc.netty.NettyChannelBuilder; +import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; // create a user define function public class CreateFunctionStmt extends DdlStmt { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java index f750749..cfb4ecf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java @@ -511,7 +511,9 @@ public class InsertStmt extends DdlStmt { } else { // INSERT INTO SELECT 1,2,3 ... List<ArrayList<Expr>> rows = Lists.newArrayList(); - rows.add(selectStmt.getResultExprs()); + // ATTN: must copy the `selectStmt.getResultExprs()`, otherwise the following + // `selectStmt.getResultExprs().clear();` will clear the `rows` too, causing error. + rows.add(Lists.newArrayList(selectStmt.getResultExprs())); analyzeRow(analyzer, targetColumns, rows, 0, origColIdxsForExtendCols); // rows may be changed in analyzeRow(), so rebuild the result exprs selectStmt.getResultExprs().clear(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/rpc/BackendServiceClient.java b/fe/fe-core/src/main/java/org/apache/doris/rpc/BackendServiceClient.java index 370f425..7330904 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/rpc/BackendServiceClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/rpc/BackendServiceClient.java @@ -29,7 +29,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import io.grpc.ManagedChannel; -import io.grpc.netty.NettyChannelBuilder; +import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder; public class BackendServiceClient { public static final Logger LOG = LogManager.getLogger(BackendServiceClient.class); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 94417eb..8626eda 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -432,21 +432,6 @@ public class QueryPlanTest { "PROPERTIES (\n" + "\"replication_num\" = \"1\"" + ");"); - - createTable("CREATE TABLE test.result_exprs (\n" + - " `aid` int(11) NULL,\n" + - " `bid` int(11) NULL\n" + - ") ENGINE=OLAP\n" + - "DUPLICATE KEY(`aid`)\n" + - "COMMENT \"OLAP\"\n" + - "DISTRIBUTED BY HASH(`aid`) BUCKETS 7\n" + - "PROPERTIES (\n" + - "\"replication_num\" = \"1\",\n" + - "\"in_memory\" = \"false\",\n" + - "\"business_key_column_name\" = \"\",\n" + - "\"storage_medium\" = \"HDD\",\n" + - "\"storage_format\" = \"V2\"\n" + - ");\n"); } @AfterClass @@ -2028,13 +2013,14 @@ public class QueryPlanTest { @Test public void testQueryWithUsingClause() throws Exception { connectContext.setDatabase("default_cluster:test"); - String iSql1 = "insert into test.tbl_using_a values(1,3,7),(2,2,8),(3,1,9)"; - String iSql2 = "insert into test.tbl_using_b values(1,3,1),(3,1,1),(4,1,1),(5,2,1)"; - UtFrameUtils.getSqlStmtExecutor(connectContext, iSql1); - UtFrameUtils.getSqlStmtExecutor(connectContext, iSql2); - String qSQL = "select t1.* from test.tbl_using_a t1 join test.tbl_using_b t2 using(k1,k2) where t1.k1 between 1 and 3 and t2.k3 between 1+0 and 3+0"; + String iSql1 = "explain insert into test.tbl_using_a values(1,3,7),(2,2,8),(3,1,9)"; + String iSql2 = "explain insert into test.tbl_using_b values(1,3,1),(3,1,1),(4,1,1),(5,2,1)"; + UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, iSql1); + UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, iSql2); + String qSQL = "explain select t1.* from test.tbl_using_a t1 join test.tbl_using_b t2 using(k1,k2) where t1.k1 " + + "between 1 and 3 and t2.k3 between 1+0 and 3+0"; try { - UtFrameUtils.getSqlStmtExecutor(connectContext, qSQL); + UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, qSQL); } catch (AnalysisException e) { Assert.fail(); } @@ -2043,6 +2029,20 @@ public class QueryPlanTest { @Test public void testResultExprs() throws Exception { connectContext.setDatabase("default_cluster:test"); + createTable("CREATE TABLE test.result_exprs (\n" + + " `aid` int(11) NULL,\n" + + " `bid` int(11) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`aid`)\n" + + "COMMENT \"OLAP\"\n" + + "DISTRIBUTED BY HASH(`aid`) BUCKETS 7\n" + + "PROPERTIES (\n" + + "\"replication_num\" = \"1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"business_key_column_name\" = \"\",\n" + + "\"storage_medium\" = \"HDD\",\n" + + "\"storage_format\" = \"V2\"\n" + + ");\n"); String queryStr = "EXPLAIN INSERT INTO result_exprs\n" + "SELECT a.aid,\n" + " b.bid\n" + @@ -2054,4 +2054,24 @@ public class QueryPlanTest { Assert.assertFalse(explainString.contains("OUTPUT EXPRS:3 | 4")); Assert.assertTrue(explainString.contains("OUTPUT EXPRS:CAST(`a`.`aid` AS INT) | 4")); } + + @Test + public void testInsertIntoSelect() throws Exception { + connectContext.setDatabase("default_cluster:test"); + createTable("CREATE TABLE test.`decimal_tb` (\n" + + " `k1` decimal(1, 0) NULL COMMENT \"\",\n" + + " `v1` decimal(1, 0) SUM NULL COMMENT \"\",\n" + + " `v2` decimal(1, 0) MAX NULL COMMENT \"\",\n" + + " `v3` decimal(1, 0) MIN NULL COMMENT \"\",\n" + + " `v4` decimal(1, 0) REPLACE NULL COMMENT \"\"\n" + + ") ENGINE=OLAP\n" + + "AGGREGATE KEY(`k1`)\n" + + "DISTRIBUTED BY HASH(`k1`) BUCKETS 1\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\"\n" + + ")"); + String sql = "explain insert into test.decimal_tb select 1, 10, 1, 1, 1;"; + String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, sql); + Assert.assertTrue(explainString.contains("1 | 10 | 1 | 1 | 1")); + } } diff --git a/fe/pom.xml b/fe/pom.xml index 80b7bef..8e62275 100644 --- a/fe/pom.xml +++ b/fe/pom.xml @@ -391,7 +391,7 @@ under the License. </dependency> <dependency> <groupId>io.grpc</groupId> - <artifactId>grpc-netty</artifactId> + <artifactId>grpc-netty-shaded</artifactId> <version>${grpc.version}</version> <scope>provided</scope> </dependency> --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org