Search in sources :

Example 11 with MySQLTimeoutException

use of com.mysql.cj.jdbc.exceptions.MySQLTimeoutException in project aws-mysql-jdbc by awslabs.

the class StatementRegressionTest method testBug103796.

/**
 * Tests fix for Bug#103796 (32922715), CONNECTOR/J 8 STMT SETQUERYTIMEOUT CAN NOT WORK.
 *
 * @throws Exception
 */
@Test
public void testBug103796() throws Exception {
    Connection con = null;
    Properties props = new Properties();
    props.setProperty(PropertyKey.sslMode.getKeyName(), SslMode.DISABLED.name());
    props.setProperty(PropertyKey.allowPublicKeyRetrieval.getKeyName(), "true");
    props.setProperty(PropertyKey.useCursorFetch.getKeyName(), "true");
    try {
        con = getConnectionWithProps(props);
        Statement timeoutStmt = con.createStatement();
        timeoutStmt.setFetchSize(10);
        timeoutStmt.setQueryTimeout(2);
        long begin = System.currentTimeMillis();
        try {
            timeoutStmt.execute("SELECT SLEEP(5)");
            fail("Query didn't time out");
        } catch (MySQLTimeoutException timeoutEx) {
            long duration = System.currentTimeMillis() - begin;
            assertTrue(duration > 1000 && duration < 3000);
        }
    } finally {
        if (con != null) {
            con.close();
        }
    }
}
Also used : MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) JdbcStatement(com.mysql.cj.jdbc.JdbcStatement) JdbcPreparedStatement(com.mysql.cj.jdbc.JdbcPreparedStatement) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) CallableStatement(java.sql.CallableStatement) ServerPreparedStatement(com.mysql.cj.jdbc.ServerPreparedStatement) ClientPreparedStatement(com.mysql.cj.jdbc.ClientPreparedStatement) ReplicationConnection(com.mysql.cj.jdbc.ha.ReplicationConnection) Connection(java.sql.Connection) XAConnection(javax.sql.XAConnection) JdbcConnection(com.mysql.cj.jdbc.JdbcConnection) MysqlConnection(com.mysql.cj.MysqlConnection) Properties(java.util.Properties) StatementsTest(testsuite.simple.StatementsTest) Test(org.junit.jupiter.api.Test)

Example 12 with MySQLTimeoutException

use of com.mysql.cj.jdbc.exceptions.MySQLTimeoutException in project aws-mysql-jdbc by awslabs.

the class StatementImpl method executeBatchInternal.

protected long[] executeBatchInternal() throws SQLException {
    JdbcConnection locallyScopedConn = checkClosed();
    synchronized (locallyScopedConn.getConnectionMutex()) {
        if (locallyScopedConn.isReadOnly()) {
            throw SQLError.createSQLException(Messages.getString("Statement.34") + Messages.getString("Statement.35"), MysqlErrorNumbers.SQL_STATE_ILLEGAL_ARGUMENT, getExceptionInterceptor());
        }
        implicitlyCloseAllOpenResults();
        List<Object> batchedArgs = this.query.getBatchedArgs();
        if (batchedArgs == null || batchedArgs.size() == 0) {
            return new long[0];
        }
        // we timeout the entire batch, not individual statements
        int individualStatementTimeout = getTimeoutInMillis();
        setTimeoutInMillis(0);
        CancelQueryTask timeoutTask = null;
        try {
            resetCancelledState();
            statementBegins();
            try {
                // The JDBC spec doesn't forbid this, but doesn't provide for it either...we do..
                this.retrieveGeneratedKeys = true;
                long[] updateCounts = null;
                if (batchedArgs != null) {
                    int nbrCommands = batchedArgs.size();
                    this.batchedGeneratedKeys = new ArrayList<>(batchedArgs.size());
                    boolean multiQueriesEnabled = locallyScopedConn.getPropertySet().getBooleanProperty(PropertyKey.allowMultiQueries).getValue();
                    if (multiQueriesEnabled || (locallyScopedConn.getPropertySet().getBooleanProperty(PropertyKey.rewriteBatchedStatements).getValue() && nbrCommands > 4)) {
                        return executeBatchUsingMultiQueries(multiQueriesEnabled, nbrCommands, individualStatementTimeout);
                    }
                    timeoutTask = startQueryTimer(this, individualStatementTimeout);
                    updateCounts = new long[nbrCommands];
                    for (int i = 0; i < nbrCommands; i++) {
                        updateCounts[i] = -3;
                    }
                    SQLException sqlEx = null;
                    int commandIndex = 0;
                    for (commandIndex = 0; commandIndex < nbrCommands; commandIndex++) {
                        try {
                            String sql = (String) batchedArgs.get(commandIndex);
                            updateCounts[commandIndex] = executeUpdateInternal(sql, true, true);
                            if (timeoutTask != null) {
                                // we need to check the cancel state on each iteration to generate timeout exception if needed
                                checkCancelTimeout();
                            }
                            // limit one generated key per OnDuplicateKey statement
                            getBatchedGeneratedKeys(this.results.getFirstCharOfQuery() == 'I' && containsOnDuplicateKeyInString(sql) ? 1 : 0);
                        } catch (SQLException ex) {
                            updateCounts[commandIndex] = EXECUTE_FAILED;
                            if (this.continueBatchOnError && !(ex instanceof MySQLTimeoutException) && !(ex instanceof MySQLStatementCancelledException) && !hasDeadlockOrTimeoutRolledBackTx(ex)) {
                                sqlEx = ex;
                            } else {
                                long[] newUpdateCounts = new long[commandIndex];
                                if (hasDeadlockOrTimeoutRolledBackTx(ex)) {
                                    for (int i = 0; i < newUpdateCounts.length; i++) {
                                        newUpdateCounts[i] = java.sql.Statement.EXECUTE_FAILED;
                                    }
                                } else {
                                    System.arraycopy(updateCounts, 0, newUpdateCounts, 0, commandIndex);
                                }
                                sqlEx = ex;
                                break;
                            // throw SQLError.createBatchUpdateException(ex, newUpdateCounts, getExceptionInterceptor());
                            }
                        }
                    }
                    if (sqlEx != null) {
                        throw SQLError.createBatchUpdateException(sqlEx, updateCounts, getExceptionInterceptor());
                    }
                }
                if (timeoutTask != null) {
                    stopQueryTimer(timeoutTask, true, true);
                    timeoutTask = null;
                }
                return (updateCounts != null) ? updateCounts : new long[0];
            } finally {
                this.query.getStatementExecuting().set(false);
            }
        } finally {
            stopQueryTimer(timeoutTask, false, false);
            resetCancelledState();
            setTimeoutInMillis(individualStatementTimeout);
            clearBatch();
        }
    }
}
Also used : SQLException(java.sql.SQLException) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CancelQueryTask(com.mysql.cj.CancelQueryTask) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException)

Example 13 with MySQLTimeoutException

use of com.mysql.cj.jdbc.exceptions.MySQLTimeoutException in project ABC by RuiPinto96274.

the class ExceptionsTest method testConstructors.

