You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/03/01 03:22:05 UTC
[incubator-doris] 04/04: [fix][chore](insert)(fe) Fix analysis error of insert stmt and modify grpc-netty dependency (#8265)
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 <mo...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org