Search in sources :

Example 76 with Handle

use of org.jdbi.v3.core.Handle in project tutorials by eugenp.

the class JdbiTest method whenIdentityColumn_thenInsertReturnsNewId.

@Test
public void whenIdentityColumn_thenInsertReturnsNewId() {
    Jdbi jdbi = Jdbi.create("jdbc:hsqldb:mem:testDB", "sa", "");
    jdbi.useHandle(handle -> {
        handle.execute("create table PROJECT_2 (ID IDENTITY, NAME VARCHAR (50), URL VARCHAR (100))");
        Update update = handle.createUpdate("INSERT INTO PROJECT_2 (NAME, URL) VALUES ('tutorials', 'github.com/eugenp/tutorials')");
        ResultBearing generatedKeys = update.executeAndReturnGeneratedKeys();
        assertEquals(0, generatedKeys.mapToMap().findOnly().get("id"));
        update = handle.createUpdate("INSERT INTO PROJECT_2 (NAME, URL) VALUES ('REST with Spring', 'github.com/eugenp/REST-With-Spring')");
        assertEquals(1, generatedKeys.mapToMap().findOnly().get("id"));
    });
}
Also used : Jdbi(org.jdbi.v3.core.Jdbi) ResultBearing(org.jdbi.v3.core.result.ResultBearing) Update(org.jdbi.v3.core.statement.Update) Test(org.junit.Test)

Example 77 with Handle

use of org.jdbi.v3.core.Handle in project providence by morimekta.

the class MessageRowMapperTest method testDefaultMapping.

