⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expression.java

📁 hsqldb是100%java实现的数据库,是一个开放源代码的JAVA数据库 l 具有标准的SQL语法和JAVA接口 l HSQLDB可以自由使用和分发 l 非常简洁和快速的
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            case NOT :                return eArg.isConditional();            case AND :            case OR :                return eArg.isConditional() && eArg2.isConditional();            default :                return false;        }    }    /**     * Collects all expressions that must be in the GROUP BY clause, for a     * grouped select statement.     *     * @param colExps expression list     */    void collectInGroupByExpressions(HsqlArrayList colExps) {        if (!(isConstant() || isSelfAggregate())) {            if (isColumn()) {                colExps.add(this);            } else if (exprType == FUNCTION) {//                function.collectInGroupByExpressions(colExps);            } else if (exprType == CASEWHEN) {                eArg2.collectInGroupByExpressions(colExps);            } else {                if (eArg != null) {                    eArg.collectInGroupByExpressions(colExps);                }                if (eArg2 != null) {                    eArg2.collectInGroupByExpressions(colExps);                }            }        }    }    /**     * Set an ORDER BY column expression DESC     *     */    void setDescending() {        isDescending = true;    }    /**     * Is an ORDER BY column expression DESC     *     *     * @return boolean     */    boolean isDescending() {        return isDescending;    }    /**     * Set the column alias and whether the name is quoted     *     * @param s alias     * @param isquoted boolean     */    void setAlias(String s, boolean isquoted) {        columnAlias = s;        aliasQuoted = isquoted;    }    /**     * Change the column name     *     * @param newname name     * @param isquoted quoted     */    void setColumnName(String newname, boolean isquoted) {        columnName   = newname;        columnQuoted = isquoted;    }    /**     * Change the table name     *     * @param newname table name for column expression     */    void setTableName(String newname) {        tableName = newname;    }    /**     * Return the user defined alias or null if none     *     * @return alias     */    String getDefinedAlias() {        return columnAlias;    }    /**     * Get the column alias     *     *     * @return alias     */    String getAlias() {        if (columnAlias != null) {            return columnAlias;        }        if (exprType == COLUMN) {            return columnName;        }        return "";    }    /**     * Is a column alias quoted     *     * @return boolean     */    boolean isAliasQuoted() {        if (columnAlias != null) {            return aliasQuoted;        }        if (exprType == COLUMN) {            return columnQuoted;        }        return false;    }    /**     * Returns the type of expression     *     *     * @return type     */    int getType() {        return exprType;    }    /**     * Returns the left node     *     *     * @return argument     */    Expression getArg() {        return eArg;    }    /**     * Returns the right node     *     *     * @return argument     */    Expression getArg2() {        return eArg2;    }    /**     * Returns the table filter for a COLUMN expression     *     * @return table filter     */    TableFilter getFilter() {        return tableFilter;    }    /**     * Final check for all expressions.     *     * @param check boolean     * @return boolean     * @throws HsqlException     */    boolean checkResolved(boolean check) throws HsqlException {        boolean result = true;        if (eArg != null) {            result = result && eArg.checkResolved(check);        }        if (eArg2 != null) {            result = result && eArg2.checkResolved(check);        }        if (subQuery != null && subQuery.select != null) {            result = result && subQuery.select.checkResolved(check);        }        if (function != null) {            result = result && function.checkResolved(check);        }        if (valueList != null) {            for (int i = 0; i < valueList.length; i++) {                result = result && valueList[i].checkResolved(check);            }        }        if (exprType == COLUMN) {            if (tableFilter == null) {                // if an order by column alias                result = joinedTableColumnIndex != -1;                if (!result && check) {                    String err = tableName == null ? columnName                                                   : tableName + "."                                                     + columnName;                    throw Trace.error(Trace.COLUMN_NOT_FOUND, err);                }            } else {                tableFilter.usedColumns[this.columnIndex] = true;            }        }        return result;    }    /**     * Resolve the table names for columns and throws if a column remains     * unresolved.     *     * @param filters list of filters     *     * @throws HsqlException     */    void checkTables(HsqlArrayList filters) throws HsqlException {        if (filters == null || exprType == Expression.VALUE) {            return;        }        if (eArg != null) {            eArg.checkTables(filters);        }        if (eArg2 != null) {            eArg2.checkTables(filters);        }        switch (exprType) {            case COLUMN :                boolean found = false;                int     len   = filters.size();                for (int j = 0; j < len; j++) {                    TableFilter filter     = (TableFilter) filters.get(j);                    String      filterName = filter.getName();                    if (tableName == null || filterName.equals(tableName)) {                        Table table = filter.getTable();                        int   i     = table.findColumn(columnName);                        if (i != -1) {                            if (tableName == null) {                                if (found) {                                    throw Trace.error(                                        Trace.AMBIGUOUS_COLUMN_REFERENCE,                                        columnName);                                }                                //                                found = true;                            } else {                                return;                            }                        }                    }                }                if (found) {                    return;                }                throw Trace.error(Trace.COLUMN_NOT_FOUND, columnName);            case QUERY :                // fredt - subquery in join condition !                break;            case FUNCTION :                if (function != null) {                    function.checkTables(filters);                }                break;            case ALL :            case ANY :                break;            case IN :                if (eArg2.exprType != QUERY) {                    Expression[] vl = eArg2.valueList;                    for (int i = 0; i < vl.length; i++) {                        vl[i].checkTables(filters);                    }                }                break;            default :        }    }    /**     * return the expression for an aliases     */    Expression getExpressionForAlias(Expression[] columns, int length) {        for (int i = 0; i < length; i++) {            if (columnName.equals(columns[i].columnAlias)                    && (tableName == null                        || tableName.equals(columns[i].tableName))) {                return columns[i];            }        }        return this;    }    /**     * Replace aliases with expression trees     */    void replaceAliases(Expression[] columns,                        int length) throws HsqlException {        if (eArg != null) {            if (eArg.exprType == Expression.COLUMN) {                eArg = eArg.getExpressionForAlias(columns, length);            } else {                eArg.replaceAliases(columns, length);            }        }        if (eArg2 != null) {            if (eArg2.exprType == Expression.COLUMN) {                eArg2 = eArg2.getExpressionForAlias(columns, length);            } else {                eArg2.replaceAliases(columns, length);            }        }        switch (exprType) {            case QUERY :                break;            case FUNCTION :                if (function != null) {                    function.replaceAliases(columns, length);                }                break;            case ALL :            case ANY :                break;            case IN :                if (eArg2.exprType != QUERY) {                    Expression[] vl = eArg2.valueList;                    for (int i = 0; i < vl.length; i++) {                        if (vl[i].exprType == Expression.COLUMN) {                            vl[i] = vl[i].getExpressionForAlias(columns,                                                                length);                        } else {                            vl[i].replaceAliases(columns, length);                        }                    }                }                break;            default :        }    }    /**     * Workaround for CHECK constraints. We don't want optimisation so we     * flag all LIKE expressions as already optimised.     *     * @throws HsqlException     */    void setLikeOptimised() throws HsqlException {        if (eArg != null) {            eArg.setLikeOptimised();        }        if (eArg2 != null) {            eArg2.setLikeOptimised();        }        if (exprType == LIKE) {            likeObject.optimised = true;        }    }    /**     * Removes table filter resolution from an Expression tree.     *//*    void removeFilters() throws HsqlException {        if (eArg != null) {            eArg.removeFilters();        }        if (eArg2 != null) {            eArg2.removeFilters();        }        switch (exprType) {            case COLUMN :                tableFilter = null;                return;            case QUERY :                if (subSelect != null) {                    subSelect.removeFilters();                }                break;            case FUNCTION :                if (function != null) {                    function.removeFilters();                }                break;            case IN :                if (eArg2.exprType != QUERY) {                    Expression[] vl = eArg2.valueList;                    for (int i = 0; i < vl.length; i++) {                        vl[i].removeFilters();                    }                }                break;            default :        }    }*/    /**     * set boolean flags and expressions for columns in a join     *     * @param filter target table filter     * @param columns boolean array

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -