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; }
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; }
@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; }
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; }
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; }
@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; }