@Test
public void testDefaultMapping() {
    generator.setFillRate(1.0).setMaxCollectionItems(16).withGenerator(CompactFields.kDescriptor, g -> {
        g.setValueGenerator(CompactFields._Field.NAME, ctx -> ctx.getFairy().textProducer().latinWord());
        g.setValueGenerator(CompactFields._Field.LABEL, ctx -> ctx.getFairy().textProducer().word());
    }).withGenerator(NormalFields.kDescriptor, g -> {
        g.setValueGenerator(NormalFields._Field.NAME, ctx -> ctx.getFairy().textProducer().latinWord());
        g.setValueGenerator(NormalFields._Field.LABEL, ctx -> ctx.getFairy().textProducer().word());
    });
    OptionalFields expected = generator.generate(OptionalFields.kDescriptor).mutate().setId(1234).setTimestampS((int) clock.instant().getEpochSecond()).setTimestampMs(clock.instant().getEpochSecond() * 1000).build();
    OptionalFields empty = OptionalFields.builder().setId(2345).build();
    try (Handle handle = db.getDBI().open()) {
        handle.createUpdate("INSERT INTO mappings_v3.default_mappings (" + "  id, present, tiny, small, medium, large, real," + "  fib, name, data, compact," + "  timestamp_s, timestamp_ms," + "  binary_message, blob_message, other_message," + "  blob_data, base64_data, int_bool" + ") VALUES (" + "  :e.id," + "  :e.present," + "  :e.tiny," + "  :e.small," + "  :e.medium," + "  :e.large," + "  :e.real," + "  :e.fib," + "  :e.name," + "  :e.data," + "  :e.message," + "  :timestamp_s," + "  :e.timestamp_ms," + "  :e.binary_message," + "  :e.blob_message," + "  :e.clob_message," + "  :e.blob_data," + "  :e.base64_data," + "  :e.int_bool" + ")").bind("timestamp_s", toField(expected, TIMESTAMP_S, Types.TIMESTAMP)).bindNamedArgumentFinder(forMessage("e", expected, withType(TIMESTAMP_MS, Types.TIMESTAMP), withType(BINARY_MESSAGE, Types.BINARY), withType(BLOB_MESSAGE, Types.BLOB), withType(CLOB_MESSAGE, Types.CLOB), withType(BLOB_DATA, Types.BLOB), withType(BASE64_DATA, Types.VARCHAR))).execute();
        handle.createUpdate("INSERT INTO mappings_v3.default_mappings (" + "  id, present, tiny, small, medium, large, real," + "  fib, name, data, compact," + "  timestamp_s, timestamp_ms," + "  binary_message, blob_message, other_message," + "  blob_data, base64_data, int_bool" + ") VALUES (" + "  :id," + "  :present," + "  :tiny," + "  :small," + "  :medium," + "  :large," + "  :real," + "  :fib," + "  :name," + "  :data," + "  :message," + "  :timestamp_s," + "  :timestamp_ms," + "  :binary_message," + "  :blob_message," + "  :clob_message," + "  :blob_data," + "  :base64_data," + "  :int_bool" + ")").bind("timestamp_s", toField(empty, TIMESTAMP_S, Types.TIMESTAMP)).bindNamedArgumentFinder(forMessage(empty, withType(TIMESTAMP_MS, Types.TIMESTAMP), withType(BINARY_MESSAGE, Types.BINARY), withType(BLOB_MESSAGE, Types.BLOB), withType(CLOB_MESSAGE, Types.CLOB), withType(BLOB_DATA, Types.BLOB), withType(BASE64_DATA, Types.VARCHAR), withType(INT_BOOL, Types.INTEGER))).execute();
        OptionalFields val = handle.createQuery("SELECT m.* FROM mappings_v3.default_mappings m WHERE id = :id").bind("id", toField(expected, ID)).map(toMessage("default_mappings", OptionalFields.kDescriptor, columnsFromAllFields(), withColumn("compact", MESSAGE), withColumn("other_message", CLOB_MESSAGE))).findFirst().orElseThrow(() -> new AssertionError("No content in default_mappings"));
        OptionalFields val2 = handle.createQuery("SELECT * FROM mappings_v3.default_mappings WHERE id = :id").bind("id", toField(empty, ID)).map(toMessage(OptionalFields.kDescriptor, columnsFromAllFields(), withColumn("compact", MESSAGE), withColumn("other_message", CLOB_MESSAGE))).findFirst().orElseThrow(() -> new AssertionError("No content in default_mappings"));
        assertThat(val, is(equalToMessage(expected)));
        assertThat(val2, is(equalToMessage(empty)));
    }
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) ID(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.ID) TIMESTAMP_MS(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.TIMESTAMP_MS) ProvidenceJdbi.withType(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.withType) ProvidenceJdbi.forMessage(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.forMessage) CLOB_MESSAGE(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.CLOB_MESSAGE) BLOB_DATA(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.BLOB_DATA) Assert.assertThat(org.junit.Assert.assertThat) Handle(org.jdbi.v3.core.Handle) ProvidenceJdbi.toField(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.toField) TIMESTAMP_S(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.TIMESTAMP_S) INT_BOOL(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.INT_BOOL) ProvidenceJdbi.withColumn(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.withColumn) OptionalFields(net.morimekta.test.providence.storage.jdbc.OptionalFields) Test(org.junit.Test) BASE64_DATA(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.BASE64_DATA) NormalFields(net.morimekta.test.providence.storage.jdbc.NormalFields) BINARY_MESSAGE(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.BINARY_MESSAGE) BLOB_MESSAGE(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.BLOB_MESSAGE) ProvidenceJdbi.toMessage(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.toMessage) MESSAGE(net.morimekta.test.providence.storage.jdbc.OptionalFields._Field.MESSAGE) Rule(org.junit.Rule) SimpleGeneratorWatcher(net.morimekta.providence.testing.generator.SimpleGeneratorWatcher) CompactFields(net.morimekta.test.providence.storage.jdbc.CompactFields) Clock(java.time.Clock) ProvidenceMatchers.equalToMessage(net.morimekta.providence.testing.ProvidenceMatchers.equalToMessage) ProvidenceJdbi.columnsFromAllFields(net.morimekta.providence.jdbi.v3.ProvidenceJdbi.columnsFromAllFields) Types(java.sql.Types) OptionalFields(net.morimekta.test.providence.storage.jdbc.OptionalFields) Handle(org.jdbi.v3.core.Handle) Test(org.junit.Test)

Example 78 with Handle

use of org.jdbi.v3.core.Handle in project providence by morimekta.

the class TestDatabase method dumpInternal.

