Search in sources :

Example 6 with PgConnection

use of io.vertx.pgclient.PgConnection in project raml-module-builder by folio-org.

the class SQLConnectionTest method closeConnectionAfterTimerException.

@Test
void closeConnectionAfterTimerException() {
    PgConnection pgConnection = mock(PgConnection.class);
    assertThrows(NullPointerException.class, () -> new SQLConnection(pgConnection, null, 5L).close(null));
    verify(pgConnection).close();
}
Also used : PgConnection(io.vertx.pgclient.PgConnection) Test(org.junit.jupiter.api.Test)

Example 7 with PgConnection

use of io.vertx.pgclient.PgConnection in project raml-module-builder by folio-org.

the class Conn method get.

/**
 * Return records selected by {@link CQLWrapper} filter.
 *
 * @param table - table to query
 * @param clazz - class of objects to be returned
 * @param fieldName - database column to return, for example  @link {@link PostgresClient#DEFAULT_JSONB_FIELD_NAME}
 * @param wrapper - filter to select records
 * @param returnCount - whether to return totalRecords, the number of matching records when disabling OFFSET and LIMIT
 * @param returnIdField - if the id field should also be returned, must be true for facets
 * @param facets - fields to calculate counts for
 * @param distinctOn - database column to calculate the number of distinct values for, null or empty string for none
 */
public <T> Future<Results<T>> get(String table, Class<T> clazz, String fieldName, CQLWrapper wrapper, boolean returnCount, boolean returnIdField, List<FacetField> facets, String distinctOn) {
    try {
        QueryHelper queryHelper = postgresClient.buildQueryHelper(table, fieldName, wrapper, returnIdField, facets, distinctOn);
        Function<TotaledResults, Results<T>> resultSetMapper = totaledResults -> postgresClient.processResults(totaledResults.set, totaledResults.estimatedTotal, queryHelper.offset, queryHelper.limit, clazz);
        if (returnCount) {
            return postgresClient.processQueryWithCount(pgConnection, queryHelper, "get", resultSetMapper);
        } else {
            return Future.future(promise -> postgresClient.processQuery(pgConnection, queryHelper, null, "get", resultSetMapper, promise));
        }
    } catch (Exception e) {
        log.error(e.getMessage(), e);
        return Future.failedFuture(e);
    }
}
Also used : RowStream(io.vertx.sqlclient.RowStream) CQLWrapper(org.folio.rest.persist.cql.CQLWrapper) FacetField(org.folio.rest.persist.facets.FacetField) Function(java.util.function.Function) TotaledResults(org.folio.rest.persist.PostgresClient.TotaledResults) Tuple(io.vertx.sqlclient.Tuple) ArrayList(java.util.ArrayList) UpdateSection(org.folio.rest.persist.Criteria.UpdateSection) FunctionWithException(org.folio.rest.persist.PostgresClient.FunctionWithException) MetadataUtil(org.folio.rest.tools.utils.MetadataUtil) QueryHelper(org.folio.rest.persist.PostgresClient.QueryHelper) Map(java.util.Map) JsonObject(io.vertx.core.json.JsonObject) RowSet(io.vertx.sqlclient.RowSet) AsyncResult(io.vertx.core.AsyncResult) Method(java.lang.reflect.Method) Promise(io.vertx.core.Promise) SqlUtil(org.folio.dbschema.util.SqlUtil) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) UUID(java.util.UUID) Future(io.vertx.core.Future) UncheckedIOException(java.io.UncheckedIOException) JsonArray(io.vertx.core.json.JsonArray) PgConnection(io.vertx.pgclient.PgConnection) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Criterion(org.folio.rest.persist.Criteria.Criterion) Results(org.folio.rest.persist.interfaces.Results) Row(io.vertx.sqlclient.Row) LocalRowSet(org.folio.rest.persist.helpers.LocalRowSet) Handler(io.vertx.core.Handler) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) QueryHelper(org.folio.rest.persist.PostgresClient.QueryHelper) TotaledResults(org.folio.rest.persist.PostgresClient.TotaledResults) TotaledResults(org.folio.rest.persist.PostgresClient.TotaledResults) Results(org.folio.rest.persist.interfaces.Results) FunctionWithException(org.folio.rest.persist.PostgresClient.FunctionWithException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) UncheckedIOException(java.io.UncheckedIOException)

Example 8 with PgConnection

use of io.vertx.pgclient.PgConnection in project raml-module-builder by folio-org.

the class ConnIT method getPgConnection.

@Test
void getPgConnection() {
    PgConnection pgConnection = mock(PgConnection.class);
    assertThat(new Conn(null, pgConnection).getPgConnection()).isEqualTo(pgConnection);
}
Also used : PgConnection(io.vertx.pgclient.PgConnection) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 9 with PgConnection

