/** 如果是1 = id的情况,转化为id = 1 */ private static IFilter exchage(IFilter root) { IBooleanFilter bf = (IBooleanFilter) root; if (!FilterUtils.isConstValue(bf.getValue()) && FilterUtils.isConstValue(bf.getColumn())) { Object val = bf.getColumn(); bf.setColumn(bf.getValue()); bf.setValue(val); OPERATION newOp = bf.getOperation(); switch (bf.getOperation()) { case GT: newOp = OPERATION.LT; break; case LT: newOp = OPERATION.GT; break; case GT_EQ: newOp = OPERATION.LT_EQ; break; case LT_EQ: newOp = OPERATION.GT_EQ; break; default: break; } bf.setOperation(newOp); } return bf; }
/** * 根据range结果,构造filter * * @param range * @param column * @return */ protected List<IFilter> buildFilter(Range range, Object column) { List<IFilter> filters = new ArrayList(2); if (range == null) { return filters; } if (range.isSingleValue()) { IBooleanFilter en = ASTNodeFactory.getInstance().createBooleanFilter().setOperation(OPERATION.EQ); en.setColumn(column); en.setValue(range.getMaxValue()); filters.add(en); return filters; } if (range.getMinValue() != null) { IBooleanFilter gn; if (range.isMinIncluded()) { gn = ASTNodeFactory.getInstance().createBooleanFilter().setOperation(OPERATION.GT_EQ); } else { gn = ASTNodeFactory.getInstance().createBooleanFilter().setOperation(OPERATION.GT); } gn.setColumn(column); gn.setValue(range.getMinValue()); filters.add(gn); } if (range.getMaxValue() != null) { IBooleanFilter ln; if (range.isMaxIncluded()) { ln = ASTNodeFactory.getInstance().createBooleanFilter().setOperation(OPERATION.LT_EQ); } else { ln = ASTNodeFactory.getInstance().createBooleanFilter().setOperation(OPERATION.LT); } ln.setColumn(column); ln.setValue(range.getMaxValue()); filters.add(ln); } return filters; }
private static IFilter typeConvert(IFilter root) { IBooleanFilter bf = (IBooleanFilter) root; // 如果是id in (xx) if (bf.getValues() != null && bf.getColumn() instanceof ISelectable) { for (int i = 0; i < bf.getValues().size(); i++) { bf.getValues() .set( i, OptimizerUtils.convertType( bf.getValues().get(i), ((ISelectable) bf.getColumn()).getDataType())); } } else { // 如果是 1 = id情况 if (FilterUtils.isConstValue(bf.getColumn()) && !FilterUtils.isConstValue(bf.getValue())) { DATA_TYPE type = null; if (bf.getValue() instanceof IColumn) { type = ((IColumn) bf.getValue()).getDataType(); } if (bf.getValue() instanceof IFunction) { type = ((IFunction) bf.getValue()).getDataType(); } bf.setColumn(OptimizerUtils.convertType(bf.getColumn(), type)); } // 如果是 id = 1情况 if (FilterUtils.isConstValue(bf.getValue()) && !FilterUtils.isConstValue(bf.getColumn())) { DATA_TYPE type = null; if (bf.getColumn() instanceof IColumn) { type = ((IColumn) bf.getColumn()).getDataType(); } if (bf.getColumn() instanceof IFunction) { type = ((IFunction) bf.getColumn()).getDataType(); } bf.setValue(OptimizerUtils.convertType(bf.getValue(), type)); } } return bf; }