Search in sources :

Example 1 with StatementCallback

use of org.teiid.jdbc.StatementCallback in project teiid by teiid.

the class TestAsynch method testAsynchPlaning.

@Test
public void testAsynchPlaning() throws Exception {
    Statement stmt = this.internalConnection.createStatement();
    TeiidStatement ts = stmt.unwrap(TeiidStatement.class);
    ef.addData("SELECT someTable.col FROM someTable", Arrays.asList(Arrays.asList(1)));
    final ResultsFuture<Integer> result = new ResultsFuture<Integer>();
    ts.submitExecute("select * from someTable", new StatementCallback() {

        int rowCount;

        @Override
        public void onRow(Statement s, ResultSet rs) {
            try {
                rowCount++;
                if (rowCount == 3) {
                    s.close();
                }
            } catch (SQLException e) {
                result.getResultsReceiver().exceptionOccurred(e);
                throw new RuntimeException(e);
            }
        }

        @Override
        public void onException(Statement s, Exception e) {
            result.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement s) {
            result.getResultsReceiver().receiveResults(rowCount);
        }
    }, new RequestOptions().continuous(true));
    assertEquals(3, result.get().intValue());
    assertEquals(3, partIds.size());
    assertEquals(partIds.get(0), partIds.get(1));
    assertEquals(partIds.get(1), partIds.get(2));
}
Also used : SQLException(java.sql.SQLException) RequestOptions(org.teiid.jdbc.RequestOptions) TeiidStatement(org.teiid.jdbc.TeiidStatement) Statement(java.sql.Statement) TeiidStatement(org.teiid.jdbc.TeiidStatement) AsynchPositioningException(org.teiid.jdbc.AsynchPositioningException) SQLException(java.sql.SQLException) TranslatorException(org.teiid.translator.TranslatorException) ResultsFuture(org.teiid.client.util.ResultsFuture) ContinuousStatementCallback(org.teiid.jdbc.ContinuousStatementCallback) StatementCallback(org.teiid.jdbc.StatementCallback) ResultSet(java.sql.ResultSet) TeiidResultSet(org.teiid.jdbc.TeiidResultSet) Test(org.junit.Test)

Example 2 with StatementCallback

use of org.teiid.jdbc.StatementCallback in project teiid by teiid.

the class TestAsynch method testTransactionCycle.

@Test
public void testTransactionCycle() throws Exception {
    Statement stmt = this.internalConnection.createStatement();
    TeiidStatement ts = stmt.unwrap(TeiidStatement.class);
    final ResultsFuture<Void> result = new ResultsFuture<Void>();
    ts.submitExecute("start transaction", new StatementCallback() {

        @Override
        public void onRow(Statement s, ResultSet rs) {
        }

        @Override
        public void onException(Statement s, Exception e) {
            result.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement s) {
            result.getResultsReceiver().receiveResults(null);
        }
    }, new RequestOptions());
    result.get();
    final ResultsFuture<Void> rollBackResult = new ResultsFuture<Void>();
    ts.submitExecute("rollback", new StatementCallback() {

        @Override
        public void onRow(Statement s, ResultSet rs) {
        }

        @Override
        public void onException(Statement s, Exception e) {
            rollBackResult.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement s) {
            rollBackResult.getResultsReceiver().receiveResults(null);
        }
    }, new RequestOptions());
    rollBackResult.get();
}
Also used : ResultsFuture(org.teiid.client.util.ResultsFuture) ContinuousStatementCallback(org.teiid.jdbc.ContinuousStatementCallback) StatementCallback(org.teiid.jdbc.StatementCallback) RequestOptions(org.teiid.jdbc.RequestOptions) TeiidStatement(org.teiid.jdbc.TeiidStatement) Statement(java.sql.Statement) TeiidStatement(org.teiid.jdbc.TeiidStatement) ResultSet(java.sql.ResultSet) TeiidResultSet(org.teiid.jdbc.TeiidResultSet) AsynchPositioningException(org.teiid.jdbc.AsynchPositioningException) SQLException(java.sql.SQLException) TranslatorException(org.teiid.translator.TranslatorException) Test(org.junit.Test)