use of io.vertx.pgclient.PgConnection in project raml-module-builder by folio-org.

the class PostgresClientIT method postgresClientQueryFails.

/**
 * @return a PostgresClient where invoking SQLConnection::update, SQLConnection::updateWithParams or
 * SQLConnection::queryWithParams will report a failure via the resultHandler.
 */
private PostgresClient postgresClientQueryFails() {
    PgConnection pgConnection = new PgConnection() {

        @Override
        public PgConnection notificationHandler(Handler<PgNotification> handler) {
            return this;
        }

        @Override
        public PgConnection cancelRequest(Handler<AsyncResult<Void>> handler) {
            handler.handle(Future.failedFuture("cancelRequestFails"));
            return this;
        }

        @Override
        public int processId() {
            return 0;
        }

        @Override
        public int secretKey() {
            return 0;
        }

        @Override
        public PgConnection prepare(String s, Handler<AsyncResult<PreparedStatement>> handler) {
            prepare(s).onComplete(handler);
            return null;
        }

        @Override
        public Future<PreparedStatement> prepare(String s) {
            return Future.failedFuture("preparedFails");
        }

        @Override
        public SqlConnection prepare(String sql, PrepareOptions options, Handler<AsyncResult<PreparedStatement>> handler) {
            prepare(sql, options).onComplete(handler);
            return null;
        }

        @Override
        public Future<PreparedStatement> prepare(String sql, PrepareOptions options) {
            return prepare(sql);
        }

        @Override
        public PgConnection exceptionHandler(Handler<Throwable> handler) {
            return null;
        }

        @Override
        public PgConnection closeHandler(Handler<Void> handler) {
            return null;
        }

        @Override
        public void begin(Handler<AsyncResult<Transaction>> handler) {
        }

        @Override
        public Future<Transaction> begin() {
            return null;
        }

        @Override
        public boolean isSSL() {
            return false;
        }

        @Override
        public void close(Handler<AsyncResult<Void>> handler) {
        }

        @Override
        public Query<RowSet<Row>> query(String s) {
            return new Query<RowSet<Row>>() {

                @Override
                public void execute(Handler<AsyncResult<RowSet<Row>>> handler) {
                    handler.handle(execute());
                }

                @Override
                public Future<RowSet<Row>> execute() {
                    return Future.failedFuture("queryFails");
                }

                @Override
                public <R> Query<SqlResult<R>> collecting(Collector<Row, ?, R> collector) {
                    return null;
                }

                @Override
                public <U> Query<RowSet<U>> mapping(Function<Row, U> function) {
                    return null;
                }
            };
        }

        @Override
        public PreparedQuery<RowSet<Row>> preparedQuery(String sql, PrepareOptions options) {
            return preparedQuery(sql);
        }

        @Override
        public PreparedQuery<RowSet<Row>> preparedQuery(String s) {
            throw new RuntimeException("queryFails");
        }

        @Override
        public Future<Void> close() {
            return null;
        }

        @Override
        public DatabaseMetadata databaseMetadata() {
            return null;
        }
    };
    PgPool client = new PgPoolBase() {

        @Override
        public Future<SqlConnection> getConnection() {
            return Future.succeededFuture(pgConnection);
        }
    };
    try {
        PostgresClient postgresClient = new PostgresClient(vertx, TENANT);
        postgresClient.setClient(client);
        return postgresClient;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : SqlResult(io.vertx.sqlclient.SqlResult) Query(io.vertx.sqlclient.Query) PreparedQuery(io.vertx.sqlclient.PreparedQuery) PgPool(io.vertx.pgclient.PgPool) PgConnection(io.vertx.pgclient.PgConnection) RowSet(io.vertx.sqlclient.RowSet) LocalRowSet(org.folio.rest.persist.helpers.LocalRowSet) Handler(io.vertx.core.Handler) PreparedStatement(io.vertx.sqlclient.PreparedStatement) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) TransactionRollbackException(io.vertx.sqlclient.TransactionRollbackException) FieldException(org.folio.cql2pgjson.exception.FieldException) UncheckedIOException(java.io.UncheckedIOException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) Function(java.util.function.Function) Transaction(io.vertx.sqlclient.Transaction) PrepareOptions(io.vertx.sqlclient.PrepareOptions) Collector(java.util.stream.Collector) SqlConnection(io.vertx.sqlclient.SqlConnection) Row(io.vertx.sqlclient.Row)

Example 10 with PgConnection

use of io.vertx.pgclient.PgConnection in project raml-module-builder by folio-org.

the class PostgresClientTest method testProcessQueryWithCount.

@Test
public void testProcessQueryWithCount() {
    PostgresClient testClient = PostgresClient.testClient();
    QueryHelper queryHelper = new QueryHelper("test_pojo");
    queryHelper.selectQuery = "SELECT * FROM test_pojo";
    queryHelper.countQuery = "COUNT (*) FROM test_pojo";
    int total = 10;
    PgConnection connection = new FakeSqlConnection(Future.succeededFuture(getMockTestJsonbPojoResultSet(total)), false);
    testClient.processQueryWithCount(connection, queryHelper, "get", totaledResults -> {
        assertThat(totaledResults.estimatedTotal, is(total));
        return testClient.processResults(totaledResults.set, totaledResults.estimatedTotal, DEFAULT_OFFSET, DEFAULT_LIMIT, TestPojo.class);
    }).onSuccess(reply -> assertTestPojoResults(reply.getResults(), total));
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) Arrays(java.util.Arrays) AES(org.folio.rest.security.AES) PgNotification(io.vertx.pgclient.PgNotification) CoreMatchers.instanceOf(org.hamcrest.CoreMatchers.instanceOf) User(org.folio.rest.jaxrs.model.User) SqlResult(io.vertx.sqlclient.SqlResult) Map(java.util.Map) After(org.junit.After) AESTest(org.folio.rest.security.AESTest) JsonObject(io.vertx.core.json.JsonObject) Collector(java.util.stream.Collector) Transaction(io.vertx.sqlclient.Transaction) Method(java.lang.reflect.Method) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) RowImpl(io.vertx.pgclient.impl.RowImpl) UUID(java.util.UUID) Future(io.vertx.core.Future) List(java.util.List) ResourceUtil(org.folio.util.ResourceUtil) ArrayMatching.hasItemInArray(org.hamcrest.collection.ArrayMatching.hasItemInArray) RowDesc(io.vertx.sqlclient.impl.RowDesc) FacetField(org.folio.rest.persist.facets.FacetField) Assert.assertThrows(org.junit.Assert.assertThrows) HashMap(java.util.HashMap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) PreparedStatement(io.vertx.sqlclient.PreparedStatement) PrepareOptions(io.vertx.sqlclient.PrepareOptions) SqlConnection(io.vertx.sqlclient.SqlConnection) QueryHelper(org.folio.rest.persist.PostgresClient.QueryHelper) ArrayMatching.arrayContaining(org.hamcrest.collection.ArrayMatching.arrayContaining) RowSet(io.vertx.sqlclient.RowSet) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) AsyncResult(io.vertx.core.AsyncResult) LinkedList(java.util.LinkedList) DatabaseMetadata(io.vertx.sqlclient.spi.DatabaseMetadata) PostgresTester(org.folio.util.PostgresTester) Before(org.junit.Before) StringContainsInOrder.stringContainsInOrder(org.hamcrest.text.StringContainsInOrder.stringContainsInOrder) Envs(org.folio.rest.tools.utils.Envs) Query(io.vertx.sqlclient.Query) Vertx(io.vertx.core.Vertx) Test(org.junit.Test) PreparedQuery(io.vertx.sqlclient.PreparedQuery) NetworkUtils(org.folio.rest.tools.utils.NetworkUtils) Mockito(org.mockito.Mockito) PgConnection(io.vertx.pgclient.PgConnection) Assert.assertNull(org.junit.Assert.assertNull) Row(io.vertx.sqlclient.Row) PgConnectOptions(io.vertx.pgclient.PgConnectOptions) LocalRowSet(org.folio.rest.persist.helpers.LocalRowSet) Handler(io.vertx.core.Handler) Assert(org.junit.Assert) Assert.assertEquals(org.junit.Assert.assertEquals) QueryHelper(org.folio.rest.persist.PostgresClient.QueryHelper) PgConnection(io.vertx.pgclient.PgConnection) AESTest(org.folio.rest.security.AESTest) Test(org.junit.Test)

Aggregations

PgConnection (io.vertx.pgclient.PgConnection)17 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)9 RowSet (io.vertx.sqlclient.RowSet)9 IOException (java.io.IOException)8 Handler (io.vertx.core.Handler)7 PgPool (io.vertx.pgclient.PgPool)7 Row (io.vertx.sqlclient.Row)7 SqlConnection (io.vertx.sqlclient.SqlConnection)7 PreparedStatement (io.vertx.sqlclient.PreparedStatement)6 Transaction (io.vertx.sqlclient.Transaction)6 TemplateException (freemarker.template.TemplateException)5 Tuple (io.vertx.sqlclient.Tuple)5 InvocationTargetException (java.lang.reflect.InvocationTargetException)5 ArrayList (java.util.ArrayList)5 Function (java.util.function.Function)5 QueryHelper (org.folio.rest.persist.PostgresClient.QueryHelper)5 FacetField (org.folio.rest.persist.facets.FacetField)5 Test (org.junit.Test)5 AsyncResult (io.vertx.core.AsyncResult)4 Future (io.vertx.core.Future)4