Search in sources :

Example 1 with ConnectionPropertiesImpl

use of org.apache.calcite.avatica.ConnectionPropertiesImpl in project calcite-avatica by apache.

the class ProtobufTranslationImplTest method getResponses.

/**
   * Generates a collection of Responses whose serialization will be tested.
   */
private static List<Response> getResponses() {
    final RpcMetadataResponse rpcMetadata = new RpcMetadataResponse("localhost:8765");
    LinkedList<Response> responses = new LinkedList<>();
    // Nested classes (Signature, ColumnMetaData, CursorFactory, etc) are implicitly getting tested)
    // Stub out the metadata for a row
    ScalarType arrayComponentType = ColumnMetaData.scalar(Types.INTEGER, "integer", Rep.INTEGER);
    ColumnMetaData arrayColumnMetaData = getArrayColumnMetaData(arrayComponentType, 2, "counts");
    List<ColumnMetaData> columns = Arrays.asList(MetaImpl.columnMetaData("str", 0, String.class, true), MetaImpl.columnMetaData("count", 1, Integer.class, true), arrayColumnMetaData);
    List<AvaticaParameter> params = Arrays.asList(new AvaticaParameter(false, 10, 0, Types.VARCHAR, "VARCHAR", String.class.getName(), "str"));
    Meta.CursorFactory cursorFactory = Meta.CursorFactory.create(Style.LIST, Object.class, Arrays.asList("str", "count", "counts"));
    // The row values
    List<Object> rows = new ArrayList<>();
    rows.add(new Object[] { "str_value1", 50, Arrays.asList(1, 2, 3) });
    rows.add(new Object[] { "str_value2", 100, Arrays.asList(1) });
    // Create the signature and frame using the metadata and values
    Signature signature = Signature.create(columns, "sql", params, cursorFactory, Meta.StatementType.SELECT);
    Frame frame = Frame.create(Integer.MAX_VALUE, true, rows);
    // And then create a ResultSetResponse
    ResultSetResponse results1 = new ResultSetResponse("connectionId", Integer.MAX_VALUE, true, signature, frame, Long.MAX_VALUE, rpcMetadata);
    responses.add(results1);
    responses.add(new CloseStatementResponse(rpcMetadata));
    ConnectionPropertiesImpl connProps = new ConnectionPropertiesImpl(false, true, Integer.MAX_VALUE, "catalog", "schema");
    responses.add(new ConnectionSyncResponse(connProps, rpcMetadata));
    responses.add(new OpenConnectionResponse(rpcMetadata));
    responses.add(new CloseConnectionResponse(rpcMetadata));
    responses.add(new CreateStatementResponse("connectionId", Integer.MAX_VALUE, rpcMetadata));
    Map<Meta.DatabaseProperty, Object> propertyMap = new HashMap<>();
    for (Meta.DatabaseProperty prop : Meta.DatabaseProperty.values()) {
        propertyMap.put(prop, prop.defaultValue);
    }
    responses.add(new DatabasePropertyResponse(propertyMap, rpcMetadata));
    responses.add(new ExecuteResponse(Arrays.asList(results1, results1, results1), false, rpcMetadata));
    responses.add(new FetchResponse(frame, false, false, rpcMetadata));
    responses.add(new FetchResponse(frame, true, true, rpcMetadata));
    responses.add(new FetchResponse(frame, false, true, rpcMetadata));
    responses.add(new PrepareResponse(new Meta.StatementHandle("connectionId", Integer.MAX_VALUE, signature), rpcMetadata));
    StringWriter sw = new StringWriter();
    new Exception().printStackTrace(new PrintWriter(sw));
    responses.add(new ErrorResponse(Collections.singletonList(sw.toString()), "Test Error Message", ErrorResponse.UNKNOWN_ERROR_CODE, ErrorResponse.UNKNOWN_SQL_STATE, AvaticaSeverity.WARNING, rpcMetadata));
    // No more results, statement not missing
    responses.add(new SyncResultsResponse(false, false, rpcMetadata));
    // Missing statement, no results
    responses.add(new SyncResultsResponse(false, true, rpcMetadata));
    // More results, no missing statement
    responses.add(new SyncResultsResponse(true, false, rpcMetadata));
    // Some tests to make sure ErrorResponse doesn't fail.
    responses.add(new ErrorResponse((List<String>) null, null, 0, null, null, null));
    responses.add(new ErrorResponse(Arrays.asList("stacktrace1", "stacktrace2"), null, 0, null, null, null));
    responses.add(new CommitResponse());
    responses.add(new RollbackResponse());
    long[] updateCounts = new long[] { 1, 0, 1, 1 };
    responses.add(new ExecuteBatchResponse("connectionId", 12345, updateCounts, false, rpcMetadata));
    return responses;
}
Also used : Meta(org.apache.calcite.avatica.Meta) Frame(org.apache.calcite.avatica.Meta.Frame) HashMap(java.util.HashMap) ScalarType(org.apache.calcite.avatica.ColumnMetaData.ScalarType) ArrayList(java.util.ArrayList) DatabasePropertyResponse(org.apache.calcite.avatica.remote.Service.DatabasePropertyResponse) RpcMetadataResponse(org.apache.calcite.avatica.remote.Service.RpcMetadataResponse) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl) RollbackResponse(org.apache.calcite.avatica.remote.Service.RollbackResponse) AvaticaParameter(org.apache.calcite.avatica.AvaticaParameter) CloseConnectionResponse(org.apache.calcite.avatica.remote.Service.CloseConnectionResponse) CloseStatementResponse(org.apache.calcite.avatica.remote.Service.CloseStatementResponse) StringWriter(java.io.StringWriter) ExecuteBatchResponse(org.apache.calcite.avatica.remote.Service.ExecuteBatchResponse) ResultSetResponse(org.apache.calcite.avatica.remote.Service.ResultSetResponse) OpenConnectionResponse(org.apache.calcite.avatica.remote.Service.OpenConnectionResponse) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) ColumnMetaData(org.apache.calcite.avatica.ColumnMetaData) PrintWriter(java.io.PrintWriter) CreateStatementResponse(org.apache.calcite.avatica.remote.Service.CreateStatementResponse) SyncResultsResponse(org.apache.calcite.avatica.remote.Service.SyncResultsResponse) PrepareResponse(org.apache.calcite.avatica.remote.Service.PrepareResponse) ExecuteResponse(org.apache.calcite.avatica.remote.Service.ExecuteResponse) CommitResponse(org.apache.calcite.avatica.remote.Service.CommitResponse) FetchResponse(org.apache.calcite.avatica.remote.Service.FetchResponse) LinkedList(java.util.LinkedList) IOException(java.io.IOException) ErrorResponse(org.apache.calcite.avatica.remote.Service.ErrorResponse) CloseConnectionResponse(org.apache.calcite.avatica.remote.Service.CloseConnectionResponse) PrepareResponse(org.apache.calcite.avatica.remote.Service.PrepareResponse) FetchResponse(org.apache.calcite.avatica.remote.Service.FetchResponse) RpcMetadataResponse(org.apache.calcite.avatica.remote.Service.RpcMetadataResponse) ExecuteBatchResponse(org.apache.calcite.avatica.remote.Service.ExecuteBatchResponse) DatabasePropertyResponse(org.apache.calcite.avatica.remote.Service.DatabasePropertyResponse) OpenConnectionResponse(org.apache.calcite.avatica.remote.Service.OpenConnectionResponse) RollbackResponse(org.apache.calcite.avatica.remote.Service.RollbackResponse) CloseStatementResponse(org.apache.calcite.avatica.remote.Service.CloseStatementResponse) Response(org.apache.calcite.avatica.remote.Service.Response) CreateStatementResponse(org.apache.calcite.avatica.remote.Service.CreateStatementResponse) ErrorResponse(org.apache.calcite.avatica.remote.Service.ErrorResponse) ConnectionSyncResponse(org.apache.calcite.avatica.remote.Service.ConnectionSyncResponse) ResultSetResponse(org.apache.calcite.avatica.remote.Service.ResultSetResponse) ExecuteResponse(org.apache.calcite.avatica.remote.Service.ExecuteResponse) SyncResultsResponse(org.apache.calcite.avatica.remote.Service.SyncResultsResponse) CommitResponse(org.apache.calcite.avatica.remote.Service.CommitResponse) Signature(org.apache.calcite.avatica.Meta.Signature) ConnectionSyncResponse(org.apache.calcite.avatica.remote.Service.ConnectionSyncResponse)

