Refine search
/** * Overrides the superclass implementation to indicate that we support pushing FeatureId filters * down into the data store. */ @Override protected FilterCapabilities createFilterCapabilities() { FilterCapabilities capabilities = new FilterCapabilities(); capabilities.addAll(FilterCapabilities.LOGICAL_OPENGIS); capabilities.addAll(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS); capabilities.addType(FilterCapabilities.SIMPLE_ARITHMETIC); capabilities.addType(PropertyIsNull.class); capabilities.addType(PropertyIsBetween.class); capabilities.addType(Id.class); capabilities.addType(IncludeFilter.class); capabilities.addType(ExcludeFilter.class); capabilities.addType(PropertyIsLike.class); return capabilities; }
/** overrides just to avoid the "WHERE" keyword */ public void encode(Filter filter) throws GeometryEncoderException { this.sdeSpatialFilters = new ArrayList<SeShapeFilter>(); if (Filter.INCLUDE.equals(filter)) { return; } if (capabilities.fullySupports(filter)) { filter.accept(this, null); } else { throw new GeometryEncoderException( "Filter type " + filter.getClass() + " not supported"); } }
Object visitNullNil(Filter filter, Expression e) { if (original == null) original = filter; if (!fcs.supports(PropertyIsNull.class)) { postStack.push(filter); return null; } int i = postStack.size(); e.accept(this, null); if (i < postStack.size()) { postStack.pop(); postStack.push(filter); return null; } preStack.pop(); // null preStack.push(filter); return null; }
/** * Determines if the filter type passed in is supported. * * @param type The AbstractFilter type to be tested * @return true if supported, false otherwise. * @deprecated */ public boolean supports(short type) { return supports(convertFilterTypeToMask(type)); }
/** * Adds a new support type to capabilities. * * @param type The {@link FilterType} type that is supported * @deprecated * @see #convertFilterTypeToMask(short) * @see #addType(long) */ public void addType(short type) { addAll(convertFilterTypeToMask(type)); }
private void visitLogicOperator(Filter filter, Class filterInterface) { if (original == null) original = filter; if (!fcs.supports(filterInterface)) { postStack.push(filter); return; int i = postStack.size(); int j = preStack.size(); if (filter instanceof Not) { next.accept(this, null); if (i < postStack.size()) { next.accept(this, null); Filter f = (Filter) postStack.pop(); while (postStack.size() > i) f = ff.and(f, (Filter) postStack.pop()); postStack.push(f); f = (Filter) preStack.pop(); while (preStack.size() > j) f = ff.and(f, (Filter) preStack.pop()); preStack.push(f);
public void testSupportOnlySome() throws Exception { PropertyIsEqualTo filter1 = createFunctionFilter(); FilterFunction_abs filterFunction_abs = new FilterFunction_abs(); filterFunction_abs.setParameters(Arrays.asList(new Expression[] {ff.property("name")})); PropertyIsEqualTo filter2 = ff.equals(ff.property("name"), filterFunction_abs); Filter filter = ff.and(filter1, filter2); FilterCapabilities filterCapabilitiesMask = new FilterCapabilities(); filterCapabilitiesMask.addType(FilterFunction_geometryType.class); filterCapabilitiesMask.addAll(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS); filterCapabilitiesMask.addAll(FilterCapabilities.LOGICAL_OPENGIS); visitor = newVisitor(filterCapabilitiesMask); filter.accept(visitor, null); assertEquals(filter1, visitor.getFilterPre()); assertEquals(filter2, visitor.getFilterPost()); } }
public void testOrNotSupported() { FilterCapabilities caps = new FilterCapabilities(); caps.addAll(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS); caps.addType(And.class); PostPreProcessFilterSplittingVisitor visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); FilterFactory ff = CommonFactoryFinder.getFilterFactory(null); Filter f1 = ff.equals(ff.property("CFCC"), ff.literal("A41")); Filter f2 = ff.equals(ff.property("CFCC"), ff.literal("A42")); Filter ored = ff.or(f1, f2); ored.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPre()); assertEquals(ored, visitor.getFilterPost()); Filter anded = ff.and(f1, f2); visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); anded.accept(visitor, null); assertEquals(anded, visitor.getFilterPre()); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); }
public void testNullLiteralInLogicCombination() { FilterCapabilities caps = new FilterCapabilities(); PostPreProcessFilterSplittingVisitor visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); caps.addAll(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS); caps.addType(And.class); caps.addType(Or.class); caps.addType(Not.class); Filter f1 = ff.equal(ff.literal(null), ff.literal("test"), false); Filter f2 = ff.not(ff.equal(ff.literal(null), ff.literal("test"), false)); Filter or = ff.or(Arrays.asList(f1, f2)); or.accept(visitor, null); assertEquals(or, visitor.getFilterPre()); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); } }
public void testVisitFidFilter() throws Exception { HashSet ids = new HashSet(); ids.add(ff.featureId("david")); Filter filter = ff.id(ids); visitor = newVisitor(new FilterCapabilities(Id.class)); filter.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); assertEquals(filter, visitor.getFilterPre()); }
public void testIsNullFilter() { FilterCapabilities caps = new FilterCapabilities(); PostPreProcessFilterSplittingVisitor visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); caps.addType(PropertyIsNull.class); Filter f1 = ff.isNull(ff.literal("abc")); f1.accept(visitor, null); assertEquals(f1, visitor.getFilterPre()); visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); Filter f2 = ff.isNull(ff.function("strConcat", ff.literal("abc"), ff.literal("def"))); f2.accept(visitor, null); assertEquals(f2, visitor.getFilterPost()); }
public void testNullParentNullAccessor() throws Exception { simpleLogicalCaps.addType(BBOX.class); simpleLogicalCaps.addType(FilterFunction_geometryType.class); visitor = newVisitor(simpleLogicalCaps); Filter funtionFilter = createFunctionFilter(); Filter geomFilter = ff.bbox(geomAtt, 10.0, 20.0, 10.0, 20.0, ""); Filter orFilter = ff.or(funtionFilter, geomFilter); visitor = new PostPreProcessFilterSplittingVisitor(new FilterCapabilities(), null, null); orFilter.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPre()); assertEquals(orFilter, visitor.getFilterPost()); visitor = new PostPreProcessFilterSplittingVisitor(simpleLogicalCaps, null, null); orFilter.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); assertEquals(orFilter, visitor.getFilterPre()); }
public void testTemporalFilter() throws Exception { FilterCapabilities caps = new FilterCapabilities(); PostPreProcessFilterSplittingVisitor visitor = new PostPreProcessFilterSplittingVisitor(caps, null, null); Filter f1 = ff.after(ff.property("foo"), ff.literal("2011-06-20")); f1.accept(visitor, null); assertEquals(f1, visitor.getFilterPost()); }
@SuppressWarnings({"rawtypes", "unchecked"}) public void testVisitIdFilterWithNoIdCapabilities() throws Exception { // Id Filter HashSet ids = new HashSet(); ids.add(ff.featureId("david")); Filter idFilter = ff.id(ids); // no Id Capabilities FilterCapabilities fc = new FilterCapabilities(); fc.addAll(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS); fc.addType(And.class); visitor = newVisitor(fc); idFilter.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPre()); assertEquals(idFilter, visitor.getFilterPost()); }
public void testTimestampHistogram() throws Exception { // buckets with a size of one day, the function returns an integer from 0 onwards, which // is a zero based bucket number in the bucket sequence FilterFactory ff = dataStore.getFilterFactory(); PropertyName pn = ff.property(aname("last_update")); Date baseDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-06-03 00:00:00"); Expression difference = ff.function("dateDifference", pn, ff.literal(baseDate)); int dayInMs = 1000 * 60 * 60 * 24; Expression expression = ff.function("floor", ff.divide(difference, ff.literal(dayInMs))); FilterCapabilities capabilities = dataStore.getFilterCapabilities(); boolean expectOptimized = capabilities.supports(FilterFunction_floor.class) && capabilities.supports(DateDifferenceFunction.class); List<Object[]> value = genericGroupByTestTest(Query.ALL, Aggregate.COUNT, expectOptimized, expression); assertNotNull(value); assertEquals(5, value.size()); checkValueContains(value, "0", "3"); // 2016-06-03 checkValueContains(value, "2", "1"); // 2016-06-05 checkValueContains(value, "3", "2"); // 2016-06-06 checkValueContains(value, "4", "3"); // 2016-06-07 checkValueContains(value, "12", "3"); // 2016-06-15 }
public void testFunctionANDGeometryFilter() throws Exception { simpleLogicalCaps.addType(BBOX.class); visitor = newVisitor(simpleLogicalCaps); Filter funtionFilter = createFunctionFilter(); Filter geomFilter = ff.bbox(geomAtt, 10, 20, 10, 20, ""); Filter andFilter = ff.and(funtionFilter, geomFilter); andFilter.accept(visitor, null); assertEquals(funtionFilter.toString(), visitor.getFilterPost().toString()); assertEquals(geomFilter.toString(), visitor.getFilterPre().toString()); simpleLogicalCaps.addType(FilterFunction_geometryType.class); visitor = newVisitor(simpleLogicalCaps); andFilter.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); assertEquals(andFilter, visitor.getFilterPre()); }
/** * Override done to ensure we don't complain if there is a BBOX filter, even if we claim not to * support it */ public void encode(Filter filter) throws FilterToSQLException { if (out == null) throw new FilterToSQLException("Can't encode to a null writer."); // hack, we lied about being able to support BBOX, because the implementation is // just partial, so here don't complain if we got one, it means the dialect already // set the filter correctly FilterCapabilities caps = createFilterCapabilities(); caps.addType(BBOX.class); if (caps.fullySupports(filter)) { try { if (!inline) { out.write("WHERE "); } filter.accept(this, null); } catch (java.io.IOException ioe) { LOGGER.warning("Unable to export filter" + ioe); throw new FilterToSQLException("Problem writing filter: ", ioe); } } else { throw new FilterToSQLException("Filter type not supported"); } }
public void testVisitBetweenFilter() throws Exception { PropertyIsBetween filter = ff.between(ff.literal(0), ff.property(numAtt), ff.literal(4)); FilterCapabilities caps = new FilterCapabilities(PropertyIsBetween.class); runTest(filter, caps, numAtt); }
public void testFunctionNOTFilter() throws Exception { simpleLogicalCaps.addType(BBOX.class); visitor = newVisitor(simpleLogicalCaps); Filter funtionFilter = createFunctionFilter(); Filter not = ff.not(funtionFilter); not.accept(visitor, null); assertEquals(not, visitor.getFilterPost()); assertEquals(Filter.INCLUDE, visitor.getFilterPre()); simpleLogicalCaps.addType(FilterFunction_geometryType.class); visitor = newVisitor(simpleLogicalCaps); not.accept(visitor, null); assertEquals(Filter.INCLUDE, visitor.getFilterPost()); assertEquals(not, visitor.getFilterPre()); }