Example 3 with StatementCallback

use of org.teiid.jdbc.StatementCallback in project teiid by teiid.

the class TestExecutionReuse method testReusableAsynchContinuous.

@Test
public void testReusableAsynchContinuous() throws Exception {
    Connection c = server.createConnection("jdbc:teiid:partssupplier");
    Statement s = c.createStatement();
    TeiidStatement ts = s.unwrap(TeiidStatement.class);
    final ResultsFuture<Integer> result = new ResultsFuture<Integer>();
    ts.submitExecute("select part_id from parts order by part_id", new StatementCallback() {

        int rowCount;

        @Override
        public void onRow(Statement stmt, ResultSet rs) throws SQLException {
            rowCount++;
            if (rowCount == EXEC_COUNT) {
                stmt.close();
            }
        }

        @Override
        public void onException(Statement stmt, Exception e) {
            result.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement stmt) {
            result.getResultsReceiver().receiveResults(rowCount);
        }
    }, new RequestOptions().continuous(true));
    synchronized (TestExecutionReuse.class) {
        while (!isDisposed) {
            TestExecutionReuse.class.wait();
        }
    }
    assertEquals(EXEC_COUNT, result.get().intValue());
    assertTrue(ec.getCommandContext().isContinuous());
    Mockito.verify(execution, Mockito.times(1)).dispose();
    Mockito.verify(execution, Mockito.times(EXEC_COUNT)).execute();
    Mockito.verify(execution, Mockito.times(EXEC_COUNT)).close();
    Mockito.verify(execution, Mockito.times(EXEC_COUNT - 1)).reset((Command) Mockito.anyObject(), (ExecutionContext) Mockito.anyObject(), Mockito.anyObject());
}
Also used : SQLException(java.sql.SQLException) RequestOptions(org.teiid.jdbc.RequestOptions) TeiidStatement(org.teiid.jdbc.TeiidStatement) Statement(java.sql.Statement) TeiidStatement(org.teiid.jdbc.TeiidStatement) Connection(java.sql.Connection) SQLException(java.sql.SQLException) TranslatorException(org.teiid.translator.TranslatorException) DataNotAvailableException(org.teiid.translator.DataNotAvailableException) ResultsFuture(org.teiid.client.util.ResultsFuture) StatementCallback(org.teiid.jdbc.StatementCallback) ResultSet(java.sql.ResultSet) Test(org.junit.Test)

Example 4 with StatementCallback

use of org.teiid.jdbc.StatementCallback in project teiid by teiid.

the class TestAsynch method testAsynchContinuousMergeBlock.

@Test
public void testAsynchContinuousMergeBlock() throws Exception {
    Statement stmt = this.internalConnection.createStatement();
    stmt.execute("create temporary table t (c string, primary key (c))");
    stmt.execute("set autoCommitTxn off");
    TeiidStatement ts = stmt.unwrap(TeiidStatement.class);
    final ResultsFuture<Integer> result = new ResultsFuture<Integer>();
    ts.submitExecute("begin merge into t select name from schemas limit 2; select rowcount; end", new StatementCallback() {

        int rowCount;

        @Override
        public void onRow(Statement s, ResultSet rs) throws SQLException {
            rowCount++;
            if (rowCount == 10) {
                s.close();
            }
        }

        @Override
        public void onException(Statement s, Exception e) {
            result.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement s) {
            result.getResultsReceiver().receiveResults(rowCount);
        }
    }, new RequestOptions().continuous(true));
    assertEquals(10, result.get().intValue());
    stmt = this.internalConnection.createStatement();
    ResultSet rs = stmt.executeQuery("select count(*) from t");
    rs.next();
    assertEquals(2, rs.getInt(1));
}
Also used : ResultsFuture(org.teiid.client.util.ResultsFuture) ContinuousStatementCallback(org.teiid.jdbc.ContinuousStatementCallback) StatementCallback(org.teiid.jdbc.StatementCallback) SQLException(java.sql.SQLException) RequestOptions(org.teiid.jdbc.RequestOptions) TeiidStatement(org.teiid.jdbc.TeiidStatement) Statement(java.sql.Statement) TeiidStatement(org.teiid.jdbc.TeiidStatement) ResultSet(java.sql.ResultSet) TeiidResultSet(org.teiid.jdbc.TeiidResultSet) AsynchPositioningException(org.teiid.jdbc.AsynchPositioningException) SQLException(java.sql.SQLException) TranslatorException(org.teiid.translator.TranslatorException) Test(org.junit.Test)

