This is an automated email from the ASF dual-hosted git repository. dataroaring 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 da4de37dec [feature-wip](mv lifecycle) separate life cycle of base table and its materialized views (#19210) da4de37dec is described below commit da4de37dec5c7a0e720dea93a7769eebed24b6d1 Author: nanfeng <42513321+nanfeng1...@users.noreply.github.com> AuthorDate: Sun Apr 30 17:42:02 2023 +0800 [feature-wip](mv lifecycle) separate life cycle of base table and its materialized views (#19210) support related syntax and add:regress-test case --------- Co-authored-by: yzy <yzy@nanfeng_...@163.com> --- fe/fe-core/src/main/cup/sql_parser.cup | 4 + .../main/java/org/apache/doris/alter/Alter.java | 3 + .../analysis/DropPartitionFromIndexClause.java | 92 ++++++++++++++++++++++ .../test_drop_partition_from_index.out | 11 +++ .../test_drop_partition_from_index.groovy | 65 +++++++++++++++ 5 files changed, 175 insertions(+) diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index e563d89bcf..5ad3937ad7 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -1528,6 +1528,10 @@ alter_table_clause ::= {: RESULT = new DropPartitionClause(ifExists, partitionName, isTempPartition, force ? force : isTempPartition); :} + | KW_DROP opt_tmp:isTempPartition KW_PARTITION opt_if_exists:ifExists ident:partitionName opt_force:force KW_FROM KW_INDEX ident:indexName + {: + RESULT = new DropPartitionFromIndexClause(ifExists, partitionName, isTempPartition, force ? force : isTempPartition, indexName); + :} | KW_MODIFY opt_tmp:isTempPartition KW_PARTITION ident:partitionName KW_SET LPAREN key_value_map:properties RPAREN {: ArrayList<String> partitions = new ArrayList<String>(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java index a59761cc8e..3b855cecb4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java @@ -27,6 +27,7 @@ import org.apache.doris.analysis.CreateMaterializedViewStmt; import org.apache.doris.analysis.CreateMultiTableMaterializedViewStmt; import org.apache.doris.analysis.DropMaterializedViewStmt; import org.apache.doris.analysis.DropPartitionClause; +import org.apache.doris.analysis.DropPartitionFromIndexClause; import org.apache.doris.analysis.DropTableStmt; import org.apache.doris.analysis.MVRefreshInfo.RefreshMethod; import org.apache.doris.analysis.ModifyColumnCommentClause; @@ -257,6 +258,8 @@ public class Alter { needProcessOutsideTableLock = true; } } + } else if (alterClause instanceof DropPartitionFromIndexClause) { + // do nothing } else if (alterClause instanceof AddPartitionClause) { needProcessOutsideTableLock = true; } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPartitionFromIndexClause.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPartitionFromIndexClause.java new file mode 100644 index 0000000000..408c9406e8 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPartitionFromIndexClause.java @@ -0,0 +1,92 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package org.apache.doris.analysis; + +import org.apache.doris.alter.AlterOpType; +import org.apache.doris.common.AnalysisException; +import org.apache.doris.common.ErrorCode; +import org.apache.doris.common.ErrorReport; + +import com.google.common.base.Strings; + +import java.util.Map; + +// clause which is used to drop a partition from specified index +public class DropPartitionFromIndexClause extends AlterTableClause { + private boolean ifExists; + private String partitionName; + // true if this is to drop a temp partition + private boolean isTempPartition; + private boolean forceDrop; + private String indexName; + + public DropPartitionFromIndexClause(boolean ifExists, String partitionName, boolean isTempPartition, + boolean forceDrop, String indexName) { + super(AlterOpType.DROP_PARTITION); + this.ifExists = ifExists; + this.partitionName = partitionName; + this.isTempPartition = isTempPartition; + this.needTableStable = false; + this.forceDrop = forceDrop; + this.indexName = indexName; + } + + public boolean isSetIfExists() { + return ifExists; + } + + public String getPartitionName() { + return partitionName; + } + + public boolean isTempPartition() { + return isTempPartition; + } + + public boolean isForceDrop() { + return forceDrop; + } + + @Override + public void analyze(Analyzer analyzer) throws AnalysisException { + if (Strings.isNullOrEmpty(partitionName)) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_PARTITION_NAME, partitionName); + } + if (Strings.isNullOrEmpty(indexName)) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_NAME_FOR_INDEX, indexName); + } + } + + @Override + public Map<String, String> getProperties() { + return null; + } + + @Override + public String toSql() { + StringBuilder sb = new StringBuilder(); + sb.append("DROP PARTITION " + partitionName); + sb.append(" FROM INDEX " + indexName); + return sb.toString(); + } + + @Override + public String toString() { + return toSql(); + } +} diff --git a/regression-test/data/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.out b/regression-test/data/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.out new file mode 100644 index 0000000000..988c98d528 --- /dev/null +++ b/regression-test/data/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.out @@ -0,0 +1,11 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- +1 2 +2 4 +3 6 + +-- !select -- +1 2 +2 4 +3 6 + diff --git a/regression-test/suites/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.groovy b/regression-test/suites/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.groovy new file mode 100644 index 0000000000..d9fea195cd --- /dev/null +++ b/regression-test/suites/mv_p0/test_drop_partition_from_index/test_drop_partition_from_index.groovy @@ -0,0 +1,65 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +// this suite is for creating table with timestamp datatype in defferent +// case. For example: 'year' and 'Year' datatype should also be valid in definition + +suite("sql_drop_partition_from_index") { + def testDb = "test_db" + def testTable = "test_table" + def testMv = "test_mv" + + try { + sql """CREATE DATABASE IF NOT EXISTS ${testDb}""" + sql """USE ${testDb}""" + sql """ + create table ${testTable} ( + `k1` int not null, + `k2` int not null, + `k3` int not null + ) + engine=olap + duplicate key(k1, k2, k3) + partition by list(k1) ( + partition p1 values in ("1","2","3") + ) + distributed by hash(k1) buckets 1 + properties( + "replication_num"="1", + "light_schema_change"="true", + "compression"="zstd" + ); + """ + sql""" + INSERT INTO ${testTable} PARTITION(p1) VALUES(1,1,1),(2,2,2),(3,3,3) + """ + createMV ("create materialized view ${testMv} as select k1,k2+k3 from ${testTable}") + + qt_select """ SELECT k1,k2+k3 FROM ${testTable} PARTITION(p1) """ + // index is empty + def errorSqlResult = """ ALTER TABLE ${testTable} DROP PARTITION p1 FROM INDEX """ + assertTrue(errorSqlResult != null) + + sql""" ALTER TABLE ${testTable} DROP PARTITION p1 FROM INDEX ${testTable} """ + qt_select """ SELECT k1, k2+k3 FROM ${testTable} PARTITION(p1) """ + } finally { + sql """ DROP MATERIALIZED VIEW ${testMv} ON ${testTable} """ + sql """ DROP TABLE ${testTable} """ + sql """ DROP DATABASE ${testDb} """ + } +} + --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org