Example 2 with ConnectionPropertiesImpl

use of org.apache.calcite.avatica.ConnectionPropertiesImpl in project calcite-avatica by apache.

the class AlternatingRemoteMetaTest method testRemoteConnectionProperties.

@Test
public void testRemoteConnectionProperties() throws Exception {
    ConnectionSpec.getDatabaseLock().lock();
    try (AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url)) {
        String id = conn.id;
        final Map<String, ConnectionPropertiesImpl> m = ((RemoteMeta) getMeta(conn)).propsMap;
        assertFalse("remote connection map should start ignorant", m.containsKey(id));
        // force creating a connection object on the remote side.
        try (final Statement stmt = conn.createStatement()) {
            assertTrue("creating a statement starts a local object.", m.containsKey(id));
            assertTrue(stmt.execute("select count(1) from EMP"));
        }
        Connection remoteConn = getConnection(FullyRemoteJdbcMetaFactory.getInstance(), id);
        final boolean defaultRO = remoteConn.isReadOnly();
        final boolean defaultAutoCommit = remoteConn.getAutoCommit();
        final String defaultCatalog = remoteConn.getCatalog();
        final String defaultSchema = remoteConn.getSchema();
        conn.setReadOnly(!defaultRO);
        assertTrue("local changes dirty local state", m.get(id).isDirty());
        assertEquals("remote connection has not been touched", defaultRO, remoteConn.isReadOnly());
        conn.setAutoCommit(!defaultAutoCommit);
        assertEquals("remote connection has not been touched", defaultAutoCommit, remoteConn.getAutoCommit());
        // further interaction with the connection will force a sync
        try (final Statement stmt = conn.createStatement()) {
            assertEquals(!defaultAutoCommit, remoteConn.getAutoCommit());
            assertFalse("local values should be clean", m.get(id).isDirty());
        }
    } finally {
        ConnectionSpec.getDatabaseLock().unlock();
    }
}
Also used : AvaticaConnection(org.apache.calcite.avatica.AvaticaConnection) AvaticaStatement(org.apache.calcite.avatica.AvaticaStatement) Statement(java.sql.Statement) Connection(java.sql.Connection) AvaticaConnection(org.apache.calcite.avatica.AvaticaConnection) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl) Test(org.junit.Test)

