Search in sources :

Example 16 with ResultsFuture

use of org.teiid.client.util.ResultsFuture in project teiid by teiid.

the class TestResultSet method testXML.

@Test
public void testXML() throws Exception {
    StatementImpl statement = createMockStatement(ResultSet.TYPE_FORWARD_ONLY);
    ResultsFuture<LobChunk> future = new ResultsFuture<LobChunk>();
    future.getResultsReceiver().receiveResults(new LobChunk("<a/>".getBytes(Charset.forName("UTF-8")), true));
    XMLType result = new XMLType();
    Mockito.stub(statement.getDQP().requestNextLobChunk(0, 0, result.getReferenceStreamId())).toReturn(future);
    ResultsMessage resultsMsg = new ResultsMessage();
    result.setEncoding("UTF-8");
    resultsMsg.setResults(new List<?>[] { Arrays.asList(result) });
    resultsMsg.setLastRow(1);
    resultsMsg.setFirstRow(1);
    resultsMsg.setFinalRow(1);
    // $NON-NLS-1$
    resultsMsg.setColumnNames(new String[] { "x" });
    // $NON-NLS-1$
    resultsMsg.setDataTypes(new String[] { "xml" });
    ResultSetImpl cs = new ResultSetImpl(resultsMsg, statement);
    cs.next();
    assertEquals("<a/>", cs.getString(1));
}
Also used : ResultsFuture(org.teiid.client.util.ResultsFuture) XMLType(org.teiid.core.types.XMLType) ResultsMessage(org.teiid.client.ResultsMessage) LobChunk(org.teiid.client.lob.LobChunk) Test(org.junit.Test)

Example 17 with ResultsFuture

use of org.teiid.client.util.ResultsFuture in project teiid by teiid.

the class TestStatement method testWarnings.

@Test
public void testWarnings() throws Exception {
    ConnectionImpl conn = Mockito.mock(ConnectionImpl.class);
    Mockito.stub(conn.getConnectionProps()).toReturn(new Properties());
    DQP dqp = Mockito.mock(DQP.class);
    ResultsFuture<ResultsMessage> results = new ResultsFuture<ResultsMessage>();
    Mockito.stub(dqp.executeRequest(Mockito.anyLong(), (RequestMessage) Mockito.anyObject())).toReturn(results);
    ResultsMessage rm = new ResultsMessage();
    rm.setResults(new List<?>[] { Arrays.asList(1) });
    rm.setWarnings(Arrays.asList(new Throwable()));
    rm.setColumnNames(new String[] { "expr1" });
    rm.setDataTypes(new String[] { "string" });
    results.getResultsReceiver().receiveResults(rm);
    Mockito.stub(conn.getDQP()).toReturn(dqp);
    StatementImpl statement = new StatementImpl(conn, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) {

        @Override
        protected java.util.TimeZone getServerTimeZone() throws java.sql.SQLException {
            return null;
        }
    };
    statement.execute("select 'a'");
    assertNotNull(statement.getResultSet());
    SQLWarning warning = statement.getWarnings();
    assertNotNull(warning);
    assertNull(warning.getNextWarning());
}
Also used : ResultsFuture(org.teiid.client.util.ResultsFuture) SQLWarning(java.sql.SQLWarning) DQP(org.teiid.client.DQP) ResultsMessage(org.teiid.client.ResultsMessage) Properties(java.util.Properties) Test(org.junit.Test)

Example 18 with ResultsFuture

use of org.teiid.client.util.ResultsFuture in project teiid by teiid.

the class TestStatement method testAsynchTimeout.

@Test
public void testAsynchTimeout() throws Exception {
    ConnectionImpl conn = Mockito.mock(ConnectionImpl.class);
    Mockito.stub(conn.getConnectionProps()).toReturn(new Properties());
    final StatementImpl statement = new StatementImpl(conn, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    statement.setQueryTimeoutMS(1);
    DQP dqp = Mockito.mock(DQP.class);
    Mockito.stub(statement.getDQP()).toReturn(dqp);
    final AtomicInteger counter = new AtomicInteger();
    Mockito.stub(dqp.cancelRequest(0)).toAnswer(new Answer<Boolean>() {

        @Override
        public Boolean answer(InvocationOnMock invocation) throws Throwable {
            synchronized (statement) {
                counter.incrementAndGet();
                statement.notifyAll();
            }
            return true;
        }
    });
    ResultsFuture<ResultsMessage> future = new ResultsFuture<ResultsMessage>();
    Mockito.stub(dqp.executeRequest(Mockito.anyLong(), (RequestMessage) Mockito.anyObject())).toReturn(future);
    statement.submitExecute("select 'hello world'", null);
    synchronized (statement) {
        while (counter.get() != 1) {
            statement.wait();
        }
    }
    statement.setQueryTimeoutMS(1);
    statement.submitExecute("select 'hello world'", null);
    synchronized (statement) {
        while (counter.get() != 2) {
            statement.wait();
        }
    }
}
Also used : DQP(org.teiid.client.DQP) ResultsMessage(org.teiid.client.ResultsMessage) Properties(java.util.Properties) ResultsFuture(org.teiid.client.util.ResultsFuture) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) InvocationOnMock(org.mockito.invocation.InvocationOnMock) Test(org.junit.Test)

Example 19 with ResultsFuture

use of org.teiid.client.util.ResultsFuture in project teiid by teiid.

the class TestStatement method testGetMoreResults.

@Test
public void testGetMoreResults() throws Exception {
    ConnectionImpl conn = Mockito.mock(ConnectionImpl.class);
    Mockito.stub(conn.getConnectionProps()).toReturn(new Properties());
    DQP dqp = Mockito.mock(DQP.class);
    ResultsFuture<ResultsMessage> results = new ResultsFuture<ResultsMessage>();
    Mockito.stub(dqp.executeRequest(Mockito.anyLong(), (RequestMessage) Mockito.anyObject())).toReturn(results);
    ResultsMessage rm = new ResultsMessage();
    rm.setUpdateResult(true);
    rm.setColumnNames(new String[] { "expr1" });
    rm.setDataTypes(new String[] { "integer" });
    rm.setResults(new List<?>[] { Arrays.asList(1) });
    results.getResultsReceiver().receiveResults(rm);
    Mockito.stub(conn.getDQP()).toReturn(dqp);
    StatementImpl statement = new StatementImpl(conn, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) {

        @Override
        protected java.util.TimeZone getServerTimeZone() throws java.sql.SQLException {
            return null;
        }
    };
    statement.execute("update x set a = b");
    assertEquals(1, statement.getUpdateCount());
    statement.getMoreResults(Statement.CLOSE_ALL_RESULTS);
    assertEquals(-1, statement.getUpdateCount());
    statement = new StatementImpl(conn, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) {

        @Override
        protected java.util.TimeZone getServerTimeZone() throws java.sql.SQLException {
            return null;
        }
    };
    statement.execute("update x set a = b");
    assertEquals(1, statement.getUpdateCount());
    statement.getMoreResults();
    assertEquals(-1, statement.getUpdateCount());
}
Also used : DQP(org.teiid.client.DQP) SQLException(java.sql.SQLException) ResultsMessage(org.teiid.client.ResultsMessage) Properties(java.util.Properties) ResultsFuture(org.teiid.client.util.ResultsFuture) TimeZone(java.util.TimeZone) Test(org.junit.Test)

Example 20 with ResultsFuture

use of org.teiid.client.util.ResultsFuture in project teiid by teiid.

the class TestAllResultsImpl method helpTestBatching.

static ResultSetImpl helpTestBatching(StatementImpl statement, final int fetchSize, final int batchLength, final int totalLength, final boolean partial) throws TeiidProcessingException, SQLException {
    DQP dqp = statement.getDQP();
    if (dqp == null) {
        dqp = mock(DQP.class);
        stub(statement.getDQP()).toReturn(dqp);
    }
    stub(statement.getFetchSize()).toReturn(fetchSize);
    stub(dqp.processCursorRequest(Matchers.eq(REQUEST_ID), Matchers.anyInt(), Matchers.eq(fetchSize))).toAnswer(new Answer<ResultsFuture<ResultsMessage>>() {

        @Override
        public ResultsFuture<ResultsMessage> answer(InvocationOnMock invocation) throws Throwable {
            ResultsFuture<ResultsMessage> nextBatch = new ResultsFuture<ResultsMessage>();
            int begin = Math.min(totalLength, (Integer) invocation.getArguments()[1]);
            if (partial && begin == fetchSize + 1) {
                begin = begin - 5;
            }
            int length = Math.min(fetchSize, Math.min(totalLength - begin + 1, batchLength));
            nextBatch.getResultsReceiver().receiveResults(exampleResultsMsg4(begin, length, begin + length - 1 >= totalLength));
            return nextBatch;
        }
    });
    int initial = Math.min(fetchSize, batchLength);
    ResultsMessage msg = exampleResultsMsg4(1, initial, initial == totalLength);
    return new ResultSetImpl(msg, statement, new ResultSetMetaDataImpl(new MetadataProvider(DeferredMetadataProvider.loadPartialMetadata(msg.getColumnNames(), msg.getDataTypes())), null), 0);
}
Also used : DQP(org.teiid.client.DQP) ResultsMessage(org.teiid.client.ResultsMessage) ResultsFuture(org.teiid.client.util.ResultsFuture) InvocationOnMock(org.mockito.invocation.InvocationOnMock)

Aggregations

ResultsFuture (org.teiid.client.util.ResultsFuture)34 Test (org.junit.Test)21 SQLException (java.sql.SQLException)17 ResultsMessage (org.teiid.client.ResultsMessage)13 TranslatorException (org.teiid.translator.TranslatorException)11 ResultSet (java.sql.ResultSet)10 Statement (java.sql.Statement)10 RequestOptions (org.teiid.jdbc.RequestOptions)10 TeiidStatement (org.teiid.jdbc.TeiidStatement)10 AsynchPositioningException (org.teiid.jdbc.AsynchPositioningException)9 ContinuousStatementCallback (org.teiid.jdbc.ContinuousStatementCallback)9 TeiidResultSet (org.teiid.jdbc.TeiidResultSet)9 Properties (java.util.Properties)8 ExecutionException (java.util.concurrent.ExecutionException)8 StatementCallback (org.teiid.jdbc.StatementCallback)8 DQP (org.teiid.client.DQP)7 RequestMessage (org.teiid.client.RequestMessage)5 TeiidComponentException (org.teiid.core.TeiidComponentException)5 ArrayList (java.util.ArrayList)4 List (java.util.List)4