This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 8366ce7a81 [enhancement](insert-stmt) Make `insert into tbl values();` compatible with mysql (#20694) 8366ce7a81 is described below commit 8366ce7a813bcb8c93c1724e84c3ba3d682e5070 Author: Siyang Tang <82279870+tangsiyang2...@users.noreply.github.com> AuthorDate: Sun Jun 18 19:56:07 2023 +0800 [enhancement](insert-stmt) Make `insert into tbl values();` compatible with mysql (#20694) --- .../apache/doris/analysis/NativeInsertStmt.java | 19 ++++++++++ .../data/load_p0/insert/test_insert.out | 4 +++ .../suites/load_p0/insert/test_insert.groovy | 40 ++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java index 3a64357c9a..d3956de245 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java @@ -64,6 +64,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import org.apache.commons.collections.CollectionUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -498,6 +499,24 @@ public class NativeInsertStmt extends InsertStmt { queryStmt.setFromInsert(true); queryStmt.analyze(analyzer); + // deal with this case: insert into tbl values(); + // should try to insert default values for all columns in tbl if set + if (isValuesOrConstantSelect) { + final ValueList valueList = ((SelectStmt) queryStmt).getValueList(); + if (valueList != null && valueList.getFirstRow().isEmpty() && CollectionUtils.isEmpty(targetColumnNames)) { + final int rowSize = mentionedColumns.size(); + final List<String> colLabels = queryStmt.getColLabels(); + final List<Expr> resultExprs = queryStmt.getResultExprs(); + Preconditions.checkState(resultExprs.isEmpty(), "result exprs should be empty."); + for (int i = 0; i < rowSize; i++) { + resultExprs.add(new IntLiteral(1)); + final DefaultValueExpr defaultValueExpr = new DefaultValueExpr(); + valueList.getFirstRow().add(defaultValueExpr); + colLabels.add(defaultValueExpr.toColumnLabel()); + } + } + } + // check if size of select item equal with columns mentioned in statement if (mentionedColumns.size() != queryStmt.getResultExprs().size() || realTargetColumnNames.size() != queryStmt.getResultExprs().size()) { diff --git a/regression-test/data/load_p0/insert/test_insert.out b/regression-test/data/load_p0/insert/test_insert.out index 68d12c992f..dcb5b854a7 100644 --- a/regression-test/data/load_p0/insert/test_insert.out +++ b/regression-test/data/load_p0/insert/test_insert.out @@ -11,3 +11,7 @@ true 3021 10 15 true 25699 6 21 true 2147483647 3 24 +-- !select -- +true 10 10000 10000000 92233720368547758 19223372036854775807 3.14159 hello world, today is 15/06/2023 2023-06-15 2023-06-15T16:10:15 +true 10 10000 10000000 92233720368547758 19223372036854775807 3.14159 hello world, today is 15/06/2023 2023-06-15 2023-06-15T16:10:15 + diff --git a/regression-test/suites/load_p0/insert/test_insert.groovy b/regression-test/suites/load_p0/insert/test_insert.groovy index 27a9f66992..1ab035d653 100644 --- a/regression-test/suites/load_p0/insert/test_insert.groovy +++ b/regression-test/suites/load_p0/insert/test_insert.groovy @@ -48,4 +48,44 @@ suite("test_insert") { """ qt_sql1 "select * from ${insert_tbl} order by 1, 2, 3, 4" + + def insert_tbl_dft = "test_insert_dft_tbl" + sql """ DROP TABLE IF EXISTS ${insert_tbl_dft}""" + + // `k7` should be float type, and bug exists now, https://github.com/apache/doris/pull/20867 + // `k9` should be char(16), and bug exists now as error msg raised:"can not cast from origin type TINYINT to target type=CHAR(16)" when doing insert + // "`k13` datetime default CURRENT_TIMESTAMP" might have cast error in strict mode when doing insert: + // [INTERNAL_ERROR]Invalid value in strict mode for function CAST, source column String, from type String to type DateTimeV2 + sql """ + CREATE TABLE ${insert_tbl_dft} ( + `k1` boolean default "true", + `k2` tinyint default "10", + `k3` smallint default "10000", + `k4` int default "10000000", + `k5` bigint default "92233720368547758", + `k6` largeint default "19223372036854775807", + + `k8` double default "3.14159", + + `k10` varchar(64) default "hello world, today is 15/06/2023", + `k11` date default "2023-06-15", + `k12` datetime default "2023-06-15 16:10:15" + ) ENGINE=OLAP + DUPLICATE KEY(`k1`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`k1`) BUCKETS 5 + PROPERTIES ( + "replication_num"="1" + ); + """ + + sql """ set enable_nereids_planner=true """ + sql """ set enable_nereids_dml=true """ + sql """ insert into ${insert_tbl_dft} values() """ + + sql """ set enable_nereids_planner=false """ + sql """ set enable_nereids_dml=false """ + sql """ insert into ${insert_tbl_dft} values() """ + + qt_select """ select k1,k2,k3,k4,k5,k6,k8,k10,k11,k12 from ${insert_tbl_dft} """ } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org