/** 如果是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; }
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; }
private static void findBooleanFilter(IBooleanFilter filter, Parameters parameters) { if (filter == null) { return; } findObject(filter.getColumn(), parameters); findObject(filter.getValue(), parameters); if (filter.getOperation() == OPERATION.IN) { List<Object> values = filter.getValues(); if (values != null && !values.isEmpty()) { for (int i = 0; i < values.size(); i++) { findObject(values.get(i), parameters); } } } }
protected ISelectable getColumn(IBooleanFilter f) { return (ISelectable) f.getColumn(); }