[
https://issues.apache.org/jira/browse/FLINK-6090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15966534#comment-15966534
]
ASF GitHub Bot commented on FLINK-6090:
---------------------------------------
Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/3696#discussion_r111247042
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/plan/nodes/datastream/RetractionTrait.scala
---
@@ -0,0 +1,86 @@
+/*
+ * 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.flink.table.plan.nodes.datastream
+
+import org.apache.calcite.plan.{RelOptPlanner, RelTrait, RelTraitDef}
+import org.apache.flink.table.plan.nodes.datastream.AccMode.AccMode
+
+/**
+ * Used to store retraction related properties which is used during rule
optimization.
+ */
+class RetractionTrait extends RelTrait {
+
+ /**
+ * Defines whether downstream operator need retraction. Please note
that needToRetract is
+ * different from needRetraction. NeedToRetract is a property
particular for each operator,
+ * while NeedRetraction is a property for each input. Most of operators
have only one input,
+ * some operators may have more than one inputs (e.g., join, union),
and the property of the
+ * NeedRetraction could be different across different inputs of the
same operator
+ */
+ private var needToRetract: Boolean = false
+
+ /**
+ * Defines the accumulating mode for a operator. Basically there are
two modes for each
+ * operator: Accumulating Mode (Acc) and Accumulating and Retracting
Mode (AccRetract).
+ */
+ private var accMode = AccMode.Acc
+
+
+ def this(needToRetract: Boolean, accMode: AccMode) {
--- End diff --
I would split this trait into two traits. Unless I'm wrong, we are
eventually only interested in the `AccMode` and `needToRetract` is just
temporarily needed to compute the correct `AccMode`. Hence, I would split this
into two traits.
> Add RetractionRule at the stage of decoration
> ---------------------------------------------
>
> Key: FLINK-6090
> URL: https://issues.apache.org/jira/browse/FLINK-6090
> Project: Flink
> Issue Type: Sub-task
> Components: Table API & SQL
> Reporter: Shaoxuan Wang
> Assignee: Hequn Cheng
>
> Implement optimizer for retraction:
> 1.Add RetractionRule at the stage of decoration,which can derive the
> replace table/append table, NeedRetraction property.
> 2.Match the NeedRetraction and replace table, mark the accumulating mode
>
> When this task is finished, we can turn on retraction for different operators
> according to accumulating mode.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)