public Handle openHandle() { return getJdbi().open(); }
public ConnectionFactory getConnectionFactory() { return () -> DriverManager.getConnection(getConnectionString()); } }
@Before public void before() { h = db.getSharedHandle(); }
@Test public void byNameIsDefault() { assertThat(db.getJdbi().getConfig(Enums.class).getDefaultStrategy()) .isEqualTo(EnumStrategy.BY_NAME); }
@Test public void concatenationWorks() { List<String> names = db.getSharedHandle().createQuery("select bar from foo where bar like '%' || :hello || '%'") .bind("hello", "am") .mapTo(String.class) .list(); assertThat(names).containsExactly("bam", "gamma"); }
@Test public void testConflictingSourceAnnotations() { assertThatThrownBy(() -> db.getJdbi().getConfig(EnumStrategies.class).findStrategy(QualifiedType.of(BiPolar.class))) .isInstanceOf(IllegalArgumentException.class); }
@Before public void before() { h = db.getSharedHandle(); h.execute("create table Foo (Id int primary key, FirstName varchar)"); h.execute("insert into Foo(Id, FirstName) values(1, 'No one')"); }
@Test public void badNameThrows() { db.getJdbi().useHandle(h -> { assertThatThrownBy(h.createQuery("select 'xxx'").mapTo(Foobar.class)::findOnly) .isInstanceOf(UnableToProduceResultException.class) .hasMessageContaining("no Foobar value could be matched to the name xxx"); }); }
@Test public void theIntuitiveWayDoesntWork() { Query query = db.getSharedHandle().createQuery("select bar from foo where bar like '%:hello%'") .bind("hello", "am"); assertThatThrownBy(() -> query.mapTo(String.class).findOnly()) .isInstanceOf(UnableToCreateStatementException.class); String name = query // this lovely safeguard :) .configure(SqlStatements.class, sqls -> sqls.setUnusedBindingAllowed(true)) .mapTo(String.class) .findOnly(); assertThat(name).isEqualTo(":hello"); } }
@Test public void testConflictingQualifiers() { QualifiedType<RetentionPolicy> type = QualifiedType.of(RetentionPolicy.class).with(EnumByName.class, EnumByOrdinal.class); assertThatThrownBy(() -> db.getJdbi().getConfig(EnumStrategies.class).findStrategy(type)) .isInstanceOf(IllegalArgumentException.class); }
@Before public void before() { db.getSharedHandle().createUpdate("create table foo(bar varchar)").execute(); db.getSharedHandle().prepareBatch("insert into foo(bar) values(:bar)") .bind("bar", "bam").add() .bind("bar", "gamma").add() .bind("bar", ":hello").add() .execute(); }
@Before public void before() { jdbi = db.getJdbi().registerRowMapper(new GenericMapMapperFactory()); }
@Test public void badOrdinalThrows() { db.getJdbi().useHandle(h -> { h.getConfig(Enums.class).setEnumStrategy(EnumStrategy.BY_ORDINAL); assertThatThrownBy(h.createQuery("select 2").mapTo(Foobar.class)::findOnly) .isInstanceOf(UnableToProduceResultException.class) .hasMessageContaining("no Foobar value could be matched to the ordinal 2"); }); }
@Test public void namesAreMappedCorrectly() { db.getJdbi().useHandle(h -> { Foobar name = h.createQuery("select :name") .bind("name", Foobar.FOO.name()) .mapTo(Foobar.class) .findOnly(); assertThat(name) .isEqualTo(Foobar.FOO); }); }
@Test public void ordinalsAreMappedCorrectly() { db.getJdbi().useHandle(h -> { h.getConfig(Enums.class).setEnumStrategy(EnumStrategy.BY_ORDINAL); Foobar name = h.createQuery("select :ordinal") .bind("ordinal", Foobar.FOO.ordinal()) .mapTo(Foobar.class) .findOnly(); assertThat(name) .isEqualTo(Foobar.FOO); }); }
@Test public void namesAreBoundCorrectly() { db.getJdbi().useHandle(h -> { h.createUpdate("create table enums(id int, name varchar)").execute(); h.createUpdate("insert into enums (id, name) values (1, :name)") .bind("name", Foobar.FOO) .execute(); String ordinal = h.createQuery("select name from enums") .mapTo(String.class) .findOnly(); assertThat(ordinal) .isEqualTo(Foobar.FOO.name()); }); }
@Test public void enumCanBeAnnotatedAsByOrdinal() { db.getJdbi().useHandle(h -> { h.createUpdate("create table enums(id int, ordinal int)").execute(); h.createUpdate("insert into enums(id, ordinal) values(1, :ordinal)") .bind("ordinal", ByOrdinal.NUMERIC) .execute(); Integer inserted = h.createQuery("select ordinal from enums") .mapTo(Integer.class) .findOnly(); assertThat(inserted).isEqualTo(ByOrdinal.NUMERIC.ordinal()); }); }
@Test public void methodCallOverridesClassForOrdinal() { db.getJdbi().useHandle(h -> { h.createUpdate("create table enums(id int, ordinal int)").execute(); h.createUpdate("insert into enums(id, ordinal) values(1, :ordinal)") .bindByType("ordinal", ByName.ALPHABETIC, QualifiedType.of(ByName.class).with(EnumByOrdinal.class)) .execute(); Integer inserted = h.createQuery("select ordinal from enums") .mapTo(Integer.class) .findOnly(); assertThat(inserted).isEqualTo(ByName.ALPHABETIC.ordinal()); }); }
@Test public void methodCallCanBeAnnotatedAsByOrdinal() { db.getJdbi().useHandle(h -> { h.createUpdate("create table enums(id int, ordinal int)").execute(); h.createUpdate("insert into enums (id, ordinal) values (1, :ordinal)") .bindByType("ordinal", Foobar.FOO, QualifiedType.of(Foobar.class).with(EnumByOrdinal.class)) .execute(); Integer inserted = h.createQuery("select ordinal from enums") .mapTo(Integer.class) .findOnly(); assertThat(inserted).isEqualTo(Foobar.FOO.ordinal()); }); }
@Test public void enumCanBeAnnotatedAsByName() { db.getJdbi().useHandle(h -> { h.getConfig(Enums.class).setEnumStrategy(EnumStrategy.BY_ORDINAL); h.createUpdate("create table enums(id int, name varchar)").execute(); h.createUpdate("insert into enums(id, name) values(1, :name)") .bind("name", ByName.ALPHABETIC) .execute(); String inserted = h.createQuery("select name from enums") .mapTo(String.class) .findOnly(); assertThat(inserted).isEqualTo(ByName.ALPHABETIC.name()); }); }