Github user fhueske commented on a diff in the pull request:

    https://github.com/apache/flink/pull/3520#discussion_r106135951
  
    --- Diff: 
flink-libraries/flink-table/src/main/scala/org/apache/flink/table/sources/FilterableTableSource.scala
 ---
    @@ -0,0 +1,66 @@
    +/*
    + * 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.sources
    +
    +import org.apache.flink.table.expressions.Expression
    +
    +/**
    +  * Adds support for filtering push-down to a [[TableSource]].
    +  * A [[TableSource]] extending this interface is able to filter records 
before returning.
    +  */
    +trait FilterableTableSource[T] extends TableSource[T] {
    +
    +  /**
    +    * Indicates whether the filter push down has been applied. Note that 
even if we don't
    +    * actually push down any filters, we should also set this flag to true 
after the trying.
    +    */
    +  private var filterPushedDown: Boolean = false
    +
    +  /**
    +    * Check and pick all predicates this table source can support. The 
passed in predicates
    +    * have been translated in conjunctive form, and table source can only 
pick those predicates
    +    * that it supports.
    +    * <p>
    +    * After trying to push predicates down, we should return a new 
[[FilterableTableSource]]
    +    * instance which holds all pushed down predicates. Even if we actually 
pushed nothing down,
    +    * it is recommended that we still return a new 
[[FilterableTableSource]] instance since we will
    +    * mark the returned instance as filter push down has been tried. Also 
we need to return all
    +    * unsupported predicates back to the framework to do further filtering.
    +    * <p>
    +    * We also should note to not changing the form of the predicates 
passed in. It has been
    +    * organized in CNF conjunctive form, and we should only take or leave 
each element in the
    +    * array. Don't try to reorganize the predicates if you are absolutely 
confident with that.
    +    *
    +    * @param predicate An array contains conjunctive predicates.
    +    * @return A new cloned instance of [[FilterableTableSource]] as well 
as n array of Expression
    +    *         which contains all unsupported predicates.
    +    */
    +  def applyPredicate(predicate: Array[Expression]): 
(FilterableTableSource[_], Array[Expression])
    --- End diff --
    
    Maybe should design this as:
    ```
    // returns a copy of the table source with pushed down predicates
    applyPredicate(predicate: Array[Expression]): FilterableTableSource[_]
    
    // returns pushed down predicates
    getPredicates(): Array[Expression]
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to