Example 3 with ConnectionPropertiesImpl

use of org.apache.calcite.avatica.ConnectionPropertiesImpl in project calcite-avatica by apache.

the class ProtobufTranslationImplTest method getRequests.

/**
   * Generates a collection of Requests whose serialization will be tested.
   */
private static List<Request> getRequests() {
    LinkedList<Request> requests = new LinkedList<>();
    requests.add(new CatalogsRequest());
    requests.add(new DatabasePropertyRequest());
    requests.add(new SchemasRequest("connectionId", "catalog", "schemaPattern"));
    requests.add(new TablesRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern", Arrays.asList("STRING", "BOOLEAN", "INT")));
    requests.add(new TableTypesRequest());
    requests.add(new ColumnsRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern", "columnNamePattern"));
    requests.add(new TypeInfoRequest());
    requests.add(new PrepareAndExecuteRequest("connectionId", Integer.MAX_VALUE, "sql", Long.MAX_VALUE));
    requests.add(new PrepareRequest("connectionId", "sql", Long.MAX_VALUE));
    List<TypedValue> paramValues = Arrays.asList(TypedValue.create(Rep.BOOLEAN.name(), Boolean.TRUE), TypedValue.create(Rep.STRING.name(), "string"));
    FetchRequest fetchRequest = new FetchRequest("connectionId", Integer.MAX_VALUE, Long.MAX_VALUE, Integer.MAX_VALUE);
    requests.add(fetchRequest);
    requests.add(new CreateStatementRequest("connectionId"));
    requests.add(new CloseStatementRequest("connectionId", Integer.MAX_VALUE));
    Map<String, String> info = new HashMap<>();
    info.put("param1", "value1");
    info.put("param2", "value2");
    requests.add(new OpenConnectionRequest("connectionId", info));
    requests.add(new CloseConnectionRequest("connectionId"));
    requests.add(new ConnectionSyncRequest("connectionId", new ConnectionPropertiesImpl(Boolean.FALSE, Boolean.FALSE, Integer.MAX_VALUE, "catalog", "schema")));
    requests.add(new SyncResultsRequest("connectionId", 12345, getSqlQueryState(), 150));
    requests.add(new SyncResultsRequest("connectionId2", 54321, getMetadataQueryState1(), 0));
    requests.add(new SyncResultsRequest("connectionId3", 5, getMetadataQueryState2(), 10));
    requests.add(new CommitRequest("connectionId"));
    requests.add(new RollbackRequest("connectionId"));
    // ExecuteBatchRequest omitted because of the special protobuf conversion it does
    List<String> commands = Arrays.asList("command1", "command2", "command3");
    requests.add(new PrepareAndExecuteBatchRequest("connectionId", 12345, commands));
    List<ColumnMetaData> columns = Collections.emptyList();
    List<AvaticaParameter> params = Collections.emptyList();
    Meta.CursorFactory cursorFactory = Meta.CursorFactory.create(Style.LIST, Object.class, Collections.<String>emptyList());
    Signature signature = Signature.create(columns, "sql", params, cursorFactory, Meta.StatementType.SELECT);
    Meta.StatementHandle handle = new Meta.StatementHandle("1234", 1, signature);
    requests.add(new ExecuteRequest(handle, Arrays.<TypedValue>asList((TypedValue) null), 10));
    requests.add(new ExecuteRequest(handle, Arrays.asList(TypedValue.EXPLICIT_NULL), 10));
    return requests;
}
Also used : PrepareAndExecuteBatchRequest(org.apache.calcite.avatica.remote.Service.PrepareAndExecuteBatchRequest) Meta(org.apache.calcite.avatica.Meta) HashMap(java.util.HashMap) DatabasePropertyRequest(org.apache.calcite.avatica.remote.Service.DatabasePropertyRequest) SchemasRequest(org.apache.calcite.avatica.remote.Service.SchemasRequest) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl) OpenConnectionRequest(org.apache.calcite.avatica.remote.Service.OpenConnectionRequest) RollbackRequest(org.apache.calcite.avatica.remote.Service.RollbackRequest) SyncResultsRequest(org.apache.calcite.avatica.remote.Service.SyncResultsRequest) AvaticaParameter(org.apache.calcite.avatica.AvaticaParameter) TablesRequest(org.apache.calcite.avatica.remote.Service.TablesRequest) TableTypesRequest(org.apache.calcite.avatica.remote.Service.TableTypesRequest) ExecuteRequest(org.apache.calcite.avatica.remote.Service.ExecuteRequest) PrepareAndExecuteRequest(org.apache.calcite.avatica.remote.Service.PrepareAndExecuteRequest) FetchRequest(org.apache.calcite.avatica.remote.Service.FetchRequest) PrepareAndExecuteRequest(org.apache.calcite.avatica.remote.Service.PrepareAndExecuteRequest) CloseStatementRequest(org.apache.calcite.avatica.remote.Service.CloseStatementRequest) ColumnMetaData(org.apache.calcite.avatica.ColumnMetaData) PrepareRequest(org.apache.calcite.avatica.remote.Service.PrepareRequest) CommitRequest(org.apache.calcite.avatica.remote.Service.CommitRequest) ExecuteRequest(org.apache.calcite.avatica.remote.Service.ExecuteRequest) TablesRequest(org.apache.calcite.avatica.remote.Service.TablesRequest) CloseStatementRequest(org.apache.calcite.avatica.remote.Service.CloseStatementRequest) FetchRequest(org.apache.calcite.avatica.remote.Service.FetchRequest) PrepareRequest(org.apache.calcite.avatica.remote.Service.PrepareRequest) CreateStatementRequest(org.apache.calcite.avatica.remote.Service.CreateStatementRequest) CloseConnectionRequest(org.apache.calcite.avatica.remote.Service.CloseConnectionRequest) CatalogsRequest(org.apache.calcite.avatica.remote.Service.CatalogsRequest) SyncResultsRequest(org.apache.calcite.avatica.remote.Service.SyncResultsRequest) Request(org.apache.calcite.avatica.remote.Service.Request) ConnectionSyncRequest(org.apache.calcite.avatica.remote.Service.ConnectionSyncRequest) SchemasRequest(org.apache.calcite.avatica.remote.Service.SchemasRequest) TableTypesRequest(org.apache.calcite.avatica.remote.Service.TableTypesRequest) DatabasePropertyRequest(org.apache.calcite.avatica.remote.Service.DatabasePropertyRequest) PrepareAndExecuteBatchRequest(org.apache.calcite.avatica.remote.Service.PrepareAndExecuteBatchRequest) TypeInfoRequest(org.apache.calcite.avatica.remote.Service.TypeInfoRequest) CommitRequest(org.apache.calcite.avatica.remote.Service.CommitRequest) PrepareAndExecuteRequest(org.apache.calcite.avatica.remote.Service.PrepareAndExecuteRequest) OpenConnectionRequest(org.apache.calcite.avatica.remote.Service.OpenConnectionRequest) ColumnsRequest(org.apache.calcite.avatica.remote.Service.ColumnsRequest) RollbackRequest(org.apache.calcite.avatica.remote.Service.RollbackRequest) LinkedList(java.util.LinkedList) CloseConnectionRequest(org.apache.calcite.avatica.remote.Service.CloseConnectionRequest) TypeInfoRequest(org.apache.calcite.avatica.remote.Service.TypeInfoRequest) CreateStatementRequest(org.apache.calcite.avatica.remote.Service.CreateStatementRequest) Signature(org.apache.calcite.avatica.Meta.Signature) ConnectionSyncRequest(org.apache.calcite.avatica.remote.Service.ConnectionSyncRequest) CatalogsRequest(org.apache.calcite.avatica.remote.Service.CatalogsRequest) ColumnsRequest(org.apache.calcite.avatica.remote.Service.ColumnsRequest)

Example 4 with ConnectionPropertiesImpl

use of org.apache.calcite.avatica.ConnectionPropertiesImpl in project calcite-avatica by apache.

the class JdbcMeta method connectionSync.

@Override
public ConnectionProperties connectionSync(ConnectionHandle ch, ConnectionProperties connProps) {
    LOG.trace("syncing properties for connection {}", ch);
    try {
        Connection conn = getConnection(ch.id);
        ConnectionPropertiesImpl props = new ConnectionPropertiesImpl(conn).merge(connProps);
        if (props.isDirty()) {
            apply(conn, props);
            props.setDirty(false);
        }
        return props;
    } catch (SQLException e) {
        throw propagate(e);
    }
}
Also used : SQLException(java.sql.SQLException) Connection(java.sql.Connection) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl)

