All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.lealone.sql.optimizer.AliasColumnResolver Maven / Gradle / Ivy

/*
 * Copyright Lealone Database Group.
 * Licensed under the Server Side Public License, v 1.
 * Initial Developer: zhh
 */
package org.lealone.sql.optimizer;

import org.lealone.db.session.Session;
import org.lealone.db.table.Column;
import org.lealone.db.value.Value;
import org.lealone.sql.IExpression;
import org.lealone.sql.expression.Expression;
import org.lealone.sql.expression.ExpressionColumn;
import org.lealone.sql.query.Select;

// 处理在where和having中出现别名的情况,如:
// SELECT id AS A FROM test where A>=0
// SELECT id/3 AS A, COUNT(*) FROM test GROUP BY A HAVING A>=0
public class AliasColumnResolver extends ColumnResolverBase {

    private final Select select;
    private final Expression expression;
    private final Column column;

    public AliasColumnResolver(Select select, Expression expression, Column column) {
        this.select = select;
        this.expression = expression;
        this.column = column;
    }

    @Override
    public Value getValue(Column col) {
        return expression.getValue(select.getSession());
    }

    @Override
    public Column[] getColumns() {
        return new Column[] { column };
    }

    @Override
    public TableFilter getTableFilter() {
        return select.getTableFilter();
    }

    @Override
    public Select getSelect() {
        return select;
    }

    @Override
    public Expression optimize(ExpressionColumn expressionColumn, Column col) {
        return expression.optimize(select.getSession());
    }

    @Override
    public Value getExpressionValue(Session session, IExpression e, Object data) {
        return expression.getValue(select.getSession());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy