@Override
    public ResponseHeader execute() throws SQLException {
        Collection<ShardingSphereRule> rules = metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getRuleMetaData().getRules();
        int maxConnectionsSizePerQuery = metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine =
                new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
                        (JDBCBackendStatement) connectionSession.getStatementManager(), new StatementOption(false), rules,
                        metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
        return executeMultiStatements(prepareEngine);
    }
@Test
    void assertExecuteWithSpecifiedDatabaseName() throws SQLException {
        String sql = "update foo_db.t set v=v+1 where id=1;update foo_db.t set v=v+1 where id=2;update foo_db.t set v=v+1 where id=3";
        ConnectionSession connectionSession = mockConnectionSession();
        MySQLUpdateStatement expectedStatement = mock(MySQLUpdateStatement.class);
        ContextManager contextManager = mockContextManager();
        when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
        ResponseHeader actual = new MySQLMultiStatementsHandler(connectionSession, expectedStatement, sql).execute();
        assertThat(actual, instanceOf(UpdateResponseHeader.class));
        UpdateResponseHeader actualHeader = (UpdateResponseHeader) actual;
        assertThat(actualHeader.getUpdateCount(), is(3L));
        assertThat(actualHeader.getLastInsertId(), is(0L));
        assertThat(actualHeader.getSqlStatement(), is(expectedStatement));
    }