@VisibleForTesting
private void dumpInternal(String table) throws IOException {
    List<List<String>> tableValues = new ArrayList<>();
    if (dbi == null) {
        System.err.println("Trying to dump '" + table + "' of not started database");
        return;
    }
    try (Handle h = this.dbi.open()) {
        List<Map<String, Object>> rs = h.createQuery("SELECT * FROM " + table.toUpperCase(Locale.US)).mapToMap().list();
        List<String> cols = new ArrayList<>();
        for (Map<String, Object> rowResult : rs) {
            if (cols.isEmpty()) {
                List<String> header = new ArrayList<>();
                for (String key : new TreeSet<>(rowResult.keySet())) {
                    cols.add(key);
                    header.add(key);
                }
                tableValues.add(header);
            }
            List<String> row = new ArrayList<>();
            for (String key : cols) {
                row.add(String.valueOf(rowResult.get(key)));
            }
            tableValues.add(row);
        }
    }
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(System.err, "UTF-8"));
    writer.println("Table Dump: " + table);
    prettyPrintTable(writer, tableValues);
    writer.flush();
}
Also used : ArrayList(java.util.ArrayList) ResourceUtils.getResourceAsString(net.morimekta.testing.ResourceUtils.getResourceAsString) Handle(org.jdbi.v3.core.Handle) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) List(java.util.List) OutputStreamWriter(java.io.OutputStreamWriter) Map(java.util.Map) PrintWriter(java.io.PrintWriter) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 79 with Handle

use of org.jdbi.v3.core.Handle in project providence by morimekta.

the class MessageInserter method execute.

public int execute(Handle handle, Collection<M> items) {
    if (items.isEmpty()) {
        throw new IllegalArgumentException("Nothing to insert");
    }
    String query = queryPrefix + items.stream().map(item -> valueMarkers).collect(Collectors.joining(", ")) + querySuffix;
    Update update = handle.createUpdate(query);
    int offset = 0;
    for (M item : items) {
        for (String column : columnOrder) {
            F field = columnToFieldMap.get(column);
            int type = columnTypeMap.get(column);
            update.bind(offset++, new MessageFieldArgument<>(item, field, type));
        }
    }
    return update.execute();
}
Also used : ImmutableMap(com.google.common.collect.ImmutableMap) Collection(java.util.Collection) Set(java.util.Set) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) TreeSet(java.util.TreeSet) PMessage(net.morimekta.providence.PMessage) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) PField(net.morimekta.providence.descriptor.PField) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) Handle(org.jdbi.v3.core.Handle) Map(java.util.Map) Update(org.jdbi.v3.core.statement.Update) Collections(java.util.Collections) Update(org.jdbi.v3.core.statement.Update)

Example 80 with Handle

use of org.jdbi.v3.core.Handle in project SimpleFlatMapper by arnaudroger.

the class RowMapperFactoryTest method testMapToDbObject.

@Test
public void testMapToDbObject() throws Exception {
    Jdbi dbi = Jdbi.create(DbHelper.getHsqlDataSource());
    dbi.installPlugins();
    Handle handle = dbi.open();
    try {
        DbObject dbObject = handle.createQuery(DbHelper.TEST_DB_OBJECT_QUERY).mapTo(DbObject.class).findFirst().get();
        DbHelper.assertDbObjectMapping(dbObject);
    } finally {
        handle.close();
    }
}
Also used : Jdbi(org.jdbi.v3.core.Jdbi) DbObject(org.simpleflatmapper.test.beans.DbObject) Handle(org.jdbi.v3.core.Handle) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)123 Handle (org.jdbi.v3.core.Handle)119 Jdbi (org.jdbi.v3.core.Jdbi)31 Something (org.jdbi.v3.core.Something)29 Before (org.junit.Before)20 SomethingMapper (org.jdbi.v3.core.mapper.SomethingMapper)17 SQLException (java.sql.SQLException)8 Update (org.jdbi.v3.core.statement.Update)7 GenericType (org.jdbi.v3.core.generic.GenericType)6 Query (org.jdbi.v3.core.statement.Query)6 Rule (org.junit.Rule)5 Map (java.util.Map)4 BrokenDao (org.jdbi.v3.sqlobject.subpackage.BrokenDao)4 SomethingDao (org.jdbi.v3.sqlobject.subpackage.SomethingDao)4 ImmutableMap (com.google.common.collect.ImmutableMap)3 Method (java.lang.reflect.Method)3 Connection (java.sql.Connection)3 HashMap (java.util.HashMap)3 List (java.util.List)3 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)3