Example 5 with ConnectionPropertiesImpl

use of org.apache.calcite.avatica.ConnectionPropertiesImpl in project calcite-avatica by apache.

the class RemoteMetaTest method testRemoteConnectionProperties.

@Test
public void testRemoteConnectionProperties() throws Exception {
    ConnectionSpec.getDatabaseLock().lock();
    try (AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url)) {
        String id = conn.id;
        final Map<String, ConnectionPropertiesImpl> m = ((RemoteMeta) getMeta(conn)).propsMap;
        assertFalse("remote connection map should start ignorant", m.containsKey(id));
        // force creating a connection object on the remote side.
        try (final Statement stmt = conn.createStatement()) {
            assertTrue("creating a statement starts a local object.", m.containsKey(id));
            assertTrue(stmt.execute("select count(1) from EMP"));
        }
        Connection remoteConn = getConnection(FullyRemoteJdbcMetaFactory.getInstance(), id);
        final boolean defaultRO = remoteConn.isReadOnly();
        final boolean defaultAutoCommit = remoteConn.getAutoCommit();
        final String defaultCatalog = remoteConn.getCatalog();
        final String defaultSchema = remoteConn.getSchema();
        conn.setReadOnly(!defaultRO);
        assertTrue("local changes dirty local state", m.get(id).isDirty());
        assertEquals("remote connection has not been touched", defaultRO, remoteConn.isReadOnly());
        conn.setAutoCommit(!defaultAutoCommit);
        assertEquals("remote connection has not been touched", defaultAutoCommit, remoteConn.getAutoCommit());
        // further interaction with the connection will force a sync
        try (final Statement stmt = conn.createStatement()) {
            assertEquals(!defaultAutoCommit, remoteConn.getAutoCommit());
            assertFalse("local values should be clean", m.get(id).isDirty());
        }
    } finally {
        ConnectionSpec.getDatabaseLock().unlock();
    }
}
Also used : AvaticaConnection(org.apache.calcite.avatica.AvaticaConnection) PreparedStatement(java.sql.PreparedStatement) AvaticaStatement(org.apache.calcite.avatica.AvaticaStatement) Statement(java.sql.Statement) HttpURLConnection(java.net.HttpURLConnection) Connection(java.sql.Connection) AvaticaConnection(org.apache.calcite.avatica.AvaticaConnection) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl) StringContains.containsString(org.hamcrest.core.StringContains.containsString) Test(org.junit.Test)

Aggregations

ConnectionPropertiesImpl (org.apache.calcite.avatica.ConnectionPropertiesImpl)5 Connection (java.sql.Connection)3 Statement (java.sql.Statement)2 HashMap (java.util.HashMap)2 LinkedList (java.util.LinkedList)2 AvaticaConnection (org.apache.calcite.avatica.AvaticaConnection)2 AvaticaParameter (org.apache.calcite.avatica.AvaticaParameter)2 AvaticaStatement (org.apache.calcite.avatica.AvaticaStatement)2 ColumnMetaData (org.apache.calcite.avatica.ColumnMetaData)2 Meta (org.apache.calcite.avatica.Meta)2 Signature (org.apache.calcite.avatica.Meta.Signature)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 HttpURLConnection (java.net.HttpURLConnection)1 PreparedStatement (java.sql.PreparedStatement)1 SQLException (java.sql.SQLException)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1