@Test
public void testConstructors() {
    new CommunicationsException(TEST_MESSAGE, new Throwable());
    new CommunicationsException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new PacketReceivedTimeHolder() {
    }, new Exception());
    new ConnectionFeatureNotAvailableException(TEST_MESSAGE, new Throwable());
    new ConnectionFeatureNotAvailableException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new Exception());
    new MysqlDataTruncation(TEST_MESSAGE, 0, false, false, 0, 0, 0);
    new MySQLQueryInterruptedException();
    new MySQLQueryInterruptedException(TEST_MESSAGE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLStatementCancelledException();
    new MySQLStatementCancelledException(TEST_MESSAGE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTimeoutException();
    new MySQLTimeoutException(TEST_MESSAGE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTransactionRollbackException();
    new MySQLTransactionRollbackException(TEST_MESSAGE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new NotUpdatable(TEST_MESSAGE);
    new OperationNotSupportedException();
    new OperationNotSupportedException(TEST_MESSAGE);
    new PacketTooBigException(TEST_MESSAGE);
    new PacketTooBigException(0, 100);
    new SQLError();
}
Also used : OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MysqlDataTruncation(com.mysql.cj.jdbc.exceptions.MysqlDataTruncation) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) PacketReceivedTimeHolder(com.mysql.cj.protocol.PacketReceivedTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) SQLException(java.sql.SQLException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) NotUpdatable(com.mysql.cj.jdbc.exceptions.NotUpdatable) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) SQLError(com.mysql.cj.jdbc.exceptions.SQLError) PacketSentTimeHolder(com.mysql.cj.protocol.PacketSentTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) Test(org.junit.jupiter.api.Test)

Example 14 with MySQLTimeoutException

use of com.mysql.cj.jdbc.exceptions.MySQLTimeoutException in project JavaSegundasQuintas by ecteruel.

the class ClientPreparedStatement method executeBatchSerially.

/**
 * Executes the current batch of statements by executing them one-by-one.
 *
 * @param batchTimeout
 *            timeout for the batch execution
 * @return a list of update counts
 * @throws SQLException
 *             if an error occurs
 */
protected long[] executeBatchSerially(int batchTimeout) throws SQLException {
    synchronized (checkClosed().getConnectionMutex()) {
        if (this.connection == null) {
            checkClosed();
        }
        long[] updateCounts = null;
        if (this.query.getBatchedArgs() != null) {
            int nbrCommands = this.query.getBatchedArgs().size();
            updateCounts = new long[nbrCommands];
            for (int i = 0; i < nbrCommands; i++) {
                updateCounts[i] = -3;
            }
            SQLException sqlEx = null;
            CancelQueryTask timeoutTask = null;
            try {
                timeoutTask = startQueryTimer(this, batchTimeout);
                if (this.retrieveGeneratedKeys) {
                    this.batchedGeneratedKeys = new ArrayList<>(nbrCommands);
                }
                int batchCommandIndex = ((PreparedQuery<?>) this.query).getBatchCommandIndex();
                for (batchCommandIndex = 0; batchCommandIndex < nbrCommands; batchCommandIndex++) {
                    ((PreparedQuery<?>) this.query).setBatchCommandIndex(batchCommandIndex);
                    Object arg = this.query.getBatchedArgs().get(batchCommandIndex);
                    try {
                        if (arg instanceof String) {
                            updateCounts[batchCommandIndex] = executeUpdateInternal((String) arg, true, this.retrieveGeneratedKeys);
                            // limit one generated key per OnDuplicateKey statement
                            getBatchedGeneratedKeys(this.results.getFirstCharOfQuery() == 'I' && containsOnDuplicateKeyInString((String) arg) ? 1 : 0);
                        } else {
                            QueryBindings<?> queryBindings = (QueryBindings<?>) arg;
                            updateCounts[batchCommandIndex] = executeUpdateInternal(queryBindings, true);
                            // limit one generated key per OnDuplicateKey statement
                            getBatchedGeneratedKeys(containsOnDuplicateKeyUpdateInSQL() ? 1 : 0);
                        }
                    } catch (SQLException ex) {
                        updateCounts[batchCommandIndex] = EXECUTE_FAILED;
                        if (this.continueBatchOnError && !(ex instanceof MySQLTimeoutException) && !(ex instanceof MySQLStatementCancelledException) && !hasDeadlockOrTimeoutRolledBackTx(ex)) {
                            sqlEx = ex;
                        } else {
                            long[] newUpdateCounts = new long[batchCommandIndex];
                            System.arraycopy(updateCounts, 0, newUpdateCounts, 0, batchCommandIndex);
                            throw SQLError.createBatchUpdateException(ex, newUpdateCounts, this.exceptionInterceptor);
                        }
                    }
                }
                if (sqlEx != null) {
                    throw SQLError.createBatchUpdateException(sqlEx, updateCounts, this.exceptionInterceptor);
                }
            } catch (NullPointerException npe) {
                try {
                    checkClosed();
                } catch (StatementIsClosedException connectionClosedEx) {
                    int batchCommandIndex = ((PreparedQuery<?>) this.query).getBatchCommandIndex();
                    updateCounts[batchCommandIndex] = EXECUTE_FAILED;
                    long[] newUpdateCounts = new long[batchCommandIndex];
                    System.arraycopy(updateCounts, 0, newUpdateCounts, 0, batchCommandIndex);
                    throw SQLError.createBatchUpdateException(SQLExceptionsMapping.translateException(connectionClosedEx), newUpdateCounts, this.exceptionInterceptor);
                }
                // we don't know why this happened, punt
                throw npe;
            } finally {
                ((PreparedQuery<?>) this.query).setBatchCommandIndex(-1);
                stopQueryTimer(timeoutTask, false, false);
                resetCancelledState();
            }
        }
        return (updateCounts != null) ? updateCounts : new long[0];
    }
}
Also used : SQLException(java.sql.SQLException) QueryBindings(com.mysql.cj.QueryBindings) ClientPreparedQueryBindings(com.mysql.cj.ClientPreparedQueryBindings) ClientPreparedQuery(com.mysql.cj.ClientPreparedQuery) PreparedQuery(com.mysql.cj.PreparedQuery) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CancelQueryTask(com.mysql.cj.CancelQueryTask) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) StatementIsClosedException(com.mysql.cj.exceptions.StatementIsClosedException)

