if (!parameterMask[i] && statementType != INSERT_STATEMENT_TYPE)
if (parameterMask[i] == PARAMETER_UNUSED && statementType != INSERT_STATEMENT_TYPE)
    private void executeStatement(int statementType, AbstractIscStmtHandle stmt) throws SQLException {        try {            if (!stmt.isValid())                throw new FBSQLException("Corresponding connection is not valid.",                    FBSQLException.SQL_STATE_CONNECTION_FAILURE_IN_TX);                        if (inInsertRow && statementType != INSERT_STATEMENT_TYPE)                throw new FBSQLException("Only insertRow() is allowed when " +                        "result set is positioned on insert row.");                        if (statementType != INSERT_STATEMENT_TYPE && oldRow == null)                throw new FBSQLException("Result set is not positioned on a row.");            // we have to flush before constructing the parameters            // since flushable field can update the value, which             // in turn can change the parameter distribution            for (int i = 0; i < xsqlvars.length; i++) {                if (fields[i] instanceof FBFlushableField)                    ((FBFlushableField)fields[i]).flushCachedData();            }                        boolean[] parameterMask = getParameterMask();                        String sql;            switch(statementType) {                case UPDATE_STATEMENT_TYPE :                    sql = buildUpdateStatement(parameterMask);                    break;                                    case DELETE_STATEMENT_TYPE :                    sql = buildDeleteStatement(parameterMask);                    break;                                    case INSERT_STATEMENT_TYPE :                    sql = buildInsertStatement();                    break;                                    case SELECT_STATEMENT_TYPE :                    sql = buildSelectStatement(parameterMask);                    break;                                    default :                    throw new IllegalArgumentException(                        "Incorrect statement type specified.");            }                        gdsHelper.prepareStatement(stmt, sql, true);            XSQLVAR[] params = stmt.getInSqlda().sqlvar;                        int paramIterator = 0;                        if (statementType == UPDATE_STATEMENT_TYPE) {                for (int i = 0; i < xsqlvars.length; i++) {                    if (!updatedFlags[i])                        continue;                                        params[paramIterator].copyFrom(xsqlvars[i]);                    params[paramIterator].sqldata = newRow[i];                    paramIterator++;                }            }                        for (int i = 0; i < xsqlvars.length; i++) {                if (!parameterMask[i] && statementType != INSERT_STATEMENT_TYPE)                    continue;                else                if (!updatedFlags[i] && statementType == INSERT_STATEMENT_TYPE)                    continue;                                params[paramIterator].copyFrom(xsqlvars[i]);                                if (statementType == INSERT_STATEMENT_TYPE)                    params[paramIterator].sqldata = insertRow[i];                else                    params[paramIterator].sqldata = oldRow[i];                                paramIterator++;            }                        gdsHelper.executeStatement(stmt, false);                        // TODO think about adding COMMIT RETAIN in the auto-commit mode                    } catch(GDSException ex) {            throw new FBSQLException(ex);        }    }