Search in sources :

Example 6 with Tuple2

use of com.cadenzauk.core.tuple.Tuple2 in project siesta by cadenzauk.

the class DatabaseIntegrationTestH2 method selectSubquery.

@Test
void selectSubquery() {
    Database database = testDatabase(dataSource);
    long manufacturerId = newId();
    ManufacturerRow manufacturer = ManufacturerRow.newBuilder().manufacturerId(manufacturerId).name(Optional.of("Doc Brown")).build();
    WidgetRow[] widgets = IntStream.range(1, 4).mapToObj(i -> WidgetRow.newBuilder().widgetId(newId()).name("Flux capacitor " + i).manufacturerId(manufacturerId).build()).toArray(WidgetRow[]::new);
    database.insert(manufacturer);
    database.insert(widgets);
    Tuple2<Long, Integer> result1 = database.from(ManufacturerRow.class).select(ManufacturerRow::manufacturerId).comma(database.from(WidgetRow.class).select(count()).where(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId)).where(ManufacturerRow::name).isEqualTo("Doc Brown").single();
    Tuple2<Long, Integer> result2 = database.from(ManufacturerRow.class).select(ManufacturerRow::manufacturerId).comma(database.from(WidgetRow.class).select(count()).where(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId), "widget_count").where(ManufacturerRow::name).isEqualTo("Doc Brown").single();
    Tuple2<Long, Integer> result3 = database.from(ManufacturerRow.class).select(ManufacturerRow::manufacturerId).comma(database.from(WidgetRow.class).select(count(), "wcount").where(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId), "wcount").where(ManufacturerRow::name).isEqualTo("Doc Brown").single();
    assertThat(result1.item1(), is(manufacturerId));
    assertThat(result1.item2(), is(3));
    assertThat(result2.item1(), is(manufacturerId));
    assertThat(result2.item2(), is(3));
    assertThat(result3.item1(), is(manufacturerId));
    assertThat(result3.item2(), is(3));
}
Also used : Tuple2(com.cadenzauk.core.tuple.Tuple2) IntStream(java.util.stream.IntStream) RandomValues(com.cadenzauk.core.RandomValues) Tuple5(com.cadenzauk.core.tuple.Tuple5) Aggregates.count(com.cadenzauk.siesta.grammar.expression.Aggregates.count) DatabaseIntegrationTest(com.cadenzauk.siesta.DatabaseIntegrationTest) PartRow(com.cadenzauk.siesta.model.PartRow) TypedExpression.column(com.cadenzauk.siesta.grammar.expression.TypedExpression.column) SalespersonRow(com.cadenzauk.siesta.model.SalespersonRow) TestDatabase.testDatabase(com.cadenzauk.siesta.model.TestDatabase.testDatabase) Test(org.junit.jupiter.api.Test) Matchers.nullValue(org.hamcrest.Matchers.nullValue) ManufacturerRow(com.cadenzauk.siesta.model.ManufacturerRow) WidgetRow(com.cadenzauk.siesta.model.WidgetRow) Optional(java.util.Optional) MoneyAmount(com.cadenzauk.siesta.model.MoneyAmount) Matchers.is(org.hamcrest.Matchers.is) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) Database(com.cadenzauk.siesta.Database) WidgetRow(com.cadenzauk.siesta.model.WidgetRow) ManufacturerRow(com.cadenzauk.siesta.model.ManufacturerRow) TestDatabase.testDatabase(com.cadenzauk.siesta.model.TestDatabase.testDatabase) Database(com.cadenzauk.siesta.Database) DatabaseIntegrationTest(com.cadenzauk.siesta.DatabaseIntegrationTest) Test(org.junit.jupiter.api.Test)

Example 7 with Tuple2

use of com.cadenzauk.core.tuple.Tuple2 in project siesta by cadenzauk.

the class DatabaseIntegrationTest method coalesceFunc.

@Test
void coalesceFunc() {
    Database database = testDatabase(dataSource, dialect);
    long manufacturer1 = newId();
    long manufacturer2 = newId();
    ManufacturerRow twoParts = ManufacturerRow.newBuilder().manufacturerId(manufacturer1).name(Optional.of("Two Parts")).build();
    ManufacturerRow noParts = ManufacturerRow.newBuilder().manufacturerId(manufacturer2).name(Optional.of("No Parts")).build();
    WidgetRow aWidget1 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer1).name("Name 1").build();
    WidgetRow aWidget2 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer1).name("Name 2").description(Optional.of("Description 2")).build();
    database.insert(noParts);
    database.insert(twoParts);
    database.insert(aWidget1);
    database.insert(aWidget2);
    List<Tuple2<String, String>> result = database.from(ManufacturerRow.class, "m").leftJoin(WidgetRow.class, "w").on(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId).select(ManufacturerRow::name).comma(coalesce(WidgetRow::description).orElse(WidgetRow::name).orElse("-- no parts --")).where(ManufacturerRow::manufacturerId).isIn(manufacturer1, manufacturer2).orderBy(ManufacturerRow::manufacturerId).then(WidgetRow::name).list();
    assertThat(result, hasSize(3));
    assertThat(result.get(0).item1(), is("Two Parts"));
    assertThat(result.get(0).item2(), is("Name 1"));
    assertThat(result.get(1).item1(), is("Two Parts"));
    assertThat(result.get(1).item2(), is("Description 2"));
    assertThat(result.get(2).item1(), is("No Parts"));
    assertThat(result.get(2).item2(), is("-- no parts --"));
}
Also used : WidgetRow(com.cadenzauk.siesta.model.WidgetRow) ManufacturerRow(com.cadenzauk.siesta.model.ManufacturerRow) Tuple2(com.cadenzauk.core.tuple.Tuple2) TestDatabase.testDatabase(com.cadenzauk.siesta.model.TestDatabase.testDatabase) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

Tuple2 (com.cadenzauk.core.tuple.Tuple2)7 Test (org.junit.jupiter.api.Test)7 TestDatabase.testDatabase (com.cadenzauk.siesta.model.TestDatabase.testDatabase)6 ManufacturerRow (com.cadenzauk.siesta.model.ManufacturerRow)5 WidgetRow (com.cadenzauk.siesta.model.WidgetRow)5 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)5 Database (com.cadenzauk.siesta.Database)2 SalespersonRow (com.cadenzauk.siesta.model.SalespersonRow)2 RandomValues (com.cadenzauk.core.RandomValues)1 CompositeAutoCloseable (com.cadenzauk.core.lang.CompositeAutoCloseable)1 Tuple5 (com.cadenzauk.core.tuple.Tuple5)1 DatabaseIntegrationTest (com.cadenzauk.siesta.DatabaseIntegrationTest)1 IntegrationTest (com.cadenzauk.siesta.IntegrationTest)1 Aggregates.count (com.cadenzauk.siesta.grammar.expression.Aggregates.count)1 TypedExpression.column (com.cadenzauk.siesta.grammar.expression.TypedExpression.column)1 MoneyAmount (com.cadenzauk.siesta.model.MoneyAmount)1 PartRow (com.cadenzauk.siesta.model.PartRow)1 Optional (java.util.Optional)1 IntStream (java.util.stream.IntStream)1 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)1