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

📄 function.java

📁 hsqldb是100%java实现的数据库,是一个开放源代码的JAVA数据库 l 具有标准的SQL语法和JAVA接口 l HSQLDB可以自由使用和分发 l 非常简洁和快速的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        for (; i < iArgCount; i++) {            Expression e = eArg[i];            Object     o = null;            if (e != null) {                // no argument: null                o = e.getValue(session, iArgType[i]);            }            if ((o == null) &&!bArgNullable[i]) {                // null argument for primitive datatype: don't call                return null;            }            if (o instanceof JavaObject) {                o = ((JavaObject) o).getObject();            } else if (o instanceof Binary) {                o = ((Binary) o).getBytes();            }            oArg[i] = o;        }        return oArg;    }    /**     * returns null if any non-nullable element of values is null     */    private Object[] getNotNull(Object[] values) throws HsqlException {        int i = bConnection ? 1                            : 0;        for (; i < iArgCount; i++) {            Object o = values[i];            if (o == null &&!bArgNullable[i]) {                // null argument for primitive datatype: don't call                return null;            }        }        return values;    }    void collectInGroupByExpressions(HsqlArrayList colExps) {        for (int i = 0; i < iArgCount; i++) {            Expression e = eArg[i];            if (e != null) {                e.collectInGroupByExpressions(colExps);            }        }    }    Object getAggregatedValue(Session session,                              Object currValue) throws HsqlException {        Object[] valueArray = (Object[]) currValue;        if (valueArray == null) {            valueArray = new Object[iArgCount];        }        for (int i = 0; i < iArgCount; i++) {            Expression e = eArg[i];            if (eArg[i] != null) {                if (eArg[i].isAggregate()) {                    valueArray[i] = Column.convertObject(                        e.getAggregatedValue(session, valueArray[i]),                        iArgType[i]);                } else {                    valueArray[i] = e.getValue(session, iArgType[i]);                }            }        }        valueArray = getNotNull(valueArray);        if (valueArray == null) {            return null;        }        return getValue(session, valueArray);    }    Object updateAggregatingValue(Session session,                                  Object currValue) throws HsqlException {        Object[] valueArray = (Object[]) currValue;        if (valueArray == null) {            valueArray = new Object[iArgCount];        }        for (int i = 0; i < iArgCount; i++) {            Expression e = eArg[i];            if (eArg[i] != null) {                valueArray[i] = e.updateAggregatingValue(session,                        valueArray[i]);            }        }        return valueArray;    }    /**     * Returns the number of parameters that must be supplied to evaluate     * this Function object from SQL.  <p>     *     * This value may be different than the number of parameters of the     * underlying Java method.  This is because HSQLDB automatically detects     * if the first parameter is of type java.sql.Connection, and supplies a     * live Connection object constructed from the evaluating session context     * if so.     */    int getArgCount() {        return iSqlArgCount;    }    /**     * Remnoves the Table filters from Expression parameters to this Function.     *     * @throws HsqlException if there is a problem resolving a parameter     * against the specified TableFilter     *//*    void removeFilters() throws HsqlException {        Expression e;        for (int i = iSqlArgStart; i < iArgCount; i++) {            e = eArg[i];            if (e != null) {                e.removeFilters();            }        }    }*/    void replaceAliases(Expression[] columns,                        int length) throws HsqlException {        Expression e;        for (int i = iSqlArgStart; i < iArgCount; i++) {            e = eArg[i];            if (e != null) {                if (e.exprType == Expression.COLUMN) {                    eArg[i] = e.getExpressionForAlias(columns, length);                } else {                    e.replaceAliases(columns, length);                }            }        }    }    /**     * Checks the Expresion parameters to this Function object against the     * set of TableFilter.     */    void checkTables(HsqlArrayList fa) throws HsqlException {        Expression e;        for (int i = iSqlArgStart; i < iArgCount; i++) {            e = eArg[i];            if (e != null) {                e.checkTables(fa);            }        }    }    /**     * Resolves the Expression parameters to this Function object against the     * specified TableFilter.     */    void resolveTables(TableFilter f) throws HsqlException {        Expression e;        for (int i = iSqlArgStart; i < iArgCount; i++) {            e = eArg[i];            if (e != null) {                e.resolveTables(f);            }        }    }    /**     * Resolves the type of this expression and performs certain     * transformations and optimisations of the expression tree.     */    void resolveType(Session session) throws HsqlException {        Expression e;        for (int i = iSqlArgStart; i < iArgCount; i++) {            e = eArg[i];            if (e != null) {                if (e.isParam()) {                    e.setDataType(iArgType[i]);                    e.nullability    = getArgNullability(i);                    e.valueClassName = getArgClass(i).getName();                } else {                    e.resolveTypes(session);                }            }        }    }    /**     * Checks each of this object's arguments for resolution, throwing an     * HsqlException if any arguments have not yet been resolved. <p>     * The check boolean argument is passed on to further check calls.<p>     */    boolean checkResolved(boolean check) throws HsqlException {        boolean result = true;        for (int i = iSqlArgStart; i < iArgCount; i++) {            if (eArg[i] != null) {                result = result && eArg[i].checkResolved(check);            }        }        return result;    }    /**     * Returns the type of the argument at the specified     * offset in this Function object's paramter list. <p>     */    int getArgType(int i) {        return iArgType[i];    }    /**     * Returns the type of this Function     * object's return type. <p>     */    int getReturnType() {        return iReturnType;    }    /**     * Binds the specified expression to the specified position in this     * Function object's parameter list. <p>     */    void setArgument(int i, Expression e) {        if (bConnection) {            i++;        }        eArg[i]      = e;        hasAggregate = hasAggregate || (e != null && e.isAggregate());    }    /**     * Returns a DDL representation of this object. <p>     */    String getDLL() throws HsqlException {        StringBuffer sb = new StringBuffer();        // get the name as used by the CHECK statement        String ddlName = name;        if (isSimple) {            return name;        } else if (Token.T_TRIM.equals(name)) {            // special case for TRIM            sb.append(name).append('(');            boolean leading  = eArg[2].testCondition(null);            boolean trailing = eArg[3].testCondition(null);            if (leading && trailing) {                sb.append(Token.T_BOTH);            } else {                sb.append(leading ? Token.T_LEADING                                  : Token.T_TRAILING);            }            // to do change to string            sb.append(' ');            String charval = (String) eArg[1].getValue(null);            sb.append(Column.createSQLString(charval)).append(' ');            sb.append(Token.T_FROM).append(' ');            sb.append(eArg[0].getDDL()).append(')');            return sb.toString();        }        if (sFunction.equals(name)) {            ddlName = StringConverter.toQuotedString(name, '"', true);        }        sb.append(ddlName).append('(');        for (int i = iSqlArgStart; i < eArg.length; i++) {            sb.append(eArg[i].getDDL());            if (i < eArg.length - 1) {                sb.append(',');            }        }        sb.append(')');        return sb.toString();    }    /**     * Returns a String representation of this object. <p>     */    public String describe(Session session) {        StringBuffer sb = new StringBuffer();        sb.append(super.toString()).append("=[\n");        sb.append(sFunction).append("(");        for (int i = iSqlArgStart; i < eArg.length; i++) {            sb.append("[").append(eArg[i].describe(session)).append("]");        }        sb.append(") returns ").append(Types.getTypeString(getReturnType()));        sb.append("]\n");        return sb.toString();    }    /**     * Returns the Java Class of the object returned by getValue(). <p>     */    String getReturnClassName() {        return returnClassName;    }    /**     * Returns the Java Class of the i'th argument. <p>     */    Class getArgClass(int i) {        return aArgClasses[i];    }    /**     * Returns the SQL nullability code of the i'th argument. <p>     */    int getArgNullability(int i) {        return bArgNullable[i] ? Expression.NULLABLE                               : Expression.NO_NULLS;    }    Method getMethod() {        return mMethod;    }}

⌨️ 快捷键说明

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