Example 5 with StatementCallback

use of org.teiid.jdbc.StatementCallback in project teiid by teiid.

the class TestAsynch method testAsynchAnon.

/**
 * Runs sufficient iterations to ensure the temptablestore state is correct
 * @throws Exception
 */
@Test
public void testAsynchAnon() throws Exception {
    String query = "begin\n" + "insert into #mom_collectors select 'a' as hostname, 123 as port, 1 as id from sometable;\n" + "insert into #apm_collectors select 'a' as hostname, 124 as port, 12 as id from sometable;\n" + "select 'add', hostname, port, id from #mom_collectors\n" + "where (hostname, port) not in (select (hostname, port) from #apm_collectors)\n" + "union select 'delete', hostname, port, id from #apm_collectors\n" + "where (hostname, port) not in (select (hostname, port) from #mom_collectors) with return; end";
    Statement stmt = this.internalConnection.createStatement();
    TeiidStatement ts = stmt.unwrap(TeiidStatement.class);
    ef.addData("SELECT someTable.col FROM someTable", Collections.nCopies(1, Arrays.asList(1)));
    ts.setExecutionProperty("autoCommitTxn", "off");
    final ResultsFuture<Integer> result = new ResultsFuture<Integer>();
    ts.submitExecute(query, new StatementCallback() {

        int rowCount;

        @Override
        public void onRow(Statement s, ResultSet rs) {
            try {
                rowCount++;
                if (rowCount == 100000) {
                    s.close();
                }
            } catch (SQLException e) {
                result.getResultsReceiver().exceptionOccurred(e);
                throw new RuntimeException(e);
            }
        }

        @Override
        public void onException(Statement s, Exception e) {
            result.getResultsReceiver().exceptionOccurred(e);
        }

        @Override
        public void onComplete(Statement s) {
            result.getResultsReceiver().receiveResults(rowCount);
        }
    }, new RequestOptions().continuous(true));
    assertEquals(100000, result.get().intValue());
}
Also used : SQLException(java.sql.SQLException) RequestOptions(org.teiid.jdbc.RequestOptions) TeiidStatement(org.teiid.jdbc.TeiidStatement) Statement(java.sql.Statement) TeiidStatement(org.teiid.jdbc.TeiidStatement) AsynchPositioningException(org.teiid.jdbc.AsynchPositioningException) SQLException(java.sql.SQLException) TranslatorException(org.teiid.translator.TranslatorException) ResultsFuture(org.teiid.client.util.ResultsFuture) ContinuousStatementCallback(org.teiid.jdbc.ContinuousStatementCallback) StatementCallback(org.teiid.jdbc.StatementCallback) ResultSet(java.sql.ResultSet) TeiidResultSet(org.teiid.jdbc.TeiidResultSet) Test(org.junit.Test)

Aggregations

ResultSet (java.sql.ResultSet)8 SQLException (java.sql.SQLException)8 Statement (java.sql.Statement)8 Test (org.junit.Test)8 ResultsFuture (org.teiid.client.util.ResultsFuture)8 RequestOptions (org.teiid.jdbc.RequestOptions)8 StatementCallback (org.teiid.jdbc.StatementCallback)8 TeiidStatement (org.teiid.jdbc.TeiidStatement)8 TranslatorException (org.teiid.translator.TranslatorException)8 AsynchPositioningException (org.teiid.jdbc.AsynchPositioningException)7 ContinuousStatementCallback (org.teiid.jdbc.ContinuousStatementCallback)7 TeiidResultSet (org.teiid.jdbc.TeiidResultSet)7 Connection (java.sql.Connection)1 DataNotAvailableException (org.teiid.translator.DataNotAvailableException)1