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

📄 mysqlio.java

📁 mysql的jdbc驱动
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        this.readPacketSequence = 0;        try {        	            checkForOutstandingStreamingData();                       // Clear serverStatus...this value is guarded by an            // external mutex, as you can only ever be processing             // one command at a time            this.serverStatus = 0;            this.hadWarnings = false;            this.warningCount = 0;            this.queryNoIndexUsed = false;            this.queryBadIndexUsed = false;            //            // Compressed input stream needs cleared at beginning            // of each command execution...            //            if (this.useCompression) {                int bytesLeft = this.mysqlInput.available();                if (bytesLeft > 0) {                    this.mysqlInput.skip(bytesLeft);                }            }            try {                clearInputStream();                //                // PreparedStatements construct their own packets,                // for efficiency's sake.                //                // If this is a generic query, we need to re-use                // the sending packet.                //                if (queryPacket == null) {                    int packLength = HEADER_LENGTH + COMP_HEADER_LENGTH + 1 +                        ((extraData != null) ? extraData.length() : 0) + 2;                    if (this.sendPacket == null) {                        this.sendPacket = Buffer.allocateNew(packLength,                                this.useNewIo);                    }                    this.packetSequence = -1;                    this.readPacketSequence = 0;                    this.checkPacketSequence = true;                    this.sendPacket.clear();                    this.sendPacket.writeByte((byte) command);                    if ((command == MysqlDefs.INIT_DB) ||                            (command == MysqlDefs.CREATE_DB) ||                            (command == MysqlDefs.DROP_DB) ||                            (command == MysqlDefs.QUERY) ||                            (command == MysqlDefs.COM_PREPARE)) {                        if (extraDataCharEncoding == null) {                            this.sendPacket.writeStringNoNull(extraData);                        } else {                            this.sendPacket.writeStringNoNull(extraData,                                extraDataCharEncoding,                                this.connection.getServerCharacterEncoding(),                                this.connection.parserKnowsUnicode());                        }                    } else if (command == MysqlDefs.PROCESS_KILL) {                        long id = new Long(extraData).longValue();                        this.sendPacket.writeLong(id);                    }                    send(this.sendPacket);                } else {                    this.packetSequence = -1;                    send(queryPacket); // packet passed by PreparedStatement                }            } catch (SQLException sqlEx) {                // don't wrap SQLExceptions                throw sqlEx;            } catch (Exception ex) {                throw new CommunicationsException(this.connection,                    this.lastPacketSentTimeMs, ex);            }            Buffer returnPacket = null;            if (!skipCheck) {                if ((command == MysqlDefs.COM_EXECUTE) ||                        (command == MysqlDefs.COM_RESET_STMT)) {                    this.readPacketSequence = 0;                    this.packetSequenceReset = true;                }                returnPacket = checkErrorPacket(command);            }            return returnPacket;        } catch (IOException ioEx) {            throw new CommunicationsException(this.connection,                this.lastPacketSentTimeMs, ioEx);        }    }    /**     * Send a query stored in a packet directly to the server.     *     * @param callingStatement DOCUMENT ME!     * @param resultSetConcurrency DOCUMENT ME!     * @param characterEncoding DOCUMENT ME!     * @param queryPacket DOCUMENT ME!     * @param maxRows DOCUMENT ME!     * @param conn DOCUMENT ME!     * @param resultSetType DOCUMENT ME!     * @param resultSetConcurrency DOCUMENT ME!     * @param streamResults DOCUMENT ME!     * @param catalog DOCUMENT ME!     * @param unpackFieldInfo should we read MYSQL_FIELD info (if available)?     *     * @return DOCUMENT ME!     *     * @throws Exception DOCUMENT ME!     */    final ResultSet sqlQueryDirect(Statement callingStatement, String query,        String characterEncoding, Buffer queryPacket, int maxRows,        Connection conn, int resultSetType, int resultSetConcurrency,        boolean streamResults, String catalog, boolean unpackFieldInfo)        throws Exception {        long queryStartTime = 0;        long queryEndTime = 0;        if (query != null) {        	        	            // We don't know exactly how many bytes we're going to get            // from the query. Since we're dealing with Unicode, the            // max is 2, so pad it (2 * query) + space for headers            int packLength = HEADER_LENGTH + 1 + (query.length() * 2) + 2;            if (this.sendPacket == null) {                if (this.useNewIo) {                    this.sendPacket = Buffer.allocateDirect(packLength,                            this.useNewIo);                } else {                    this.sendPacket = Buffer.allocateNew(packLength, false);                }            } else {                this.sendPacket.clear();            }            this.sendPacket.writeByte((byte) MysqlDefs.QUERY);            if (characterEncoding != null) {                if (this.platformDbCharsetMatches) {                    this.sendPacket.writeStringNoNull(query, characterEncoding,                        this.connection.getServerCharacterEncoding(),                        this.connection.parserKnowsUnicode());                } else {                    if (StringUtils.startsWithIgnoreCaseAndWs(query, "LOAD DATA")) { //$NON-NLS-1$                        this.sendPacket.writeBytesNoNull(query.getBytes());                    } else {                        this.sendPacket.writeStringNoNull(query,                            characterEncoding,                            this.connection.getServerCharacterEncoding(),                            this.connection.parserKnowsUnicode());                    }                }            } else {                this.sendPacket.writeStringNoNull(query);            }            queryPacket = this.sendPacket;        }        byte[] queryBuf = null;        int oldPacketPosition = 0;                        if (needToGrabQueryFromPacket) {            queryBuf = queryPacket.getByteBuffer();            // save the packet position            oldPacketPosition = queryPacket.getPosition();            queryStartTime = System.currentTimeMillis();        }        // Send query command and sql query string        Buffer resultPacket = sendCommand(MysqlDefs.QUERY, null, queryPacket,                false, null);        long fetchBeginTime = 0;        long fetchEndTime = 0;        String profileQueryToLog = null;        boolean queryWasSlow = false;        if (this.profileSql || this.logSlowQueries) {            queryEndTime = System.currentTimeMillis();            boolean shouldExtractQuery = false;            if (this.profileSql) {                shouldExtractQuery = true;            } else if (this.logSlowQueries &&                    ((queryEndTime - queryStartTime) > this.connection.getSlowQueryThresholdMillis())) {                shouldExtractQuery = true;                queryWasSlow = true;            }            if (shouldExtractQuery) {                // Extract the actual query from the network packet                 boolean truncated = false;                int extractPosition = oldPacketPosition;                if (oldPacketPosition > MAX_QUERY_SIZE_TO_LOG) {                    extractPosition = MAX_QUERY_SIZE_TO_LOG;                    truncated = true;                }                profileQueryToLog = new String(queryBuf, 5,                        (extractPosition - 5));                if (truncated) {                    profileQueryToLog += Messages.getString("MysqlIO.25"); //$NON-NLS-1$                }            }            fetchBeginTime = queryEndTime;        }                if (this.autoGenerateTestcaseScript) {        	String testcaseQuery = null;        	        	if (query != null) {        		testcaseQuery = query;        	} else {        		testcaseQuery = new String(queryBuf, 5,                        (oldPacketPosition - 5));        	}        	    		StringBuffer debugBuf = new StringBuffer(testcaseQuery.length() + 32);    		this.connection.generateConnectionCommentBlock(debugBuf);    		debugBuf.append(testcaseQuery);    		debugBuf.append(';');    		this.connection.dumpTestcaseQuery(debugBuf.toString());    	}                ResultSet rs = readAllResults(callingStatement, maxRows, resultSetType,                resultSetConcurrency, streamResults, catalog, resultPacket,                false, -1L, unpackFieldInfo);        if (queryWasSlow) {            StringBuffer mesgBuf = new StringBuffer(48 +                    profileQueryToLog.length());            mesgBuf.append(Messages.getString("MysqlIO.26")); //$NON-NLS-1$            mesgBuf.append(this.connection.getSlowQueryThresholdMillis());            mesgBuf.append(Messages.getString("MysqlIO.27")); //$NON-NLS-1$            mesgBuf.append(profileQueryToLog);            this.connection.getLog().logWarn(mesgBuf.toString());            if (this.connection.getExplainSlowQueries()) {                if (oldPacketPosition < MAX_QUERY_SIZE_TO_EXPLAIN) {                    explainSlowQuery(queryPacket.getBytes(5,                            (oldPacketPosition - 5)), profileQueryToLog);                } else {                    this.connection.getLog().logWarn(Messages.getString(                            "MysqlIO.28") //$NON-NLS-1$                         +MAX_QUERY_SIZE_TO_EXPLAIN +                        Messages.getString("MysqlIO.29")); //$NON-NLS-1$                }            }        }        if (this.profileSql) {            fetchEndTime = System.currentTimeMillis();            ProfileEventSink eventSink = ProfileEventSink.getInstance(this.connection);            eventSink.consumeEvent(new ProfilerEvent(ProfilerEvent.TYPE_QUERY,                    "", catalog, this.connection.getId(), //$NON-NLS-1$                    (callingStatement != null) ? callingStatement.getId() : 999,                    rs.resultId, System.currentTimeMillis(),                    (int) (queryEndTime - queryStartTime), null,                    new Throwable(), profileQueryToLog));            eventSink.consumeEvent(new ProfilerEvent(ProfilerEvent.TYPE_FETCH,                    "", catalog, this.connection.getId(), //$NON-NLS-1$                    (callingStatement != null) ? callingStatement.getId() : 999,                    rs.resultId, System.currentTimeMillis(),                    (int) (fetchEndTime - fetchBeginTime), null,                    new Throwable(), null));            if (this.queryBadIndexUsed) {                eventSink.consumeEvent(new ProfilerEvent(                        ProfilerEvent.TYPE_WARN, "", catalog, //$NON-NLS-1$                        this.connection.getId(),                        (callingStatement != null) ? callingStatement.getId()                                                   : 999, rs.resultId,                        System.currentTimeMillis(),                        (int) (queryEndTime - queryStartTime), null,                        new Throwable(),                        Messages.getString("MysqlIO.33") //$NON-NLS-1$                         +profileQueryToLog));            }            if (this.queryNoIndexUsed) {                eventSink.consumeEvent(new ProfilerEvent(                        ProfilerEvent.TYPE_WARN, "", catalog, //$NON-NLS-1$                        this.connection.getId(),                        (callingStatement != null) ? callingStatement.getId()                                                   : 999, rs.resultId,                        System.currentTimeMillis(),                        (int) (queryEndTime - queryStartTime), null,                        new Throwable(),                        Messages.getString("MysqlIO.35") //$NON-NLS-1$                         +profileQueryToLog));            }        }        if (this.hadWarnings) {            scanForAndThrowDataTruncation();        }        return rs;    }    /**     * Returns the host this IO is connected to     *     * @return DOCUMENT ME!     */    String getHost() {        return this.host;    }    /**     * Is the version of the MySQL server we are connected to the given     * version?     *     * @param major the major version     * @param minor the minor version     * @param subminor the subminor version     *     * @return true if the version of the MySQL server we are connected  is the     *         given version     */    boolean isVersion(int major, int minor, int subminor) {        return ((major == getServerMajorVersion()) &&        (minor == getServerMinorVersion()) &&        (subminor == getServerSubMinorVersion()));    }    /**     * Does the version of the MySQL server we are connected to meet the given     * minimums?     *     * @param major DOCUMENT ME!     * @param minor DOCUMENT ME!     * @param subminor DOCUMENT ME!     *     * @return DOCUMENT ME!     */    boolean versionMeetsMinim

⌨️ 快捷键说明

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