Example 15 with MySQLTimeoutException

use of com.mysql.cj.jdbc.exceptions.MySQLTimeoutException in project JavaSegundasQuintas by ecteruel.

the class ExceptionsTest method testConstructors.

@Test
public void testConstructors() {
    new CommunicationsException(TEST_MESSAGE, new Throwable());
    new CommunicationsException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new PacketReceivedTimeHolder() {
    }, new Exception());
    new ConnectionFeatureNotAvailableException(TEST_MESSAGE, new Throwable());
    new ConnectionFeatureNotAvailableException((JdbcConnection) this.conn, new PacketSentTimeHolder() {
    }, new Exception());
    new MysqlDataTruncation(TEST_MESSAGE, 0, false, false, 0, 0, 0);
    new MySQLQueryInterruptedException();
    new MySQLQueryInterruptedException(TEST_MESSAGE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLQueryInterruptedException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLStatementCancelledException();
    new MySQLStatementCancelledException(TEST_MESSAGE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLStatementCancelledException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTimeoutException();
    new MySQLTimeoutException(TEST_MESSAGE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTimeoutException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new MySQLTransactionRollbackException();
    new MySQLTransactionRollbackException(TEST_MESSAGE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE);
    new MySQLTransactionRollbackException(TEST_MESSAGE, TEST_SQL_STATE, 0);
    new NotUpdatable(TEST_MESSAGE);
    new OperationNotSupportedException();
    new OperationNotSupportedException(TEST_MESSAGE);
    new PacketTooBigException(TEST_MESSAGE);
    new PacketTooBigException(0, 100);
    new SQLError();
}
Also used : OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MysqlDataTruncation(com.mysql.cj.jdbc.exceptions.MysqlDataTruncation) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) PacketReceivedTimeHolder(com.mysql.cj.protocol.PacketReceivedTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) OperationNotSupportedException(com.mysql.cj.jdbc.exceptions.OperationNotSupportedException) ConnectionFeatureNotAvailableException(com.mysql.cj.jdbc.exceptions.ConnectionFeatureNotAvailableException) MySQLTransactionRollbackException(com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException) SQLException(java.sql.SQLException) PacketTooBigException(com.mysql.cj.jdbc.exceptions.PacketTooBigException) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) NotUpdatable(com.mysql.cj.jdbc.exceptions.NotUpdatable) MySQLTimeoutException(com.mysql.cj.jdbc.exceptions.MySQLTimeoutException) SQLError(com.mysql.cj.jdbc.exceptions.SQLError) PacketSentTimeHolder(com.mysql.cj.protocol.PacketSentTimeHolder) MySQLStatementCancelledException(com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException) CommunicationsException(com.mysql.cj.jdbc.exceptions.CommunicationsException) MySQLQueryInterruptedException(com.mysql.cj.jdbc.exceptions.MySQLQueryInterruptedException) Test(org.junit.jupiter.api.Test)

Aggregations

MySQLTimeoutException (com.mysql.cj.jdbc.exceptions.MySQLTimeoutException)18 MySQLStatementCancelledException (com.mysql.cj.jdbc.exceptions.MySQLStatementCancelledException)12 SQLException (java.sql.SQLException)12 CancelQueryTask (com.mysql.cj.CancelQueryTask)9 Test (org.junit.jupiter.api.Test)9 ClientPreparedStatement (com.mysql.cj.jdbc.ClientPreparedStatement)6 JdbcPreparedStatement (com.mysql.cj.jdbc.JdbcPreparedStatement)6 JdbcStatement (com.mysql.cj.jdbc.JdbcStatement)6 ServerPreparedStatement (com.mysql.cj.jdbc.ServerPreparedStatement)6 CallableStatement (java.sql.CallableStatement)6 PreparedStatement (java.sql.PreparedStatement)6 Statement (java.sql.Statement)6 StatementsTest (testsuite.simple.StatementsTest)6 ClientPreparedQuery (com.mysql.cj.ClientPreparedQuery)3 ClientPreparedQueryBindings (com.mysql.cj.ClientPreparedQueryBindings)3 MysqlConnection (com.mysql.cj.MysqlConnection)3 PreparedQuery (com.mysql.cj.PreparedQuery)3 QueryBindings (com.mysql.cj.QueryBindings)3 ServerPreparedQuery (com.mysql.cj.ServerPreparedQuery)3 ServerPreparedQueryBindValue (com.mysql.cj.ServerPreparedQueryBindValue)3