Esempio n. 1
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;
  }