return new ConstantTupleFilter(left.add(right).toString()); case MINUS: return new ConstantTupleFilter(left.subtract(right).toString()); case TIMES: return new ConstantTupleFilter(left.multiply(right).toString()); case DIVIDE: return new ConstantTupleFilter(left.divide(right).toString()); default: return null;
private TupleFilter cast(TupleFilter filter, RelDataType type) { if ((filter instanceof ConstantTupleFilter) == false) { return filter; } ConstantTupleFilter constFilter = (ConstantTupleFilter) filter; if (type.getFamily() == SqlTypeFamily.DATE || type.getFamily() == SqlTypeFamily.DATETIME || type.getFamily() == SqlTypeFamily.TIMESTAMP) { List<String> newValues = Lists.newArrayList(); for (Object v : constFilter.getValues()) { if (v == null) newValues.add(null); else newValues.add(String.valueOf(DateFormat.stringToMillis(v.toString()))); } constFilter = new ConstantTupleFilter(newValues); } return constFilter; }
while (childIterator.hasNext()) { TupleFilter next = childIterator.next(); if (ConstantTupleFilter.TRUE.equals(next)) { logger.debug("Optimized {{}} to ConstantTupleFilter.TRUE", logicalTupleFilter); return ConstantTupleFilter.TRUE; if (ConstantTupleFilter.FALSE.equals(next)) { childIterator.remove(); while (childIterator.hasNext()) { TupleFilter next = childIterator.next(); if (ConstantTupleFilter.FALSE.equals(next)) { logger.debug("Optimized {{}} to ConstantTupleFilter.FALSE", logicalTupleFilter); return ConstantTupleFilter.FALSE; if (ConstantTupleFilter.TRUE.equals(next)) { childIterator.remove();
public CompareResultType getCompareResultType() { // cases like 1 = 1, or 'a' <> 'b' if (this.operator == FilterOperatorEnum.EQ || this.operator == FilterOperatorEnum.NEQ) { if (this.children != null && this.children.size() == 2 && // this.children.get(0) instanceof ConstantTupleFilter && // this.children.get(1) instanceof ConstantTupleFilter) { if (((ConstantTupleFilter) this.children.get(0)).getValues().equals(((ConstantTupleFilter) this.children.get(1)).getValues())) { return this.operator == FilterOperatorEnum.EQ ? CompareResultType.AlwaysTrue : CompareResultType.AlwaysFalse; } else { return this.operator == FilterOperatorEnum.EQ ? CompareResultType.AlwaysFalse : CompareResultType.AlwaysTrue; } } } return CompareResultType.Unknown; }
@Override public TupleFilter reverse() { if (this.evaluate(null, null)) { return ConstantTupleFilter.FALSE; } else { return ConstantTupleFilter.TRUE; } }
public CompareResultType getCompareResultType() { // cases like 1 = 1, or 'a' <> 'b' if (this.operator == FilterOperatorEnum.EQ || this.operator == FilterOperatorEnum.NEQ) { if (this.children != null && this.children.size() == 2 && // this.children.get(0) instanceof ConstantTupleFilter && // this.children.get(1) instanceof ConstantTupleFilter) { if (((ConstantTupleFilter) this.children.get(0)).getValues().equals(((ConstantTupleFilter) this.children.get(1)).getValues())) { return this.operator == FilterOperatorEnum.EQ ? CompareResultType.AlwaysTrue : CompareResultType.AlwaysFalse; } else { return this.operator == FilterOperatorEnum.EQ ? CompareResultType.AlwaysFalse : CompareResultType.AlwaysTrue; } } } return CompareResultType.Unknown; }
@Override public TupleFilter reverse() { if (this.evaluate(null, null)) { return ConstantTupleFilter.FALSE; } else { return ConstantTupleFilter.TRUE; } }
@Override public TupleFilter visitLiteral(RexLiteral literal) { String strValue = null; Object literalValue = literal.getValue(); if (literalValue instanceof NlsString) { strValue = ((NlsString) literalValue).getValue(); } else if (literalValue instanceof GregorianCalendar) { GregorianCalendar g = (GregorianCalendar) literalValue; strValue = Long.toString(g.getTimeInMillis()); } else if (literalValue instanceof TimeUnitRange) { // Extract(x from y) in where clause strValue = ((TimeUnitRange) literalValue).name(); } else if (literalValue == null) { strValue = null; } else { strValue = literalValue.toString(); } TupleFilter filter = new ConstantTupleFilter(strValue); return filter; }
@SuppressWarnings("unchecked") @Override public TupleFilter onSerialize(TupleFilter filter) { if (filter instanceof CompareTupleFilter) { CompareTupleFilter cfilter = (CompareTupleFilter) filter; List<? extends TupleFilter> children = cfilter.getChildren(); if (children == null || children.size() < 1) { throw new IllegalArgumentException("Illegal compare filter: " + cfilter); } TblColRef col = cfilter.getColumn(); if (col == null || !col.getType().isDateTimeFamily()) { return cfilter; } for (TupleFilter child : filter.getChildren()) { dateCompareTupleChildren.put(child, col.getType()); } } if (filter instanceof ConstantTupleFilter && dateCompareTupleChildren.containsKey(filter)) { ConstantTupleFilter constantTupleFilter = (ConstantTupleFilter) filter; Set<String> newValues = Sets.newHashSet(); DataType columnType = dateCompareTupleChildren.get(filter); for (String value : (Collection<String>) constantTupleFilter.getValues()) { newValues.add(formatTime(value, columnType)); } return new ConstantTupleFilter(newValues); } return filter; }
while (childIterator.hasNext()) { TupleFilter next = childIterator.next(); if (ConstantTupleFilter.TRUE.equals(next)) { logger.debug("Optimized {{}} to ConstantTupleFilter.TRUE", logicalTupleFilter); return ConstantTupleFilter.TRUE; if (ConstantTupleFilter.FALSE.equals(next)) { childIterator.remove(); while (childIterator.hasNext()) { TupleFilter next = childIterator.next(); if (ConstantTupleFilter.FALSE.equals(next)) { logger.debug("Optimized {{}} to ConstantTupleFilter.FALSE", logicalTupleFilter); return ConstantTupleFilter.FALSE; if (ConstantTupleFilter.TRUE.equals(next)) { childIterator.remove();
private TupleFilter newCompareFilter(FilterOperatorEnum op, TblColRef col, ByteArray code) { CompareTupleFilter r = new CompareTupleFilter(op); r.addChild(new ColumnTupleFilter(col)); r.addChild(new ConstantTupleFilter(code)); return r; }
private TupleFilter cast(TupleFilter filter, RelDataType type) { if ((filter instanceof ConstantTupleFilter) == false) { return filter; } ConstantTupleFilter constFilter = (ConstantTupleFilter) filter; if (type.getFamily() == SqlTypeFamily.DATE || type.getFamily() == SqlTypeFamily.DATETIME || type.getFamily() == SqlTypeFamily.TIMESTAMP) { List<String> newValues = Lists.newArrayList(); for (Object v : constFilter.getValues()) { if (v == null) newValues.add(null); else newValues.add(String.valueOf(DateFormat.stringToMillis(v.toString()))); } constFilter = new ConstantTupleFilter(newValues); } return constFilter; }
protected CompareTupleFilter buildINCompareFilter(TblColRef dateColumn) throws ParseException { CompareTupleFilter compareFilter = new CompareTupleFilter(FilterOperatorEnum.IN); ColumnTupleFilter columnFilter = new ColumnTupleFilter(dateColumn); compareFilter.addChild(columnFilter); List<String> inValues = Lists.newArrayList(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT); Date startDate = simpleDateFormat.parse("1970-01-01"); Date endDate = simpleDateFormat.parse("2100-01-01"); Calendar start = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ROOT); start.setTime(startDate); Calendar end = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ROOT); end.setTime(endDate); for (Date date = start.getTime(); start.before(end); start.add(Calendar.DATE, 1), date = start.getTime()) { inValues.add(simpleDateFormat.format(date)); } ConstantTupleFilter constantFilter = new ConstantTupleFilter(inValues); compareFilter.addChild(constantFilter); return compareFilter; }
@SuppressWarnings("unchecked") @Override public TupleFilter onSerialize(TupleFilter filter) { if (filter instanceof CompareTupleFilter) { CompareTupleFilter cfilter = (CompareTupleFilter) filter; List<? extends TupleFilter> children = cfilter.getChildren(); if (children == null || children.size() < 1) { throw new IllegalArgumentException("Illegal compare filter: " + cfilter); } TblColRef col = cfilter.getColumn(); if (col == null || !col.getType().isDateTimeFamily()) { return cfilter; } for (TupleFilter child : filter.getChildren()) { dateCompareTupleChildren.put(child, col.getType()); } } if (filter instanceof ConstantTupleFilter && dateCompareTupleChildren.containsKey(filter)) { ConstantTupleFilter constantTupleFilter = (ConstantTupleFilter) filter; Set<String> newValues = Sets.newHashSet(); DataType columnType = dateCompareTupleChildren.get(filter); for (String value : (Collection<String>) constantTupleFilter.getValues()) { newValues.add(formatTime(value, columnType)); } return new ConstantTupleFilter(newValues); } return filter; }
CompareTupleFilter inFilter = new CompareTupleFilter(TupleFilter.FilterOperatorEnum.IN); inFilter.addChild(new ColumnTupleFilter(entry.getKey())); inFilter.addChild(new ConstantTupleFilter(entry.getValue().getFirst())); inFilter.getVariables().putAll(entry.getValue().getSecond()); ret.addChild(inFilter);
protected CompareTupleFilter buildEQCompareFilter(List<TblColRef> groups, int index) { TblColRef column = groups.get(index); CompareTupleFilter compareFilter = new CompareTupleFilter(FilterOperatorEnum.EQ); ColumnTupleFilter columnFilter = new ColumnTupleFilter(column); compareFilter.addChild(columnFilter); ConstantTupleFilter constantFilter = null; if (index == 0) { constantFilter = new ConstantTupleFilter("2013-03-10"); } else if (index == 1) { constantFilter = new ConstantTupleFilter("ClothinShoes & Accessories"); } compareFilter.addChild(constantFilter); return compareFilter; }
break; case CONSTANT: filter = new ConstantTupleFilter(); break; case DYNAMIC:
result = ConstantTupleFilter.FALSE; } else { newCompareFilter.addChild(new ConstantTupleFilter(newValues)); result = newCompareFilter; result = ConstantTupleFilter.TRUE; } else { newCompareFilter.addChild(new ConstantTupleFilter(notInValues)); result = newCompareFilter; result = ConstantTupleFilter.TRUE; } else { newCompareFilter.addChild(new ConstantTupleFilter(v)); result = newCompareFilter; result = ConstantTupleFilter.TRUE; } else { newCompareFilter.addChild(new ConstantTupleFilter(v)); result = newCompareFilter; result = ConstantTupleFilter.FALSE; } else { newCompareFilter.addChild(new ConstantTupleFilter(v)); result = newCompareFilter; result = ConstantTupleFilter.TRUE; } else { newCompareFilter.addChild(new ConstantTupleFilter(v)); result = newCompareFilter;
private CompareTupleFilter eq(ColumnTupleFilter col, int... values) { CompareTupleFilter r = new CompareTupleFilter(FilterOperatorEnum.IN); r.addChild(col); List<ByteArray> list = Lists.newArrayList(); for (int v : values) { int c = col.getColumn().getColumnDesc().getZeroBasedIndex(); int len = info.getCodeSystem().maxCodeLength(c); ByteArray bytes = new ByteArray(len); BytesUtil.writeLong(v, bytes.array(), bytes.offset(), len); list.add(bytes); } r.addChild(new ConstantTupleFilter(list)); return r; }
public static CompareTupleFilter compare(TblColRef col, FilterOperatorEnum op, Object... value) { CompareTupleFilter result = new CompareTupleFilter(op); result.addChild(new ColumnTupleFilter(col)); result.addChild(new ConstantTupleFilter(Arrays.asList(value))); return result; }