/**
* 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.blur.manager;
import static org.apache.blur.lucene.LuceneVersionConstant.LUCENE_VERSION;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.blur.BlurConfiguration;
import org.apache.blur.analysis.BaseFieldManager;
import org.apache.blur.analysis.FieldTypeDefinition;
import org.apache.blur.lucene.search.SuperParser;
import org.apache.blur.manager.BlurFilterCache.FilterParser;
import org.apache.blur.server.TableContext;
import org.apache.blur.thrift.generated.BlurException;
import org.apache.blur.thrift.generated.ScoreType;
import org.apache.blur.thrift.generated.TableDescriptor;
import org.apache.blur.utils.BlurConstants;
import org.apache.hadoop.conf.Configuration;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.Query;
import org.junit.Test;
public class AliasBlurFilterCacheTest {
private static final String TABLE = "test";
private static final String TEST_FILTER = "(abc1 abc2 abc3)";
@Test
public void testFetchPreFilterEmpty() throws IOException {
BlurConfiguration configuration = new BlurConfiguration();
AliasBlurFilterCache defaultBlurFilterCache = new AliasBlurFilterCache(configuration);
Filter fetchPreFilter = defaultBlurFilterCache.fetchPreFilter(TABLE, TEST_FILTER);
assertNull(fetchPreFilter);
}
@Test
public void testFetchPreFilterNotEmpty() throws IOException, BlurException, ParseException {
BlurConfiguration configuration = new BlurConfiguration();
configuration.set("blur.filter.alias.test.super:abc1", "(fam1.f1:abc1 fam2.f1:abc1)");
configuration.set("blur.filter.alias.test.super:abc2", "(fam1.f1:abc2 fam2.f1:abc2)");
configuration.set("blur.filter.alias.test.super:abc3", "(fam1.f1:abc3 fam2.f1:abc3)");
AliasBlurFilterCache defaultBlurFilterCache = new AliasBlurFilterCache(configuration);
TableDescriptor tableDescriptor = new TableDescriptor();
tableDescriptor.setName(TABLE);
tableDescriptor.setTableUri("file:///");
final TableContext tableContext = TableContext.create(tableDescriptor);
final BaseFieldManager fieldManager = getFieldManager(new WhitespaceAnalyzer(LUCENE_VERSION));
Filter filter = QueryParserUtil.parseFilter(TABLE, TEST_FILTER, false, fieldManager, defaultBlurFilterCache,
tableContext);
Filter filterToRun = defaultBlurFilterCache.storePreFilter(TABLE, TEST_FILTER, filter, new FilterParser() {
@Override
public Query parse(String query) throws ParseException {
return new SuperParser(LUCENE_VERSION, fieldManager, false, null, ScoreType.CONSTANT, tableContext
.getDefaultPrimeDocTerm()).parse(query);
}
});
assertNotNull(filterToRun);
assertEquals("BooleanFilter(" + "FilterCache(super-abc1,QueryWrapperFilter(fam1.f1:abc1 fam2.f1:abc1)) "
+ "FilterCache(super-abc2,QueryWrapperFilter(fam1.f1:abc2 fam2.f1:abc2)) "
+ "FilterCache(super-abc3,QueryWrapperFilter(fam1.f1:abc3 fam2.f1:abc3))" + ")", filterToRun.toString());
Filter fetchPreFilter = defaultBlurFilterCache.fetchPreFilter(TABLE, TEST_FILTER);
assertNotNull(fetchPreFilter);
assertTrue(filterToRun == fetchPreFilter);
}
private BaseFieldManager getFieldManager(Analyzer a) throws IOException {
BaseFieldManager fieldManager = new BaseFieldManager(BlurConstants.SUPER, a, new Configuration()) {
@Override
protected boolean tryToStore(FieldTypeDefinition fieldTypeDefinition, String fieldName) {
return true;
}
@Override
protected void tryToLoad(String fieldName) {
}
@Override
protected List<String> getFieldNamesToLoad() throws IOException {
return new ArrayList<String>();
}
};
fieldManager.addColumnDefinition(null, "bin", null, false, "string", false, false, null);
fieldManager.addColumnDefinitionInt("a", "id_i");
fieldManager.addColumnDefinitionDouble("a", "id_d");
fieldManager.addColumnDefinitionFloat("a", "id_f");
fieldManager.addColumnDefinitionLong("a", "id_l");
fieldManager.addColumnDefinitionDate("a", "id_date", "yyyy-MM-dd");
fieldManager.addColumnDefinitionGisRecursivePrefixTree("a", "id_gis");
return fieldManager;
}
}