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

Reply via email to