Пример #1
0
 /** 如果是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;
 }
Пример #2
0
  /**
   * 根据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;
  }
Пример #3
0
  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;
  }