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

📄 expression.java

📁 hsql是很有名的嵌入式数据库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
     * @param datatype data type     * @param o data     */    Expression(int datatype, Object o) {        exprType  = VALUE;        dataType  = datatype;        valueData = o;    }    /**     * Creates a new (possibly PARAM) VALUE expression     *     * @param datatype initial datatype     * @param o initial value     * @param isParam true if this is to be a PARAM VALUE expression     */    Expression(int datatype, Object o, boolean isParam) {        this(datatype, o);        this.isParam = isParam;        if (isParam) {            paramMode = PARAM_IN;        }    }    private void checkAggregate() {        if (isAggregate(exprType)) {            aggregateSpec = AGGREGATE_SELF;        } else {            aggregateSpec = AGGREGATE_NONE;            if ((eArg != null) && eArg.isAggregate()) {                aggregateSpec += AGGREGATE_LEFT;            }            if ((eArg2 != null) && eArg2.isAggregate()) {                aggregateSpec += AGGREGATE_RIGHT;            }        }    }    public String describe(Session session) {        return describe(session, 0);    }    static String getContextDDL(Expression expression) throws HsqlException {        String ddl = expression.getDDL();        if (expression.exprType != VALUE && expression.exprType != COLUMN                && expression.exprType != FUNCTION                && expression.exprType != ALTERNATIVE                && expression.exprType != CASEWHEN                && expression.exprType != CONVERT) {            StringBuffer temp = new StringBuffer();            ddl = temp.append('(').append(ddl).append(')').toString();        }        return ddl;    }    /**     * For use with CHECK constraints. Under development.     *     * Currently supports a subset of expressions and is suitable for CHECK     * search conditions that refer only to the inserted/updated row.     *     * For full DDL reporting of VIEW select queries and CHECK search     * conditions, future improvements here are dependent upon improvements to     * SELECT query parsing, so that it is performed in a number of passes.     * An early pass should result in the query turned into an Expression tree     * that contains the information in the original SQL without any     * alterations, and with tables and columns all resolved. This Expression     * can then be preserved for future use. Table and column names that     * are not user-defined aliases should be kept as the HsqlName structures     * so that table or column renaming is reflected in the precompiled     * query.     *     * @return DDL     * @throws HsqlException     */    String getDDL() throws HsqlException {        StringBuffer buf   = new StringBuffer(64);        String       left  = null;        String       right = null;        if (eArg != null) {            left = Expression.getContextDDL(eArg);        }        if (eArg2 != null) {            right = Expression.getContextDDL(eArg2);        }        switch (exprType) {            case FUNCTION :                return function.getDLL();            case VALUE :                try {                    return Column.createSQLString(valueData, dataType);                } catch (HsqlException e) {}                return buf.toString();            case COLUMN :                // this is a limited solution                Table table = tableFilter.getTable();                if (tableName != null) {                    buf.append(table.tableName.statementName);                    buf.append('.');                }                buf.append(                    table.getColumn(columnIndex).columnName.statementName);                return buf.toString();            case TRUE :                return Token.T_TRUE;            case FALSE :                return Token.T_FALSE;            case VALUELIST :                for (int i = 0; i < valueList.length; i++) {                    buf.append(valueList[i].getDDL());                    if (i < valueList.length - 1) {                        buf.append(',');                    }                }                return buf.toString();            case ASTERIX :                buf.append('*');                return buf.toString();            case NEGATE :                buf.append('-').append(left);                return buf.toString();            case ADD :                buf.append(left).append('+').append(right);                return buf.toString();            case SUBTRACT :                buf.append(left).append('-').append(right);                return buf.toString();            case MULTIPLY :                buf.append(left).append('*').append(right);                return buf.toString();            case DIVIDE :                buf.append(left).append('/').append(right);                return buf.toString();            case CONCAT :                buf.append(left).append("||").append(right);                return buf.toString();            case NOT :                if (eArg.exprType == IS_NULL) {                    buf.append(getContextDDL(eArg.eArg)).append(' ').append(                        Token.T_IS).append(' ').append(Token.T_NOT).append(                        ' ').append(Token.T_NULL);                    return buf.toString();                }                buf.append(Token.T_NOT).append(' ').append(left);                return buf.toString();            case EQUAL :                buf.append(left).append('=').append(right);                return buf.toString();            case BIGGER_EQUAL :                buf.append(left).append(">=").append(right);                return buf.toString();            case BIGGER :                buf.append(left).append('>').append(right);                return buf.toString();            case SMALLER :                buf.append(left).append('<').append(right);                return buf.toString();            case SMALLER_EQUAL :                buf.append(left).append("<=").append(right);                return buf.toString();            case NOT_EQUAL :                if (Token.T_NULL.equals(right)) {                    buf.append(left).append(" IS NOT ").append(right);                } else {                    buf.append(left).append("!=").append(right);                }                return buf.toString();            case LIKE :                buf.append(left).append(' ').append(Token.T_LIKE).append(' ');                buf.append(right);                /** @todo fredt - scripting of non-ascii escapes needs changes to general script logging */                if (likeObject.escapeChar != null) {                    buf.append(' ').append(Token.T_ESCAPE).append(' ').append(                        '\'');                    buf.append(likeObject.escapeChar.toString()).append('\'');                    buf.append(' ');                }                return buf.toString();            case AND :                buf.append(left).append(' ').append(Token.T_AND).append(                    ' ').append(right);                return buf.toString();            case OR :                buf.append(left).append(' ').append(Token.T_OR).append(                    ' ').append(right);                return buf.toString();            case ALL :                buf.append(left).append(' ').append(Token.T_ALL).append(                    ' ').append(right);                return buf.toString();            case ANY :                buf.append(left).append(' ').append(Token.T_ANY).append(                    ' ').append(right);                return buf.toString();            case IN :                buf.append(left).append(' ').append(Token.T_IN).append(                    ' ').append(right);                return buf.toString();            case CONVERT :                buf.append(' ').append(Token.T_CONVERT).append('(');                buf.append(left).append(',');                buf.append(Types.getTypeString(dataType, precision, scale));                buf.append(')');                return buf.toString();            case CASEWHEN :                buf.append(' ').append(Token.T_CASEWHEN).append('(');                buf.append(left).append(',').append(right).append(')');                return buf.toString();            case IS_NULL :                buf.append(left).append(' ').append(Token.T_IS).append(                    ' ').append(Token.T_NULL);                return buf.toString();            case ALTERNATIVE :                buf.append(left).append(',').append(right);                return buf.toString();            case QUERY :/*                buf.append('(');                buf.append(subSelect.getDDL());                buf.append(')');*/                break;            case EXISTS :                buf.append(' ').append(Token.T_EXISTS).append(' ');                break;            case COUNT :                buf.append(' ').append(Token.T_COUNT).append('(');                break;            case SUM :                buf.append(' ').append(Token.T_SUM).append('(');                buf.append(left).append(')');                break;            case MIN :                buf.append(' ').append(Token.T_MIN).append('(');                buf.append(left).append(')');                break;            case MAX :                buf.append(' ').append(Token.T_MAX).append('(');                buf.append(left).append(')');                break;            case AVG :                buf.append(' ').append(Token.T_AVG).append('(');                buf.append(left).append(')');                break;            case EVERY :                buf.append(' ').append(Token.T_EVERY).append('(');                buf.append(left).append(')');                break;            case SOME :                buf.append(' ').append(Token.T_SOME).append('(');                buf.append(left).append(')');                break;            case STDDEV_POP :                buf.append(' ').append(Token.T_STDDEV_POP).append('(');                buf.append(left).append(')');                break;            case STDDEV_SAMP :                buf.append(' ').append(Token.T_STDDEV_SAMP).append('(');                buf.append(left).append(')');                break;            case VAR_POP :                buf.append(' ').append(Token.T_VAR_POP).append('(');                buf.append(left).append(')');                break;            case VAR_SAMP :                buf.append(' ').append(Token.T_VAR_SAMP).append('(');                buf.append(left).append(')');                break;        }        throw Trace.error(Trace.EXPRESSION_NOT_SUPPORTED);    }    private String describe(Session session, int blanks) {        int          lIType;        StringBuffer buf = new StringBuffer(64);        buf.append('\n');        for (int i = 0; i < blanks; i++) {            buf.append(' ');        }        if (oldIType != -1) {            buf.append("SET TRUE, WAS: ");        }        lIType = oldIType == -1 ? exprType                                : oldIType;        switch (lIType) {            case FUNCTION :                buf.append("FUNCTION ");                buf.append(function.describe(session));                return buf.toString();            case VALUE :                if (isParam) {                    buf.append("PARAM ");                }                buf.append("VALUE = ").append(valueData);                buf.append(", TYPE = ").append(Types.getTypeString(dataType));                return buf.toString();            case COLUMN :                buf.append("COLUMN ");                if (tableName != null) {                    buf.append(tableName);                    buf.append('.');                }                buf.append(columnName);                return buf.toString();            case QUERY :                buf.append("QUERY ");                buf.append(subQuery.select.describe(session));                return buf.toString();            case TRUE :                buf.append("TRUE ");                break;            case FALSE :                buf.append("FALSE ");                break;            case VALUELIST :                buf.append("VALUELIST ");                buf.append(" TYPE = ").append(Types.getTypeString(dataType));                if (valueList != null) {                    for (int i = 0; i < valueList.length; i++) {                        buf.append(valueList[i].describe(session,                                                         blanks + blanks));                        buf.append(' ');                    }                }                break;            case ASTERIX :                buf.append("* ");                break;            case NEGATE :                buf.append("NEGATE ");                break;            case ADD :                buf.append("ADD ");                break;            case SUBTRACT :                buf.append("SUBTRACT ");                break;            case MULTIPLY :                buf.append("MULTIPLY ");                break;

⌨️ 快捷键说明

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