| /* |
| * 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.carbondata.core.scan.filter.executer; |
| |
| import java.util.AbstractCollection; |
| import java.util.HashSet; |
| |
| import org.apache.carbondata.core.metadata.datatype.DataType; |
| import org.apache.carbondata.core.metadata.datatype.DataTypes; |
| |
| import it.unimi.dsi.fastutil.booleans.BooleanOpenHashSet; |
| import it.unimi.dsi.fastutil.bytes.ByteOpenHashSet; |
| import it.unimi.dsi.fastutil.doubles.DoubleOpenHashSet; |
| import it.unimi.dsi.fastutil.floats.FloatOpenHashSet; |
| import it.unimi.dsi.fastutil.ints.IntOpenHashSet; |
| import it.unimi.dsi.fastutil.longs.LongOpenHashSet; |
| import it.unimi.dsi.fastutil.shorts.ShortOpenHashSet; |
| |
| /** |
| * Below class will be used to keep all the filter values based on data type |
| * for measure column. |
| * In this class there are multiple type of set is used to avoid conversion of |
| * primitive type to primitive object to avoid gc which cause performace degrade when |
| * number of records are high |
| */ |
| public class MeasureColumnExecutorFilterInfo { |
| |
| Object[] filterKeys; |
| |
| /** |
| * filter set used for filtering the measure value based on data type |
| */ |
| private AbstractCollection filterSet; |
| |
| public void setFilterKeys(Object[] filterKeys, DataType dataType) { |
| this.filterKeys = filterKeys; |
| if (dataType == DataTypes.BOOLEAN) { |
| filterSet = new BooleanOpenHashSet(); |
| } else if (dataType == DataTypes.BYTE) { |
| filterSet = new ByteOpenHashSet(); |
| } else if (dataType == DataTypes.SHORT) { |
| filterSet = new ShortOpenHashSet(); |
| } else if (dataType == DataTypes.INT) { |
| filterSet = new IntOpenHashSet(); |
| } else if (dataType == DataTypes.FLOAT) { |
| filterSet = new FloatOpenHashSet(); |
| } else if (dataType == DataTypes.LONG) { |
| filterSet = new LongOpenHashSet(); |
| } else if (dataType == DataTypes.DOUBLE) { |
| filterSet = new DoubleOpenHashSet(); |
| } else if (DataTypes.isDecimal(dataType)) { |
| filterSet = new HashSet(); |
| } else { |
| throw new IllegalArgumentException("Invalid data type"); |
| } |
| for (int i = 0; i < filterKeys.length; i++) { |
| if (null != filterKeys[i]) { |
| filterSet.add(filterKeys[i]); |
| } |
| } |
| } |
| |
| public Object[] getFilterKeys() { |
| return filterKeys; |
| } |
| |
| public AbstractCollection getFilterSet() { |
| return filterSet; |
| } |
| } |