Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * Licensed 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 com.facebook.presto.operator.index;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;

Filters out rows that do not match the values from the specified tuple
public class TupleFilterProcessor
        implements PageProcessor
    private final Page tuplePage;
    private final List<TypeoutputTypes;
    private final int[] outputTupleChannels;
    public TupleFilterProcessor(Page tuplePageList<TypeoutputTypesint[] outputTupleChannels)
    {
        checkNotNull(tuplePage"tuplePage is null");
        checkArgument(tuplePage.getPositionCount() == 1, "tuplePage should only have one position");
        checkArgument(tuplePage.getChannelCount() > 0, "tuplePage must have at least one channel");
        checkNotNull(outputTypes"outputTypes is null");
        checkNotNull(outputTupleChannels"outputTupleChannels is null");
        checkArgument(tuplePage.getChannelCount() == outputTupleChannels.length"tuplePage and outputTupleChannels have different number of channels");
        checkArgument(outputTypes.size() >= outputTupleChannels.length"Must have at least as many output channels as those used for filtering");
        this. = tuplePage;
        this. = ImmutableList.copyOf(outputTypes);
        this. = outputTupleChannels;
    }
    @Override
    public int process(ConnectorSession sessionPage pageint startint endPageBuilder pageBuilder)
    {
        // TODO: generate bytecode for this in the future
        for (int position = startposition < endposition++) {
            if (matches(positionpage)) {
                pageBuilder.declarePosition();
                for (int i = 0; i < .size(); i++) {
                    Type type = .get(i);
                    Block block = page.getBlock(i);
                    BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(i);
                    type.appendTo(blockpositionblockBuilder);
                }
            }
        }
        return end;
    }
    private boolean matches(int positionPage page)
    {
        for (int i = 0; i < .i++) {
            Type type = .get([i]);
            Block outputBlock = page.getBlock([i]);
            Block singleTupleBlock = .getBlock(i);
            if (!type.equalTo(singleTupleBlock, 0, outputBlockposition)) {
                return false;
            }
        }
        return true;
    }
New to GrepCode? Check out our FAQ X