public static BaseFunction toFixedFunction()

in fastmodel-core/src/main/java/com/aliyun/fastmodel/core/tree/statement/rule/strategy/StrategyUtil.java [89:138]


    public static BaseFunction toFixedFunction(BaseExpression expression,
        BaseDataType baseDataType) {
        if (expression instanceof BaseFunction) {
            return (BaseFunction)expression;
        }
        if (!(expression instanceof FunctionCall)) {
            return null;
        }
        FunctionCall functionCall = (FunctionCall)expression;
        QualifiedName funcName = functionCall.getFuncName();
        String suffix = funcName.getSuffix();
        try {
            BaseFunctionName baseFunctionName = BaseFunctionName.valueOf(suffix.toUpperCase(Locale.ROOT));
            if (baseFunctionName.isTableFunction()) {
                return new TableFunction(baseFunctionName, functionCall.getArguments());
            } else {
                List<BaseExpression> arguments = functionCall.getArguments();
                if (isEmpty(arguments)) {
                    return null;
                }
                BaseExpression baseExpression = arguments.get(0);
                if (!(baseExpression instanceof TableOrColumn)) {
                    return null;
                }
                TableOrColumn tableOrColumn = (TableOrColumn)baseExpression;
                if (baseFunctionName == BaseFunctionName.IN_TABLE) {
                    if (arguments.size() < WITHOUT_COLUMN_LENGTH || arguments.size() > WITH_COLUMN_LENGTH) {
                        //非法的格式
                        return null;
                    }
                    if (arguments.size() == WITHOUT_COLUMN_LENGTH) {
                        TableOrColumn tableOrColumn1 = (TableOrColumn)arguments.get(1);
                        return new InTableFunction(tableOrColumn.getQualifiedName(), tableOrColumn1.getQualifiedName(),
                            null);
                    } else if (arguments.size() == WITH_COLUMN_LENGTH) {
                        TableOrColumn tableOrColumn1 = (TableOrColumn)arguments.get(TABLE_INDEX);
                        TableOrColumn tableOrColumn2 = (TableOrColumn)arguments.get(MATCH_COLUMN_INDEX);
                        return new InTableFunction(tableOrColumn.getQualifiedName(), tableOrColumn1.getQualifiedName(),
                            new Identifier(tableOrColumn2.getQualifiedName().getSuffix()));
                    }
                }
                ColumnFunction columnFunction = new ColumnFunction(
                    baseFunctionName,
                    tableOrColumn, baseDataType);
                return columnFunction;
            }
        } catch (IllegalArgumentException e) {
            return null;
        }
    }